Build Logs
pjfanning/pekko-http-session • 3.8.0-RC6:2026-01-08
Errors
0
Warnings
11
Total Lines
468
1##################################
2Clonning https://github.com/pjfanning/pekko-http-session.git into /build/repo using revision v0.8.0
3##################################
4Note: switching to '00261a6d7af307880512ebc7329ca07f829479dc'.
5
6You are in 'detached HEAD' state. You can look around, make experimental
7changes and commit them, and you can discard any commits you make in this
8state without impacting any branches by switching back to a branch.
9
10If you want to create a new branch to retain commits you create, you may
11do so (now or later) by using -c with the switch command. Example:
12
13 git switch -c <new-branch-name>
14
15Or undo this operation with:
16
17 git switch -
18
19Turn off this advice by setting config variable advice.detachedHead to false
20
21Would override fixed Scala version: 3.3.0
22----
23Preparing build for 3.8.0-RC6
24Scala binary version found: 3.8
25Implicitly using source version 3.8
26Scala binary version found: 3.8
27Implicitly using source version 3.8
28Would try to apply common scalacOption (best-effort, sbt/mill only):
29Append: ,REQUIRE:-source:3.8
30Remove: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
31
32Try apply source patch:
33Path: build.sbt
34Pattern: val scala3 = "3.3.0"
35Replacement: val scala3 = "3.8.0-RC6"
36Starting compilation server
37Compiling project (Scala 3.7.3, JVM (17))
38Compiled project (Scala 3.7.3, JVM (17))
39Successfully applied pattern 'val scala3 = "3.3.0"' in build.sbt
40----
41Starting build for 3.8.0-RC6
42Execute tests: true
43sbt project found:
44Sbt version 1.9.3 is not supported, minimal supported version is 1.11.5
45Enforcing usage of sbt in version 1.11.5
46No prepare script found for project pjfanning/pekko-http-session
47##################################
48Scala version: 3.8.0-RC6
49Targets: com.github.pjfanning%pekko-http-session-core com.github.pjfanning%pekko-http-session-jwt
50Project projectConfig: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3 = \"3.3.0\"","replaceWith":"val scala3 = \"<SCALA_VERSION>\""}]}
51##################################
52Using extra scalacOptions: ,REQUIRE:-source:3.8
53Filtering out scalacOptions: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
54[sbt_options] declare -a sbt_options=()
55[process_args] java_version = '17'
56[copyRt] java9_rt = '/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8/rt.jar'
57# Executing command line:
58java
59-Dfile.encoding=UTF-8
60-Dcommunitybuild.scala=3.8.0-RC6
61-Dcommunitybuild.project.dependencies.add=
62-Xmx7G
63-Xms4G
64-Xss8M
65-Dsbt.script=/root/.sdkman/candidates/sbt/current/bin/sbt
66-Dscala.ext.dirs=/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8
67-jar
68/root/.sdkman/candidates/sbt/1.11.5/bin/sbt-launch.jar
69"setCrossScalaVersions 3.8.0-RC6"
70"++3.8.0-RC6 -v"
71"mapScalacOptions ",REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s" ",-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e""
72"set every credentials := Nil"
73"excludeLibraryDependency com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}"
74"removeScalacOptionsStartingWith -P:wartremover"
75
76moduleMappings
77"runBuild 3.8.0-RC6 """{"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3 = \"3.3.0\"","replaceWith":"val scala3 = \"<SCALA_VERSION>\""}]}""" com.github.pjfanning%pekko-http-session-core com.github.pjfanning%pekko-http-session-jwt"
78
79[info] welcome to sbt 1.11.5 (Eclipse Adoptium Java 17.0.8)
80[info] loading settings for project repo-build from akka.sbt, plugins.sbt...
81[info] loading project definition from /build/repo/project
82[info] compiling 2 Scala sources to /build/repo/project/target/scala-2.12/sbt-1.0/classes ...
83[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.20. Compiling...
84[info] Compilation completed in 9.023s.
85[info] done compiling
86[info] loading settings for project rootProject from build.sbt...
87[info] resolving key references (11378 settings) ...
88[info] set current project to pekko-http-session-root (in build file:/build/repo/)
89Execute setCrossScalaVersions: 3.8.0-RC6
90OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in example/crossScalaVersions
91OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in core/crossScalaVersions
92OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in core3/crossScalaVersions
93OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC6) in core3/crossScalaVersions
94OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in rootProject/crossScalaVersions
95OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in javaTests3/crossScalaVersions
96OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC6) in javaTests3/crossScalaVersions
97OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in example3/crossScalaVersions
98OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC6) in example3/crossScalaVersions
99OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in jwt/crossScalaVersions
100OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in jwt3/crossScalaVersions
101OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC6) in jwt3/crossScalaVersions
102OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in javaTests/crossScalaVersions
103[info] set current project to pekko-http-session-root (in build file:/build/repo/)
104[info] Setting Scala version to 3.8.0-RC6 on 4 projects.
105[info] Switching Scala version on:
106[info] javaTests3 (3.8.0-RC6)
107[info] example3 (3.8.0-RC6)
108[info] core3 (3.8.0-RC6)
109[info] jwt3 (3.8.0-RC6)
110[info] Excluding projects:
111[info] jwt2_12 (2.12.20, 2.12.18)
112[info] javaTests (2.13.11)
113[info] example2_12 (2.12.20, 2.12.18)
114[info] core2_12 (2.12.20, 2.12.18)
115[info] * rootProject (2.13.11)
116[info] jwt (2.13.11)
117[info] javaTests2_12 (2.12.20, 2.12.18)
118[info] core (2.13.11)
119[info] example (2.13.11)
120[info] Reapplying settings...
121[info] set current project to pekko-http-session-root (in build file:/build/repo/)
122Execute mapScalacOptions: ,REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
123[info] Reapplying settings...
124[info] set current project to pekko-http-session-root (in build file:/build/repo/)
125[info] Defining Global / credentials, core / credentials and 11 others.
126[info] The new values will be used by Global / pgpSelectPassphrase, Global / pgpSigningKey and 64 others.
127[info] Run `last` for details.
128[info] Reapplying settings...
129[info] set current project to pekko-http-session-root (in build file:/build/repo/)
130Execute excludeLibraryDependency: com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}
131[info] Reapplying settings...
132OpenCB::Failed to reapply settings in excludeLibraryDependency: Reference to undefined setting:
133
134 Global / allExcludeDependencies from Global / allExcludeDependencies (CommunityBuildPlugin.scala:331)
135 Did you mean javaTests3 / allExcludeDependencies ?
136 , retry without global scopes
137[info] Reapplying settings...
138[info] set current project to pekko-http-session-root (in build file:/build/repo/)
139Execute removeScalacOptionsStartingWith: -P:wartremover
140[info] Reapplying settings...
141[info] set current project to pekko-http-session-root (in build file:/build/repo/)
142[success] Total time: 0 s, completed Jan 8, 2026, 2:13:30 AM
143Build config: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3 = \"3.3.0\"","replaceWith":"val scala3 = \"<SCALA_VERSION>\""}]}
144Parsed config: Success(ProjectBuildConfig(ProjectsConfig(List(),Map()),Full,List()))
145Starting build...
146Projects: Set(core3, jwt3)
147Starting build for ProjectRef(file:/build/repo/,core3) (pekko-http-session-core)... [0/2]
148OpenCB::Exclude Scala3 specific scalacOption `REQUIRE:-source:3.8` in Scala 2.12.20 module Global
149Compile scalacOptions: -Wconf:msg=can be rewritten automatically under:s, -source:3.8
150[info] compiling 16 Scala sources and 3 Java sources to /build/repo/core/target/jvm-3/classes ...
151[warn] -- [E092] Pattern Match Unchecked Warning: /build/repo/core/src/main/scala/com/github/pjfanning/session/SessionDirectives.scala:154:15
152[warn] 154 | case s: SessionResult.DecodedLegacy[T] =>
153[warn] | ^
154[warn] |the type test for com.github.pjfanning.session.SessionResult.DecodedLegacy[T] cannot be checked at runtime because its type arguments can't be determined from com.github.pjfanning.session.SessionResult[T]
155[warn] |
156[warn] | longer explanation available when compiling with `-explain`
157[warn] there was 1 feature warning; re-run with -feature for details
158[warn] there was 1 deprecation warning; re-run with -deprecation for details
159[warn] three warnings found
160[info] /build/repo/core/src/main/java/com/github/pjfanning/session/javadsl/SessionSerializers.java: SessionSerializers.java uses or overrides a deprecated API.
161[info] /build/repo/core/src/main/java/com/github/pjfanning/session/javadsl/SessionSerializers.java: Recompile with -Xlint:deprecation for details.
162[info] /build/repo/core/src/main/java/com/github/pjfanning/session/javadsl/HttpSessionAwareDirectives.java: Some input files use unchecked or unsafe operations.
163[info] /build/repo/core/src/main/java/com/github/pjfanning/session/javadsl/HttpSessionAwareDirectives.java: Recompile with -Xlint:unchecked for details.
164[info] done compiling
165[info] compiling 9 Scala sources to /build/repo/core/target/jvm-3/test-classes ...
166[info] done compiling
167[INFO] [01/08/2026 02:13:54.405] [pool-18-thread-7] [CoordinatedShutdown(pekko://com-github-pjfanning-session-OneOffSetRefreshableGetTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
168[INFO] [01/08/2026 02:13:54.552] [pool-18-thread-5] [CoordinatedShutdown(pekko://com-github-pjfanning-session-OneOffTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
169Storing token for selector: e91i4r3kaohdqfev, user: Map(k1 -> v1), expires: 1770426834576, now: 1767834834576
170Storing token for selector: ncqjup1crt6bue4a, user: Map(k1 -> v1), expires: 1770426834619, now: 1767834834619
171Storing token for selector: v4sgq0k4f17t1fms, user: Map(k1 -> v1), expires: 1770426834626, now: 1767834834626
172Storing token for selector: fdti3t1g9itfq8ob, user: Map(k1 -> v1), expires: 1770426834634, now: 1767834834634
173Storing token for selector: mk50iaotsafemqtb, user: Map(k1 -> v1), expires: 1770426834642, now: 1767834834642
174Storing token for selector: 4dj7a14ndt7i467i, user: Map(k1 -> v1), expires: 1770426834650, now: 1767834834650
175Storing token for selector: k58fjk1d13l44gkg, user: Map(k1 -> v1), expires: 1770426834657, now: 1767834834657
176Looking up token for selector: k58fjk1d13l44gkg, found: true
177Storing token for selector: dp7q2c3sgctdlfvb, user: Map(k1 -> v1), expires: 1770426834663, now: 1767834834663
178Running scheduled operation immediately
179Removing token for selector: k58fjk1d13l44gkg
180Storing token for selector: 5s744hv0oao3ghbp, user: Map(k1 -> v1), expires: 1770426834675, now: 1767834834675
181Looking up token for selector: 5s744hv0oao3ghbp, found: true
182Storing token for selector: 9p58784qc0fk6cui, user: Map(k1 -> v1), expires: 1770426834678, now: 1767834834678
183Running scheduled operation immediately
184Removing token for selector: 5s744hv0oao3ghbp
185Storing token for selector: 9g5a6fh8a9smm7vd, user: Map(k1 -> v1), expires: 1770426834683, now: 1767834834683
186[INFO] [01/08/2026 02:13:54.683] [pool-18-thread-1] [CoordinatedShutdown(pekko://com-github-pjfanning-session-CsrfDirectivesTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
187Looking up token for selector: 9g5a6fh8a9smm7vd, found: true
188Storing token for selector: bbdl3g6rvnq6ce05, user: Map(k1 -> v1), expires: 1770426834692, now: 1767834834692
189Running scheduled operation immediately
190Removing token for selector: 9g5a6fh8a9smm7vd
191Storing token for selector: psbgcvql7t7ipr1h, user: Map(k1 -> v1), expires: 1770426834696, now: 1767834834696
192Storing token for selector: ga08sjltdpcobgpk, user: Map(k1 -> v1), expires: 1770426834706, now: 1767834834706
193Removing token for selector: ga08sjltdpcobgpk
194Storing token for selector: l2uhfidp7v4vpuv9, user: Map(k1 -> v1), expires: 2595028000, now: 1767834834740
195Looking up token for selector: l2uhfidp7v4vpuv9, found: true
196Storing token for selector: btfaj8u974mlgda, user: Map(k1 -> v1), expires: 2595098000, now: 1767834834755
197Running scheduled operation immediately
198Removing token for selector: l2uhfidp7v4vpuv9
199Storing token for selector: vkhptvrivp7mu1v4, user: Map(k1 -> v1), expires: 2595028000, now: 1767834834758
200Looking up token for selector: vkhptvrivp7mu1v4, found: true
201Storing token for selector: cp36ckml2kbbjqdt, user: Map(k1 -> v1), expires: 2595098000, now: 1767834834764
202Running scheduled operation immediately
203Removing token for selector: vkhptvrivp7mu1v4
204Storing token for selector: fg8kdlculldq2v9k, user: Map(k1 -> v1), expires: 2595028000, now: 1767834834767
205Storing token for selector: 2kn7svmrrvi889ek, user: Map(k1 -> v1), expires: 1770426834771, now: 1767834834771
206Storing token for selector: chido61c1dccipj1, user: Map(k1 -> v1), expires: 1770426834777, now: 1767834834777
207Storing token for selector: h6crs24rgvc6rks4, user: Map(k1 -> v1), expires: 1770426834780, now: 1767834834780
208Storing token for selector: bpbndi2umsd331r0, user: Map(k1 -> v1), expires: 1770426834786, now: 1767834834786
209Storing token for selector: poai8j41jh367mi1, user: Map(k1 -> v1), expires: 1770426834799, now: 1767834834799
210Storing token for selector: ct00hi8odtsfcqsi, user: Map(k1 -> v1), expires: 1770426834811, now: 1767834834811
211Looking up token for selector: ct00hi8odtsfcqsi, found: true
212Storing token for selector: mlb4kvch2lauvr85, user: Map(k1 -> v1), expires: 1770426834813, now: 1767834834813
213Running scheduled operation immediately
214Removing token for selector: ct00hi8odtsfcqsi
215Storing token for selector: 5d8am5pdoq4hn9t2, user: Map(k1 -> v1), expires: 1770426834820, now: 1767834834820
216Looking up token for selector: 5d8am5pdoq4hn9t2, found: true
217Storing token for selector: r02dvkevvfep6rg3, user: Map(k1 -> v1), expires: 1770426834825, now: 1767834834825
218Running scheduled operation immediately
219Removing token for selector: 5d8am5pdoq4hn9t2
220Storing token for selector: pquoogdla8rq8d5, user: Map(k1 -> v1), expires: 1770426834827, now: 1767834834827
221Looking up token for selector: pquoogdla8rq8d5, found: true
222Storing token for selector: qsu417985vt6e5pg, user: Map(k1 -> v1), expires: 1770426834832, now: 1767834834832
223Running scheduled operation immediately
224Removing token for selector: pquoogdla8rq8d5
225Storing token for selector: gm8biahpugkomj2n, user: Map(k1 -> v1), expires: 1770426834834, now: 1767834834834
226Storing token for selector: giq4ekrvcu0ktjbg, user: Map(k1 -> v1), expires: 1770426834841, now: 1767834834841
227Removing token for selector: giq4ekrvcu0ktjbg
228Storing token for selector: rikhs9sf93jdh8o7, user: Map(k1 -> v1), expires: 2595028000, now: 1767834834860
229Looking up token for selector: rikhs9sf93jdh8o7, found: true
230Storing token for selector: aq6o1aqlr53a26q2, user: Map(k1 -> v1), expires: 2595098000, now: 1767834834869
231Running scheduled operation immediately
232Removing token for selector: rikhs9sf93jdh8o7
233Storing token for selector: t21ttmbp2ekhbnr4, user: Map(k1 -> v1), expires: 2595028000, now: 1767834834873
234Looking up token for selector: t21ttmbp2ekhbnr4, found: true
235Storing token for selector: cbqru1con4047kja, user: Map(k1 -> v1), expires: 2595098000, now: 1767834834876
236Running scheduled operation immediately
237Removing token for selector: t21ttmbp2ekhbnr4
238Storing token for selector: jtq20dhrn8s4nma7, user: Map(k1 -> v1), expires: 2595028000, now: 1767834834879
239[INFO] [01/08/2026 02:13:54.885] [pool-18-thread-2] [CoordinatedShutdown(pekko://com-github-pjfanning-session-RefreshableTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
240[info] + SessionManagerBasicEncoder.decodes v0.5.2 tokens with migration config: OK, passed 100 tests.
241[info] + SessionManagerBasicEncoder.doesn't decode expired session: OK, passed 100 tests.
242[info] OneOffSetRefreshableGetTest:
243[info] Using cookies
244[info] - should read an optional session when only the session is set
245[info] Using cookies
246[info] - should invalidate a session
247[info] Using cookies
248[info] - should touch the session, without setting a refresh token
249[info] Using headers
250[info] - should read an optional session when only the session is set
251[info] Using headers
252[info] - should invalidate a session
253[info] Using headers
254[info] - should touch the session, without setting a refresh token
255[info] CsrfDirectivesTest:
256[info] - should set the csrf cookie on the first get request only
257[info] - should reject requests if the csrf cookie doesn't match the header value
258[info] - should reject requests if the csrf cookie isn't set
259[info] - should reject requests if the csrf cookie and the header are empty
260[info] - should reject requests if the csrf cookie and the header contain illegal value
261[info] - should reject requests if the csrf cookie and the header contain structurally correct but incorrectly hashed value
262[info] - should accept requests if the csrf cookie matches the header value
263[info] - should accept requests if the csrf cookie matches the form field value
264[info] - should set a new csrf cookie when requested
265[info] OneOffTest:
266[info] Using cookies
267[info] - should set the correct session cookie name
268[info] Using cookies
269[info] - should set the session
270[info] Using cookies
271[info] - should read an optional session when the session is set
272[info] Using cookies
273[info] - should read an optional session when the session is not set
274[info] Using cookies
275[info] - should read a required session when the session is set
276[info] Using cookies
277[info] - should reject the request if the expiry is tampered with
278[info] Using cookies
279[info] - should invalidate a session
280[info] Using cookies
281[info] - should reject the request if the session is not set
282[info] Using cookies
283[info] - should reject the request if the session is invalid
284[info] Using cookies
285[info] - should touch the session
286[info] Using cookies
287[info] - should reject v0.5.1 session without migration config
288[info] Using cookies
289[info] - should migrate v0.5.1 session with migration config
290[info] Using cookies
291[info] - should reject v0.5.2 session without migration config
292[info] Using cookies
293[info] - should migrate v0.5.2 session with migration config
294[info] Using headers
295[info] - should set the session
296[info] Using headers
297[info] - should read an optional session when the session is set
298[info] Using headers
299[info] - should read an optional session when the session is not set
300[info] Using headers
301[info] - should read a required session when the session is set
302[info] Using headers
303[info] - should reject the request if the expiry is tampered with
304[info] Using headers
305[info] - should invalidate a session
306[info] Using headers
307[info] - should reject the request if the session is not set
308[info] Using headers
309[info] - should reject the request if the session is invalid
310[info] Using headers
311[info] - should touch the session
312[info] Using headers
313[info] - should reject v0.5.1 session without migration config
314[info] Using headers
315[info] - should migrate v0.5.1 session with migration config
316[info] Using headers
317[info] - should reject v0.5.2 session without migration config
318[info] Using headers
319[info] - should migrate v0.5.2 session with migration config
320[info] RefreshableTest:
321[info] Using cookies
322[info] - should set the refresh token cookie to expire
323[info] Using cookies
324[info] - should set both the session and refresh token
325[info] Using cookies
326[info] - should set a new refresh token when the session is set again
327[info] Using cookies
328[info] - should read an optional session when both the session and refresh token are set
329[info] Using cookies
330[info] - should read an optional session when only the session is set
331[info] Using cookies
332[info] - should set a new session after the session is re-created
333[info] Using cookies
334[info] - should read an optional session when none is set
335[info] Using cookies
336[info] - should read an optional session when only the refresh token is set (re-create the session)
337[info] Using cookies
338[info] - should set a new refresh token after the session is re-created
339[info] Using cookies
340[info] - should read a required session when both the session and refresh token are set
341[info] Using cookies
342[info] - should invalidate a session
343[info] Using cookies
344[info] - should reject the request if the session is not set
345[info] Using cookies
346[info] - should reject the request if the session is invalid
347[info] Using cookies
348[info] - should reject the request if the refresh token is invalid
349[info] Using cookies
350[info] - should touch the session, keeping the refresh token token intact
351[info] Using cookies
352[info] - should re-create an expired session and send back new tokens without duplicate headers
353[info] Using cookies
354[info] - should touch the session and send back session without duplicate headers
355[info] Using headers
356[info] - should set both the session and refresh token
357[info] Using headers
358[info] - should set a new refresh token when the session is set again
359[info] Using headers
360[info] - should read an optional session when both the session and refresh token are set
361[info] Using headers
362[info] - should read an optional session when only the session is set
363[info] Using headers
364[info] - should set a new session after the session is re-created
365[info] Using headers
366[info] - should read an optional session when none is set
367[info] Using headers
368[info] - should read an optional session when only the refresh token is set (re-create the session)
369[info] Using headers
370[info] - should set a new refresh token after the session is re-created
371[info] Using headers
372[info] - should read a required session when both the session and refresh token are set
373[info] Using headers
374[info] - should invalidate a session
375[info] Using headers
376[info] - should reject the request if the session is not set
377[info] Using headers
378[info] - should reject the request if the session is invalid
379[info] Using headers
380[info] - should reject the request if the refresh token is invalid
381[info] Using headers
382[info] - should touch the session, keeping the refresh token token intact
383[info] Using headers
384[info] - should re-create an expired session and send back new tokens without duplicate headers
385[info] Using headers
386[info] - should touch the session and send back session without duplicate headers
387[info] SessionConfigTest:
388[info] - should load and parse default (HS256) JWS config
389[info] - should load and parse HS256 JWS config
390[info] - should load and parse RS256 JWS config
391[info] - should fail to load config due to missing RSA private key (alg = RS256)
392[info] - should fail to load config due to empty RSA private key (alg = RS256)
393[info] - should fail to load config due to invalid RSA private key (alg = RS256)
394[info] - should fail to load config due to unsupported JWS alg
395[info] - should load JWT config
396[info] - should fallback to empty JWT config (with default exp-timeout) if absent
397[info] - should fallback to empty JWT config (without default exp-timeout) if absent
398[info] - should use max-age as a default value for jwt.expirationTimeout
399[info] + SessionManagerBasicEncoder.decodes v0.5.1 tokens with migration config: OK, passed 100 tests.
400[info] + SessionManagerBasicEncoder.encode+decode: OK, passed 100 tests.
401[info] + SessionManagerBasicEncoder.doesn't decode session with tampered expiry: OK, passed 100 tests.
402Starting build for ProjectRef(file:/build/repo/,jwt3) (pekko-http-session-jwt)... [1/2]
403Compile scalacOptions: -Wconf:msg=can be rewritten automatically under:s, -source:3.8
404[info] compiling 2 Scala sources and 1 Java source to /build/repo/jwt/target/jvm-3/classes ...
405[info] /build/repo/jwt/src/main/java/com/github/pjfanning/session/javadsl/JwtSessionSerializers.java: JwtSessionSerializers.java uses unchecked or unsafe operations.
406[info] /build/repo/jwt/src/main/java/com/github/pjfanning/session/javadsl/JwtSessionSerializers.java: Recompile with -Xlint:unchecked for details.
407[info] done compiling
408[info] compiling 1 Scala source to /build/repo/jwt/target/jvm-3/test-classes ...
409[warn] there were 10 deprecation warnings; re-run with -deprecation for details
410[warn] one warning found
411[info] done compiling
412Test on: http://jwt.io/#debugger:
413eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7InVzZXJOYW1lIjoiam9obiIsInVzZXJJZCI6MzB9LCJleHAiOjE0NDgwMjA5OTd9.bCIrVQseEA2LmH-oLwcQiH2xmmeybM4oB_2YBI5U8DU
414[info] SessionManagerJwtEncoderTest:
415[info] - should encode+decode for string, default config
416[info] - should encode+decode for string, with max age
417[info] - should encode+decode for string, with encryption
418[info] - should encode+decode for string, with max age and encryption
419[info] - should encode+decode for integer, default config
420[info] - should encode+decode for case class, default config
421[info] - should encode+decode for case class, with max age and encryption
422[info] - should encode+decode for string, RSA signature
423[info] - should encode+decode for string, HMAC SHA256 signature
424[info] - should encode correctly in the JWT format
425[info] - should encode JWT claims
426[info] - should encode JWT with default exp claim
427[info] - should encode JWT without any registered claims
428[info] - should encode a correct JWT header (alg = HS256)
429[info] - should encode a correct JWT header (alg = RS256)
430[info] - should not decode an expired session
431[info] - should not decode a token with a corrupted signature [HMAC SHA256]
432[info] - should not decode a token with a corrupted signature [RSA]
433[info] - should not decode a token with a non compatible signatures [RSA vs HMAC SHA256]
434[info] - should decode a token with 'Bearer' prefix
435[info] - should not decode v0.5.2 tokens without config
436[info] - should decode v0.5.2 tokens with config
437
438************************
439Build summary:
440[{
441 "module": "pekko-http-session-core",
442 "compile": {"status": "ok", "tookMs": 9719, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
443 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
444 "test-compile": {"status": "ok", "tookMs": 10578, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
445 "test": {"status": "ok", "tookMs": 2939, "passed": 91, "failed": 0, "ignored": 0, "skipped": 0, "total": 91, "byFramework": [{"framework": "unknown", "stats": {"passed": 91, "failed": 0, "ignored": 0, "skipped": 0, "total": 91}}]},
446 "publish": {"status": "skipped", "tookMs": 0},
447 "metadata": {
448 "crossScalaVersions": ["2.12.20", "3.3.0"]
449}
450},{
451 "module": "pekko-http-session-jwt",
452 "compile": {"status": "ok", "tookMs": 953, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
453 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
454 "test-compile": {"status": "ok", "tookMs": 1569, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
455 "test": {"status": "ok", "tookMs": 7216, "passed": 22, "failed": 0, "ignored": 0, "skipped": 0, "total": 22, "byFramework": [{"framework": "unknown", "stats": {"passed": 22, "failed": 0, "ignored": 0, "skipped": 0, "total": 22}}]},
456 "publish": {"status": "skipped", "tookMs": 0},
457 "metadata": {
458 "crossScalaVersions": ["2.12.20", "3.3.0"]
459}
460}]
461************************
462[success] Total time: 37 s, completed Jan 8, 2026, 2:14:07 AM
463[0JChecking patch project/plugins.sbt...
464Checking patch project/build.properties...
465Checking patch build.sbt...
466Applied patch project/plugins.sbt cleanly.
467Applied patch project/build.properties cleanly.
468Applied patch build.sbt cleanly.