| 
					
				 | 
			
			
				@@ -15,75 +15,65 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package sample; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.junit.Before; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.Credentials.basicAuthenticationCredentials; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.function.Consumer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.junit.Test; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.junit.runner.RunWith; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.beans.factory.annotation.Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.boot.test.context.SpringBootTest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.http.HttpStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.test.context.ContextConfiguration; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.test.context.TestPropertySource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.test.context.junit4.SpringRunner; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.test.web.reactive.server.WebTestClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.nio.charset.Charset; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.time.Duration; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Base64; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.function.Consumer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.Credentials.basicAuthenticationCredentials; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.basicAuthentication; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.web.reactive.function.client.ExchangeFilterFunctions; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @author Rob Winch 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @since 5.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @RunWith(SpringRunner.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@ContextConfiguration(classes = HelloWebfluxMethodApplication.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@TestPropertySource(properties = "server.port=0") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class HelloWebfluxMethodApplicationITests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Value("#{@nettyContext.address().getPort()}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	int port; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	WebTestClient rest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Before 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void setup() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.rest = WebTestClient.bindToServer() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.filter(basicAuthentication()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.responseTimeout(Duration.ofDays(1)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.baseUrl("http://localhost:" + this.port) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void setRest(WebTestClient rest) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.rest = rest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.mutateWith((b, h, c) -> b.filter(ExchangeFilterFunctions.basicAuthentication())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public void messageWhenNotAuthenticated() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		this.rest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.get() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.uri("/message") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.exchange() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.expectStatus().isUnauthorized(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.get() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.uri("/message") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.exchange() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.expectStatus().isUnauthorized(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public void messageWhenUserThenForbidden() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		this.rest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.get() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.uri("/message") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.attributes(robsCredentials()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.exchange() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.expectStatus().isEqualTo(HttpStatus.FORBIDDEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.get() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.uri("/message") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.attributes(robsCredentials()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.exchange() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.expectStatus().isEqualTo(HttpStatus.FORBIDDEN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public void messageWhenAdminThenOk() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		this.rest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.get() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.uri("/message") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.attributes(adminCredentials()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.exchange() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.expectStatus().isOk() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			.expectBody(String.class).isEqualTo("Hello World!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.get() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.uri("/message") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.attributes(adminCredentials()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.exchange() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.expectStatus().isOk() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.expectBody(String.class).isEqualTo("Hello World!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private Consumer<Map<String, Object>> robsCredentials() { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -93,8 +83,5 @@ public class HelloWebfluxMethodApplicationITests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private Consumer<Map<String, Object>> adminCredentials() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return basicAuthenticationCredentials("admin", "admin"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private String base64Encode(String value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return Base64.getEncoder().encodeToString(value.getBytes(Charset.defaultCharset())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 |