Build Logs
softwaremill/akka-http-session • 3.8.0:2026-01-13
Errors
0
Warnings
22
Total Lines
493
1##################################
2Clonning https://github.com/softwaremill/akka-http-session.git into /build/repo using revision v0.7.1
3##################################
4Note: switching to 'f015a450192110397103be7be909c0216e3acedd'.
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 softwaremill/akka-http-session
47##################################
48Scala version: 3.8.0
49Targets: com.softwaremill.pekko-http-session%core com.softwaremill.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.softwaremill.pekko-http-session%core com.softwaremill.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.432s.
85[info] done compiling
86[info] loading settings for project rootProject from build.sbt...
87[info] resolving key references (19494 settings) ...
88[info] set current project to akka-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 javaTests/crossScalaVersions
91OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in example/crossScalaVersions
92OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in pekkoExample/crossScalaVersions
93OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in core/crossScalaVersions
94OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in pekkoJavaTests/crossScalaVersions
95OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in pekkoJwt3/crossScalaVersions
96OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in pekkoJwt3/crossScalaVersions
97OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in pekkoExample3/crossScalaVersions
98OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in pekkoExample3/crossScalaVersions
99OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in pekkoJwt/crossScalaVersions
100OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in pekkoCore/crossScalaVersions
101OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in rootProject/crossScalaVersions
102OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.11) in jwt/crossScalaVersions
103OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in pekkoJavaTests3/crossScalaVersions
104OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in pekkoJavaTests3/crossScalaVersions
105OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in pekkoCore3/crossScalaVersions
106OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in pekkoCore3/crossScalaVersions
107[info] set current project to akka-http-session-root (in build file:/build/repo/)
108[info] Setting Scala version to 3.8.0 on 4 projects.
109[info] Switching Scala version on:
110[info] pekkoJwt3 (3.8.0)
111[info] pekkoJavaTests3 (3.8.0)
112[info] pekkoCore3 (3.8.0)
113[info] pekkoExample3 (3.8.0)
114[info] Excluding projects:
115[info] jwt2_12 (2.12.20, 2.12.18)
116[info] javaTests (2.13.11)
117[info] pekkoCore (2.13.11)
118[info] example2_12 (2.12.20, 2.12.18)
119[info] core2_12 (2.12.20, 2.12.18)
120[info] * rootProject (2.13.11)
121[info] jwt (2.13.11)
122[info] pekkoJavaTests (2.13.11)
123[info] javaTests2_12 (2.12.20, 2.12.18)
124[info] pekkoExample2_12 (2.12.20, 2.12.18)
125[info] pekkoExample (2.13.11)
126[info] pekkoJwt (2.13.11)
127[info] pekkoCore2_12 (2.12.20, 2.12.18)
128[info] core (2.13.11)
129[info] example (2.13.11)
130[info] pekkoJwt2_12 (2.12.20, 2.12.18)
131[info] pekkoJavaTests2_12 (2.12.20, 2.12.18)
132[info] Reapplying settings...
133[info] set current project to akka-http-session-root (in build file:/build/repo/)
134Execute mapScalacOptions: ,REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
135[info] Reapplying settings...
136[info] set current project to akka-http-session-root (in build file:/build/repo/)
137[info] Defining Global / credentials, core / credentials and 19 others.
138[info] The new values will be used by Global / pgpSelectPassphrase, Global / pgpSigningKey and 104 others.
139[info] Run `last` for details.
140[info] Reapplying settings...
141[info] set current project to akka-http-session-root (in build file:/build/repo/)
142Execute excludeLibraryDependency: com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}
143[info] Reapplying settings...
144OpenCB::Failed to reapply settings in excludeLibraryDependency: Reference to undefined setting:
145
146 Global / allExcludeDependencies from Global / allExcludeDependencies (CommunityBuildPlugin.scala:331)
147 Did you mean pekkoCore3 / allExcludeDependencies ?
148 , retry without global scopes
149[info] Reapplying settings...
150[info] set current project to akka-http-session-root (in build file:/build/repo/)
151Execute removeScalacOptionsStartingWith: -P:wartremover
152[info] Reapplying settings...
153[info] set current project to akka-http-session-root (in build file:/build/repo/)
154[success] Total time: 0 s, completed Jan 13, 2026, 3:16:04 PM
155Build 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>\""}]}
156Parsed config: Success(ProjectBuildConfig(ProjectsConfig(List(),Map()),Full,List()))
157None of projects in group Vector(javaTests, javaTests2_12) uses current Scala binary version, using random: javaTests
158Starting build...
159Projects: Set(pekkoCore3, pekkoJwt3)
160Starting build for ProjectRef(file:/build/repo/,pekkoCore3) (core)... [0/2]
161OpenCB::Exclude Scala3 specific scalacOption `REQUIRE:-source:3.8` in Scala 2.12.20 module Global
162OpenCB::Filter out '-deprecation', matches setting pattern '^-?-deprecation'
163OpenCB::Filter out '-feature', matches setting pattern '^-?-feature'
164Compile scalacOptions: -encoding, utf8, -explain-types, -explain, -language:experimental.macros, -language:higherKinds, -language:implicitConversions, -unchecked, -Ykind-projector, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
165[info] compiling 16 Scala sources and 3 Java sources to /build/repo/pekko-http-session/core/target/jvm-3/classes ...
166[warn] Option -Ykind-projector is deprecated: Use -Xkind-projector instead.
167[warn] -- [E092] Pattern Match Unchecked Warning: /build/repo/pekko-http-session/core/src/main/scala/com/softwaremill/pekkohttpsession/SessionDirectives.scala:154:15
168[warn] 154 | case s: SessionResult.DecodedLegacy[T] =>
169[warn] | ^
170[warn] |the type test for com.softwaremill.pekkohttpsession.SessionResult.DecodedLegacy[T] cannot be checked at runtime because its type arguments can't be determined from com.softwaremill.pekkohttpsession.SessionResult[T]
171[warn] |---------------------------------------------------------------------------
172[warn] | Explanation (enabled by `-explain`)
173[warn] |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
174[warn] | Type arguments and type refinements are erased during compile time, thus it's
175[warn] | impossible to check them at run-time.
176[warn] |
177[warn] | You can either replace the type arguments by _ or use `@unchecked`.
178[warn] ---------------------------------------------------------------------------
179[warn] there was 1 deprecation warning; re-run with -deprecation for details
180[warn] three warnings found
181[info] /build/repo/pekko-http-session/core/src/main/java/com/softwaremill/pekkohttpsession/javadsl/SessionSerializers.java: SessionSerializers.java uses or overrides a deprecated API.
182[info] /build/repo/pekko-http-session/core/src/main/java/com/softwaremill/pekkohttpsession/javadsl/SessionSerializers.java: Recompile with -Xlint:deprecation for details.
183[info] /build/repo/pekko-http-session/core/src/main/java/com/softwaremill/pekkohttpsession/javadsl/HttpSessionAwareDirectives.java: Some input files use unchecked or unsafe operations.
184[info] /build/repo/pekko-http-session/core/src/main/java/com/softwaremill/pekkohttpsession/javadsl/HttpSessionAwareDirectives.java: Recompile with -Xlint:unchecked for details.
185[info] done compiling
186[info] compiling 9 Scala sources to /build/repo/pekko-http-session/core/target/jvm-3/test-classes ...
187[warn] Option -Ykind-projector is deprecated: Use -Xkind-projector instead.
188[warn] one warning found
189[info] done compiling
190Storing token for selector: ssetmm1ttluba5dn, user: Map(k1 -> v1), expires: 1770905790015, now: 1768313790015
191Storing token for selector: pjknpkmtat3oqtgi, user: Map(k1 -> v1), expires: 1770905790122, now: 1768313790122
192Storing token for selector: esq03f29odopj3c7, user: Map(k1 -> v1), expires: 1770905790130, now: 1768313790130
193Storing token for selector: 3bh5464k8lnthp0v, user: Map(k1 -> v1), expires: 1770905790136, now: 1768313790136
194Storing token for selector: h2u8vb5p0lflltd3, user: Map(k1 -> v1), expires: 1770905790151, now: 1768313790151
195Storing token for selector: hjtmu28ibtb1g0et, user: Map(k1 -> v1), expires: 1770905790171, now: 1768313790171
196Storing token for selector: s5kaap93naisvhc1, user: Map(k1 -> v1), expires: 1770905790180, now: 1768313790180
197Looking up token for selector: s5kaap93naisvhc1, found: true
198Storing token for selector: h5ct3g08tj2iecrd, user: Map(k1 -> v1), expires: 1770905790198, now: 1768313790198
199Running scheduled operation immediately
200Removing token for selector: s5kaap93naisvhc1
201Storing token for selector: krer3tfbqi45o528, user: Map(k1 -> v1), expires: 1770905790219, now: 1768313790219
202Looking up token for selector: krer3tfbqi45o528, found: true
203Storing token for selector: kfst1lmvoh614oph, user: Map(k1 -> v1), expires: 1770905790230, now: 1768313790230
204Running scheduled operation immediately
205Removing token for selector: krer3tfbqi45o528
206Storing token for selector: 4g5nedevehlcpcml, user: Map(k1 -> v1), expires: 1770905790251, now: 1768313790251
207Looking up token for selector: 4g5nedevehlcpcml, found: true
208Storing token for selector: iul49dl66atfqtro, user: Map(k1 -> v1), expires: 1770905790267, now: 1768313790267
209Running scheduled operation immediately
210Removing token for selector: 4g5nedevehlcpcml
211Storing token for selector: m1hubppse445rstr, user: Map(k1 -> v1), expires: 1770905790274, now: 1768313790274
212Storing token for selector: 9lub3egmeninh5cp, user: Map(k1 -> v1), expires: 1770905790287, now: 1768313790287
213Removing token for selector: 9lub3egmeninh5cp
214[INFO] [01/13/2026 15:16:30.306] [pool-19-thread-6] [CoordinatedShutdown(pekko://com-softwaremill-pekkohttpsession-OneOffSetRefreshableGetTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
215Storing token for selector: l2lg2ivfq022k3be, user: Map(k1 -> v1), expires: 2595028000, now: 1768313790323
216Looking up token for selector: l2lg2ivfq022k3be, found: true
217Storing token for selector: rhql2khika7c2t71, user: Map(k1 -> v1), expires: 2595098000, now: 1768313790360
218Running scheduled operation immediately
219Removing token for selector: l2lg2ivfq022k3be
220Storing token for selector: 7bef989k644iqf2q, user: Map(k1 -> v1), expires: 2595028000, now: 1768313790376
221Looking up token for selector: 7bef989k644iqf2q, found: true
222Storing token for selector: 32n75vv6go4104ca, user: Map(k1 -> v1), expires: 2595098000, now: 1768313790388
223Running scheduled operation immediately
224Removing token for selector: 7bef989k644iqf2q
225Storing token for selector: bu54o2jpavc2ak35, user: Map(k1 -> v1), expires: 2595028000, now: 1768313790396
226Storing token for selector: 2i94oduouou8bsr5, user: Map(k1 -> v1), expires: 1770905790414, now: 1768313790414
227Storing token for selector: 80j2podrieeki20h, user: Map(k1 -> v1), expires: 1770905790439, now: 1768313790439
228Storing token for selector: m4mdnc68qp0mackm, user: Map(k1 -> v1), expires: 1770905790448, now: 1768313790448
229Storing token for selector: 323ojupci166667a, user: Map(k1 -> v1), expires: 1770905790471, now: 1768313790471
230Storing token for selector: 3iooeriv7chnmld, user: Map(k1 -> v1), expires: 1770905790533, now: 1768313790533
231Storing token for selector: m553nd4ne22eamea, user: Map(k1 -> v1), expires: 1770905790547, now: 1768313790547
232Looking up token for selector: m553nd4ne22eamea, found: true
233Storing token for selector: 53och89ipjrprbmh, user: Map(k1 -> v1), expires: 1770905790553, now: 1768313790553
234Running scheduled operation immediately
235Removing token for selector: m553nd4ne22eamea
236Storing token for selector: po3q07auqdb8vsg0, user: Map(k1 -> v1), expires: 1770905790569, now: 1768313790569
237Looking up token for selector: po3q07auqdb8vsg0, found: true
238Storing token for selector: 20tqhimkegrsph75, user: Map(k1 -> v1), expires: 1770905790583, now: 1768313790583
239Running scheduled operation immediately
240Removing token for selector: po3q07auqdb8vsg0
241Storing token for selector: hdvh20qu3ai2hv93, user: Map(k1 -> v1), expires: 1770905790605, now: 1768313790605
242Looking up token for selector: hdvh20qu3ai2hv93, found: true
243Storing token for selector: gsc8bem1ism77e6f, user: Map(k1 -> v1), expires: 1770905790619, now: 1768313790619
244Running scheduled operation immediately
245Removing token for selector: hdvh20qu3ai2hv93
246[INFO] [01/13/2026 15:16:30.619] [pool-19-thread-1] [CoordinatedShutdown(pekko://com-softwaremill-pekkohttpsession-OneOffTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
247Storing token for selector: rcbm1lvt4k6nfnol, user: Map(k1 -> v1), expires: 1770905790628, now: 1768313790628
248Storing token for selector: 7f0ol9ruidm3om8t, user: Map(k1 -> v1), expires: 1770905790647, now: 1768313790647
249Removing token for selector: 7f0ol9ruidm3om8t
250Storing token for selector: fjtlj04ntl03n87n, user: Map(k1 -> v1), expires: 2595028000, now: 1768313790684
251Looking up token for selector: fjtlj04ntl03n87n, found: true
252Storing token for selector: r7poc1ja93pdo1mv, user: Map(k1 -> v1), expires: 2595098000, now: 1768313790728
253Running scheduled operation immediately
254Removing token for selector: fjtlj04ntl03n87n
255Storing token for selector: l5881b4fjjbphoco, user: Map(k1 -> v1), expires: 2595028000, now: 1768313790732
256Looking up token for selector: l5881b4fjjbphoco, found: true
257Storing token for selector: 1ga2s9iqmqjmjtgn, user: Map(k1 -> v1), expires: 2595098000, now: 1768313790755
258Running scheduled operation immediately
259Removing token for selector: l5881b4fjjbphoco
260Storing token for selector: apvhof7tknkqih7d, user: Map(k1 -> v1), expires: 2595028000, now: 1768313790766
261[INFO] [01/13/2026 15:16:30.779] [pool-19-thread-5] [CoordinatedShutdown(pekko://com-softwaremill-pekkohttpsession-RefreshableTest)] Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
262[info] OneOffSetRefreshableGetTest:
263[info] Using cookies
264[info] - should read an optional session when only the session is set
265[info] Using cookies
266[info] - should invalidate a session
267[info] Using cookies
268[info] - should touch the session, without setting a refresh token
269[info] Using headers
270[info] - should read an optional session when only the session is set
271[info] Using headers
272[info] - should invalidate a session
273[info] Using headers
274[info] - should touch the session, without setting a refresh token
275[info] OneOffTest:
276[info] Using cookies
277[info] - should set the correct session cookie name
278[info] Using cookies
279[info] - should set the session
280[info] Using cookies
281[info] - should read an optional session when the session is set
282[info] Using cookies
283[info] - should read an optional session when the session is not set
284[info] Using cookies
285[info] - should read a required session when the session is set
286[info] Using cookies
287[info] - should reject the request if the expiry is tampered with
288[info] Using cookies
289[info] - should invalidate a session
290[info] Using cookies
291[info] - should reject the request if the session is not set
292[info] Using cookies
293[info] - should reject the request if the session is invalid
294[info] Using cookies
295[info] - should touch the session
296[info] Using cookies
297[info] - should reject v0.5.1 session without migration config
298[info] Using cookies
299[info] - should migrate v0.5.1 session with migration config
300[info] Using cookies
301[info] - should reject v0.5.2 session without migration config
302[info] Using cookies
303[info] - should migrate v0.5.2 session with migration config
304[info] Using headers
305[info] - should set the session
306[info] Using headers
307[info] - should read an optional session when the session is set
308[info] Using headers
309[info] - should read an optional session when the session is not set
310[info] Using headers
311[info] - should read a required session when the session is set
312[info] Using headers
313[info] - should reject the request if the expiry is tampered with
314[info] Using headers
315[info] - should invalidate a session
316[info] Using headers
317[info] - should reject the request if the session is not set
318[info] Using headers
319[info] - should reject the request if the session is invalid
320[info] Using headers
321[info] - should touch the session
322[info] Using headers
323[info] - should reject v0.5.1 session without migration config
324[info] Using headers
325[info] - should migrate v0.5.1 session with migration config
326[info] Using headers
327[info] - should reject v0.5.2 session without migration config
328[info] Using headers
329[info] - should migrate v0.5.2 session with migration config
330[info] RefreshableTest:
331[info] Using cookies
332[info] - should set the refresh token cookie to expire
333[info] Using cookies
334[info] - should set both the session and refresh token
335[info] Using cookies
336[info] - should set a new refresh token when the session is set again
337[info] Using cookies
338[info] - should read an optional session when both the session and refresh token are set
339[info] Using cookies
340[info] - should read an optional session when only the session is set
341[info] Using cookies
342[info] - should set a new session after the session is re-created
343[info] Using cookies
344[info] - should read an optional session when none is set
345[info] Using cookies
346[info] - should read an optional session when only the refresh token is set (re-create the session)
347[info] Using cookies
348[info] - should set a new refresh token after the session is re-created
349[info] Using cookies
350[info] - should read a required session when both the session and refresh token are set
351[info] Using cookies
352[info] - should invalidate a session
353[info] Using cookies
354[info] - should reject the request if the session is not set
355[info] Using cookies
356[info] - should reject the request if the session is invalid
357[info] Using cookies
358[info] - should reject the request if the refresh token is invalid
359[info] Using cookies
360[info] - should touch the session, keeping the refresh token token intact
361[info] Using cookies
362[info] - should re-create an expired session and send back new tokens without duplicate headers
363[info] Using cookies
364[info] - should touch the session and send back session without duplicate headers
365[info] Using headers
366[info] - should set both the session and refresh token
367[info] Using headers
368[info] - should set a new refresh token when the session is set again
369[info] Using headers
370[info] - should read an optional session when both the session and refresh token are set
371[info] Using headers
372[info] - should read an optional session when only the session is set
373[info] Using headers
374[info] - should set a new session after the session is re-created
375[info] Using headers
376[info] - should read an optional session when none is set
377[info] Using headers
378[info] - should read an optional session when only the refresh token is set (re-create the session)
379[info] Using headers
380[info] - should set a new refresh token after the session is re-created
381[info] Using headers
382[info] - should read a required session when both the session and refresh token are set
383[info] Using headers
384[info] - should invalidate a session
385[info] Using headers
386[info] - should reject the request if the session is not set
387[info] Using headers
388[info] - should reject the request if the session is invalid
389[info] Using headers
390[info] - should reject the request if the refresh token is invalid
391[info] Using headers
392[info] - should touch the session, keeping the refresh token token intact
393[info] Using headers
394[info] - should re-create an expired session and send back new tokens without duplicate headers
395[info] Using headers
396[info] - should touch the session and send back session without duplicate headers
397[info] CsrfDirectivesTest:
398[info] - should set the csrf cookie on the first get request only
399[info] - should reject requests if the csrf cookie doesn't match the header value
400[info] - should reject requests if the csrf cookie isn't set
401[info] - should reject requests if the csrf cookie and the header are empty
402[info] - should reject requests if the csrf cookie and the header contain illegal value
403[info] - should reject requests if the csrf cookie and the header contain structurally correct but incorrectly hashed value
404[info] - should accept requests if the csrf cookie matches the header value
405[info] - should accept requests if the csrf cookie matches the form field value
406[info] - should set a new csrf cookie when requested
407[info] + SessionManagerBasicEncoder.decodes v0.5.1 tokens with migration config: OK, passed 100 tests.
408[info] + SessionManagerBasicEncoder.doesn't decode expired session: OK, passed 100 tests.
409[info] + SessionManagerBasicEncoder.decodes v0.5.2 tokens with migration config: OK, passed 100 tests.
410[info] + SessionManagerBasicEncoder.encode+decode: OK, passed 100 tests.
411[info] + SessionManagerBasicEncoder.doesn't decode session with tampered expiry: OK, passed 100 tests.
412[info] SessionConfigTest:
413[info] - should load and parse default (HS256) JWS config
414[info] - should load and parse HS256 JWS config
415[info] - should load and parse RS256 JWS config
416[info] - should fail to load config due to missing RSA private key (alg = RS256)
417[info] - should fail to load config due to empty RSA private key (alg = RS256)
418[info] - should fail to load config due to invalid RSA private key (alg = RS256)
419[info] - should fail to load config due to unsupported JWS alg
420[info] - should load JWT config
421[info] - should fallback to empty JWT config (with default exp-timeout) if absent
422[info] - should fallback to empty JWT config (without default exp-timeout) if absent
423[info] - should use max-age as a default value for jwt.expirationTimeout
424Starting build for ProjectRef(file:/build/repo/,pekkoJwt3) (jwt)... [1/2]
425Compile scalacOptions: -encoding, utf8, -explain-types, -explain, -language:experimental.macros, -language:higherKinds, -language:implicitConversions, -unchecked, -Ykind-projector, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
426[info] compiling 2 Scala sources and 1 Java source to /build/repo/pekko-http-session/jwt/target/jvm-3/classes ...
427[warn] Option -Ykind-projector is deprecated: Use -Xkind-projector instead.
428[warn] one warning found
429[info] /build/repo/pekko-http-session/jwt/src/main/java/com/softwaremill/pekkohttpsession/javadsl/JwtSessionSerializers.java: JwtSessionSerializers.java uses unchecked or unsafe operations.
430[info] /build/repo/pekko-http-session/jwt/src/main/java/com/softwaremill/pekkohttpsession/javadsl/JwtSessionSerializers.java: Recompile with -Xlint:unchecked for details.
431[info] done compiling
432[info] compiling 1 Scala source to /build/repo/pekko-http-session/jwt/target/jvm-3/test-classes ...
433[warn] Option -Ykind-projector is deprecated: Use -Xkind-projector instead.
434[warn] there were 10 deprecation warnings; re-run with -deprecation for details
435[warn] two warnings found
436[info] done compiling
437Test on: http://jwt.io/#debugger:
438eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7InVzZXJOYW1lIjoiam9obiIsInVzZXJJZCI6MzB9LCJleHAiOjE0NDgwMjA5OTd9.bCIrVQseEA2LmH-oLwcQiH2xmmeybM4oB_2YBI5U8DU
439[info] SessionManagerJwtEncoderTest:
440[info] - should encode+decode for string, default config
441[info] - should encode+decode for string, with max age
442[info] - should encode+decode for string, with encryption
443[info] - should encode+decode for string, with max age and encryption
444[info] - should encode+decode for integer, default config
445[info] - should encode+decode for case class, default config
446[info] - should encode+decode for case class, with max age and encryption
447[info] - should encode+decode for string, RSA signature
448[info] - should encode+decode for string, HMAC SHA256 signature
449[info] - should encode correctly in the JWT format
450[info] - should encode JWT claims
451[info] - should encode JWT with default exp claim
452[info] - should encode JWT without any registered claims
453[info] - should encode a correct JWT header (alg = HS256)
454[info] - should encode a correct JWT header (alg = RS256)
455[info] - should not decode an expired session
456[info] - should not decode a token with a corrupted signature [HMAC SHA256]
457[info] - should not decode a token with a corrupted signature [RSA]
458[info] - should not decode a token with a non compatible signatures [RSA vs HMAC SHA256]
459[info] - should decode a token with 'Bearer' prefix
460[info] - should not decode v0.5.2 tokens without config
461[info] - should decode v0.5.2 tokens with config
462
463************************
464Build summary:
465[{
466 "module": "core",
467 "compile": {"status": "ok", "tookMs": 10495, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
468 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
469 "test-compile": {"status": "ok", "tookMs": 11074, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
470 "test": {"status": "ok", "tookMs": 3892, "passed": 91, "failed": 0, "ignored": 0, "skipped": 0, "total": 91, "byFramework": [{"framework": "unknown", "stats": {"passed": 91, "failed": 0, "ignored": 0, "skipped": 0, "total": 91}}]},
471 "publish": {"status": "skipped", "tookMs": 0},
472 "metadata": {
473 "crossScalaVersions": ["2.12.20", "3.3.0"]
474}
475},{
476 "module": "jwt",
477 "compile": {"status": "ok", "tookMs": 1086, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
478 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
479 "test-compile": {"status": "ok", "tookMs": 1555, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
480 "test": {"status": "ok", "tookMs": 8674, "passed": 22, "failed": 0, "ignored": 0, "skipped": 0, "total": 22, "byFramework": [{"framework": "unknown", "stats": {"passed": 22, "failed": 0, "ignored": 0, "skipped": 0, "total": 22}}]},
481 "publish": {"status": "skipped", "tookMs": 0},
482 "metadata": {
483 "crossScalaVersions": ["2.12.20", "3.3.0"]
484}
485}]
486************************
487[success] Total time: 41 s, completed Jan 13, 2026, 3:16:45 PM
488[0JChecking patch project/plugins.sbt...
489Checking patch project/build.properties...
490Checking patch build.sbt...
491Applied patch project/plugins.sbt cleanly.
492Applied patch project/build.properties cleanly.
493Applied patch build.sbt cleanly.