From c735f855d3cb9c4a1c8e8af29d3f4438d068e31f Mon Sep 17 00:00:00 2001 From: cheatfate Date: Mon, 11 Mar 2024 04:10:26 +0200 Subject: [PATCH] Fix test. --- tests/test_keymanager_api.nim | 352 ++++++---------------------------- 1 file changed, 57 insertions(+), 295 deletions(-) diff --git a/tests/test_keymanager_api.nim b/tests/test_keymanager_api.nim index 808c1dea38..72bf7e6e30 100644 --- a/tests/test_keymanager_api.nim +++ b/tests/test_keymanager_api.nim @@ -6,6 +6,7 @@ # at your option. This file may not be copied, modified, or distributed except according to those terms. {.used.} +{.push raises: [].} import std/[typetraits, os, options, json, sequtils, uri, algorithm], @@ -116,7 +117,7 @@ func contains*(keylist: openArray[KeystoreInfo], key: ValidatorPubKey): bool = false func contains*(keylist: openArray[KeystoreInfo], key: string): bool = - let pubkey = ValidatorPubKey.fromHex(key).tryGet() + let pubkey = ValidatorPubKey.fromHex(key).get() contains(keylist, pubkey) proc prepareNetwork = @@ -155,7 +156,11 @@ proc prepareNetwork = let launchPadDeposits = mapIt(deposits.value, LaunchPadDeposit.init(cfg, it)) - Json.saveFile(depositsFile, launchPadDeposits) + try: + Json.saveFile(depositsFile, launchPadDeposits) + except CatchableError as exc: + raiseAssert exc.msg + notice "Deposit data written", filename = depositsFile let runtimeConfigWritten = secureWriteFile(runtimeConfigFile, """ @@ -183,7 +188,10 @@ BELLATRIX_FORK_EPOCH: 0 except Exception as exc: # TODO Fix confutils exceptions raiseAssert exc.msg - doCreateTestnet(createTestnetConf, rng[]) + try: + doCreateTestnet(createTestnetConf, rng[]) + except CatchableError as exc: + raiseAssert exc.msg let tokenFileRes = secureWriteFile(tokenFilePath, correctTokenValue) if tokenFileRes.isErr: @@ -209,60 +217,63 @@ proc copyHalfValidators(dstDataDir: string, firstHalf: bool) = path = dstSecretsDir, err = ioErrorMsg(status.error) quit 1 - var validatorIdx = 0 - for validator in walkDir(validatorsDir): - if (validatorIdx < simulationDepositsCount div 2) == firstHalf: - let - currValidator = os.splitPath(validator.path).tail - secretFile = secretsDir / currValidator - secretRes = readAllChars(secretFile) + try: + var validatorIdx = 0 + for validator in walkDir(validatorsDir): + if (validatorIdx < simulationDepositsCount div 2) == firstHalf: + let + currValidator = os.splitPath(validator.path).tail + secretFile = secretsDir / currValidator + secretRes = readAllChars(secretFile) - if secretRes.isErr: - fatal "Failed to read secret file", - path = secretFile, err = $secretRes.error - quit 1 + if secretRes.isErr: + fatal "Failed to read secret file", + path = secretFile, err = $secretRes.error + quit 1 - let - dstSecretFile = dstSecretsDir / currValidator - secretFileStatus = secureWriteFile(dstSecretFile, secretRes.get) + let + dstSecretFile = dstSecretsDir / currValidator + secretFileStatus = secureWriteFile(dstSecretFile, secretRes.get) - if secretFileStatus.isErr: - fatal "Failed to write secret file", - path = dstSecretFile, err = $secretFileStatus.error - quit 1 + if secretFileStatus.isErr: + fatal "Failed to write secret file", + path = dstSecretFile, err = $secretFileStatus.error + quit 1 - let - dstValidatorDir = dstDataDir / "validators" / currValidator - validatorDirRes = secureCreatePath(dstValidatorDir) + let + dstValidatorDir = dstDataDir / "validators" / currValidator + validatorDirRes = secureCreatePath(dstValidatorDir) - if validatorDirRes.isErr: - fatal "Failed to create validator dir", - path = dstValidatorDir, err = $validatorDirRes.error - quit 1 + if validatorDirRes.isErr: + fatal "Failed to create validator dir", + path = dstValidatorDir, err = $validatorDirRes.error + quit 1 - let - keystoreFile = validatorsDir / currValidator / "keystore.json" - readKeystoreRes = readAllChars(keystoreFile) + let + keystoreFile = validatorsDir / currValidator / "keystore.json" + readKeystoreRes = readAllChars(keystoreFile) - if readKeystoreRes.isErr: - fatal "Failed to read keystore file", - path = keystoreFile, err = $readKeystoreRes.error - quit 1 + if readKeystoreRes.isErr: + fatal "Failed to read keystore file", + path = keystoreFile, err = $readKeystoreRes.error + quit 1 - let - dstKeystore = dstValidatorDir / "keystore.json" - writeKeystoreRes = secureWriteFile(dstKeystore, readKeystoreRes.get) + let + dstKeystore = dstValidatorDir / "keystore.json" + writeKeystoreRes = secureWriteFile(dstKeystore, readKeystoreRes.get) - if writeKeystoreRes.isErr: - fatal "Failed to write keystore file", - path = dstKeystore, err = $writeKeystoreRes.error - quit 1 + if writeKeystoreRes.isErr: + fatal "Failed to write keystore file", + path = dstKeystore, err = $writeKeystoreRes.error + quit 1 - inc validatorIdx + inc validatorIdx + except CatchableError as exc: + raiseAssert exc.msg proc addPreTestRemoteKeystores(validatorsDir: string) = for item in oldPublicKeys: - let key = ValidatorPubKey.fromHex(item).tryGet() + let key = ValidatorPubKey.fromHex(item).get() let res = saveKeystore(validatorsDir, key, oldPublicKeysUrl) if res.isErr(): fatal "Failed to create remote keystore file", @@ -1044,7 +1055,7 @@ proc runTests(keymanager: KeymanagerToTest) {.async.} = responseJson = Json.decode(response.data, JsonNode) check: - response.status == 401 + response.status == 403 responseJson["message"].getStr() == InvalidAuthorizationError asyncTest "Obtaining the fee recipient of a missing validator returns 404" & testFlavour: @@ -1206,7 +1217,7 @@ proc runTests(keymanager: KeymanagerToTest) {.async.} = responseJson = Json.decode(response.data, JsonNode) check: - response.status == 401 + response.status == 403 responseJson["message"].getStr() == InvalidAuthorizationError asyncTest "Obtaining the gas limit of a missing validator returns 404" & testFlavour: @@ -1261,255 +1272,6 @@ proc runTests(keymanager: KeymanagerToTest) {.async.} = check: finalResultFromApi == defaultGasLimit - suite "Graffiti management" & testFlavour: - asyncTest "Missing Authorization header" & testFlavour: - let pubkey = ValidatorPubKey.fromHex(oldPublicKeys[0]).expect("valid key") - - block: - let - response = await client.getGraffitiPlain(pubkey) - responseJson = Json.decode(response.data, JsonNode) - - check: - response.status == 401 - responseJson["message"].getStr() == InvalidAuthorizationError - - block: - let - response = await client.setGraffitiPlain( - pubkey, - default SetGraffitiRequest) - responseJson = Json.decode(response.data, JsonNode) - - check: - response.status == 401 - responseJson["message"].getStr() == InvalidAuthorizationError - - block: - let - response = await client.deleteGraffitiPlain(pubkey) - responseJson = Json.decode(response.data, JsonNode) - - check: - response.status == 401 - responseJson["message"].getStr() == InvalidAuthorizationError - - - asyncTest "Invalid Authorization Header" & testFlavour: - let pubkey = ValidatorPubKey.fromHex(oldPublicKeys[0]).expect("valid key") - - block: - let - response = await client.getGraffitiPlain( - pubkey, - extraHeaders = @[("Authorization", "UnknownAuthScheme X")]) - responseJson = Json.decode(response.data, JsonNode) - - check: - response.status == 401 - responseJson["message"].getStr() == InvalidAuthorizationError - - block: - let - response = await client.setGraffitiPlain( - pubkey, - default SetGraffitiRequest, - extraHeaders = @[("Authorization", "UnknownAuthScheme X")]) - responseJson = Json.decode(response.data, JsonNode) - - check: - response.status == 401 - responseJson["message"].getStr() == InvalidAuthorizationError - - block: - let - response = await client.deleteGraffitiPlain( - pubkey, - extraHeaders = @[("Authorization", "UnknownAuthScheme X")]) - responseJson = Json.decode(response.data, JsonNode) - - check: - response.status == 401 - responseJson["message"].getStr() == InvalidAuthorizationError - - asyncTest "Invalid Authorization Token" & testFlavour: - let pubkey = ValidatorPubKey.fromHex(oldPublicKeys[0]).expect("valid key") - - block: - let - response = await client.getGraffitiPlain( - pubkey, - extraHeaders = @[("Authorization", "Bearer InvalidToken")]) - responseJson = Json.decode(response.data, JsonNode) - - check: - response.status == 403 - responseJson["message"].getStr() == InvalidAuthorizationError - - block: - let - response = await client.setGraffitiPlain( - pubkey, - default SetGraffitiRequest, - extraHeaders = @[("Authorization", "Bearer InvalidToken")]) - responseJson = Json.decode(response.data, JsonNode) - - check: - response.status == 403 - responseJson["message"].getStr() == InvalidAuthorizationError - - block: - let - response = await client.deleteGraffitiPlain( - pubkey, - extraHeaders = @[("Authorization", "Bearer InvalidToken")]) - responseJson = Json.decode(response.data, JsonNode) - - check: - response.status == 401 - responseJson["message"].getStr() == InvalidAuthorizationError - - asyncTest "Obtaining the graffiti of a missing validator returns 404" & - testFlavour: - let - pubkey = - ValidatorPubKey.fromHex(unusedPublicKeys[0]).expect("valid key") - response = await client.getGraffitiPlain( - pubkey, - extraHeaders = @[("Authorization", "Bearer " & correctTokenValue)]) - - check: - response.status == 404 - - asyncTest "Setting the graffiti on a missing validator creates " & - "a record for it" & testFlavour: - let - pubkey = - ValidatorPubKey.fromHex(unusedPublicKeys[1]).expect("valid key") - graffiti = - SetGraffitiRequest( - graffiti: GraffitiString.init("🚀\"🍻\"🚀").get()) - - let response = - await client.setGraffitiPlain(pubkey, graffiti, - extraHeaders = @[("Authorization", "Bearer " & correctTokenValue)]) - check: - response.status == 202 - - let fromApi = - await client.getGraffitiPlain( - pubkey, - extraHeaders = @[("Authorization", "Bearer " & correctTokenValue)]) - - check: - fromApi.status == 200 - - let res = - decodeBytes(GetGraffitiResponse, fromApi.data, fromApi.contentType) - - check: - res.isOk() - res.get().data.pubkey == pubkey - $res.get().data.graffiti == "🚀\"🍻\"🚀" - - asyncTest "Obtaining the graffiti of an unconfigured validator returns " & - "the suggested default" & testFlavour: - let - pubkey = ValidatorPubKey.fromHex(oldPublicKeys[0]).expect("valid key") - fromApi = await client.getGraffitiPlain( - pubkey, - extraHeaders = @[("Authorization", "Bearer " & correctTokenValue)]) - - check: - fromApi.status == 200 - - let res = - decodeBytes(GetGraffitiResponse, fromApi.data, fromApi.contentType) - - check: - res.isOk() - res.get().data.pubkey == pubkey - - asyncTest "Configuring the graffiti" & testFlavour: - let - pubkey = ValidatorPubKey.fromHex(oldPublicKeys[1]).expect("valid key") - firstGraffiti = "🚀" - secondGraffiti = "🚀🚀" - firstRequest = - SetGraffitiRequest( - graffiti: GraffitiString.init(firstGraffiti).get()) - secondRequest = - SetGraffitiRequest( - graffiti: GraffitiString.init(secondGraffiti).get()) - - block: - let response = - await client.setGraffitiPlain(pubkey, firstRequest, - extraHeaders = @[("Authorization", "Bearer " & correctTokenValue)]) - check: - response.status == 202 - - block: - let resApi = await client.getGraffitiPlain( - pubkey, - extraHeaders = @[("Authorization", "Bearer " & correctTokenValue)]) - - check: - resApi.status == 200 - - let res = - decodeBytes(GetGraffitiResponse, resApi.data, resApi.contentType) - - check: - res.isOk() - res.get().data.pubkey == pubkey - $res.get().data.graffiti == firstGraffiti - - block: - let response = - await client.setGraffitiPlain(pubkey, secondRequest, - extraHeaders = @[("Authorization", "Bearer " & correctTokenValue)]) - check: - response.status == 202 - - block: - let resApi = await client.getGraffitiPlain( - pubkey, - extraHeaders = @[("Authorization", "Bearer " & correctTokenValue)]) - - check: - resApi.status == 200 - - let res = - decodeBytes(GetGraffitiResponse, resApi.data, resApi.contentType) - - check: - res.isOk() - res.get().data.pubkey == pubkey - $res.get().data.graffiti == secondGraffiti - - block: - let response = await client.deleteGraffitiPlain( - pubkey, - extraHeaders = @[("Authorization", "Bearer " & correctTokenValue)]) - check: - response.status == 204 - - block: - let resApi = await client.getGraffitiPlain( - pubkey, - extraHeaders = @[("Authorization", "Bearer " & correctTokenValue)]) - - check: - resApi.status == 200 - - let res = - decodeBytes(GetGraffitiResponse, resApi.data, resApi.contentType) - - check: - res.isOk() - res.get().data.pubkey == pubkey - suite "ImportRemoteKeys/ListRemoteKeys/DeleteRemoteKeys" & testFlavour: asyncTest "Importing list of remote keys" & testFlavour: let