trac-msb 0.2.18 → 0.2.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/README.md +62 -2
  2. package/SECURITY.md +9 -6
  3. package/cli/commandHandler.js +272 -0
  4. package/cli/handlers.js +210 -0
  5. package/cli/interactive.js +182 -0
  6. package/msb.mjs +7 -8
  7. package/package.json +25 -8
  8. package/rpc/create_server.js +44 -44
  9. package/rpc/handlers.js +43 -56
  10. package/rpc/routes/index.js +8 -8
  11. package/rpc/rpc_server.js +6 -2
  12. package/rpc/utils/helpers.js +46 -66
  13. package/scripts/pear-runner.js +170 -0
  14. package/src/config/args.js +60 -13
  15. package/src/config/config.js +138 -10
  16. package/src/config/env.js +36 -18
  17. package/src/core/network/Network.js +130 -34
  18. package/src/core/network/protocols/ProtocolInterface.js +5 -5
  19. package/src/core/network/protocols/connectionPolicies.js +86 -0
  20. package/src/core/network/protocols/legacy/NetworkMessageRouter.js +1 -1
  21. package/src/core/network/protocols/legacy/handlers/BaseStateOperationHandler.js +2 -2
  22. package/src/core/network/protocols/legacy/handlers/LegacyGetRequestHandler.js +3 -3
  23. package/src/core/network/protocols/legacy/handlers/LegacyRoleOperationHandler.js +1 -1
  24. package/src/core/network/protocols/legacy/handlers/LegacySubnetworkOperationHandler.js +1 -1
  25. package/src/core/network/protocols/legacy/handlers/LegacyTransferOperationHandler.js +1 -1
  26. package/src/core/network/protocols/legacy/validators/base/BaseResponse.js +7 -10
  27. package/src/core/network/protocols/shared/validators/PartialBootstrapDeploymentValidator.js +2 -2
  28. package/src/core/network/protocols/shared/validators/PartialOperationValidator.js +23 -23
  29. package/src/core/network/protocols/shared/validators/PartialRoleAccessValidator.js +14 -14
  30. package/src/core/network/protocols/shared/validators/PartialTransactionValidator.js +5 -5
  31. package/src/core/network/protocols/shared/validators/PartialTransferValidator.js +12 -11
  32. package/src/core/network/protocols/v1/V1ProtocolError.js +5 -69
  33. package/src/core/network/protocols/v1/handlers/V1BaseOperationHandler.js +3 -2
  34. package/src/core/network/protocols/v1/handlers/V1BroadcastTransactionOperationHandler.js +130 -247
  35. package/src/core/network/protocols/v1/handlers/V1LivenessOperationHandler.js +6 -5
  36. package/src/core/network/protocols/v1/handlers/broadcastTransaction/BroadcastTransactionErrorMapper.js +84 -0
  37. package/src/core/network/protocols/v1/handlers/broadcastTransaction/BroadcastTransactionOperationStrategies.js +128 -0
  38. package/src/core/network/protocols/v1/handlers/broadcastTransaction/BroadcastTransactionPayloadUtils.js +26 -0
  39. package/src/core/network/protocols/v1/validators/V1BaseOperation.js +32 -31
  40. package/src/core/network/protocols/v1/validators/V1BroadcastTransactionRequest.js +5 -3
  41. package/src/core/network/protocols/v1/validators/V1BroadcastTransactionResponse.js +34 -50
  42. package/src/core/network/protocols/v1/validators/V1ValidationSchema.js +1 -1
  43. package/src/core/network/services/ConnectionManager.js +11 -10
  44. package/src/core/network/services/MessageOrchestrator.js +53 -17
  45. package/src/core/network/services/PendingRequestService.js +22 -19
  46. package/src/core/network/services/TransactionCommitService.js +36 -36
  47. package/src/core/network/services/TransactionPoolService.js +39 -39
  48. package/src/core/network/services/TransactionRateLimiterService.js +8 -4
  49. package/src/core/network/services/ValidatorObserverService.js +397 -110
  50. package/src/core/state/State.js +190 -138
  51. package/src/core/state/utils/address.js +4 -9
  52. package/src/core/state/utils/balance.js +7 -7
  53. package/src/core/state/utils/roles.js +1 -1
  54. package/src/index.js +316 -275
  55. package/src/messages/network/v1/NetworkMessageBuilder.js +12 -21
  56. package/src/messages/network/v1/networkMessageFactory.js +1 -1
  57. package/src/messages/state/ApplyStateMessageBuilder.js +6 -6
  58. package/src/messages/state/applyStateMessageFactory.js +1 -1
  59. package/src/utils/buffer.js +1 -1
  60. package/src/utils/check.js +12 -13
  61. package/src/utils/constants.js +7 -0
  62. package/src/utils/errors.js +20 -0
  63. package/src/utils/fileUtils.js +12 -3
  64. package/src/utils/helpers.js +2 -2
  65. package/src/utils/migrationUtils.js +3 -3
  66. package/.dockerignore +0 -16
  67. package/CODE_OF_CONDUCT.md +0 -128
  68. package/docker-compose.yml +0 -17
  69. package/dockerfile +0 -41
  70. package/docs/fee_distribution.md +0 -89
  71. package/docs/trac_network_http_api.openapi.yaml +0 -889
  72. package/migration/.gitkeep +0 -0
  73. package/proto/applyOperations.proto +0 -117
  74. package/proto/network/v1/enums/message_type.proto +0 -16
  75. package/proto/network/v1/enums/result_code.proto +0 -84
  76. package/proto/network/v1/messages/broadcast_transaction_request.proto +0 -9
  77. package/proto/network/v1/messages/broadcast_transaction_response.proto +0 -13
  78. package/proto/network/v1/messages/liveness_request.proto +0 -8
  79. package/proto/network/v1/messages/liveness_response.proto +0 -11
  80. package/proto/network/v1/network_message.proto +0 -22
  81. package/rpc/rpc_services.js +0 -181
  82. package/scripts/generate-protobufs.js +0 -67
  83. package/src/core/network/identity/NetworkWalletFactory.js +0 -77
  84. package/src/core/network/protocols/shared/errors/SharedValidatorRejectionError.js +0 -27
  85. package/src/utils/cli.js +0 -130
  86. package/src/utils/cliCommands.js +0 -280
  87. package/tests/acceptance/v1/account/account.test.mjs +0 -129
  88. package/tests/acceptance/v1/balance/balance.test.mjs +0 -54
  89. package/tests/acceptance/v1/broadcast-transaction/broadcast-transaction.test.mjs +0 -116
  90. package/tests/acceptance/v1/confirmed-length/confirmed-length.test.mjs +0 -19
  91. package/tests/acceptance/v1/fee/fee.test.mjs +0 -11
  92. package/tests/acceptance/v1/health/health.test.mjs +0 -33
  93. package/tests/acceptance/v1/rpc.test.mjs +0 -95
  94. package/tests/acceptance/v1/tx/tx.test.mjs +0 -133
  95. package/tests/acceptance/v1/tx-details/tx-details.test.mjs +0 -241
  96. package/tests/acceptance/v1/tx-hashes/tx-hashes.test.mjs +0 -72
  97. package/tests/acceptance/v1/tx-payloads-bulk/tx-payloads-bulk.test.mjs +0 -27
  98. package/tests/acceptance/v1/txv/txv.test.mjs +0 -11
  99. package/tests/acceptance/v1/unconfirmed-length/unconfirmed-length.test.mjs +0 -11
  100. package/tests/fixtures/apply.fixtures.js +0 -77
  101. package/tests/fixtures/assembleMessage.fixtures.js +0 -41
  102. package/tests/fixtures/check.fixtures.js +0 -428
  103. package/tests/fixtures/networkV1.fixtures.js +0 -59
  104. package/tests/fixtures/protobuf.fixtures.js +0 -388
  105. package/tests/helpers/StateNetworkFactory.js +0 -155
  106. package/tests/helpers/address.js +0 -6
  107. package/tests/helpers/autobaseTestHelpers.js +0 -419
  108. package/tests/helpers/config.js +0 -4
  109. package/tests/helpers/createTestSignature.js +0 -13
  110. package/tests/helpers/regexHelper.js +0 -3
  111. package/tests/helpers/setupApplyTests.js +0 -587
  112. package/tests/helpers/transactionPayloads.mjs +0 -92
  113. package/tests/helpers/wrapper.js +0 -28
  114. package/tests/unit/messages/messages.test.js +0 -12
  115. package/tests/unit/messages/network/NetworkMessageBuilder.test.js +0 -436
  116. package/tests/unit/messages/network/NetworkMessageDirector.test.js +0 -347
  117. package/tests/unit/messages/state/applyStateMessageBuilder.complete.test.js +0 -525
  118. package/tests/unit/messages/state/applyStateMessageBuilder.partial.test.js +0 -237
  119. package/tests/unit/network/LegacyNetworkMessageRouter.test.js +0 -54
  120. package/tests/unit/network/NetworkWalletFactory.test.js +0 -156
  121. package/tests/unit/network/ProtocolSession.test.js +0 -127
  122. package/tests/unit/network/networkModule.test.js +0 -13
  123. package/tests/unit/network/services/ConnectionManager.test.js +0 -450
  124. package/tests/unit/network/services/MessageOrchestrator.test.js +0 -445
  125. package/tests/unit/network/services/PendingRequestService.test.js +0 -431
  126. package/tests/unit/network/services/TransactionCommitService.test.js +0 -246
  127. package/tests/unit/network/services/TransactionPoolService.test.js +0 -489
  128. package/tests/unit/network/services/TransactionRateLimiterService.test.js +0 -139
  129. package/tests/unit/network/services/ValidatorHealthCheckService.test.js +0 -115
  130. package/tests/unit/network/services/services.test.js +0 -17
  131. package/tests/unit/network/utils/v1TestUtils.js +0 -153
  132. package/tests/unit/network/v1/NetworkMessageRouterV1.test.js +0 -151
  133. package/tests/unit/network/v1/V1BaseOperation.test.js +0 -356
  134. package/tests/unit/network/v1/V1BroadcastTransactionOperationHandler.test.js +0 -129
  135. package/tests/unit/network/v1/V1BroadcastTransactionRequest.test.js +0 -53
  136. package/tests/unit/network/v1/V1BroadcastTransactionResponse.test.js +0 -512
  137. package/tests/unit/network/v1/V1LivenessRequest.test.js +0 -32
  138. package/tests/unit/network/v1/V1LivenessResponse.test.js +0 -45
  139. package/tests/unit/network/v1/V1ResultCode.test.js +0 -84
  140. package/tests/unit/network/v1/V1ValidationSchema.test.js +0 -13
  141. package/tests/unit/network/v1/connectionPolicies.test.js +0 -49
  142. package/tests/unit/network/v1/handlers/V1BaseOperationHandler.test.js +0 -284
  143. package/tests/unit/network/v1/handlers/V1BroadcastTransactionOperationHandler.test.js +0 -794
  144. package/tests/unit/network/v1/handlers/V1LivenessOperationHandler.test.js +0 -193
  145. package/tests/unit/network/v1/v1.handlers.test.js +0 -15
  146. package/tests/unit/network/v1/v1.test.js +0 -19
  147. package/tests/unit/network/v1/v1ValidationSchema/broadcastTransactionRequest.test.js +0 -119
  148. package/tests/unit/network/v1/v1ValidationSchema/broadcastTransactionResponse.test.js +0 -136
  149. package/tests/unit/network/v1/v1ValidationSchema/common.test.js +0 -308
  150. package/tests/unit/network/v1/v1ValidationSchema/livenessRequest.test.js +0 -90
  151. package/tests/unit/network/v1/v1ValidationSchema/livenessResponse.test.js +0 -133
  152. package/tests/unit/state/State.test.js +0 -80
  153. package/tests/unit/state/apply/addAdmin/addAdminHappyPathScenario.js +0 -42
  154. package/tests/unit/state/apply/addAdmin/addAdminScenarioHelpers.js +0 -276
  155. package/tests/unit/state/apply/addAdmin/adminEntryEncodingFailureScenario.js +0 -30
  156. package/tests/unit/state/apply/addAdmin/adminEntryExistsScenario.js +0 -78
  157. package/tests/unit/state/apply/addAdmin/nodeEntryInitializationFailureScenario.js +0 -30
  158. package/tests/unit/state/apply/addAdmin/nonBootstrapNodeScenario.js +0 -68
  159. package/tests/unit/state/apply/addAdmin/state.apply.addAdmin.test.js +0 -159
  160. package/tests/unit/state/apply/addIndexer/addIndexerHappyPathScenario.js +0 -39
  161. package/tests/unit/state/apply/addIndexer/addIndexerMultipleIndexersInTheNetworkScenario.js +0 -167
  162. package/tests/unit/state/apply/addIndexer/addIndexerPretenderAlreadyIndexerScenario.js +0 -21
  163. package/tests/unit/state/apply/addIndexer/addIndexerPretenderNotWriterScenario.js +0 -21
  164. package/tests/unit/state/apply/addIndexer/addIndexerRemoveAndReAddScenario.js +0 -186
  165. package/tests/unit/state/apply/addIndexer/addIndexerScenarioHelpers.js +0 -443
  166. package/tests/unit/state/apply/addIndexer/addIndexerWriterKeyAlreadyRegisteredScenario.js +0 -32
  167. package/tests/unit/state/apply/addIndexer/state.apply.addIndexer.test.js +0 -297
  168. package/tests/unit/state/apply/addWriter/addWriterHappyPathScenario.js +0 -41
  169. package/tests/unit/state/apply/addWriter/addWriterInvalidValidatorSignatureScenario.js +0 -32
  170. package/tests/unit/state/apply/addWriter/addWriterNewWkScenario.js +0 -149
  171. package/tests/unit/state/apply/addWriter/addWriterRequesterAlreadyWriterScenario.js +0 -21
  172. package/tests/unit/state/apply/addWriter/addWriterRequesterBalanceInsufficientScenario.js +0 -21
  173. package/tests/unit/state/apply/addWriter/addWriterRequesterEntryDecodeFailureScenario.js +0 -19
  174. package/tests/unit/state/apply/addWriter/addWriterRequesterEntryMissingScenario.js +0 -19
  175. package/tests/unit/state/apply/addWriter/addWriterRequesterIndexerScenario.js +0 -21
  176. package/tests/unit/state/apply/addWriter/addWriterRequesterNotWhitelistedScenario.js +0 -21
  177. package/tests/unit/state/apply/addWriter/addWriterScenarioHelpers.js +0 -766
  178. package/tests/unit/state/apply/addWriter/addWriterStakeBalanceUpdateFailureScenario.js +0 -50
  179. package/tests/unit/state/apply/addWriter/addWriterStakeInsufficientBalanceScenario.js +0 -29
  180. package/tests/unit/state/apply/addWriter/addWriterStakeInvalidBalanceScenario.js +0 -29
  181. package/tests/unit/state/apply/addWriter/addWriterStakeInvalidEntryScenario.js +0 -21
  182. package/tests/unit/state/apply/addWriter/addWriterStakeStakedBalanceFailureScenario.js +0 -37
  183. package/tests/unit/state/apply/addWriter/addWriterStakeSubtractFailureScenario.js +0 -42
  184. package/tests/unit/state/apply/addWriter/addWriterValidatorRewardScenario.js +0 -106
  185. package/tests/unit/state/apply/addWriter/addWriterWriterKeyMismatchScenario.js +0 -54
  186. package/tests/unit/state/apply/addWriter/addWriterWriterKeyOwnershipScenario.js +0 -54
  187. package/tests/unit/state/apply/addWriter/addWriterZeroWriterKeyScenario.js +0 -29
  188. package/tests/unit/state/apply/addWriter/state.apply.addWriter.test.js +0 -309
  189. package/tests/unit/state/apply/adminRecovery/adminRecoveryHappyPathScenario.js +0 -30
  190. package/tests/unit/state/apply/adminRecovery/adminRecoveryScenarioHelpers.js +0 -881
  191. package/tests/unit/state/apply/adminRecovery/state.apply.adminRecovery.test.js +0 -435
  192. package/tests/unit/state/apply/appendWhitelist/appendWhitelistBanAndReapplyScenario.js +0 -78
  193. package/tests/unit/state/apply/appendWhitelist/appendWhitelistExistingReaderHappyPathScenario.js +0 -98
  194. package/tests/unit/state/apply/appendWhitelist/appendWhitelistFeeAfterDisableScenario.js +0 -66
  195. package/tests/unit/state/apply/appendWhitelist/appendWhitelistHappyPathScenario.js +0 -55
  196. package/tests/unit/state/apply/appendWhitelist/appendWhitelistInsufficientAdminBalanceScenario.js +0 -103
  197. package/tests/unit/state/apply/appendWhitelist/appendWhitelistNodeAlreadyWhitelistedScenario.js +0 -60
  198. package/tests/unit/state/apply/appendWhitelist/appendWhitelistScenarioHelpers.js +0 -189
  199. package/tests/unit/state/apply/appendWhitelist/state.apply.appendWhitelist.test.js +0 -220
  200. package/tests/unit/state/apply/balanceInitialization/balanceInitializationHappyPathScenario.js +0 -82
  201. package/tests/unit/state/apply/balanceInitialization/balanceInitializationScenarioHelpers.js +0 -111
  202. package/tests/unit/state/apply/balanceInitialization/invalidAmountScenario.js +0 -45
  203. package/tests/unit/state/apply/balanceInitialization/nodeEntryBalanceUpdateFailureScenario.js +0 -82
  204. package/tests/unit/state/apply/balanceInitialization/state.apply.balanceInitialization.test.js +0 -189
  205. package/tests/unit/state/apply/banValidator/banValidatorBanAndReWhitelistScenario.js +0 -156
  206. package/tests/unit/state/apply/banValidator/banValidatorHappyPathScenario.js +0 -36
  207. package/tests/unit/state/apply/banValidator/banValidatorScenarioHelpers.js +0 -531
  208. package/tests/unit/state/apply/banValidator/banValidatorSequentialBansScenario.js +0 -74
  209. package/tests/unit/state/apply/banValidator/banValidatorTargetDecodeFailureScenario.js +0 -19
  210. package/tests/unit/state/apply/banValidator/banValidatorTargetIndexerScenario.js +0 -32
  211. package/tests/unit/state/apply/banValidator/banValidatorTargetNodeEntryMissingScenario.js +0 -19
  212. package/tests/unit/state/apply/banValidator/banValidatorTargetRoleUpdateFailureScenario.js +0 -19
  213. package/tests/unit/state/apply/banValidator/banValidatorWhitelistedNonWriterScenario.js +0 -38
  214. package/tests/unit/state/apply/banValidator/banValidatorWhitelistedZeroBalanceScenario.js +0 -91
  215. package/tests/unit/state/apply/banValidator/banValidatorWithdrawFailureScenario.js +0 -19
  216. package/tests/unit/state/apply/banValidator/state.apply.banValidator.test.js +0 -266
  217. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentDuplicateRegistrationScenario.js +0 -143
  218. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentHappyPathScenario.js +0 -26
  219. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentIncompleteOperationScenario.js +0 -94
  220. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentInvalidDeploymentEntryScenario.js +0 -37
  221. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentMultipleBootstrapScenario.js +0 -86
  222. package/tests/unit/state/apply/bootstrapDeployment/bootstrapDeploymentScenarioHelpers.js +0 -347
  223. package/tests/unit/state/apply/bootstrapDeployment/invalidValidatorNodeEntryScenario.js +0 -57
  224. package/tests/unit/state/apply/bootstrapDeployment/state.apply.bootstrapDeployment.test.js +0 -429
  225. package/tests/unit/state/apply/common/access-control/adminConsistencyMismatchScenario.js +0 -120
  226. package/tests/unit/state/apply/common/access-control/adminEntryDecodeFailureScenario.js +0 -130
  227. package/tests/unit/state/apply/common/access-control/adminEntryExistsScenario.js +0 -93
  228. package/tests/unit/state/apply/common/access-control/adminEntryMissingScenario.js +0 -108
  229. package/tests/unit/state/apply/common/access-control/adminOnlyGuardScenario.js +0 -126
  230. package/tests/unit/state/apply/common/access-control/adminPublicKeyDecodeFailureScenario.js +0 -121
  231. package/tests/unit/state/apply/common/access-control/roleAccessOperationValidationScenario.js +0 -50
  232. package/tests/unit/state/apply/common/adminControlOperationValidationScenario.js +0 -56
  233. package/tests/unit/state/apply/common/balances/adminEntryUpdateFailureScenario.js +0 -52
  234. package/tests/unit/state/apply/common/balances/base/requesterBalanceScenarioBase.js +0 -198
  235. package/tests/unit/state/apply/common/balances/feeDecodeFailureScenario.js +0 -52
  236. package/tests/unit/state/apply/common/balances/requesterBalanceDecodeFailureScenario.js +0 -15
  237. package/tests/unit/state/apply/common/balances/requesterBalanceFeeApplicationFailureScenario.js +0 -11
  238. package/tests/unit/state/apply/common/balances/requesterBalanceInsufficientScenario.js +0 -15
  239. package/tests/unit/state/apply/common/balances/requesterBalanceUpdateFailureScenario.js +0 -11
  240. package/tests/unit/state/apply/common/balances/validatorEntryRewardFailureScenario.js +0 -11
  241. package/tests/unit/state/apply/common/balances/validatorEntryUpdateFailureScenario.js +0 -11
  242. package/tests/unit/state/apply/common/balances/validatorNodeEntryDecodeFailureScenario.js +0 -40
  243. package/tests/unit/state/apply/common/base/OperationValidationScenarioBase.js +0 -114
  244. package/tests/unit/state/apply/common/commonScenarioHelper.js +0 -103
  245. package/tests/unit/state/apply/common/indexer/indexerNodeEntryDecodeFailureScenario.js +0 -36
  246. package/tests/unit/state/apply/common/indexer/indexerNodeEntryMissingScenario.js +0 -36
  247. package/tests/unit/state/apply/common/indexer/indexerRoleUpdateFailureScenario.js +0 -29
  248. package/tests/unit/state/apply/common/indexer/indexerSequenceStateInvalidScenario.js +0 -66
  249. package/tests/unit/state/apply/common/invalidMessageComponentValidationScenario.js +0 -84
  250. package/tests/unit/state/apply/common/nodeEntryInitializationFailureScenario.js +0 -47
  251. package/tests/unit/state/apply/common/operationAlreadyAppliedScenario.js +0 -85
  252. package/tests/unit/state/apply/common/payload-structure/addressWithInvalidPublicKeyScenario.js +0 -52
  253. package/tests/unit/state/apply/common/payload-structure/initializationDisabledScenario.js +0 -54
  254. package/tests/unit/state/apply/common/payload-structure/invalidAddressValidationScenario.js +0 -73
  255. package/tests/unit/state/apply/common/payload-structure/invalidHashValidationScenario.js +0 -71
  256. package/tests/unit/state/apply/common/payload-structure/invalidPayloadValidationScenario.js +0 -31
  257. package/tests/unit/state/apply/common/payload-structure/invalidSignatureValidationScenario.js +0 -142
  258. package/tests/unit/state/apply/common/payload-structure/partialOperationValidationScenario.js +0 -87
  259. package/tests/unit/state/apply/common/requester/requesterNodeEntryBufferMissingScenario.js +0 -71
  260. package/tests/unit/state/apply/common/requester/requesterNodeEntryDecodeFailureScenario.js +0 -73
  261. package/tests/unit/state/apply/common/requester/requesterNodeEntryMissingScenario.js +0 -36
  262. package/tests/unit/state/apply/common/requesterAddressValidationScenario.js +0 -44
  263. package/tests/unit/state/apply/common/requesterPublicKeyValidationScenario.js +0 -25
  264. package/tests/unit/state/apply/common/transactionValidityMismatchScenario.js +0 -98
  265. package/tests/unit/state/apply/common/validatorConsistency/base/validatorConsistencyScenarioBase.js +0 -202
  266. package/tests/unit/state/apply/common/validatorConsistency/validatorEntryDecodeFailureScenario.js +0 -17
  267. package/tests/unit/state/apply/common/validatorConsistency/validatorEntryMissingScenario.js +0 -44
  268. package/tests/unit/state/apply/common/validatorConsistency/validatorInactiveScenario.js +0 -19
  269. package/tests/unit/state/apply/common/validatorConsistency/validatorWriterKeyMismatchScenario.js +0 -18
  270. package/tests/unit/state/apply/common/validatorEntryValidation/base/validatorEntryValidationScenarioBase.js +0 -315
  271. package/tests/unit/state/apply/common/validatorEntryValidation/validatorEntryInvalidBalanceScenario.js +0 -18
  272. package/tests/unit/state/apply/common/writerKeyExistsValidationScenario.js +0 -43
  273. package/tests/unit/state/apply/disableInitialization/disableInitializationAlreadyDisabledScenario.js +0 -53
  274. package/tests/unit/state/apply/disableInitialization/disableInitializationHappyPathScenario.js +0 -24
  275. package/tests/unit/state/apply/disableInitialization/disableInitializationScenarioHelpers.js +0 -204
  276. package/tests/unit/state/apply/disableInitialization/state.apply.disableInitialization.test.js +0 -161
  277. package/tests/unit/state/apply/missing-tests.md +0 -18
  278. package/tests/unit/state/apply/removeIndexer/removeIndexerHappyPathScenario.js +0 -58
  279. package/tests/unit/state/apply/removeIndexer/removeIndexerReAddAndRemoveAgainScenario.js +0 -98
  280. package/tests/unit/state/apply/removeIndexer/removeIndexerRemoveMultipleIndexersScenario.js +0 -167
  281. package/tests/unit/state/apply/removeIndexer/removeIndexerScenarioHelpers.js +0 -429
  282. package/tests/unit/state/apply/removeIndexer/removeIndexerTargetNotIndexerScenario.js +0 -22
  283. package/tests/unit/state/apply/removeIndexer/removeIndexerWriterKeyMissingScenario.js +0 -20
  284. package/tests/unit/state/apply/removeIndexer/state.apply.removeIndexer.test.js +0 -291
  285. package/tests/unit/state/apply/removeWriter/removeWriterAndAddWriterAgainScenario.js +0 -87
  286. package/tests/unit/state/apply/removeWriter/removeWriterHappyPathScenario.js +0 -38
  287. package/tests/unit/state/apply/removeWriter/removeWriterInvalidValidatorSignatureScenario.js +0 -32
  288. package/tests/unit/state/apply/removeWriter/removeWriterRequesterBalanceInsufficientScenario.js +0 -21
  289. package/tests/unit/state/apply/removeWriter/removeWriterRequesterEntryDecodeFailureScenario.js +0 -19
  290. package/tests/unit/state/apply/removeWriter/removeWriterRequesterEntryMissingScenario.js +0 -19
  291. package/tests/unit/state/apply/removeWriter/removeWriterRequesterIndexerScenario.js +0 -21
  292. package/tests/unit/state/apply/removeWriter/removeWriterRequesterNotWriterScenario.js +0 -21
  293. package/tests/unit/state/apply/removeWriter/removeWriterRequesterRoleUpdateFailureScenario.js +0 -19
  294. package/tests/unit/state/apply/removeWriter/removeWriterScenarioHelpers.js +0 -348
  295. package/tests/unit/state/apply/removeWriter/removeWriterThroughWriterValidatorScenario.js +0 -113
  296. package/tests/unit/state/apply/removeWriter/removeWriterUnstakeFailureScenario.js +0 -33
  297. package/tests/unit/state/apply/removeWriter/removeWriterWriterKeyMismatchScenario.js +0 -21
  298. package/tests/unit/state/apply/removeWriter/removeWriterWriterKeyOwnershipScenario.js +0 -26
  299. package/tests/unit/state/apply/removeWriter/removeWriterWriterKeyRegistryMissingScenario.js +0 -22
  300. package/tests/unit/state/apply/removeWriter/state.apply.removeWriter.test.js +0 -307
  301. package/tests/unit/state/apply/state.apply.test.js +0 -24
  302. package/tests/unit/state/apply/transfer/state.apply.transfer.test.js +0 -819
  303. package/tests/unit/state/apply/transfer/transferContractSchemaValidationScenario.js +0 -22
  304. package/tests/unit/state/apply/transfer/transferDoubleSpendAcrossValidatorsScenario.js +0 -146
  305. package/tests/unit/state/apply/transfer/transferDoubleSpendSameBatchScenario.js +0 -63
  306. package/tests/unit/state/apply/transfer/transferDoubleSpendSingleValidatorScenario.js +0 -67
  307. package/tests/unit/state/apply/transfer/transferExistingRecipientAmountScenario.js +0 -31
  308. package/tests/unit/state/apply/transfer/transferExistingRecipientZeroAmountScenario.js +0 -31
  309. package/tests/unit/state/apply/transfer/transferHandlerGuardScenarios.js +0 -22
  310. package/tests/unit/state/apply/transfer/transferHappyPathScenario.js +0 -8
  311. package/tests/unit/state/apply/transfer/transferInvalidIncomingDataScenario.js +0 -66
  312. package/tests/unit/state/apply/transfer/transferNewRecipientAmountScenario.js +0 -31
  313. package/tests/unit/state/apply/transfer/transferNewRecipientZeroAmountScenario.js +0 -31
  314. package/tests/unit/state/apply/transfer/transferScenarioHelpers.js +0 -1170
  315. package/tests/unit/state/apply/transfer/transferSelfTransferAmountScenario.js +0 -38
  316. package/tests/unit/state/apply/transfer/transferSelfTransferZeroAmountScenario.js +0 -38
  317. package/tests/unit/state/apply/transfer/transferValidatorRecipientAmountScenario.js +0 -38
  318. package/tests/unit/state/apply/transfer/transferValidatorRecipientZeroAmountScenario.js +0 -38
  319. package/tests/unit/state/apply/txOperation/state.apply.txOperation.test.js +0 -318
  320. package/tests/unit/state/apply/txOperation/txOperationBootstrapNotRegisteredScenario.js +0 -70
  321. package/tests/unit/state/apply/txOperation/txOperationDifferentValidatorCreatorHappyPathScenario.js +0 -23
  322. package/tests/unit/state/apply/txOperation/txOperationInvalidDeploymentEntryScenario.js +0 -48
  323. package/tests/unit/state/apply/txOperation/txOperationInvalidFeeAmountScenario.js +0 -39
  324. package/tests/unit/state/apply/txOperation/txOperationInvalidSubnetCreatorAddressScenario.js +0 -46
  325. package/tests/unit/state/apply/txOperation/txOperationRequesterCreatorHappyPathScenario.js +0 -21
  326. package/tests/unit/state/apply/txOperation/txOperationScenarioHelpers.js +0 -432
  327. package/tests/unit/state/apply/txOperation/txOperationStandardHappyPathScenario.js +0 -21
  328. package/tests/unit/state/apply/txOperation/txOperationTransferFeeAddCreatorBalanceFailureScenario.js +0 -26
  329. package/tests/unit/state/apply/txOperation/txOperationTransferFeeAddValidatorBalanceFailureScenario.js +0 -25
  330. package/tests/unit/state/apply/txOperation/txOperationTransferFeeAddValidatorBonusFailureScenario.js +0 -27
  331. package/tests/unit/state/apply/txOperation/txOperationTransferFeeDecodeCreatorEntryScenario.js +0 -18
  332. package/tests/unit/state/apply/txOperation/txOperationTransferFeeDecodeRequesterEntryScenario.js +0 -17
  333. package/tests/unit/state/apply/txOperation/txOperationTransferFeeDecodeValidatorEntryScenario.js +0 -31
  334. package/tests/unit/state/apply/txOperation/txOperationTransferFeeGuardBypassScenario.js +0 -49
  335. package/tests/unit/state/apply/txOperation/txOperationTransferFeeGuardScenarioFactory.js +0 -93
  336. package/tests/unit/state/apply/txOperation/txOperationTransferFeeInsufficientRequesterBalanceScenario.js +0 -28
  337. package/tests/unit/state/apply/txOperation/txOperationTransferFeeInvalidCreatorBalanceScenario.js +0 -29
  338. package/tests/unit/state/apply/txOperation/txOperationTransferFeeInvalidRequesterBalanceScenario.js +0 -28
  339. package/tests/unit/state/apply/txOperation/txOperationTransferFeeInvalidRequesterEntryScenario.js +0 -17
  340. package/tests/unit/state/apply/txOperation/txOperationTransferFeeInvalidValidatorBalanceScenario.js +0 -33
  341. package/tests/unit/state/apply/txOperation/txOperationTransferFeeMissingCreatorEntryScenario.js +0 -18
  342. package/tests/unit/state/apply/txOperation/txOperationTransferFeeSubtractFailureScenario.js +0 -25
  343. package/tests/unit/state/apply/txOperation/txOperationTransferFeeUpdateCreatorBalanceFailureScenario.js +0 -26
  344. package/tests/unit/state/apply/txOperation/txOperationTransferFeeUpdateFailureScenario.js +0 -25
  345. package/tests/unit/state/apply/txOperation/txOperationTransferFeeUpdateValidatorBalanceFailureScenario.js +0 -26
  346. package/tests/unit/state/apply/txOperation/txOperationTransferFeeUpdateValidatorBonusFailureScenario.js +0 -27
  347. package/tests/unit/state/apply/txOperation/txOperationValidatorCreatorHappyPathScenario.js +0 -21
  348. package/tests/unit/state/stateModule.test.js +0 -23
  349. package/tests/unit/state/stateTestUtils.js +0 -32
  350. package/tests/unit/state/utils/address.test.js +0 -63
  351. package/tests/unit/state/utils/adminEntry.test.js +0 -52
  352. package/tests/unit/state/utils/balance.test.js +0 -320
  353. package/tests/unit/state/utils/lengthEntry.test.js +0 -54
  354. package/tests/unit/state/utils/nodeEntry.test.js +0 -298
  355. package/tests/unit/state/utils/roles.test.js +0 -44
  356. package/tests/unit/unit.test.js +0 -14
  357. package/tests/unit/utils/amountSerialization/amountSerialization.test.js +0 -237
  358. package/tests/unit/utils/buffer/buffer.test.js +0 -251
  359. package/tests/unit/utils/check/adminControlOperation.test.js +0 -156
  360. package/tests/unit/utils/check/balanceInitializationOperation.test.js +0 -54
  361. package/tests/unit/utils/check/bootstrapDeploymentOperation.test.js +0 -104
  362. package/tests/unit/utils/check/check.test.js +0 -17
  363. package/tests/unit/utils/check/common.test.js +0 -419
  364. package/tests/unit/utils/check/coreAdminOperation.test.js +0 -95
  365. package/tests/unit/utils/check/roleAccessOperation.test.js +0 -255
  366. package/tests/unit/utils/check/transactionOperation.test.js +0 -107
  367. package/tests/unit/utils/check/transferOperation.test.js +0 -102
  368. package/tests/unit/utils/deepEqualApplyPayload/deepEqualApplyPayload.test.js +0 -102
  369. package/tests/unit/utils/fileUtils/readAddressesFromWhitelistFile.test.js +0 -95
  370. package/tests/unit/utils/fileUtils/readBalanceMigrationFile.test.js +0 -149
  371. package/tests/unit/utils/helpers/helpers.test.js +0 -11
  372. package/tests/unit/utils/helpers/isHexString.test.js +0 -12
  373. package/tests/unit/utils/helpers/normalizeHex.test.js +0 -82
  374. package/tests/unit/utils/migrationUtils/validateAddressFromIncomingFile.test.js +0 -100
  375. package/tests/unit/utils/normalizers/normalizers.test.js +0 -469
  376. package/tests/unit/utils/protobuf/applyOperations.test.js +0 -91
  377. package/tests/unit/utils/protobuf/operationHelpers.test.js +0 -303
  378. package/tests/unit/utils/protobuf/protobuf.test.js +0 -12
  379. package/tests/unit/utils/type/type.test.js +0 -25
  380. package/tests/unit/utils/utils.test.js +0 -21
  381. package/whitelist/.gitkeep +0 -0
