Skip to content

Commit 557b26f

Browse files
authored
Deflake testSFTCredentials (#4857)
1 parent ba1711b commit 557b26f

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

integration/test/Test/Brig.hs

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import qualified API.BrigInternal as BrigI
2525
import API.Common
2626
import API.GalleyInternal (setTeamFeatureStatus)
2727
import API.Spar
28+
import Control.Retry
2829
import Data.Aeson.Types hiding ((.=))
2930
import Data.List.Split
3031
import Data.String.Conversions
@@ -164,27 +165,35 @@ testSFTCredentials = do
164165
( setField "sft.sftBaseDomain" "integration-tests.zinfra.io"
165166
. setField "sft.sftToken.ttl" ttl
166167
. setField "sft.sftToken.secret" secretFile
168+
. setField "sft.sftDiscoveryIntervalSeconds" (1 :: Int)
167169
. setField "optSettings.setSftListAllServers" "enabled"
168170
)
169171
}
170172
)
171173
$ \domain -> do
172174
user <- randomUser domain def
173-
bindResponse (getCallsConfigV2 user) \resp -> do
174-
sftServersAll <- resp.json %. "sft_servers_all" & asList
175-
when (null sftServersAll) $ assertFailure "sft_servers_all missing"
176-
for_ sftServersAll $ \s -> do
177-
cred <- s %. "credential" & asString
178-
when (null cred) $ assertFailure "credential missing"
179-
usr <- s %. "username" & asString
180-
let parts = splitOn "." usr
181-
when (length parts /= 5) $ assertFailure "username should have 5 parts"
182-
when (take 2 (head parts) /= "d=") $ assertFailure "missing expiry time identifier"
183-
when (take 2 (parts !! 1) /= "v=") $ assertFailure "missing version identifier"
184-
when (take 2 (parts !! 2) /= "k=") $ assertFailure "missing key ID identifier"
185-
when (take 2 (parts !! 3) /= "s=") $ assertFailure "missing federation identifier"
186-
when (take 2 (parts !! 4) /= "r=") $ assertFailure "missing random data identifier"
187-
for_ parts $ \part -> when (length part < 3) $ assertFailure ("value missing for " <> part)
175+
176+
sftServersAll <-
177+
retrying
178+
(limitRetriesByCumulativeDelay 2_000_000 $ fullJitterBackoff 50_000)
179+
(\_ xs -> let shouldRetry = null xs in pure shouldRetry)
180+
$ \_ -> do
181+
resp <- getCallsConfigV2 user
182+
resp.json %. "sft_servers_all" & asList
183+
184+
when (null sftServersAll) $ assertFailure "sft_servers_all empty"
185+
for_ sftServersAll $ \s -> do
186+
cred <- s %. "credential" & asString
187+
when (null cred) $ assertFailure "credential missing"
188+
usr <- s %. "username" & asString
189+
let parts = splitOn "." usr
190+
when (length parts /= 5) $ assertFailure "username should have 5 parts"
191+
when (take 2 (head parts) /= "d=") $ assertFailure "missing expiry time identifier"
192+
when (take 2 (parts !! 1) /= "v=") $ assertFailure "missing version identifier"
193+
when (take 2 (parts !! 2) /= "k=") $ assertFailure "missing key ID identifier"
194+
when (take 2 (parts !! 3) /= "s=") $ assertFailure "missing federation identifier"
195+
when (take 2 (parts !! 4) /= "r=") $ assertFailure "missing random data identifier"
196+
for_ parts $ \part -> when (length part < 3) $ assertFailure ("value missing for " <> part)
188197

189198
testSFTNoCredentials :: (HasCallStack) => App ()
190199
testSFTNoCredentials = withModifiedBackend

0 commit comments

Comments
 (0)