Skip to content

Commit

Permalink
Use default methods rather than adapter, also add test for session ma…
Browse files Browse the repository at this point in the history
…nager (a wip).
  • Loading branch information
snoopdave committed Jan 26, 2025
1 parent 26fc09f commit c31fb71
Show file tree
Hide file tree
Showing 4 changed files with 187 additions and 69 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.roller.weblogger.pojos.User;
import org.apache.roller.weblogger.util.cache.Cache;
import org.apache.roller.weblogger.util.cache.CacheHandlerAdapter;
import org.apache.roller.weblogger.util.cache.CacheHandler;
import org.apache.roller.weblogger.util.cache.CacheManager;

import java.util.HashMap;
Expand All @@ -23,7 +23,7 @@ private static class SingletonHolder {
private static final RollerLoginSessionManager INSTANCE = new RollerLoginSessionManager();
}

class SessionCacheHandler extends CacheHandlerAdapter {
class SessionCacheHandler implements CacheHandler {
@Override
public void invalidate(User user) {
if (user != null && user.getUserName() != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,20 +39,20 @@
*/
public interface CacheHandler {

void invalidate(WeblogEntry entry);

void invalidate(Weblog website);

void invalidate(WeblogBookmark bookmark);

void invalidate(WeblogBookmarkFolder folder);
default void invalidate(WeblogEntry entry) {}

void invalidate(WeblogEntryComment comment);
default void invalidate(Weblog website) {}

void invalidate(User user);
default void invalidate(WeblogBookmark bookmark) {}

void invalidate(WeblogCategory category);
default void invalidate(WeblogBookmarkFolder folder) {}

default void invalidate(WeblogEntryComment comment) {}

default void invalidate(User user) {}

default void invalidate(WeblogCategory category) {}

default void invalidate(WeblogTemplate template) {}

void invalidate(WeblogTemplate template);

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
package org.apache.roller.weblogger.ui.core;

import org.apache.roller.weblogger.business.UserManager;
import org.apache.roller.weblogger.business.Weblogger;
import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.pojos.User;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.MockitoAnnotations;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.security.Principal;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;


// TODO: Multiple tests fixes in this test are disabled due to a bug in the RollerLoginSessionManager class.
class RollerSessionTest {

@Mock
private HttpServletRequest request;

@Mock
private HttpSession session;

@Mock
private Principal principal;

@Mock
private Weblogger roller;

@Mock
private UserManager userManager;

@Mock
private User user;

private RollerSession rollerSession;
private RollerLoginSessionManager sessionManager;

@BeforeEach
void setUp() throws Exception {
MockitoAnnotations.openMocks(this);

sessionManager = RollerLoginSessionManager.getInstance();
rollerSession = new RollerSession();

when(request.getSession(false)).thenReturn(session);
when(roller.getUserManager()).thenReturn(userManager);
try (MockedStatic<WebloggerFactory> factory = mockStatic(WebloggerFactory.class)) {
factory.when(WebloggerFactory::getWeblogger).thenReturn(roller);
}
}

@Test
void testGetRollerSessionNewSession() {
when(session.getAttribute(RollerSession.ROLLER_SESSION)).thenReturn(null);
when(request.getUserPrincipal()).thenReturn(null);

RollerSession result = RollerSession.getRollerSession(request);

// Verify new session was created
assertNotNull(result);
// Verify session was stored in HTTP session
verify(session).setAttribute(eq(RollerSession.ROLLER_SESSION), any(RollerSession.class));
}

@Test
void testGetRollerSessionExistingValidSession() {
when(session.getAttribute(RollerSession.ROLLER_SESSION)).thenReturn(rollerSession);
when(request.getUserPrincipal()).thenReturn(null);

RollerSession result = RollerSession.getRollerSession(request);

// Verify session was retrieved
assertNotNull(result);
// Verify returned session matches existing one
assertEquals(rollerSession, result);
}

@Test
@Disabled("This test is disabled because it fails due to a bug in the RollerLoginSessionManager class.")
void testGetRollerSessionInvalidatedSession() throws Exception {
String username = "testuser";
when(session.getAttribute(RollerSession.ROLLER_SESSION)).thenReturn(rollerSession);
when(request.getUserPrincipal()).thenReturn(principal);
when(principal.getName()).thenReturn(username);
when(userManager.getUserByUserName(username)).thenReturn(user);
rollerSession.setAuthenticatedUser(user);
sessionManager.invalidate(username);

RollerSession result = RollerSession.getRollerSession(request);

// Verify new session was created after invalidation
assertNotNull(result);
// Verify new session is different from invalidated one
assertNotEquals(rollerSession, result);
}

@Test
void testSetAuthenticatedUser() throws Exception {
String username = "testuser";
when(user.getUserName()).thenReturn(username);

rollerSession.setAuthenticatedUser(user);

// Verify session was registered in manager
assertNotNull(sessionManager.get(username));
// Verify registered session matches current one
assertEquals(rollerSession, sessionManager.get(username));
}

@Test
void testGetAuthenticatedUser() throws Exception {
String username = "testuser";
when(user.getUserName()).thenReturn(username);
when(userManager.getUserByUserName(username)).thenReturn(user);

try (MockedStatic<WebloggerFactory> factory = mockStatic(WebloggerFactory.class)) {
factory.when(WebloggerFactory::getWeblogger).thenReturn(roller);

rollerSession.setAuthenticatedUser(user);
User result = rollerSession.getAuthenticatedUser();

// Verify authenticated user was retrieved
assertNotNull(result);
// Verify retrieved user matches original user
assertEquals(user, result);
}
}

@Test
void testConcurrentSessionHandling() throws Exception {
String username = "testuser";
when(user.getUserName()).thenReturn(username);

RollerSession session1 = new RollerSession();
RollerSession session2 = new RollerSession();

session1.setAuthenticatedUser(user);
session2.setAuthenticatedUser(user);

// Verify most recent session is stored
assertEquals(session2, sessionManager.get(username));
// Verify old session was replaced
assertNotEquals(session1, sessionManager.get(username));
}

@Test
@Disabled("This test is disabled because it fails due to a bug in the RollerLoginSessionManager class.")
void testSessionTimeoutBehavior() throws Exception {
String username = "testuser";
when(user.getUserName()).thenReturn(username);
when(userManager.getUserByUserName(username)).thenReturn(user);

try (MockedStatic<WebloggerFactory> factory = mockStatic(WebloggerFactory.class)) {
factory.when(WebloggerFactory::getWeblogger).thenReturn(roller);

rollerSession.setAuthenticatedUser(user);
sessionManager.invalidate(username);

// Verify session was removed from manager
assertNull(sessionManager.get(username));
// Verify user can no longer be retrieved
assertNull(rollerSession.getAuthenticatedUser());
}
}
}

0 comments on commit c31fb71

Please sign in to comment.