@Test public void formLoginSucceeds() throws Exception { ResponseEntity<Void> result; String location; String cookie; HttpHeaders uaaHeaders = new HttpHeaders(); HttpHeaders appHeaders = new HttpHeaders(); uaaHeaders.setAccept(Arrays.asList(MediaType.TEXT_HTML)); appHeaders.setAccept(Arrays.asList(MediaType.TEXT_HTML)); // *** GET /app/ result = serverRunning.getForResponse("/", appHeaders); assertEquals(HttpStatus.FOUND, result.getStatusCode()); location = result.getHeaders().getLocation().toString(); cookie = result.getHeaders().getFirst("Set-Cookie"); assertNotNull("Expected cookie in " + result.getHeaders(), cookie); appHeaders.set("Cookie", cookie); assertTrue("Wrong location: " + location, location.contains("/login")); // *** GET /app/login result = serverRunning.getForResponse(location, appHeaders); assertEquals(HttpStatus.FOUND, result.getStatusCode()); location = result.getHeaders().getLocation().toString(); assertTrue("Wrong location: " + location, location.contains("/oauth/authorize")); // *** GET /uaa/oauth/authorize result = serverRunning.getForResponse(location, uaaHeaders); assertEquals(HttpStatus.FOUND, result.getStatusCode()); location = result.getHeaders().getLocation().toString(); cookie = result.getHeaders().getFirst("Set-Cookie"); assertNotNull("Expected cookie in " + result.getHeaders(), cookie); uaaHeaders.set("Cookie", cookie); assertTrue( "Wrong location: " + location, location.contains(serverRunning.getAuthServerUrl("/login"))); location = serverRunning.getAuthServerUrl("/login.do"); MultiValueMap<String, String> formData; formData = new LinkedMultiValueMap<String, String>(); formData.add("username", testAccounts.getUserName()); formData.add("password", testAccounts.getPassword()); // *** POST /uaa/login.do result = serverRunning.postForResponse(location, uaaHeaders, formData); cookie = result.getHeaders().getFirst("Set-Cookie"); assertNotNull("Expected cookie in " + result.getHeaders(), cookie); uaaHeaders.set("Cookie", cookie); assertEquals(HttpStatus.FOUND, result.getStatusCode()); location = result.getHeaders().getLocation().toString(); assertTrue("Wrong location: " + location, location.contains("/oauth/authorize")); // *** GET /uaa/oauth/authorize result = serverRunning.getForResponse(location, uaaHeaders); // If there is no token in place already for this client we get the approval page. // TODO: revoke the token so we always get the approval page if (result.getStatusCode() == HttpStatus.OK) { location = serverRunning.getAuthServerUrl("/oauth/authorize"); formData = new LinkedMultiValueMap<String, String>(); formData.add("user_oauth_approval", "true"); // *** POST /uaa/oauth/authorize result = serverRunning.postForResponse(location, uaaHeaders, formData); } location = result.getHeaders().getLocation().toString(); assertTrue("Wrong location: " + location, location.contains(serverRunning.getUrl("/login"))); // *** GET /app/login result = serverRunning.getForResponse(location, appHeaders); assertEquals(HttpStatus.FOUND, result.getStatusCode()); location = result.getHeaders().getLocation().toString(); // SUCCESS assertTrue("Wrong location: " + location, location.endsWith("/")); // *** GET /app/ result = serverRunning.getForResponse(location, appHeaders); // System.err.println(result.getHeaders()); assertEquals(HttpStatus.OK, result.getStatusCode()); }