From 2296198b44dc6e6720e9c4ba31d78d6927ecc4d4 Mon Sep 17 00:00:00 2001 From: tecnovert Date: Tue, 29 Oct 2024 07:47:52 +0200 Subject: [PATCH] tests: Catch when local key is provided to recoverNoScriptTxnWithKey. --- basicswap/protocols/xmr_swap_1.py | 4 +- .../selenium/test_recover_chain_b_lock_tx.py | 45 +++++++++++++------ 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/basicswap/protocols/xmr_swap_1.py b/basicswap/protocols/xmr_swap_1.py index 18b7e73..7f85161 100644 --- a/basicswap/protocols/xmr_swap_1.py +++ b/basicswap/protocols/xmr_swap_1.py @@ -78,12 +78,14 @@ def recoverNoScriptTxnWithKey(self, bid_id: bytes, encoded_key, session=None): ensure(ci_follower.verifyKey(kbsl), 'Invalid kbsl') ensure(ci_follower.verifyKey(kbsf), 'Invalid kbsf') + if kbsl == kbsf: + raise ValueError('Provided key matches local key') vkbs = ci_follower.sumKeys(kbsl, kbsf) # Ensure summed key matches the expected pubkey summed_pkbs = ci_follower.getPubkey(vkbs) if (summed_pkbs != xmr_swap.pkbs): - err_msg: str = 'Summed key does not match expected wallet' + err_msg: str = 'Summed key does not match expected wallet spend pubkey' have_pk = summed_pkbs.hex() expect_pk = xmr_swap.pkbs.hex() self.log.error(f'{err_msg}. Got: {have_pk}, Expect: {expect_pk}') diff --git a/tests/basicswap/selenium/test_recover_chain_b_lock_tx.py b/tests/basicswap/selenium/test_recover_chain_b_lock_tx.py index 90a80ce..b57c388 100644 --- a/tests/basicswap/selenium/test_recover_chain_b_lock_tx.py +++ b/tests/basicswap/selenium/test_recover_chain_b_lock_tx.py @@ -101,12 +101,31 @@ def recover_chain_b_lock_tx(driver, offer_data, offerer_port, bidder_port): url = f'{offerer_url}/bid/{bid0_id}' driver.get(url) + btn_more_info = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, 'show_txns'))) + btn_more_info.click() + WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, 'hide_txns'))) + offerer_localkeyhalf = driver.find_element(By.ID, 'localkeyhalf').text + print('Offerer keyhalf', offerer_localkeyhalf) + + print('Trying with the local key in place of remote') + btn_edit = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, 'edit_bid'))) + btn_edit.click() + btn_submit = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, 'edit_bid_submit'))) + kbs_other = driver.find_element(By.ID, 'kbs_other') + kbs_other.send_keys(offerer_localkeyhalf) + btn_submit.click() + + btn_edit = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, 'edit_bid'))) + elements = driver.find_elements(By.CLASS_NAME, 'error_msg') + expect_err_msg: str = 'Provided key matches local key' + assert (any(expect_err_msg in el.text for el in elements)) + print('Found expected error: ' + expect_err_msg) + + print('Trying with incorrect key') btn_edit = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, 'edit_bid'))) btn_edit.click() btn_submit = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, 'edit_bid_submit'))) - kbs_other = driver.find_element(By.ID, 'kbs_other') - print('Trying to recover with incorrect key') last_byte = bidder_localkeyhalf[-2:] invalid_byte = '01' if last_byte == '00' else '00' kbs_other.send_keys(bidder_localkeyhalf[:-2] + invalid_byte) @@ -116,6 +135,9 @@ def recover_chain_b_lock_tx(driver, offer_data, offerer_port, bidder_port): elements = driver.find_elements(By.CLASS_NAME, 'error_msg') expect_err_msg: str = 'Summed key does not match expected wallet' assert (any(expect_err_msg in el.text for el in elements)) + print('Found expected error: ' + expect_err_msg) + + print('Trying with correct key') btn_edit.click() btn_submit = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, 'edit_bid_submit'))) @@ -133,34 +155,31 @@ def recover_chain_b_lock_tx(driver, offer_data, offerer_port, bidder_port): time.sleep(2) kbs_other = driver.find_element(By.ID, 'kbs_other') - print('Trying to recover with correct key') kbs_other.send_keys(bidder_localkeyhalf) btn_submit.click() btn_edit = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, 'edit_bid'))) elements = driver.find_elements(By.CLASS_NAME, 'infomsg') expect_msg: str = 'Bid edited' assert (any(expect_msg in el.text for el in elements)) + print('Found expected message: ' + expect_msg) - print('Trying with nodes reversed (should fail as already spent)') - url = f'{offerer_url}/bid/{bid0_id}' - driver.get(url) - btn_more_info = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, 'show_txns'))) - btn_more_info.click() - WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, 'hide_txns'))) - offerer_localkeyhalf = driver.find_element(By.ID, 'localkeyhalf').text - print('Offerer keyhalf', offerer_localkeyhalf) - + print('Trying with nodes reversed (should fail as already spent)') # But should sum to the expected wallet key url = f'{bidder_url}/bid/{bid0_id}' driver.get(url) btn_edit = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, 'edit_bid'))) btn_edit.click() btn_submit = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, 'edit_bid_submit'))) + driver.get(url) + btn_edit = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, 'edit_bid'))) + btn_edit.click() + btn_submit = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, 'edit_bid_submit'))) + kbs_other = driver.find_element(By.ID, 'kbs_other') kbs_other.send_keys(offerer_localkeyhalf) btn_submit.click() btn_edit = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, 'edit_bid'))) - # in log: "Balance is too low, checking for existing spend" + # In log: "Balance is too low, checking for existing spend" # Should error here, but the code can't tell where the tx was sent, and treats any existing send as correct. elements = driver.find_elements(By.CLASS_NAME, 'infomsg') expect_msg: str = 'Bid edited'