Build Logs

pjfanning/pekko-http-session • 3.8.0:2026-01-13

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
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"
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
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
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
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"
70"++3.8.0 -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 """{"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.012s.
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
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::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in javaTests/crossScalaVersions
93OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in core3/crossScalaVersions
94OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in core3/crossScalaVersions
95OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in javaTests3/crossScalaVersions
96OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in javaTests3/crossScalaVersions
97OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in jwt/crossScalaVersions
98OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in example3/crossScalaVersions
99OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in rootProject/crossScalaVersions
100OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in example3/crossScalaVersions
101OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in jwt3/crossScalaVersions
102OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in jwt3/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 on 4 projects.
105[info] Switching Scala version on:
106[info] javaTests3 (3.8.0)
107[info] example3 (3.8.0)
108[info] core3 (3.8.0)
109[info] jwt3 (3.8.0)
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 13, 2026, 3:30:18 PM
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
167Storing token for selector: 87e71k86db0dns40, user: Map(k1 -> v1), expires: 1770906641017, now: 1768314641017
168Storing token for selector: puob714dsrpde4tp, user: Map(k1 -> v1), expires: 1770906641095, now: 1768314641095
169Storing token for selector: 9b2629g2geld13e3, user: Map(k1 -> v1), expires: 1770906641108, now: 1768314641108
170Storing token for selector: 60t6jn39falkv4ll, user: Map(k1 -> v1), expires: 1770906641110, now: 1768314641110
171Storing token for selector: gp4983u3r3okpgo, user: Map(k1 -> v1), expires: 1770906641121, now: 1768314641121
172Storing token for selector: 1l5dkbbsh4t6rodj, user: Map(k1 -> v1), expires: 1770906641132, now: 1768314641132
173Storing token for selector: bacet1r7cjbhe65f, user: Map(k1 -> v1), expires: 1770906641145, now: 1768314641145
174Looking up token for selector: bacet1r7cjbhe65f, found: true
175Storing token for selector: lu8874d1156ipnai, user: Map(k1 -> v1), expires: 1770906641170, now: 1768314641170
176Running scheduled operation immediately
177Removing token for selector: bacet1r7cjbhe65f
178Storing token for selector: baqiinmvffl18rqi, user: Map(k1 -> v1), expires: 1770906641187, now: 1768314641187
179Looking up token for selector: baqiinmvffl18rqi, found: true
180Storing token for selector: vbtet6l6aluc22h6, user: Map(k1 -> v1), expires: 1770906641198, now: 1768314641198
181Running scheduled operation immediately
182Removing token for selector: baqiinmvffl18rqi
183Storing token for selector: jkr38b9affc1gdue, user: Map(k1 -> v1), expires: 1770906641210, now: 1768314641210
184[INFO] [01/13/2026 15:30:41.209] [pool-18-thread-5] [CoordinatedShutdown(pekko://com-github-pjfanning-session-OneOffSetRefreshableGetTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
185Looking up token for selector: jkr38b9affc1gdue, found: true
186Storing token for selector: v5q6dosc6s37f5nq, user: Map(k1 -> v1), expires: 1770906641216, now: 1768314641216
187Running scheduled operation immediately
188Removing token for selector: jkr38b9affc1gdue
189Storing token for selector: pbifkbreeraiqabj, user: Map(k1 -> v1), expires: 1770906641220, now: 1768314641220
190Storing token for selector: giip1cbteem3pr4b, user: Map(k1 -> v1), expires: 1770906641235, now: 1768314641235
191Removing token for selector: giip1cbteem3pr4b
192Storing token for selector: aur8sudct15o9i01, user: Map(k1 -> v1), expires: 2595028000, now: 1768314641272
193Looking up token for selector: aur8sudct15o9i01, found: true
194Storing token for selector: prq8ulhuj6v490km, user: Map(k1 -> v1), expires: 2595098000, now: 1768314641290
195Running scheduled operation immediately
196Removing token for selector: aur8sudct15o9i01
197Storing token for selector: k9kfcmfn8tm7s3gq, user: Map(k1 -> v1), expires: 2595028000, now: 1768314641297
198Looking up token for selector: k9kfcmfn8tm7s3gq, found: true
199Storing token for selector: 8bqdutpiffaolj3b, user: Map(k1 -> v1), expires: 2595098000, now: 1768314641310
200Running scheduled operation immediately
201Removing token for selector: k9kfcmfn8tm7s3gq
202Storing token for selector: r6ad5nstugllk85, user: Map(k1 -> v1), expires: 2595028000, now: 1768314641319
203Storing token for selector: gt9kevpp7m0quu51, user: Map(k1 -> v1), expires: 1770906641339, now: 1768314641339
204Storing token for selector: 3p0rrlk8so3chg30, user: Map(k1 -> v1), expires: 1770906641363, now: 1768314641363
205Storing token for selector: bodfofumff1k8egt, user: Map(k1 -> v1), expires: 1770906641368, now: 1768314641368
206Storing token for selector: hnr70t08q78cbi69, user: Map(k1 -> v1), expires: 1770906641371, now: 1768314641371
207Storing token for selector: k423ub6kdvo18ish, user: Map(k1 -> v1), expires: 1770906641384, now: 1768314641384
208Storing token for selector: 909ms2uuk8d760tk, user: Map(k1 -> v1), expires: 1770906641404, now: 1768314641404
209Looking up token for selector: 909ms2uuk8d760tk, found: true
210Storing token for selector: p274uh93rnuaf8aa, user: Map(k1 -> v1), expires: 1770906641415, now: 1768314641415
211Running scheduled operation immediately
212Removing token for selector: 909ms2uuk8d760tk
213Storing token for selector: en44on1n36vbpqno, user: Map(k1 -> v1), expires: 1770906641437, now: 1768314641437
214Looking up token for selector: en44on1n36vbpqno, found: true
215Storing token for selector: gduc43e5msb1t1qa, user: Map(k1 -> v1), expires: 1770906641443, now: 1768314641443
216Running scheduled operation immediately
217Removing token for selector: en44on1n36vbpqno
218Storing token for selector: rgnpdso140kqrefr, user: Map(k1 -> v1), expires: 1770906641452, now: 1768314641452
219Looking up token for selector: rgnpdso140kqrefr, found: true
220Storing token for selector: fgfj287q9oc78bqi, user: Map(k1 -> v1), expires: 1770906641461, now: 1768314641461
221Running scheduled operation immediately
222Removing token for selector: rgnpdso140kqrefr
223Storing token for selector: 417qs8nvmq0idok8, user: Map(k1 -> v1), expires: 1770906641470, now: 1768314641470
224Storing token for selector: 4nnmrgu0buojtqo5, user: Map(k1 -> v1), expires: 1770906641478, now: 1768314641478
225Removing token for selector: 4nnmrgu0buojtqo5
226Storing token for selector: 9qp5rpq866mu8nps, user: Map(k1 -> v1), expires: 2595028000, now: 1768314641512
227Looking up token for selector: 9qp5rpq866mu8nps, found: true
228Storing token for selector: i9c42bpqdm5jltjf, user: Map(k1 -> v1), expires: 2595098000, now: 1768314641529
229Running scheduled operation immediately
230Removing token for selector: 9qp5rpq866mu8nps
231Storing token for selector: 7kc3se4vkgvf8foo, user: Map(k1 -> v1), expires: 2595028000, now: 1768314641534
232Looking up token for selector: 7kc3se4vkgvf8foo, found: true
233Storing token for selector: i0v85d1p0fnd5dlp, user: Map(k1 -> v1), expires: 2595098000, now: 1768314641538
234Running scheduled operation immediately
235Removing token for selector: 7kc3se4vkgvf8foo
236Storing token for selector: an1dqslqj1adrd37, user: Map(k1 -> v1), expires: 2595028000, now: 1768314641542
237[INFO] [01/13/2026 15:30:41.558] [pool-18-thread-3] [CoordinatedShutdown(pekko://com-github-pjfanning-session-RefreshableTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
238[INFO] [01/13/2026 15:30:41.600] [pool-18-thread-7] [CoordinatedShutdown(pekko://com-github-pjfanning-session-CsrfDirectivesTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
239[INFO] [01/13/2026 15:30:41.694] [pool-18-thread-6] [CoordinatedShutdown(pekko://com-github-pjfanning-session-OneOffTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
240[info] + SessionManagerBasicEncoder.decodes v0.5.1 tokens with migration config: OK, passed 100 tests.
241[info] + SessionManagerBasicEncoder.decodes v0.5.2 tokens with migration config: 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] RefreshableTest:
266[info] Using cookies
267[info] - should set the refresh token cookie to expire
268[info] Using cookies
269[info] - should set both the session and refresh token
270[info] Using cookies
271[info] - should set a new refresh token when the session is set again
272[info] Using cookies
273[info] - should read an optional session when both the session and refresh token are set
274[info] Using cookies
275[info] - should read an optional session when only the session is set
276[info] Using cookies
277[info] - should set a new session after the session is re-created
278[info] Using cookies
279[info] - should read an optional session when none is set
280[info] Using cookies
281[info] - should read an optional session when only the refresh token is set (re-create the session)
282[info] Using cookies
283[info] - should set a new refresh token after the session is re-created
284[info] Using cookies
285[info] - should read a required session when both the session and refresh token are set
286[info] Using cookies
287[info] - should invalidate a session
288[info] Using cookies
289[info] - should reject the request if the session is not set
290[info] Using cookies
291[info] - should reject the request if the session is invalid
292[info] Using cookies
293[info] - should reject the request if the refresh token is invalid
294[info] Using cookies
295[info] - should touch the session, keeping the refresh token token intact
296[info] Using cookies
297[info] - should re-create an expired session and send back new tokens without duplicate headers
298[info] Using cookies
299[info] - should touch the session and send back session without duplicate headers
300[info] Using headers
301[info] - should set both the session and refresh token
302[info] Using headers
303[info] - should set a new refresh token when the session is set again
304[info] Using headers
305[info] - should read an optional session when both the session and refresh token are set
306[info] Using headers
307[info] - should read an optional session when only the session is set
308[info] Using headers
309[info] - should set a new session after the session is re-created
310[info] Using headers
311[info] - should read an optional session when none is set
312[info] Using headers
313[info] - should read an optional session when only the refresh token is set (re-create the session)
314[info] Using headers
315[info] - should set a new refresh token after the session is re-created
316[info] Using headers
317[info] - should read a required session when both the session and refresh token are set
318[info] Using headers
319[info] - should invalidate a session
320[info] Using headers
321[info] - should reject the request if the session is not set
322[info] Using headers
323[info] - should reject the request if the session is invalid
324[info] Using headers
325[info] - should reject the request if the refresh token is invalid
326[info] Using headers
327[info] - should touch the session, keeping the refresh token token intact
328[info] Using headers
329[info] - should re-create an expired session and send back new tokens without duplicate headers
330[info] Using headers
331[info] - should touch the session and send back session without duplicate headers
332[info] OneOffTest:
333[info] Using cookies
334[info] - should set the correct session cookie name
335[info] Using cookies
336[info] - should set the session
337[info] Using cookies
338[info] - should read an optional session when the session is set
339[info] Using cookies
340[info] - should read an optional session when the session is not set
341[info] Using cookies
342[info] - should read a required session when the session is set
343[info] Using cookies
344[info] - should reject the request if the expiry is tampered with
345[info] Using cookies
346[info] - should invalidate a session
347[info] Using cookies
348[info] - should reject the request if the session is not set
349[info] Using cookies
350[info] - should reject the request if the session is invalid
351[info] Using cookies
352[info] - should touch the session
353[info] Using cookies
354[info] - should reject v0.5.1 session without migration config
355[info] Using cookies
356[info] - should migrate v0.5.1 session with migration config
357[info] Using cookies
358[info] - should reject v0.5.2 session without migration config
359[info] Using cookies
360[info] - should migrate v0.5.2 session with migration config
361[info] Using headers
362[info] - should set the session
363[info] Using headers
364[info] - should read an optional session when the session is set
365[info] Using headers
366[info] - should read an optional session when the session is not set
367[info] Using headers
368[info] - should read a required session when the session is set
369[info] Using headers
370[info] - should reject the request if the expiry is tampered with
371[info] Using headers
372[info] - should invalidate a session
373[info] Using headers
374[info] - should reject the request if the session is not set
375[info] Using headers
376[info] - should reject the request if the session is invalid
377[info] Using headers
378[info] - should touch the session
379[info] Using headers
380[info] - should reject v0.5.1 session without migration config
381[info] Using headers
382[info] - should migrate v0.5.1 session with migration config
383[info] Using headers
384[info] - should reject v0.5.2 session without migration config
385[info] Using headers
386[info] - should migrate v0.5.2 session with migration config
387[info] + SessionManagerBasicEncoder.doesn't decode expired session: OK, passed 100 tests.
388[info] + SessionManagerBasicEncoder.encode+decode: OK, passed 100 tests.
389[info] + SessionManagerBasicEncoder.doesn't decode session with tampered expiry: OK, passed 100 tests.
390[info] SessionConfigTest:
391[info] - should load and parse default (HS256) JWS config
392[info] - should load and parse HS256 JWS config
393[info] - should load and parse RS256 JWS config
394[info] - should fail to load config due to missing RSA private key (alg = RS256)
395[info] - should fail to load config due to empty RSA private key (alg = RS256)
396[info] - should fail to load config due to invalid RSA private key (alg = RS256)
397[info] - should fail to load config due to unsupported JWS alg
398[info] - should load JWT config
399[info] - should fallback to empty JWT config (with default exp-timeout) if absent
400[info] - should fallback to empty JWT config (without default exp-timeout) if absent
401[info] - should use max-age as a default value for jwt.expirationTimeout
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": 9352, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
443 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
444 "test-compile": {"status": "ok", "tookMs": 10010, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
445 "test": {"status": "ok", "tookMs": 3903, "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": 1007, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
453 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
454 "test-compile": {"status": "ok", "tookMs": 1642, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
455 "test": {"status": "ok", "tookMs": 10133, "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: 39 s, completed Jan 13, 2026, 3:30:58 PM
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.