package org.jooby.session; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import java.util.concurrent.atomic.AtomicReference; import org.jooby.Session; import org.jooby.test.ServerFeature; import org.junit.Test; import com.google.common.collect.Sets; public class SessionDefMaxAgeShouldSendHeaderJustOnceFeature extends ServerFeature { private static AtomicReference<String> ID = new AtomicReference<String>(); { session(new Session.Mem() { @Override public String generateID() { String id = super.generateID(); ID.set(id); return id; } }).cookie().maxAge(-1); get("/session", req -> { Session session = req.session(); return session.id(); }); } @Test public void shouldRestoreSessionFromCookieID() throws Exception { ID.set(null); request() .get("/session") .expect(200) .header("Set-Cookie", h -> { assertTrue(h, Sets.newHashSet( "jooby.sid=" + ID.get() + "; Version=1; Path=/; HttpOnly", "jooby.sid=" + ID.get() + ";Version=1;Path=/;HttpOnly", "jooby.sid=" + ID.get() + "; Path=\"/\"; HTTPOnly; Version=1" ).contains(h)); }); String existingID = ID.get(); request() .get("/session") .expect(200) .header("Set-Cookie", (String) null); request() .get("/session") .expect(200) .header("Set-Cookie", (String) null); // browser close request() .resetCookies() .get("/session") .expect(200) .header("Set-Cookie", h -> { assertNotEquals(ID.get(), existingID); assertTrue(h, Sets.newHashSet( "jooby.sid=" + ID.get() + "; Version=1; Path=/; HttpOnly", "jooby.sid=" + ID.get() + ";Version=1;Path=/;HttpOnly", "jooby.sid=" + ID.get() + "; Path=\"/\"; HTTPOnly; Version=1" ).contains(h)); }); } }