[java-plugin-shibd] branch main updated: More unit tests and fix to storage removal.
Codeberg
noreply at shibboleth.net
Tue Apr 21 14:02:19 UTC 2026
This is an automated email from the git hooks/post-receive script.
codeberg pushed a commit to branch main
in repository java-plugin-shibd.
View the commit online:
https://codeberg.org/Shibboleth/java-plugin-shibd/commit/c1b623d005fad5aca2bfba9aea80d8d08edf4dd6
The following commit(s) were added to refs/heads/main by this push:
new c1b623d More unit tests and fix to storage removal.
c1b623d is described below
commit c1b623d005fad5aca2bfba9aea80d8d08edf4dd6
Author: Scott Cantor <scott at restingparrotsoftware.com>
AuthorDate: Tue Apr 21 10:02:03 2026 -0400
More unit tests and fix to storage removal.
---
.../sp/state/impl/StorageServiceStateManager.java | 2 +-
.../state/impl/StorageServiceStateManagerTest.java | 128 ++++++++++++++++++++-
2 files changed, 127 insertions(+), 3 deletions(-)
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/state/impl/StorageServiceStateManager.java b/sp-server-impl/src/main/java/net/shibboleth/sp/state/impl/StorageServiceStateManager.java
index 9136898..59858f7 100644
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/state/impl/StorageServiceStateManager.java
+++ b/sp-server-impl/src/main/java/net/shibboleth/sp/state/impl/StorageServiceStateManager.java
@@ -189,7 +189,7 @@ public class StorageServiceStateManager extends AbstractStateManager {
final StorageRecord<String> record = storageService.read(context, key);
if (record != null) {
try {
- storageService.delete(context, stateToken);
+ storageService.delete(context, key);
} catch (final IOException e) {
log.warn("Unable to delete state record ('{}', '{}') from storage", context, key, e);
}
diff --git a/sp-server-impl/src/test/java/net/shibboleth/sp/state/impl/StorageServiceStateManagerTest.java b/sp-server-impl/src/test/java/net/shibboleth/sp/state/impl/StorageServiceStateManagerTest.java
index 85b811f..7b6f1db 100644
--- a/sp-server-impl/src/test/java/net/shibboleth/sp/state/impl/StorageServiceStateManagerTest.java
+++ b/sp-server-impl/src/test/java/net/shibboleth/sp/state/impl/StorageServiceStateManagerTest.java
@@ -32,6 +32,7 @@ import org.testng.annotations.Test;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
@@ -92,16 +93,19 @@ public class StorageServiceStateManagerTest extends BaseApplicationActionTest {
@BeforeMethod
public void beforeMethod() throws ComponentInitializationException {
super.beforeMethod();
+
+ request = new MockHttpServletRequest();
+ response = new MockHttpServletResponse();
}
@Test
- public void testMissing() throws IOException, ComponentInitializationException {
+ public void testMissingNoCookie() throws IOException, ComponentInitializationException {
final var stateManager = getStateManager(false);
Assert.assertNull(stateManager.recoverFromStateToken(agent, application, "foo", StateData.class));
}
@Test
- public void testRecoverNoCookie() throws IOException, ComponentInitializationException {
+ public void testSuccessNoCookie() throws IOException, ComponentInitializationException {
final var stateManager = getStateManager(false);
final StateData source = buildStateData();
@@ -115,6 +119,126 @@ public class StorageServiceStateManagerTest extends BaseApplicationActionTest {
Assert.assertNull(stateManager.recoverFromStateToken(agent, application, token, StateData.class));
}
+ @Test
+ public void testSuccessNoCookieWithAddress() throws IOException, ComponentInitializationException {
+ final var stateManager = getStateManager(false);
+
+ final StateData source = buildStateData();
+ source.setClientAddress("192.168.1.1");
+
+ final String token = stateManager.preserveToStateToken(agent, application, source);
+ assert token != null;
+
+ request = new MockHttpServletRequest();
+ request.setRemoteAddr("192.168.1.1");
+
+ final StateData recovered = stateManager.recoverFromStateToken(agent, application, token, StateData.class);
+ Assert.assertEquals(source, recovered);
+
+ Assert.assertNull(stateManager.recoverFromStateToken(agent, application, token, StateData.class));
+ }
+
+ @Test
+ public void testFailureNoCookieWithAddress() throws IOException, ComponentInitializationException {
+ final var stateManager = getStateManager(false);
+
+ final StateData source = buildStateData();
+ source.setClientAddress("192.168.1.1");
+
+ final String token = stateManager.preserveToStateToken(agent, application, source);
+ assert token != null;
+
+ request = new MockHttpServletRequest();
+ request.setRemoteAddr("192.168.1.2");
+
+ final StateData recovered = stateManager.recoverFromStateToken(agent, application, token, StateData.class);
+ Assert.assertNull(recovered);
+
+ Assert.assertNull(stateManager.recoverFromStateToken(agent, application, token, StateData.class));
+ }
+
+ @Test
+ public void testSuccessWithCookie() throws IOException, ComponentInitializationException {
+ final var stateManager = getStateManager(true);
+
+ final StateData source = buildStateData();
+
+ final String token = stateManager.preserveToStateToken(agent, application, source);
+ assert token != null;
+
+ // Move cookie set on response to request.
+ request = new MockHttpServletRequest();
+ request.setCookies(response.getCookies());
+ response = new MockHttpServletResponse();
+
+ final StateData recovered = stateManager.recoverFromStateToken(agent, application, token, StateData.class);
+ Assert.assertEquals(source, recovered);
+
+ // Check that old token is unset.
+ final Cookie[] cookies = response.getCookies();
+ Assert.assertEquals(cookies.length, 1);
+ Assert.assertEquals(cookies[0].getName(), CookieStateManager.DEFAULT_PREFIX + '_' + "test" + '_' + token);
+ Assert.assertEquals(cookies[0].getValue(), null);
+ Assert.assertEquals(cookies[0].getMaxAge(), 0);
+ Assert.assertEquals(cookies[0].getAttribute("SameSite"), SameSiteValue.None.getValue());
+ }
+
+ @Test
+ public void testSuccessWithCookieWithAddress() throws IOException, ComponentInitializationException {
+ final var stateManager = getStateManager(true);
+
+ final StateData source = buildStateData();
+ source.setClientAddress("192.168.1.1");
+
+ final String token = stateManager.preserveToStateToken(agent, application, source);
+ assert token != null;
+
+ // Move cookie set on response to request.
+ request = new MockHttpServletRequest();
+ request.setRemoteAddr("192.168.1.1");
+ request.setCookies(response.getCookies());
+ response = new MockHttpServletResponse();
+
+ final StateData recovered = stateManager.recoverFromStateToken(agent, application, token, StateData.class);
+ Assert.assertEquals(source, recovered);
+
+ // Check that old token is unset.
+ final Cookie[] cookies = response.getCookies();
+ Assert.assertEquals(cookies.length, 1);
+ Assert.assertEquals(cookies[0].getName(), CookieStateManager.DEFAULT_PREFIX + '_' + "test" + '_' + token);
+ Assert.assertEquals(cookies[0].getValue(), null);
+ Assert.assertEquals(cookies[0].getMaxAge(), 0);
+ Assert.assertEquals(cookies[0].getAttribute("SameSite"), SameSiteValue.None.getValue());
+ }
+
+ @Test
+ public void testFailureWithCookieWithAddress() throws IOException, ComponentInitializationException {
+ final var stateManager = getStateManager(true);
+
+ final StateData source = buildStateData();
+ source.setClientAddress("192.168.1.1");
+
+ final String token = stateManager.preserveToStateToken(agent, application, source);
+ assert token != null;
+
+ // Move cookie set on response to request.
+ request = new MockHttpServletRequest();
+ request.setRemoteAddr("192.168.1.2");
+ request.setCookies(response.getCookies());
+ response = new MockHttpServletResponse();
+
+ final StateData recovered = stateManager.recoverFromStateToken(agent, application, token, StateData.class);
+ Assert.assertNull(recovered);
+
+ // Check that old token is unset.
+ final Cookie[] cookies = response.getCookies();
+ Assert.assertEquals(cookies.length, 1);
+ Assert.assertEquals(cookies[0].getName(), CookieStateManager.DEFAULT_PREFIX + '_' + "test" + '_' + token);
+ Assert.assertEquals(cookies[0].getValue(), null);
+ Assert.assertEquals(cookies[0].getMaxAge(), 0);
+ Assert.assertEquals(cookies[0].getAttribute("SameSite"), SameSiteValue.None.getValue());
+ }
+
@Nonnull private StorageServiceStateManager getStateManager(final boolean useCookie)
throws ComponentInitializationException {
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list