From 306b6f6999a2c8e91601643db2af5cad9fb547a6 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Mon, 17 May 2021 13:43:08 +0200 Subject: [PATCH] Configure SessionCookieConfig in MockServletWebServer Closes gh-26479 --- .../spring-boot-test-support/build.gradle | 3 + .../web/servlet/MockServletWebServer.java | 7 ++- .../servlet/MockServletWebServerTests.java | 57 +++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-test-support/src/test/java/org/springframework/boot/testsupport/web/servlet/MockServletWebServerTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-test-support/build.gradle index 1d7fe55ea9..30c63c0579 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-test-support/build.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-test-support/build.gradle @@ -30,9 +30,12 @@ dependencies { implementation("org.hamcrest:hamcrest-core") implementation("org.hamcrest:hamcrest-library") implementation("org.springframework:spring-core") + implementation("org.springframework:spring-test") + testImplementation("javax.servlet:javax.servlet-api") testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("org.springframework:spring-context") testRuntimeOnly("org.hibernate.validator:hibernate-validator") + testRuntimeOnly("org.mockito:mockito-core") } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/web/servlet/MockServletWebServer.java b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/web/servlet/MockServletWebServer.java index f9d9846f4c..ae6455cf06 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/web/servlet/MockServletWebServer.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/web/servlet/MockServletWebServer.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2021 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. @@ -30,6 +30,9 @@ import javax.servlet.Servlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration; +import javax.servlet.SessionCookieConfig; + +import org.springframework.mock.web.MockSessionCookieConfig; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; @@ -76,6 +79,8 @@ public abstract class MockServletWebServer { MockServletWebServer.this.registeredFilters.add(registeredFilter); return registeredFilter.getRegistration(); }); + final SessionCookieConfig sessionCookieConfig = new MockSessionCookieConfig(); + given(this.servletContext.getSessionCookieConfig()).willReturn(sessionCookieConfig); final Map initParameters = new HashMap<>(); given(this.servletContext.setInitParameter(anyString(), anyString())).will((invocation) -> { initParameters.put(invocation.getArgument(0), invocation.getArgument(1)); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/test/java/org/springframework/boot/testsupport/web/servlet/MockServletWebServerTests.java b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/test/java/org/springframework/boot/testsupport/web/servlet/MockServletWebServerTests.java new file mode 100644 index 0000000000..1c78f11701 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/test/java/org/springframework/boot/testsupport/web/servlet/MockServletWebServerTests.java @@ -0,0 +1,57 @@ +/* + * Copyright 2012-2021 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.testsupport.web.servlet; + +import org.junit.jupiter.api.Test; + +import org.springframework.mock.web.MockSessionCookieConfig; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link MockServletWebServer}. + * + * @author Stephane Nicoll + */ +class MockServletWebServerTests { + + @Test + void servletContextIsConfigured() { + MockServletWebServer server = TestMockServletWebServer.create(); + assertThat(server.getServletContext()).isNotNull(); + } + + @Test + void servletContextHasSessionCookieConfigConfigured() { + MockServletWebServer server = TestMockServletWebServer.create(); + assertThat(server.getServletContext().getSessionCookieConfig()).isNotNull() + .isInstanceOf(MockSessionCookieConfig.class); + } + + private static final class TestMockServletWebServer extends MockServletWebServer { + + private TestMockServletWebServer(Initializer[] initializers, int port) { + super(initializers, port); + } + + static MockServletWebServer create(Initializer... initializers) { + return new TestMockServletWebServer(initializers, 8080); + } + + } + +}