Build Logs
pjfanning/pekko-http-session • 3.8.0-RC2:2025-11-28
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-RC2
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-RC2"
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-RC2
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-RC2
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-RC2
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-RC2"
70"++3.8.0-RC2 -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-RC2 """{"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.125s.
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-RC2
90OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in core/crossScalaVersions
91OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in core3/crossScalaVersions
92OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC2) in core3/crossScalaVersions
93OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in javaTests3/crossScalaVersions
94OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC2) in javaTests3/crossScalaVersions
95OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in rootProject/crossScalaVersions
96OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in example/crossScalaVersions
97OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in jwt/crossScalaVersions
98OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in example3/crossScalaVersions
99OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC2) in example3/crossScalaVersions
100OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in jwt3/crossScalaVersions
101OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC2) 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-RC2 on 4 projects.
105[info] Switching Scala version on:
106[info] javaTests3 (3.8.0-RC2)
107[info] example3 (3.8.0-RC2)
108[info] core3 (3.8.0-RC2)
109[info] jwt3 (3.8.0-RC2)
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 Nov 28, 2025, 3:38:17 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: m5cso9odk0eclnc8, user: Map(k1 -> v1), expires: 1766932738160, now: 1764340738160
168Storing token for selector: v921ka8ivpmgie15, user: Map(k1 -> v1), expires: 1766932738237, now: 1764340738237
169Storing token for selector: g2a8rhnv1f2rf56u, user: Map(k1 -> v1), expires: 1766932738246, now: 1764340738246
170Storing token for selector: q0j8nuoafi8fcd9j, user: Map(k1 -> v1), expires: 1766932738249, now: 1764340738249
171Storing token for selector: mvaqtam56udvc3p, user: Map(k1 -> v1), expires: 1766932738265, now: 1764340738269
172Storing token for selector: 5172v8jj8ft7bmv3, user: Map(k1 -> v1), expires: 1766932738291, now: 1764340738291
173Storing token for selector: urqeo8pfhlo9p547, user: Map(k1 -> v1), expires: 1766932738302, now: 1764340738302
174Looking up token for selector: urqeo8pfhlo9p547, found: true
175Storing token for selector: 1p17st3hqasl7v3b, user: Map(k1 -> v1), expires: 1766932738316, now: 1764340738316
176Running scheduled operation immediately
177Removing token for selector: urqeo8pfhlo9p547
178Storing token for selector: qequl79el1a0fai9, user: Map(k1 -> v1), expires: 1766932738329, now: 1764340738329
179Looking up token for selector: qequl79el1a0fai9, found: true
180Storing token for selector: sp5ad3ap2gdf46jq, user: Map(k1 -> v1), expires: 1766932738333, now: 1764340738333
181Running scheduled operation immediately
182Removing token for selector: qequl79el1a0fai9
183Storing token for selector: ujft1o0vn73efvvv, user: Map(k1 -> v1), expires: 1766932738338, now: 1764340738338
184Looking up token for selector: ujft1o0vn73efvvv, found: true
185Storing token for selector: ibtl0fkbnk5kpfmn, user: Map(k1 -> v1), expires: 1766932738344, now: 1764340738344
186Running scheduled operation immediately
187Removing token for selector: ujft1o0vn73efvvv
188Storing token for selector: 9p5grtn0h6prtj3e, user: Map(k1 -> v1), expires: 1766932738359, now: 1764340738359
189Storing token for selector: u3lccsugofdseipv, user: Map(k1 -> v1), expires: 1766932738367, now: 1764340738367
190Removing token for selector: u3lccsugofdseipv
191Storing token for selector: 3c233lm98ts9lqfn, user: Map(k1 -> v1), expires: 2595028000, now: 1764340738397
192Looking up token for selector: 3c233lm98ts9lqfn, found: true
193Storing token for selector: n8or9vo8kebo4318, user: Map(k1 -> v1), expires: 2595098000, now: 1764340738411
194Running scheduled operation immediately
195Removing token for selector: 3c233lm98ts9lqfn
196Storing token for selector: b1kmfaamive2ol94, user: Map(k1 -> v1), expires: 2595028000, now: 1764340738415
197Looking up token for selector: b1kmfaamive2ol94, found: true
198Storing token for selector: b1ss26ib2s19ntsl, user: Map(k1 -> v1), expires: 2595098000, now: 1764340738419
199Running scheduled operation immediately
200Removing token for selector: b1kmfaamive2ol94
201Storing token for selector: g7p3a8mev7p2rorp, user: Map(k1 -> v1), expires: 2595028000, now: 1764340738424
202Storing token for selector: ang45v6rgj5d8hu0, user: Map(k1 -> v1), expires: 1766932738432, now: 1764340738432
203Storing token for selector: uurh9fv1sc66lj50, user: Map(k1 -> v1), expires: 1766932738444, now: 1764340738444
204Storing token for selector: vh5a9g8ge52ct4vu, user: Map(k1 -> v1), expires: 1766932738447, now: 1764340738448
205Storing token for selector: ppv8l2tqo728j1fm, user: Map(k1 -> v1), expires: 1766932738451, now: 1764340738451
206Storing token for selector: nrpp2tvo22cr2n7i, user: Map(k1 -> v1), expires: 1766932738459, now: 1764340738459
207Storing token for selector: mh9hr8d6her8r078, user: Map(k1 -> v1), expires: 1766932738466, now: 1764340738466
208Looking up token for selector: mh9hr8d6her8r078, found: true
209Storing token for selector: m3ltm4gm1e0evntv, user: Map(k1 -> v1), expires: 1766932738469, now: 1764340738469
210Running scheduled operation immediately
211Removing token for selector: mh9hr8d6her8r078
212Storing token for selector: jpvmgm6ls7gg1ujg, user: Map(k1 -> v1), expires: 1766932738478, now: 1764340738478
213Looking up token for selector: jpvmgm6ls7gg1ujg, found: true
214Storing token for selector: 54k9v54bvo3lbpta, user: Map(k1 -> v1), expires: 1766932738480, now: 1764340738480
215Running scheduled operation immediately
216Removing token for selector: jpvmgm6ls7gg1ujg
217Storing token for selector: iu0jsvu16ai8t934, user: Map(k1 -> v1), expires: 1766932738485, now: 1764340738485
218Looking up token for selector: iu0jsvu16ai8t934, found: true
219Storing token for selector: 251bggaeb4k07q1e, user: Map(k1 -> v1), expires: 1766932738491, now: 1764340738491
220Running scheduled operation immediately
221Removing token for selector: iu0jsvu16ai8t934
222Storing token for selector: 4o4d7bnku54fb3ht, user: Map(k1 -> v1), expires: 1766932738496, now: 1764340738496
223Storing token for selector: i0vnf9ivb9oe3h66, user: Map(k1 -> v1), expires: 1766932738509, now: 1764340738509
224Removing token for selector: i0vnf9ivb9oe3h66
225Storing token for selector: 29b6rhaojcld1a61, user: Map(k1 -> v1), expires: 2595028000, now: 1764340738533
226Looking up token for selector: 29b6rhaojcld1a61, found: true
227Storing token for selector: 34cdi05if947f72d, user: Map(k1 -> v1), expires: 2595098000, now: 1764340738544
228Running scheduled operation immediately
229Removing token for selector: 29b6rhaojcld1a61
230Storing token for selector: 3i3bbe88sbdn737s, user: Map(k1 -> v1), expires: 2595028000, now: 1764340738550
231Looking up token for selector: 3i3bbe88sbdn737s, found: true
232Storing token for selector: dep4j9ko96k43fie, user: Map(k1 -> v1), expires: 2595098000, now: 1764340738557
233Running scheduled operation immediately
234Removing token for selector: 3i3bbe88sbdn737s
235Storing token for selector: 8016v4f7hd0j04sj, user: Map(k1 -> v1), expires: 2595028000, now: 1764340738559
236[INFO] [11/28/2025 15:38:58.605] [pool-18-thread-3] [CoordinatedShutdown(pekko://com-github-pjfanning-session-RefreshableTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
237[INFO] [11/28/2025 15:38:58.608] [pool-18-thread-1] [CoordinatedShutdown(pekko://com-github-pjfanning-session-OneOffTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
238[INFO] [11/28/2025 15:38:58.652] [pool-18-thread-5] [CoordinatedShutdown(pekko://com-github-pjfanning-session-CsrfDirectivesTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
239[INFO] [11/28/2025 15:38:58.796] [pool-18-thread-4] [CoordinatedShutdown(pekko://com-github-pjfanning-session-OneOffSetRefreshableGetTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
240[info] + SessionManagerBasicEncoder.decodes v0.5.1 tokens with migration config: OK, passed 100 tests.
241[info] + SessionManagerBasicEncoder.doesn't decode expired session: OK, passed 100 tests.
242[info] CsrfDirectivesTest:
243[info] - should set the csrf cookie on the first get request only
244[info] - should reject requests if the csrf cookie doesn't match the header value
245[info] - should reject requests if the csrf cookie isn't set
246[info] - should reject requests if the csrf cookie and the header are empty
247[info] - should reject requests if the csrf cookie and the header contain illegal value
248[info] - should reject requests if the csrf cookie and the header contain structurally correct but incorrectly hashed value
249[info] - should accept requests if the csrf cookie matches the header value
250[info] - should accept requests if the csrf cookie matches the form field value
251[info] - should set a new csrf cookie when requested
252[info] OneOffTest:
253[info] Using cookies
254[info] - should set the correct session cookie name
255[info] Using cookies
256[info] - should set the session
257[info] Using cookies
258[info] - should read an optional session when the session is set
259[info] Using cookies
260[info] - should read an optional session when the session is not set
261[info] Using cookies
262[info] - should read a required session when the session is set
263[info] Using cookies
264[info] - should reject the request if the expiry is tampered with
265[info] Using cookies
266[info] - should invalidate a session
267[info] Using cookies
268[info] - should reject the request if the session is not set
269[info] Using cookies
270[info] - should reject the request if the session is invalid
271[info] Using cookies
272[info] - should touch the session
273[info] Using cookies
274[info] - should reject v0.5.1 session without migration config
275[info] Using cookies
276[info] - should migrate v0.5.1 session with migration config
277[info] Using cookies
278[info] - should reject v0.5.2 session without migration config
279[info] Using cookies
280[info] - should migrate v0.5.2 session with migration config
281[info] Using headers
282[info] - should set the session
283[info] Using headers
284[info] - should read an optional session when the session is set
285[info] Using headers
286[info] - should read an optional session when the session is not set
287[info] Using headers
288[info] - should read a required session when the session is set
289[info] Using headers
290[info] - should reject the request if the expiry is tampered with
291[info] Using headers
292[info] - should invalidate a session
293[info] Using headers
294[info] - should reject the request if the session is not set
295[info] Using headers
296[info] - should reject the request if the session is invalid
297[info] Using headers
298[info] - should touch the session
299[info] Using headers
300[info] - should reject v0.5.1 session without migration config
301[info] Using headers
302[info] - should migrate v0.5.1 session with migration config
303[info] Using headers
304[info] - should reject v0.5.2 session without migration config
305[info] Using headers
306[info] - should migrate v0.5.2 session with migration config
307[info] RefreshableTest:
308[info] Using cookies
309[info] - should set the refresh token cookie to expire
310[info] Using cookies
311[info] - should set both the session and refresh token
312[info] Using cookies
313[info] - should set a new refresh token when the session is set again
314[info] Using cookies
315[info] - should read an optional session when both the session and refresh token are set
316[info] Using cookies
317[info] - should read an optional session when only the session is set
318[info] Using cookies
319[info] - should set a new session after the session is re-created
320[info] Using cookies
321[info] - should read an optional session when none is set
322[info] Using cookies
323[info] + SessionManagerBasicEncoder.doesn't decode session with tampered expiry: OK, passed 100 tests.
324[info] - should read an optional session when only the refresh token is set (re-create the session)
325[info] Using cookies
326[info] - should set a new refresh token after the session is re-created
327[info] Using cookies
328[info] - should read a required session when both the session and refresh token are set
329[info] Using cookies
330[info] - should invalidate a session
331[info] Using cookies
332[info] - should reject the request if the session is not set
333[info] Using cookies
334[info] - should reject the request if the session is invalid
335[info] Using cookies
336[info] - should reject the request if the refresh token is invalid
337[info] Using cookies
338[info] - should touch the session, keeping the refresh token token intact
339[info] Using cookies
340[info] - should re-create an expired session and send back new tokens without duplicate headers
341[info] Using cookies
342[info] - should touch the session and send back session without duplicate headers
343[info] Using headers
344[info] - should set both the session and refresh token
345[info] Using headers
346[info] - should set a new refresh token when the session is set again
347[info] Using headers
348[info] - should read an optional session when both the session and refresh token are set
349[info] Using headers
350[info] - should read an optional session when only the session is set
351[info] Using headers
352[info] - should set a new session after the session is re-created
353[info] Using headers
354[info] - should read an optional session when none is set
355[info] Using headers
356[info] - should read an optional session when only the refresh token is set (re-create the session)
357[info] Using headers
358[info] - should set a new refresh token after the session is re-created
359[info] Using headers
360[info] - should read a required session when both the session and refresh token are set
361[info] Using headers
362[info] - should invalidate a session
363[info] Using headers
364[info] - should reject the request if the session is not set
365[info] Using headers
366[info] - should reject the request if the session is invalid
367[info] Using headers
368[info] - should reject the request if the refresh token is invalid
369[info] Using headers
370[info] - should touch the session, keeping the refresh token token intact
371[info] Using headers
372[info] - should re-create an expired session and send back new tokens without duplicate headers
373[info] Using headers
374[info] - should touch the session and send back session without duplicate headers
375[info] OneOffSetRefreshableGetTest:
376[info] Using cookies
377[info] - should read an optional session when only the session is set
378[info] Using cookies
379[info] - should invalidate a session
380[info] Using cookies
381[info] + SessionManagerBasicEncoder.encode+decode: OK, passed 100 tests.
382[info] - should touch the session, without setting a refresh token
383[info] Using headers
384[info] - should read an optional session when only the session is set
385[info] Using headers
386[info] - should invalidate a session
387[info] Using headers
388[info] - should touch the session, without setting a refresh token
389[info] + SessionManagerBasicEncoder.decodes v0.5.2 tokens with migration config: 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": 13321, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
443 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
444 "test-compile": {"status": "ok", "tookMs": 10627, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
445 "test": {"status": "ok", "tookMs": 3981, "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": 2835, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
453 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
454 "test-compile": {"status": "ok", "tookMs": 1819, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
455 "test": {"status": "ok", "tookMs": 6265, "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: 62 s (0:01:02.0), completed Nov 28, 2025, 3:39:19 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.