@Test public void testUniqueId() throws Exception { // activate String serverId = getServerId(); Capture<String> serverIdCapture = new Capture<String>(); Capture<ClusterServerImpl> clusterServerCapture = new Capture<ClusterServerImpl>(); expect(serverTrackingCache.list()).andReturn(new ArrayList<Object>()).times(2); expect(serverTrackingCache.put(capture(serverIdCapture), capture(clusterServerCapture))) .andReturn(new Object()); // deactivate serverTrackingCache.remove(serverId); replay(); clusterTrackingServiceImpl.activate(componentContext); assertNotNull(clusterTrackingServiceImpl.getClusterUniqueId()); clusterTrackingServiceImpl.deactivate(componentContext); assertTrue(serverIdCapture.hasCaptured()); assertEquals(serverId, serverIdCapture.getValue()); assertTrue(clusterServerCapture.hasCaptured()); ClusterServerImpl clusterServerImpl = clusterServerCapture.getValue(); assertEquals(serverId, clusterServerImpl.getServerId()); assertTrue(System.currentTimeMillis() >= clusterServerImpl.getLastModified()); verify(); }
@Test public void testTrackClusterUser() throws Exception { // activate String serverId = getServerId(); Capture<String> serverIdCapture = new Capture<String>(); Capture<ClusterServerImpl> clusterServerCapture = new Capture<ClusterServerImpl>(); expect(serverTrackingCache.list()).andReturn(new ArrayList<Object>()).times(2); expect(serverTrackingCache.put(capture(serverIdCapture), capture(clusterServerCapture))) .andReturn(new Object()); // trackClusterUser HttpServletRequest request = createMock(HttpServletRequest.class); HttpServletResponse response = createMock(HttpServletResponse.class); Cookie cookieA = new Cookie("something", "someValue"); Cookie cookieMatching = new Cookie("SAKAI-TRACKING", serverId + "-trackingValue"); Cookie cookieB = new Cookie("somethingElse", "someOtherValue"); Cookie[] cookies = new Cookie[] {cookieA, cookieMatching, cookieB}; expect(request.getCookies()).andReturn(cookies); expect(request.getRemoteUser()).andReturn("userid"); ClusterServerImpl csImple = new ClusterServerImpl(serverId, 4, "http://sdfsdfs"); expect(serverTrackingCache.get(serverId)).andReturn(csImple).times(2); // nothing in the cache. expect(userTrackingCache.get(serverId + "-trackingValue")).andReturn(null); Capture<String> trackingValueCapture = new Capture<String>(); Capture<ClusterUserImpl> clusterUserCapture = new Capture<ClusterUserImpl>(); expect(userTrackingCache.put(capture(trackingValueCapture), capture(clusterUserCapture))) .andReturn(new Object()); // deactivate serverTrackingCache.remove(serverId); replay(); clusterTrackingServiceImpl.activate(componentContext); clusterTrackingServiceImpl.trackClusterUser(request, response); clusterTrackingServiceImpl.deactivate(componentContext); assertTrue(serverIdCapture.hasCaptured()); assertEquals(serverId, serverIdCapture.getValue()); assertTrue(clusterServerCapture.hasCaptured()); ClusterServerImpl clusterServerImpl = clusterServerCapture.getValue(); assertEquals(serverId, clusterServerImpl.getServerId()); assertTrue(System.currentTimeMillis() >= clusterServerImpl.getLastModified()); // check the user capture assertTrue(trackingValueCapture.hasCaptured()); assertTrue(clusterUserCapture.hasCaptured()); assertEquals(serverId + "-trackingValue", trackingValueCapture.getValue()); ClusterUserImpl clusterUserImpl = clusterUserCapture.getValue(); assertEquals("userid", clusterUserImpl.getUser()); assertEquals(serverId, clusterUserImpl.getServerId()); assertTrue(System.currentTimeMillis() >= clusterUserImpl.getLastModified()); verify(); }
@Test public void testTrackClusterNewUser() throws Exception { // activate String serverId = getServerId(); Capture<String> serverIdCapture = new Capture<String>(); Capture<ClusterServerImpl> clusterServerCapture = new Capture<ClusterServerImpl>(); expect(serverTrackingCache.list()).andReturn(new ArrayList<Object>()).times(2); expect(serverTrackingCache.put(capture(serverIdCapture), capture(clusterServerCapture))) .andReturn(new Object()); // trackClusterUser HttpServletRequest request = createMock(HttpServletRequest.class); HttpServletResponse response = createMock(HttpServletResponse.class); Cookie cookieA = new Cookie("something", "someValue"); Cookie cookieB = new Cookie("somethingElse", "someOtherValue"); Cookie[] cookies = new Cookie[] {cookieA, cookieB}; expect(request.getCookies()).andReturn(cookies); expect(request.getRemoteUser()).andReturn("userid"); expect(response.isCommitted()).andReturn(false); Capture<Cookie> captureCookie = new Capture<Cookie>(); response.addCookie(capture(captureCookie)); expectLastCall(); response.addHeader("Cache-Control", "no-cache=\"set-cookie\" "); expectLastCall(); response.addDateHeader("Expires", 0); expectLastCall(); // deactivate serverTrackingCache.remove(serverId); replay(); clusterTrackingServiceImpl.activate(componentContext); clusterTrackingServiceImpl.trackClusterUser(request, response); clusterTrackingServiceImpl.deactivate(componentContext); assertTrue(serverIdCapture.hasCaptured()); assertEquals(serverId, serverIdCapture.getValue()); assertTrue(clusterServerCapture.hasCaptured()); ClusterServerImpl clusterServerImpl = clusterServerCapture.getValue(); assertEquals(serverId, clusterServerImpl.getServerId()); assertTrue(System.currentTimeMillis() >= clusterServerImpl.getLastModified()); // check the cookie assertTrue(captureCookie.hasCaptured()); Cookie cookie = captureCookie.getValue(); assertEquals("SAKAI-TRACKING", cookie.getName()); assertEquals("/", cookie.getPath()); assertEquals(-1, cookie.getMaxAge()); assertNotNull(cookie.getValue()); assertTrue(cookie.getValue().startsWith(serverId)); verify(); }
/** * {@inheritDoc} * * @see javax.jms.MessageListener#onMessage(javax.jms.Message) */ public void onMessage(Message message) { try { String fromServer = message.getStringProperty(ClusterTrackingService.EVENT_FROM_SERVER); String toServer = message.getStringProperty(ClusterTrackingService.EVENT_TO_SERVER); String trackingCookie = message.getStringProperty(ClusterTrackingService.EVENT_TRACKING_COOKIE); String remoteUser = message.getStringProperty(ClusterTrackingService.EVENT_USER); LOGGER.info( "Started handling cluster user jms message. from:{} to:{} cookie:{} user:{}", new Object[] {fromServer, toServer, trackingCookie, remoteUser}); clusterTrackingServiceImpl.pingTracking(trackingCookie, remoteUser, false); } catch (PingRemoteTrackingFailedException e) { LOGGER.error(e.getMessage()); } catch (JMSException e) { LOGGER.error(e.getMessage(), e); } }