From 9b86724c0db55854f77bbf9af631605139ff4203 Mon Sep 17 00:00:00 2001 From: Hsiao-Wei Wang Date: Sat, 11 Feb 2023 00:30:25 +0800 Subject: [PATCH] Run test_btec_script.py in CI --- .circleci/config.yml | 3 ++ test_btec_script.py | 85 ++++++++++++++++++++++++++++++++++++++++++++ tox.ini | 1 + 3 files changed, 89 insertions(+) create mode 100755 test_btec_script.py diff --git a/.circleci/config.yml b/.circleci/config.yml index 85ce3e1..6a99824 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -105,6 +105,9 @@ jobs: - run: name: Run deposit script on Windows" command: python ./test_deposit_script.py + - run: + name: Run btec script on Windows" + command: python ./test_btec_script.py build-linux-amd64: machine: image: ubuntu-2004:202201-02 diff --git a/test_btec_script.py b/test_btec_script.py new file mode 100755 index 0000000..6e6e22b --- /dev/null +++ b/test_btec_script.py @@ -0,0 +1,85 @@ +import asyncio +import os + +# For not importing staking_deposit here +DEFAULT_VALIDATOR_KEYS_FOLDER_NAME = 'bls_to_execution_changes' + + +async def main(): + my_folder_path = os.path.join(os.getcwd(), 'TESTING_TEMP_FOLDER') + if not os.path.exists(my_folder_path): + os.mkdir(my_folder_path) + + if os.name == 'nt': # Windows + run_script_cmd = 'sh deposit.sh' + else: # Mac or Linux + run_script_cmd = './deposit.sh' + + install_cmd = run_script_cmd + ' install' + print('[INFO] Creating subprocess 1: installation:' , install_cmd) + proc = await asyncio.create_subprocess_shell( + install_cmd, + ) + await proc.wait() + print('[INFO] Installed') + + cmd_args = [ + run_script_cmd, + '--language', 'english', + '--non_interactive', + 'generate-bls-to-execution-change', + '--bls_to_execution_changes_folder', my_folder_path, + '--chain', 'mainnet', + '--mnemonic', '\"sister protect peanut hill ready work profit fit wish want small inflict flip member tail between sick setup bright duck morning sell paper worry\"', + '--bls_withdrawal_credentials_list', '0x00bd0b5a34de5fb17df08410b5e615dda87caf4fb72d0aac91ce5e52fc6aa8de', + '--validator_start_index', '0', + '--validator_indices', '1', + '--execution_address', '0x3434343434343434343434343434343434343434', + ] + proc = await asyncio.create_subprocess_shell( + ' '.join(cmd_args), + stdin=asyncio.subprocess.PIPE, + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + ) + seed_phrase = '' + parsing = False + async for out in proc.stdout: + output = out.decode('utf-8').rstrip() + if output.startswith("***Using the tool"): + parsing = True + elif output.startswith("This is your mnemonic"): + parsing = True + elif output.startswith("Please type your mnemonic"): + parsing = False + elif parsing: + seed_phrase += output + if len(seed_phrase) > 0: + encoded_phrase = seed_phrase.encode() + proc.stdin.write(encoded_phrase) + proc.stdin.write(b'\n') + print(output) + + async for out in proc.stderr: + output = out.decode('utf-8').rstrip() + print(f'[stderr] {output}') + + assert len(seed_phrase) > 0 + + # Check files + validator_keys_folder_path = os.path.join(my_folder_path, DEFAULT_VALIDATOR_KEYS_FOLDER_NAME) + _, _, key_files = next(os.walk(validator_keys_folder_path)) + + # Clean up + for key_file_name in key_files: + os.remove(os.path.join(validator_keys_folder_path, key_file_name)) + os.rmdir(validator_keys_folder_path) + os.rmdir(my_folder_path) + + +if os.name == 'nt': # Windows + loop = asyncio.ProactorEventLoop() + asyncio.set_event_loop(loop) + loop.run_until_complete(main()) +else: + asyncio.run(main()) diff --git a/tox.ini b/tox.ini index 85356ef..843680d 100644 --- a/tox.ini +++ b/tox.ini @@ -32,6 +32,7 @@ deps= -r{toxinidir}/requirements_test.txt # for async-pytest commands= python {toxinidir}/test_deposit_script.py + python {toxinidir}/test_btec_script.py [testenv:py310-core] deps={[common-core]deps}