From 544014788d580e008e0e8bc84cf08aea54c39f93 Mon Sep 17 00:00:00 2001 From: plebhash Date: Fri, 12 Jul 2024 16:27:11 -0300 Subject: [PATCH] add MG test for #912 --- .github/workflows/mg.yaml | 10 ++ .../jds-config.toml | 20 +++ ...olution-while-processing-declared-job.json | 146 ++++++++++++++++++ ...olution-while-processing-declared-job.json | 79 ++++++++++ ...-solution-while-processing-declared-job.sh | 9 ++ 5 files changed, 264 insertions(+) create mode 100644 test/config/jds-receive-solution-while-processing-declared-job/jds-config.toml create mode 100644 test/message-generator/mock/jdc-mock-jds-receive-solution-while-processing-declared-job.json create mode 100644 test/message-generator/test/jds-receive-solution-while-processing-declared-job/jds-receive-solution-while-processing-declared-job.json create mode 100755 test/message-generator/test/jds-receive-solution-while-processing-declared-job/jds-receive-solution-while-processing-declared-job.sh diff --git a/.github/workflows/mg.yaml b/.github/workflows/mg.yaml index 13aaef9e6c..a17eeb0060 100644 --- a/.github/workflows/mg.yaml +++ b/.github/workflows/mg.yaml @@ -67,6 +67,14 @@ jobs: - name: Run jds-do-not-stackoverflow-when-no-token run: sh ./test/message-generator/test/jds-do-not-stackoverflow-when-no-token/jds-do-not-stackoverflow-when-no-token.sh + jds-receive-solution-while-processing-declared-job: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Run jds-receive-solution-while-processing-declared-job + run: sh ./test/message-generator/test/jds-receive-solution-while-processing-declared-job/jds-receive-solution-while-processing-declared-job.sh + pool-sri-test-1-standard: runs-on: ubuntu-latest steps: @@ -171,6 +179,7 @@ jobs: jds-do-not-fail-on-wrong-tsdatasucc, jds-do-not-panic-if-jdc-close-connection, jds-do-not-stackoverflow-when-no-token, + jds-receive-solution-while-processing-declared-job, pool-sri-test-1-standard, pool-sri-test-close-channel, pool-sri-test-extended_0, @@ -192,6 +201,7 @@ jobs: [ "${{ needs.jds-do-not-fail-on-wrong-tsdatasucc.result }}" != "success" ] || [ "${{ needs.jds-do-not-panic-if-jdc-close-connection.result }}" != "success" ] || [ "${{ needs.jds-do-not-stackoverflow-when-no-token.result }}" != "success" ] || + [ "${{ needs.jds-receive-solution-while-processing-declared-job.result }}" != "success" ] || [ "${{ needs.pool-sri-test-1-standard.result }}" != "success" ] || [ "${{ needs.pool-sri-test-close-channel.result }}" != "success" ] || [ "${{ needs.pool-sri-test-extended_0.result }}" != "success" ] || diff --git a/test/config/jds-receive-solution-while-processing-declared-job/jds-config.toml b/test/config/jds-receive-solution-while-processing-declared-job/jds-config.toml new file mode 100644 index 0000000000..576b354436 --- /dev/null +++ b/test/config/jds-receive-solution-while-processing-declared-job/jds-config.toml @@ -0,0 +1,20 @@ +# SRI Pool config +authority_public_key = "9auqWEzQDVyd2oe1JVGFLMLHZtCo2FFqZwtKA5gd9xbuEu7PH72" +authority_secret_key = "mkDLTBBRxdBv998612qipDYoTK3YUrqLe8uWw7gu3iXbSrn2n" +cert_validity_sec = 3600 + +# list of compressed or uncompressed pubkeys for coinbase payout (only supports 1 item in the array at this point) +coinbase_outputs = [ + { output_script_type = "P2WPKH", output_script_value = "036adc3bdf21e6f9a0f0fb0066bf517e5b7909ed1563d6958a10993849a7554075" }, +] + +listen_jd_address = "127.0.0.1:34264" + +core_rpc_url = "" +core_rpc_port = 48332 +core_rpc_user = "" +core_rpc_pass = "" +# Time interval used for JDS mempool update +[mempool_update_interval] +unit = "secs" +value = 1 diff --git a/test/message-generator/mock/jdc-mock-jds-receive-solution-while-processing-declared-job.json b/test/message-generator/mock/jdc-mock-jds-receive-solution-while-processing-declared-job.json new file mode 100644 index 0000000000..67148be877 --- /dev/null +++ b/test/message-generator/mock/jdc-mock-jds-receive-solution-while-processing-declared-job.json @@ -0,0 +1,146 @@ +{ + "version": "2", + "doc": [ + "This test does", + "Mock JDC", + "Send SetupConnection and await for SetupConnection.Success", + "Send AllocateMiningJobToken0 and await for AllocateMiningJobToken.Success0", + "Send AllocateMiningJobToken1 and await for AllocateMiningJobToken.Success1", + "Send DeclareMiningJob and await for ProvideMissingTransactions", + "Send SubmitSolution and assert that connection was sustained" + ], + "job_declaration_messages": [ + { + "message": { + "type": "AllocateMiningJobToken", + "user_identifier": "", + "request_id": 0, + "coinbase_tx_outputs": [] + }, + "id": "allocate_mining_job_token0" + }, + { + "message": { + "type": "AllocateMiningJobToken", + "user_identifier": "", + "request_id": 1, + "coinbase_tx_outputs": [] + }, + "id": "allocate_mining_job_token1" + }, + { + "message": { + "type": "DeclareMiningJob", + "request_id": 0, + "mining_job_token": [1, 0, 0, 0], + "version": 0, + "coinbase_prefix": [2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 55, 2, 128, 121, 0, 83, 116, 114, 97, 116, 117, 109, 32, 118, 50, 32, 83, 82, 73, 32, 80, 111, 111, 108], + "coinbase_suffix": [255, 255, 255, 255, 2, 168, 247, 5, 42, 1, 0, 0, 0, 22, 0, 20, 235, 225, 183, 220, 194, 147, 204, 170, 14, 231, 67, 168, 111, 137, 223, 130, 88, 194, 8, 252, 0, 0, 0, 0, 0, 0, 0, 0, 38, 106, 36, 170, 33, 169, 237, 226, 201, 13, 62, 213, 94, 164, 53, 216, 76, 246, 14, 110, 125, 255, 48, 66, 12, 220, 90, 217, 209, 75, 129, 37, 185, 117, 116, 254, 30, 81, 159, 1, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "tx_short_hash_nonce": 0, + "tx_short_hash_list": [[95, 135, 113, 8, 147, 179]], + "tx_hash_list_hash": [133, 189, 184, 91, 252, 203, 225, 42, 233, 16, 77, 119, 76, 134, 93, 189, 192, 159, 221, 130, 150, 196, 18, 32, 54, 212, 138, 255, 57, 63, 118, 74], + "excess_data": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + }, + "id": "declare_mining_job" + }, + { + "message": { + "type": "SubmitSolution", + "extranonce": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], + "prev_hash": [184, 103, 138, 88, 153, 105, 236, 29, 123, 246, 107, 203, 1, 33, 10, 122, 188, 139, 218, 141, 62, 177, 158, 101, 125, 92, 214, 150, 199, 220, 29, 8], + "ntime": 0, + "nonce": 0, + "nbits": 0, + "version": 0 + }, + "id": "submit_solution" + } + ], + "frame_builders": [ + { + "type": "automatic", + "message_id": "test/message-generator/messages/common_messages.json::setup_connection_job_declarator" + }, + { + "type": "automatic", + "message_id": "allocate_mining_job_token0" + }, + { + "type": "automatic", + "message_id": "allocate_mining_job_token1" + }, + { + "type": "automatic", + "message_id": "declare_mining_job" + }, + { + "type": "automatic", + "message_id": "submit_solution" + } + ], + "actions": [ + { + "message_ids": ["setup_connection_job_declarator"], + "role": "client", + "results": [ + { + "type": "match_message_type", + "value": "0x01" + } + ], + "actiondoc": "This action sends SetupConnection and awaits for a SetupConnection.Success" + }, + { + "message_ids": ["allocate_mining_job_token0"], + "role": "client", + "results": [ + { + "type": "match_message_type", + "value": "0x51" + } + ], + "actiondoc": "This action sends AllocateMiningJobToken0 and awaits for a AllocateMiningJobToken.Success0" + }, + { + "message_ids": ["allocate_mining_job_token1"], + "role": "client", + "results": [ + { + "type": "match_message_type", + "value": "0x51" + } + ], + "actiondoc": "This action sends AllocateMiningJobToken1 and awaits for a AllocateMiningJobToken.Success1" + }, + { + "message_ids": ["declare_mining_job"], + "role": "client", + "results": [ + { + "type": "match_message_type", + "value": "0x55" + } + ], + "actiondoc": "This action sends DeclareMiningJob and awaits for a ProvideMissingTransactions" + }, + { + "message_ids": ["submit_solution"], + "role": "client", + "results": [ + { + "type": "sustain_connection" + } + ], + "actiondoc": "This action sends SubmitSolution and asserts that connection was sustained" + } + ], + "setup_commands": [], + "execution_commands": [], + "cleanup_commands": [], + "role": "client", + "downstream": { + "ip": "127.0.0.1", + "port": 34264, + "pub_key": "9auqWEzQDVyd2oe1JVGFLMLHZtCo2FFqZwtKA5gd9xbuEu7PH72" + } +} diff --git a/test/message-generator/test/jds-receive-solution-while-processing-declared-job/jds-receive-solution-while-processing-declared-job.json b/test/message-generator/test/jds-receive-solution-while-processing-declared-job/jds-receive-solution-while-processing-declared-job.json new file mode 100644 index 0000000000..27807bb82c --- /dev/null +++ b/test/message-generator/test/jds-receive-solution-while-processing-declared-job/jds-receive-solution-while-processing-declared-job.json @@ -0,0 +1,79 @@ +{ + "version": "2", + "doc": [ + "This test does", + "Launch real JDS", + "Mock a JDC that sends SubmitSolution before ProvideMissingTransactionsSuccess" + ], + "frame_builders": [ + ], + "actions": [ + ], + "setup_commands": [ + { + "command": "cargo", + "args": [ + "llvm-cov", + "--no-report", + "run", + "-p", + "jd_server", + "--", + "-c", + "../test/config/jds-receive-solution-while-processing-declared-job/jds-config.toml" + ], + "conditions": { + "WithConditions": { + "conditions": [ + { + "output_string": "JD INITIALIZED", + "output_location": "StdOut", + "late_condition": false, + "condition": true + } + ], + "timer_secs": 300, + "warn_no_panic": false + } + } + }, + { + "command": "cargo", + "args": [ + "run", + "../../test/message-generator/mock/jdc-mock-jds-receive-solution-while-processing-declared-job.json" + ], + + "conditions": { + "WithConditions": { + "conditions": [ + { + "output_string": "TEST FAIL", + "output_location": "StdErr", + "condition": false, + "late_condition": false + } + ], + "timer_secs": 600, + "warn_no_panic": true + } + } + }, + { + "command": "sleep", + "args": ["1000"], + "conditions": "None" + } + ], + "execution_commands": [ + ], + "cleanup_commands": [ + { + "command": "pkill", + "args": ["-f", "jd_server", "-SIGINT"], + "late_condition": false, + "conditions": "None" + } + ], + "role": "none" +} diff --git a/test/message-generator/test/jds-receive-solution-while-processing-declared-job/jds-receive-solution-while-processing-declared-job.sh b/test/message-generator/test/jds-receive-solution-while-processing-declared-job/jds-receive-solution-while-processing-declared-job.sh new file mode 100755 index 0000000000..39c8559ef6 --- /dev/null +++ b/test/message-generator/test/jds-receive-solution-while-processing-declared-job/jds-receive-solution-while-processing-declared-job.sh @@ -0,0 +1,9 @@ +cd roles +cargo llvm-cov --no-report -p jd_server + +cd ../utils/message-generator/ +cargo build + +RUST_LOG=debug cargo run ../../test/message-generator/test/jds-receive-solution-while-processing-declared-job/jds-receive-solution-while-processing-declared-job.json || { echo 'mg test failed' ; exit 1; } + +sleep 10