@@ -25,6 +25,7 @@ import qualified API.BrigInternal as BrigI
2525import API.Common
2626import API.GalleyInternal (setTeamFeatureStatus )
2727import API.Spar
28+ import Control.Retry
2829import Data.Aeson.Types hiding ((.=) )
2930import Data.List.Split
3031import 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
189198testSFTNoCredentials :: (HasCallStack ) => App ()
190199testSFTNoCredentials = withModifiedBackend
0 commit comments