From 9b647021f723e30dffacc0b33b47e534681891e6 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 27 Apr 2017 21:32:11 +0200 Subject: [PATCH] Allow for HttpOnly cookie result matcher Issue: SPR-15488 (cherry picked from commit 04f0f13) --- .../servlet/result/CookieResultMatchers.java | 83 +++++++++++-------- .../resultmatchers/CookieAssertionTests.java | 13 ++- 2 files changed, 61 insertions(+), 35 deletions(-) diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/result/CookieResultMatchers.java b/spring-test/src/main/java/org/springframework/test/web/servlet/result/CookieResultMatchers.java index caa5ad14653..3192e2bf14f 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/result/CookieResultMatchers.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/result/CookieResultMatchers.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ import static org.springframework.test.util.AssertionErrors.*; /** * Factory for response cookie assertions. + * *

An instance of this class is typically accessed via * {@link MockMvcResultMatchers#cookie}. * @@ -52,9 +53,8 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) { - Cookie cookie = result.getResponse().getCookie(name); - assertTrue("Response cookie not found: " + name, cookie != null); - assertThat("Response cookie", cookie.getValue(), matcher); + Cookie cookie = getCookie(result, name); + assertThat("Response cookie '" + name + "'", cookie.getValue(), matcher); } }; } @@ -66,8 +66,7 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) { - Cookie cookie = result.getResponse().getCookie(name); - assertTrue("Response cookie not found: " + name, cookie != null); + Cookie cookie = getCookie(result, name); assertEquals("Response cookie", expectedValue, cookie.getValue()); } }; @@ -81,8 +80,7 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) { - Cookie cookie = result.getResponse().getCookie(name); - assertTrue("No cookie with name: " + name, cookie != null); + getCookie(result, name); } }; } @@ -96,7 +94,7 @@ public class CookieResultMatchers { @Override public void match(MvcResult result) { Cookie cookie = result.getResponse().getCookie(name); - assertTrue("Unexpected cookie with name " + name, cookie == null); + assertTrue("Unexpected cookie with name '" + name + "'", cookie == null); } }; } @@ -108,9 +106,8 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) { - Cookie cookie = result.getResponse().getCookie(name); - assertTrue("No cookie with name: " + name, cookie != null); - assertThat("Response cookie maxAge", cookie.getMaxAge(), matcher); + Cookie cookie = getCookie(result, name); + assertThat("Response cookie '" + name + "' maxAge", cookie.getMaxAge(), matcher); } }; } @@ -122,9 +119,8 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) { - Cookie cookie = result.getResponse().getCookie(name); - assertTrue("No cookie with name: " + name, cookie != null); - assertEquals("Response cookie maxAge", maxAge, cookie.getMaxAge()); + Cookie cookie = getCookie(result, name); + assertEquals("Response cookie '" + name + "' maxAge", maxAge, cookie.getMaxAge()); } }; } @@ -136,8 +132,8 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) throws Exception { - Cookie cookie = result.getResponse().getCookie(name); - assertThat("Response cookie path", cookie.getPath(), matcher); + Cookie cookie = getCookie(result, name); + assertThat("Response cookie '" + name + "' path", cookie.getPath(), matcher); } }; } @@ -146,8 +142,8 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) throws Exception { - Cookie cookie = result.getResponse().getCookie(name); - assertEquals("Response cookie path", path, cookie.getPath()); + Cookie cookie = getCookie(result, name); + assertEquals("Response cookie '" + name + "' path", path, cookie.getPath()); } }; } @@ -159,8 +155,8 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) throws Exception { - Cookie cookie = result.getResponse().getCookie(name); - assertThat("Response cookie domain", cookie.getDomain(), matcher); + Cookie cookie = getCookie(result, name); + assertThat("Response cookie '" + name + "' domain", cookie.getDomain(), matcher); } }; } @@ -172,8 +168,8 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) throws Exception { - Cookie cookie = result.getResponse().getCookie(name); - assertEquals("Response cookie domain", domain, cookie.getDomain()); + Cookie cookie = getCookie(result, name); + assertEquals("Response cookie '" + name + "' domain", domain, cookie.getDomain()); } }; } @@ -185,8 +181,8 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) throws Exception { - Cookie cookie = result.getResponse().getCookie(name); - assertThat("Response cookie comment", cookie.getComment(), matcher); + Cookie cookie = getCookie(result, name); + assertThat("Response cookie '" + name + "' comment", cookie.getComment(), matcher); } }; } @@ -198,8 +194,8 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) throws Exception { - Cookie cookie = result.getResponse().getCookie(name); - assertEquals("Response cookie comment", comment, cookie.getComment()); + Cookie cookie = getCookie(result, name); + assertEquals("Response cookie '" + name + "' comment", comment, cookie.getComment()); } }; } @@ -211,8 +207,8 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) throws Exception { - Cookie cookie = result.getResponse().getCookie(name); - assertThat("Response cookie version", cookie.getVersion(), matcher); + Cookie cookie = getCookie(result, name); + assertThat("Response cookie '" + name + "' version", cookie.getVersion(), matcher); } }; } @@ -224,8 +220,8 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) throws Exception { - Cookie cookie = result.getResponse().getCookie(name); - assertEquals("Response cookie version", version, cookie.getVersion()); + Cookie cookie = getCookie(result, name); + assertEquals("Response cookie '" + name + "' version", version, cookie.getVersion()); } }; } @@ -237,10 +233,31 @@ public class CookieResultMatchers { return new ResultMatcher() { @Override public void match(MvcResult result) throws Exception { - Cookie cookie = result.getResponse().getCookie(name); - assertEquals("Response cookie secure", secure, cookie.getSecure()); + Cookie cookie = getCookie(result, name); + assertEquals("Response cookie '" + name + "' secure", secure, cookie.getSecure()); } }; } + /** + * Assert whether the cookie must be HTTP only. + * @since 4.3.9 + */ + public ResultMatcher httpOnly(final String name, final boolean httpOnly) { + return new ResultMatcher() { + @Override + public void match(MvcResult result) throws Exception { + Cookie cookie = getCookie(result, name); + assertEquals("Response cookie '" + name + "' httpOnly", httpOnly, cookie.isHttpOnly()); + } + }; + } + + + private static Cookie getCookie(MvcResult result, String name) { + Cookie cookie = result.getResponse().getCookie(name); + assertTrue("No cookie with name '" + name + "'", cookie != null); + return cookie; + } + } diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/CookieAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/CookieAssertionTests.java index 7fa667c211e..a315482244b 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/CookieAssertionTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/CookieAssertionTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,6 +34,7 @@ import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*; * Examples of expectations on response cookies values. * * @author Rossen Stoyanchev + * @author Nikola Yovchev */ public class CookieAssertionTests { @@ -46,6 +47,7 @@ public class CookieAssertionTests { public void setup() { CookieLocaleResolver localeResolver = new CookieLocaleResolver(); localeResolver.setCookieDomain("domain"); + localeResolver.setCookieHttpOnly(true); this.mockMvc = standaloneSetup(new SimpleController()) .addInterceptors(new LocaleChangeInterceptor()) @@ -55,6 +57,7 @@ public class CookieAssertionTests { .build(); } + @Test public void testExists() throws Exception { this.mockMvc.perform(get("/")).andExpect(cookie().exists(COOKIE_NAME)); @@ -62,7 +65,7 @@ public class CookieAssertionTests { @Test public void testNotExists() throws Exception { - this.mockMvc.perform(get("/")).andExpect(cookie().doesNotExist("unknowCookie")); + this.mockMvc.perform(get("/")).andExpect(cookie().doesNotExist("unknownCookie")); } @Test @@ -101,6 +104,11 @@ public class CookieAssertionTests { this.mockMvc.perform(get("/")).andExpect(cookie().secure(COOKIE_NAME, false)); } + @Test + public void testHttpOnly() throws Exception { + this.mockMvc.perform(get("/")).andExpect(cookie().httpOnly(COOKIE_NAME, true)); + } + @Controller private static class SimpleController { @@ -110,4 +118,5 @@ public class CookieAssertionTests { return "home"; } } + }