| 
					
				 | 
			
			
				@@ -28,9 +28,8 @@ import org.junit.rules.ExpectedException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.mockito.InOrder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.core.Authentication; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.test.util.ReflectionTestUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import static org.assertj.core.api.Assertions.assertThat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import static org.assertj.core.api.Assertions.fail; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import static org.mockito.Matchers.any; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import static org.mockito.Mockito.doThrow; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import static org.mockito.Mockito.inOrder; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -41,6 +40,8 @@ import static org.mockito.Mockito.verify; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @author Eddú Meléndez 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @author Rob Winch 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @since 4.2.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class CompositeLogoutHandlerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -55,24 +56,16 @@ public class CompositeLogoutHandlerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void buildCompositeLogoutHandlerWithArray() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		LogoutHandler[] logoutHandlers = {new SecurityContextLogoutHandler()}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		LogoutHandler handler = new CompositeLogoutHandler(logoutHandlers); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(ReflectionTestUtils.getField(handler, "logoutHandlers")).isNotNull(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(((List<LogoutHandler>)ReflectionTestUtils.getField(handler, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				"logoutHandlers")).size()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.isEqualTo(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void callLogoutHandlersSuccessfullyWithArray() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LogoutHandler securityContextLogoutHandler = mock(SecurityContextLogoutHandler.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LogoutHandler csrfLogoutHandler = mock(SecurityContextLogoutHandler.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void buildCompositeLogoutHandlerWithList() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		LogoutHandler securityContextLogoutHandler = new SecurityContextLogoutHandler(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<LogoutHandler> logoutHandlers = Arrays.asList(securityContextLogoutHandler); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		LogoutHandler handler = new CompositeLogoutHandler(logoutHandlers); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(ReflectionTestUtils.getField(handler, "logoutHandlers")).isNotNull(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(((List<LogoutHandler>)ReflectionTestUtils.getField(handler, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				"logoutHandlers")).size()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.isEqualTo(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LogoutHandler handler = new CompositeLogoutHandler(securityContextLogoutHandler, csrfLogoutHandler); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		handler.logout(mock(HttpServletRequest.class), mock(HttpServletResponse.class), mock(Authentication.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		verify(securityContextLogoutHandler, times(1)).logout(any(HttpServletRequest.class), any(HttpServletResponse.class), any(Authentication.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		verify(csrfLogoutHandler, times(1)).logout(any(HttpServletRequest.class), any(HttpServletResponse.class), any(Authentication.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Test 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -82,8 +75,6 @@ public class CompositeLogoutHandlerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		List<LogoutHandler> logoutHandlers = Arrays.asList(securityContextLogoutHandler, csrfLogoutHandler); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		LogoutHandler handler = new CompositeLogoutHandler(logoutHandlers); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(ReflectionTestUtils.getField(handler, "logoutHandlers")).isNotNull(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(((List<LogoutHandler>)ReflectionTestUtils.getField(handler, "logoutHandlers")).size()).isEqualTo(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		handler.logout(mock(HttpServletRequest.class), mock(HttpServletResponse.class), mock(Authentication.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -93,42 +84,24 @@ public class CompositeLogoutHandlerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public void callLogoutHandlersThrowException() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		LogoutHandler firstLogoutHandler = mock(FirstLogoutHandler.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		LogoutHandler secondLogoutHandler = mock(SecondLogoutHandler.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LogoutHandler firstLogoutHandler = mock(LogoutHandler.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LogoutHandler secondLogoutHandler = mock(LogoutHandler.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		doThrow(new IllegalArgumentException()).when(firstLogoutHandler).logout(any(HttpServletRequest.class), any(HttpServletResponse.class), any(Authentication.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		List<LogoutHandler> logoutHandlers = Arrays.asList(firstLogoutHandler, secondLogoutHandler); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		LogoutHandler handler = new CompositeLogoutHandler(logoutHandlers); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(ReflectionTestUtils.getField(handler, "logoutHandlers")).isNotNull(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(((List<LogoutHandler>)ReflectionTestUtils.getField(handler, "logoutHandlers")).size()).isEqualTo(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			handler.logout(mock(HttpServletRequest.class), mock(HttpServletResponse.class), mock(Authentication.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} catch (IllegalArgumentException ex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// Do nothing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			InOrder logoutHandlersInOrder = inOrder(firstLogoutHandler, secondLogoutHandler); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			logoutHandlersInOrder.verify(firstLogoutHandler, times(1)).logout(any(HttpServletRequest.class), any(HttpServletResponse.class), any(Authentication.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			logoutHandlersInOrder.verify(secondLogoutHandler, never()).logout(any(HttpServletRequest.class), any(HttpServletResponse.class), any(Authentication.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	static class FirstLogoutHandler implements LogoutHandler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fail("Expected Exception"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} catch (IllegalArgumentException success) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	static class SecondLogoutHandler implements LogoutHandler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		InOrder logoutHandlersInOrder = inOrder(firstLogoutHandler, secondLogoutHandler); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		logoutHandlersInOrder.verify(firstLogoutHandler, times(1)).logout(any(HttpServletRequest.class), any(HttpServletResponse.class), any(Authentication.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		logoutHandlersInOrder.verify(secondLogoutHandler, never()).logout(any(HttpServletRequest.class), any(HttpServletResponse.class), any(Authentication.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |