Skip to content

Commit ebdf6d1

Browse files
committed
make lease/sleep first class
1 parent b3d0ec5 commit ebdf6d1

File tree

5 files changed

+52
-62
lines changed

5 files changed

+52
-62
lines changed

scripts/test-timings.edn

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,33 @@
11
;; Auto-generated test timing data for parallel test balancing
2-
;; Generated: 2026-01-08T07:58:49.883612622Z
3-
{:ol.clave.account-integration-test 2.082145028,
4-
:ol.clave.account-test 0.069522587,
5-
:ol.clave.ari-integration-test 2.785981531,
6-
:ol.clave.authorization-integration-test 1.78497317,
7-
:ol.clave.certificate-integration-test 0.512377832,
8-
:ol.clave.challenge-test 0.019845024,
9-
:ol.clave.csr-test 0.013935822,
10-
:ol.clave.errors-test 0.003851314,
11-
:ol.clave.example.http01-test 0.177178793,
12-
:ol.clave.impl.ari-test 0.007788492,
13-
:ol.clave.impl.certificate-test 0.044911591,
14-
:ol.clave.impl.crypto-test 0.017813106,
15-
:ol.clave.impl.csr-test 8.70901769,
16-
:ol.clave.impl.directory-cache-test 0.05401255,
17-
:ol.clave.impl.http-integration-test 0.202695251,
18-
:ol.clave.impl.http-test 0.018920438,
19-
:ol.clave.impl.jws-test 0.02331608,
20-
:ol.clave.impl.revocation-test 0.007972258,
21-
:ol.clave.impl.test-util-test 0.198316645,
22-
:ol.clave.impl.tos-test 9.06953E-4,
23-
:ol.clave.integration-alternate-test 2.966895851,
24-
:ol.clave.lease-test 0.115939741,
25-
:ol.clave.order-helpers-test 0.007209057,
26-
:ol.clave.order-integration-test 3.016905527,
27-
:ol.clave.poll-timeout-test 3.448669363,
28-
:ol.clave.pre-authorization-integration-test 0.194205622,
29-
:ol.clave.pre-authorization-test 0.002697725,
30-
:ol.clave.retry-after-integration-test 6.41021729,
31-
:ol.clave.revocation-integration-test 9.351451987,
32-
:ol.clave.session-test 0.002804507,
33-
:ol.clave.storage-test 0.403191988,
34-
:ol.clave.tos-integration-test 0.210598829}
2+
;; Generated: 2026-01-08T11:24:51.423181283Z
3+
{:ol.clave.account-integration-test 1.983294963,
4+
:ol.clave.account-test 0.063470671,
5+
:ol.clave.ari-integration-test 0.473348341,
6+
:ol.clave.authorization-integration-test 7.994090444,
7+
:ol.clave.certificate-integration-test 7.891935786,
8+
:ol.clave.challenge-test 0.031361698,
9+
:ol.clave.csr-test 0.001787287,
10+
:ol.clave.errors-test 0.004596504,
11+
:ol.clave.example.http01-test 0.145071351,
12+
:ol.clave.impl.ari-test 0.01285168,
13+
:ol.clave.impl.certificate-test 0.0062301,
14+
:ol.clave.impl.crypto-test 0.011109919,
15+
:ol.clave.impl.csr-test 7.163367702,
16+
:ol.clave.impl.directory-cache-test 0.053972586,
17+
:ol.clave.impl.http-integration-test 0.158670867,
18+
:ol.clave.impl.http-test 0.005874498,
19+
:ol.clave.impl.jws-test 0.085593586,
20+
:ol.clave.impl.revocation-test 0.005813402,
21+
:ol.clave.impl.test-util-test 0.242684079,
22+
:ol.clave.impl.tos-test 0.001343579,
23+
:ol.clave.integration-alternate-test 7.519517371,
24+
:ol.clave.lease-test 0.114800011,
25+
:ol.clave.order-helpers-test 0.005496585,
26+
:ol.clave.order-integration-test 4.100246475,
27+
:ol.clave.pre-authorization-integration-test 0.228025175,
28+
:ol.clave.pre-authorization-test 0.003949582,
29+
:ol.clave.retry-after-integration-test 6.154219657,
30+
:ol.clave.revocation-integration-test 25.518438303,
31+
:ol.clave.session-test 0.002436052,
32+
:ol.clave.storage-test 0.956085284,
33+
:ol.clave.tos-integration-test 0.085868871}

src/ol/clave/impl/commands.clj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@
409409
^java.time.Duration retry (http/retry-after resp fallback)
410410
delay-ms (min remaining (.toMillis retry))]
411411
(when (pos? delay-ms)
412-
(http/lease-sleep lease delay-ms))
412+
(lease/sleep lease delay-ms))
413413
(recur session attempts))))))
414414
(catch clojure.lang.ExceptionInfo e
415415
(if (= :lease/deadline-exceeded (:type (ex-data e)))
@@ -540,7 +540,7 @@
540540
^java.time.Duration retry (http/retry-after resp fallback)
541541
delay-ms (min remaining (.toMillis retry))]
542542
(when (pos? delay-ms)
543-
(http/lease-sleep lease delay-ms))
543+
(lease/sleep lease delay-ms))
544544
(recur session attempts))))))
545545
(catch clojure.lang.ExceptionInfo e
546546
(if (= :lease/deadline-exceeded (:type (ex-data e)))

src/ol/clave/impl/http.clj

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -98,27 +98,6 @@
9898
(keep (fn [[_ url r]] (when (= r rel) url)))
9999
vec)))
100100