@@ -1,115 +0,0 @@
1
- import sinon from 'sinon';
2
- import { test } from 'brittle';
3
- import ValidatorHealthCheckService from '../../../../src/core/network/services/ValidatorHealthCheckService.js';
4
- import { createConfig, ENV } from '../../../../src/config/env.js';
5
- import { EventType } from '../../../../src/utils/constants.js';
6
- import { testKeyPair1, testKeyPair2 } from '../../../fixtures/apply.fixtures.js';
7
-
8
- test('ValidatorHealthCheckService', () => {
9
- test('throws when start is called before ready', async (t) => {
10
- const config = createConfig(ENV.MAINNET, { validatorHealthCheckInterval: 1000 });
11
- const service = new ValidatorHealthCheckService(config);
12
-
13
- await t.exception(() => service.start(testKeyPair1.publicKey));
14
- await service.close();
15
- });
16
-
17
- test('constructor rejects invalid interval', async (t) => {
18
- const badConfig = createConfig(ENV.MAINNET, { validatorHealthCheckInterval: -1 });
19
-
20
- await t.exception.all(() => new ValidatorHealthCheckService(badConfig));
21
- });
22
-
23
- test('constructor defaults interval when missing', async (t) => {
24
- const config = createConfig(ENV.MAINNET, {});
25
- const service = new ValidatorHealthCheckService(config);
26
- await service.ready();
27
-
28
- t.is(service.start(testKeyPair1.publicKey), true);
29
- t.is(service.start(testKeyPair1.publicKey), false);
30
- await service.close();
31
- });
32
-
33
- test('stop returns false when no schedule exists', async (t) => {
34
- const config = createConfig(ENV.MAINNET, { validatorHealthCheckInterval: 1000 });
35
- const service = new ValidatorHealthCheckService(config);
36
- await service.ready();
37
-
38
- t.is(service.stop(testKeyPair1.publicKey), false);
39
- await service.close();
40
- });
41
-
42
- test('has throws on invalid public key type', async (t) => {
43
- const config = createConfig(ENV.MAINNET, { validatorHealthCheckInterval: 1000 });
44
- const service = new ValidatorHealthCheckService(config);
45
- await service.ready();
46
-
47
- await t.exception.all(() => service.has(123));
48
- await service.close();
49
- });
50
-
51
- test('start returns false when already scheduled', async (t) => {
52
- const config = createConfig(ENV.MAINNET, { validatorHealthCheckInterval: 1000 });
53
- const service = new ValidatorHealthCheckService(config);
54
- await service.ready();
55
-
56
- t.ok(service.start(testKeyPair1.publicKey));
57
- t.is(service.start(testKeyPair1.publicKey), false);
58
- await service.close();
59
- });
60
-
61
- test('emits health check on interval', async (t) => {
62
- const clock = sinon.useFakeTimers({ now: 0 });
63
- try {
64
- const config = createConfig(ENV.MAINNET, { validatorHealthCheckInterval: 1000 });
65
- const service = new ValidatorHealthCheckService(config);
66
- await service.ready();
67
-
68
- const emitted = new Promise(resolve => {
69
- service.once(EventType.VALIDATOR_HEALTH_CHECK, (publicKey, requestId) => {
70
- resolve({ publicKey, requestId });
71
- });
72
- });
73
- t.ok(service.start(testKeyPair1.publicKey));
74
-
75
- await clock.tickAsync(1000);
76
- const { publicKey, requestId } = await emitted;
77
- t.is(publicKey, testKeyPair1.publicKey.toLowerCase());
78
- t.ok(requestId);
79
- await service.close();
80
- } finally {
81
- clock.restore();
82
- sinon.restore();
83
- }
84
- });
85
-
86
- test('stopAll cancels scheduled checks', async (t) => {
87
- const clock = sinon.useFakeTimers({ now: 0 });
88
- try {
89
- const config = createConfig(ENV.MAINNET, { validatorHealthCheckInterval: 1000 });
90
- const service = new ValidatorHealthCheckService(config);
91
- await service.ready();
92
- const emitted = [];
93
- const waitForTwo = new Promise(resolve => {
94
- service.on(EventType.VALIDATOR_HEALTH_CHECK, (publicKey, requestId) => {
95
- emitted.push({ publicKey, requestId });
96
- if (emitted.length === 2) resolve();
97
- });
98
- });
99
- t.ok(service.start(testKeyPair1.publicKey));
100
- t.ok(service.start(testKeyPair2.publicKey));
101
-
102
- await clock.tickAsync(1000);
103
- await waitForTwo;
104
- t.is(emitted.length, 2);
105
-
106
- await service.close();
107
-
108
- await clock.tickAsync(1000);
109
- t.is(emitted.length, 2);
110
- } finally {
111
- clock.restore();
112
- sinon.restore();
113
- }
114
- });
115
- });
@@ -1,17 +0,0 @@
1
- // This runner is auto-generated by Brittle
2
-
3
- import { default as test } from 'brittle';
4
-
5
- async function runTests() {
6
- test.pause();
7
- await import('./ValidatorHealthCheckService.test.js');
8
- await import('./TransactionRateLimiterService.test.js');
9
- await import('./ConnectionManager.test.js');
10
- await import('./MessageOrchestrator.test.js');
11
- await import('./PendingRequestService.test.js');
12
- await import('./TransactionCommitService.test.js');
13
- await import('./TransactionPoolService.test.js');
14
- test.resume();
15
- }
16
-
17
- await runTests();
@@ -1,153 +0,0 @@
1
- import b4a from 'b4a';
2
- import sinon from 'sinon';
3
- import { config } from '../../../helpers/config.js';
4
- import { NetworkOperationType, V1_PROTOCOL_PAYLOAD_MAX_SIZE } from '../../../../src/utils/constants.js';
5
- import { encodeV1networkOperation } from '../../../../src/utils/protobuf/operationHelpers.js';
6
- import NetworkMessageRouterV1 from '../../../../src/core/network/protocols/v1/NetworkMessageRouter.js';
7
- import V1LivenessOperationHandler from '../../../../src/core/network/protocols/v1/handlers/V1LivenessOperationHandler.js';
8
- import V1BroadcastTransactionOperationHandler from '../../../../src/core/network/protocols/v1/handlers/V1BroadcastTransactionOperationHandler.js';
9
-
10
- const resolveStub = (stubSource) => {
11
- if (typeof stubSource === 'function') {
12
- return stubSource;
13
- }
14
- if (stubSource && typeof stubSource.stub === 'function') {
15
- return stubSource.stub.bind(stubSource);
16
- }
17
- throw new Error('Stub source must provide a stub function');
18
- };
19
-
20
- export const makeConnection = (stubSource) => {
21
- const stub = resolveStub(stubSource);
22
- return {
23
- remotePublicKey: b4a.alloc(32, 0x01),
24
- protocolSession: {
25
- setV1AsPreferredProtocol: stub()
26
- },
27
- end: stub()
28
- };
29
- };
30
-
31
- export const makeHandlers = (sandbox) => ({
32
- livenessRequest: sandbox.stub(V1LivenessOperationHandler.prototype, 'handleRequest').resolves(),
33
- livenessResponse: sandbox.stub(V1LivenessOperationHandler.prototype, 'handleResponse').resolves(),
34
- broadcastRequest: sandbox.stub(V1BroadcastTransactionOperationHandler.prototype, 'handleRequest').resolves(),
35
- broadcastResponse: sandbox.stub(V1BroadcastTransactionOperationHandler.prototype, 'handleResponse').resolves()
36
- });
37
-
38
- export const makeRouter = (t, { walletAddress = 'test-wallet' } = {}) => {
39
- const sandbox = sinon.createSandbox();
40
- if (t && typeof t.teardown === 'function') {
41
- t.teardown(() => sandbox.restore());
42
- }
43
- sandbox.stub(console, 'error');
44
-
45
- const handlerStubs = makeHandlers(sandbox);
46
- const router = new NetworkMessageRouterV1(
47
- {},
48
- { address: walletAddress },
49
- {},
50
- {},
51
- {},
52
- {},
53
- config
54
- );
55
-
56
- return { router, handlerStubs, sandbox };
57
- };
58
-
59
- export const makeRouterContext = (t, options) => {
60
- const { router, handlerStubs, sandbox } = makeRouter(t, options);
61
- const connection = makeConnection(sandbox);
62
- return { router, handlerStubs, sandbox, connection };
63
- };
64
-
65
- export const buildMessage = (type, extra = {}) => encodeV1networkOperation({
66
- type,
67
- id: '1',
68
- ...extra
69
- });
70
-
71
- export const buildEmptyMessage = () => b4a.alloc(0);
72
-
73
- export const buildOversizedMessage = () => b4a.alloc(V1_PROTOCOL_PAYLOAD_MAX_SIZE + 1, 0x01);
74
-
75
- export const buildMalformedMessage = () => b4a.from([0x07]);
76
-
77
- export const buildMaxSizeMessage = () => {
78
- const basePayload = {
79
- type: NetworkOperationType.LIVENESS_REQUEST,
80
- id: '1',
81
- capabilities: ['']
82
- };
83
- const baseLength = encodeV1networkOperation(basePayload).length;
84
- let fillerLength = Math.max(0, V1_PROTOCOL_PAYLOAD_MAX_SIZE - baseLength - 1);
85
- let buffer = encodeV1networkOperation({
86
- ...basePayload,
87
- capabilities: ['a'.repeat(fillerLength)]
88
- });
89
-
90
- if (buffer.length !== V1_PROTOCOL_PAYLOAD_MAX_SIZE) {
91
- const delta = V1_PROTOCOL_PAYLOAD_MAX_SIZE - buffer.length;
92
- fillerLength = Math.max(0, fillerLength + delta);
93
- buffer = encodeV1networkOperation({
94
- ...basePayload,
95
- capabilities: ['a'.repeat(fillerLength)]
96
- });
97
- }
98
-
99
- if (buffer.length !== V1_PROTOCOL_PAYLOAD_MAX_SIZE) {
100
- throw new Error(
101
- `Failed to build payload of size ${V1_PROTOCOL_PAYLOAD_MAX_SIZE}, got ${buffer.length}`
102
- );
103
- }
104
-
105
- return buffer;
106
- };
107
-
108
- export const getUnsupportedType = () => {
109
- const values = Object.values(NetworkOperationType).map(Number);
110
- return Math.max(...values) + 1;
111
- };
112
-
113
- export const assertDisconnected = (t, connection, message = 'should end connection') => {
114
- t.ok(connection.end.calledOnce, message);
115
- };
116
-
117
- export const assertPreferredSet = (t, connection, message = 'should set preferred protocol') => {
118
- t.ok(connection.protocolSession.setV1AsPreferredProtocol.calledOnce, message);
119
- };
120
-
121
- export const assertPreferredNotSet = (t, connection, message = 'should not set preferred protocol') => {
122
- t.ok(connection.protocolSession.setV1AsPreferredProtocol.notCalled, message);
123
- };
124
-
125
- export const assertNoHandlersCalled = (t, handlerStubs) => {
126
- for (const [key, stub] of Object.entries(handlerStubs)) {
127
- t.ok(stub.notCalled, `${key} not called`);
128
- }
129
- };
130
-
131
- export const assertOnlyHandlerCalled = (t, handlerStubs, expectedKey) => {
132
- for (const [key, stub] of Object.entries(handlerStubs)) {
133
- if (key === expectedKey) {
134
- t.ok(stub.calledOnce, `${key} called`);
135
- } else {
136
- t.ok(stub.notCalled, `${key} not called`);
137
- }
138
- }
139
- };
140
-
141
- export const assertRejected = (
142
- t,
143
- { connection, handlerStubs, preferred = 'not', disconnectMessage } = {}
144
- ) => {
145
- if (preferred === 'set') {
146
- assertPreferredSet(t, connection);
147
- } else {
148
- assertPreferredNotSet(t, connection);
149
- }
150
-
151
- assertDisconnected(t, connection, disconnectMessage);
152
- assertNoHandlersCalled(t, handlerStubs);
153
- };
@@ -1,151 +0,0 @@
1
- import { test } from 'brittle';
2
- import { NetworkOperationType } from '../../../../src/utils/constants.js';
3
- import {
4
- assertDisconnected,
5
- assertOnlyHandlerCalled,
6
- assertPreferredSet,
7
- assertRejected,
8
- buildEmptyMessage,
9
- buildMalformedMessage,
10
- buildMaxSizeMessage,
11
- buildMessage,
12
- buildOversizedMessage,
13
- getUnsupportedType,
14
- makeRouterContext
15
- } from '../utils/v1TestUtils.js';
16
-
17
- const SUPPORTED_OPERATION_CASES = [
18
- {
19
- name: 'LIVENESS_REQUEST -> liveness.handleRequest',
20
- type: NetworkOperationType.LIVENESS_REQUEST,
21
- handlerKey: 'livenessRequest'
22
- },
23
- {
24
- name: 'LIVENESS_RESPONSE -> liveness.handleResponse',
25
- type: NetworkOperationType.LIVENESS_RESPONSE,
26
- handlerKey: 'livenessResponse'
27
- },
28
- {
29
- name: 'BROADCAST_TRANSACTION_REQUEST -> broadcast.handleRequest',
30
- type: NetworkOperationType.BROADCAST_TRANSACTION_REQUEST,
31
- handlerKey: 'broadcastRequest'
32
- },
33
- {
34
- name: 'BROADCAST_TRANSACTION_RESPONSE -> broadcast.handleResponse',
35
- type: NetworkOperationType.BROADCAST_TRANSACTION_RESPONSE,
36
- handlerKey: 'broadcastResponse'
37
- }
38
- ];
39
-
40
- const runRejectionCase = async (t, message, { preferred = 'not' } = {}) => {
41
- const { router, handlerStubs, connection } = makeRouterContext(t);
42
- await router.route(message, connection);
43
- assertRejected(t, { connection, handlerStubs, preferred });
44
- };
45
-
46
- test('NetworkMessageRouterV1', async (t) => {
47
- await t.test('pre-validation', async (t) => {
48
- const cases = [
49
- { name: 'rejects null message', message: null },
50
- { name: 'rejects non-buffer message', message: 'not-a-buffer' },
51
- { name: 'rejects empty buffer', message: buildEmptyMessage() },
52
- { name: 'rejects oversized buffer', message: buildOversizedMessage() }
53
- ];
54
-
55
- for (const { name, message } of cases) {
56
- await t.test(name, async (t) => {
57
- await runRejectionCase(t, message);
58
- });
59
- }
60
-
61
- await t.test('accepts max size payload', async (t) => {
62
- const { router, handlerStubs, connection } = makeRouterContext(t);
63
- const maxSizePayload = buildMaxSizeMessage();
64
-
65
- await router.route(maxSizePayload, connection);
66
-
67
- assertPreferredSet(t, connection);
68
- t.ok(connection.end.notCalled, 'should not end connection');
69
- t.ok(handlerStubs.livenessRequest.calledOnce, 'liveness handler called');
70
- });
71
- });
72
-
73
- await t.test('decode failures', async (t) => {
74
- await t.test('disconnects on decode error', async (t) => {
75
- await runRejectionCase(t, buildMalformedMessage());
76
- });
77
- });
78
-
79
- await t.test('type validation', async (t) => {
80
- const invalidTypeCases = [
81
- { name: 'rejects type 0', message: buildMessage(0) },
82
- {
83
- name: 'rejects missing type (defaults to 0)',
84
- message: buildMessage(NetworkOperationType.LIVENESS_REQUEST, { type: undefined })
85
- }
86
- ];
87
-
88
- for (const { name, message } of invalidTypeCases) {
89
- await t.test(name, async (t) => {
90
- await runRejectionCase(t, message);
91
- });
92
- }
93
-
94
- await t.test('unsupported type disconnects after setting preferred protocol', async (t) => {
95
- await runRejectionCase(t, buildMessage(getUnsupportedType()), { preferred: 'set' });
96
- });
97
- });
98
-
99
- await t.test('routing', async (t) => {
100
- for (const { name, type, handlerKey } of SUPPORTED_OPERATION_CASES) {
101
- await t.test(name, async (t) => {
102
- const { router, handlerStubs, connection } = makeRouterContext(t);
103
-
104
- await router.route(buildMessage(type), connection);
105
-
106
- assertPreferredSet(t, connection);
107
- t.ok(connection.end.notCalled, 'should not end connection');
108
- assertOnlyHandlerCalled(t, handlerStubs, handlerKey);
109
-
110
- const handler = handlerStubs[handlerKey];
111
- t.is(handler.firstCall.args[0].type, type, 'passes decoded message');
112
- t.is(handler.firstCall.args[1], connection, 'passes connection');
113
- });
114
- }
115
-
116
- const handlerErrorCases = [
117
- {
118
- name: 'liveness handler throws',
119
- type: NetworkOperationType.LIVENESS_REQUEST,
120
- handlerKey: 'livenessRequest',
121
- error: new Error('handler-fail')
122
- },
123
- {
124
- name: 'broadcast request handler throws',
125
- type: NetworkOperationType.BROADCAST_TRANSACTION_REQUEST,
126
- handlerKey: 'broadcastRequest',
127
- error: new Error('broadcast-request-fail')
128
- },
129
- {
130
- name: 'broadcast response handler throws',
131
- type: NetworkOperationType.BROADCAST_TRANSACTION_RESPONSE,
132
- handlerKey: 'broadcastResponse',
133
- error: new Error('broadcast-response-fail')
134
- }
135
- ];
136
-
137
- for (const { name, type, handlerKey, error } of handlerErrorCases) {
138
- await t.test(name, async (t) => {
139
- const { router, handlerStubs, connection } = makeRouterContext(t);
140
-
141
- handlerStubs[handlerKey].rejects(error);
142
-
143
- await router.route(buildMessage(type), connection);
144
-
145
- assertPreferredSet(t, connection);
146
- t.ok(handlerStubs[handlerKey].calledOnce, 'handler called');
147
- assertDisconnected(t, connection);
148
- });
149
- }
150
- });
151
- });