101-
;; -----------------------------------------------------------------------------
102-
;; Lease helpers
103-
;; -----------------------------------------------------------------------------
104-
105-
(defn lease-sleep
106-
"Cooperatively wait for `ms` milliseconds or until `lease` ends.
107-
108-
Returns `:slept` if the full duration elapsed, or `:lease-ended` if the
109-
lease was cancelled or timed out during the wait.
110-
111-
This function is designed for testability - tests can `with-redefs` it to
112-
spy on sleep durations (e.g., verifying Retry-After delays).
113-
Note: No type hint on ms to allow with-redefs to work."
114-
[lease ms]
115-
(if (pos? ms)
116-
(let [result (deref (lease/done-signal lease) ms :still-active)]
117-
(if (= result :still-active)
118-
:slept
119-
:lease-ended))
120-
:slept))
121-
122101
;; -----------------------------------------------------------------------------
123102
;; Retry-After parsing (seconds or HTTP-date)
124103
;; -----------------------------------------------------------------------------
@@ -324,7 +303,7 @@
324303
traffic-calming-ms default-traffic-calming-ms}}]
325304
(loop [i 0]
326305
(when (> i 0)
327-
(lease-sleep lease traffic-calming-ms))
306+
(lease/sleep lease traffic-calming-ms))
328307
(lease/active?! lease)
329308
(let [as (:as req)
330309
{:keys [status headers body-bytes retry? err nonce] :as res}
@@ -439,7 +418,7 @@
439418
attempt 1
440419
fivexx 0]
441420
(when (> attempt 1)
442-
(lease-sleep lease default-traffic-calming-ms))
421+
(lease/sleep lease default-traffic-calming-ms))
443422
(lease/active?! lease)
444423
(let [[session nonce] (get-nonce lease session)
445424
payload-bytes (jws-encode-json private-key kid nonce endpoint payload)

src/ol/clave/lease.clj

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,3 +497,16 @@
497497
(if (pos? nanos-left)
498498
(Duration/ofNanos nanos-left)
499499
Duration/ZERO))))
500+
501+
(defn sleep
502+
"Cooperatively wait for `ms` milliseconds or until `lease` ends.
503+
504+
Returns `:slept` if the full duration elapsed, or `:lease-ended` if the
505+
lease was cancelled or timed out during the wait."
506+
[lease ms]
507+
(if (pos? ms)
508+
(let [result (deref (done-signal lease) ms :still-active)]
509+
(if (= result :still-active)
510+
:slept
511+
:lease-ended))
512+
:slept))

test/ol/clave/retry_after_integration_test.clj

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
[ol.clave.challenge :as challenge]
88
[ol.clave.commands :as commands]
99
[ol.clave.errors :as errors]
10-
[ol.clave.impl.http :as http]
1110
[ol.clave.impl.pebble-harness :as pebble]
1211
[ol.clave.impl.test-util :as util]
1312
[ol.clave.lease :as lease]
@@ -62,7 +61,7 @@
6261
(deftest poll-authorization-honors-retry-after
6362
;; This test forces Pebble to keep an authz in "processing" by hanging the VA HTTP-01 request.
6463
;; We assert the VA actually connected to the hanging server to confirm the challenge is in processing.
65-
;; We wrap http/lease-sleep with a spy to record every polling sleep while using a 50ms interval.
64+
;; We wrap lease/sleep with a spy to record every polling sleep while using a 50ms interval.
6665
;; We then assert the max sleep is >= ~1s (well above 50ms) to prove Retry-After is honored.
6766
;; That proves the polling delay comes from Pebble's Retry-After header in a real E2E flow.
6867
(testing "poll-authorization uses Retry-After delay from Pebble"
@@ -82,13 +81,13 @@
8281
;; Using 1000ms threshold avoids flakiness from timer imprecision.
8382
min-expected-sleep-ms 1000
8483
accepted (:accepted hang-server)
85-
original-sleep http/lease-sleep
84+
original-sleep lease/sleep
8685
sleep-spy (fn [lease ms]
8786
(swap! sleeps conj ms)
8887
(original-sleep lease ms))
8988
[session _challenge] (commands/respond-challenge bg-lease session http-challenge)
9089
session (commands/set-polling session {:timeout-ms 6000 :interval-ms 50})
91-
ex (with-redefs [http/lease-sleep sleep-spy]
90+
ex (with-redefs [lease/sleep sleep-spy]
9291
(try
9392
(commands/poll-authorization bg-lease session authz-url)
9493
nil

0 commit comments

Comments
 (0)