Migrated to postgres and added pub32 tests

This commit is contained in:
kexkey
2021-11-05 22:46:36 -04:00
parent da35fc50e3
commit 8a62c146a9
44 changed files with 2299 additions and 530 deletions

View File

@@ -1,5 +1,9 @@
#!/bin/sh
# This needs to be run in regtest
# This will mine n blocks. If n is not supplied, will mine 1 block.
# Mine
mine() {
local nbblocks=${1:-1}

View File

@@ -0,0 +1,15 @@
#!/bin/sh
date
callbackservername=${1:-"tests-manage-missed"}
callbackserverport=${2:-"1111"}
callbackserverport2=${3:-"1112"}
callbackserverport3=${4:-"1113"}
callbackserverport4=${5:-"1114"}
docker run --rm -d --network cyphernodeappsnet --name ${callbackservername} alpine sh -c "nc -vlkp${callbackserverport} -e sh -c 'echo -en \"HTTP/1.1 200 OK\\\\r\\\\n\\\\r\\\\n\" ; date >&2 ; timeout 1 tee /dev/tty | cat ; echo 1>&2'"
docker exec -d ${callbackservername} sh -c "nc -vlkp${callbackserverport2} -e sh -c 'echo -en \"HTTP/1.1 200 OK\\\\r\\\\n\\\\r\\\\n\" ; date >&2 ; timeout 1 tee /dev/tty | cat ; echo 1>&2'"
docker exec -d ${callbackservername} sh -c "nc -vlkp${callbackserverport3} -e sh -c 'echo -en \"HTTP/1.1 200 OK\\\\r\\\\n\\\\r\\\\n\" ; date >&2 ; timeout 1 tee /dev/tty | cat ; echo 1>&2'"
docker exec -d ${callbackservername} sh -c "nc -vlkp${callbackserverport4} -e sh -c 'echo -en \"HTTP/1.1 200 OK\\\\r\\\\n\\\\r\\\\n\" ; date >&2 ; timeout 1 tee /dev/tty | cat ; echo 1>&2'"

View File

@@ -2,6 +2,26 @@
# docker exec -it $(docker ps -q -f "name=proxy\.") ./tests/test-batching.sh
# This needs to be run in regtest
# This will test:
#
# - listbatchers
# - getbatcher
# - getbatchdetails
# - getnewaddress
# - addtobatch
# - batchspend
# - removefrombatch
# - createbatcher
#
# Notes:
# curl localhost:8888/listbatchers | jq
# curl -d '{}' localhost:8888/getbatcher | jq
# curl -d '{}' localhost:8888/getbatchdetails | jq
@@ -316,6 +336,10 @@ testbatching() {
# List batchers
# Remove from batch
# List batchers
echo
echo "Tests successful!"
}
wait_for_callbacks() {

View File

@@ -1,5 +1,17 @@
#!/bin/sh
# docker run -it --rm -it --name test-derive --network=cyphernodenet -v "$PWD/test-derive.sh:/test-derive.sh" alpine /test-derive.sh
# This will test:
#
# - deriveindex
# - derivepubpath
# - deriveindex_bitcoind
# - derivepubpath_bitcoind
#
# ...and it will compare performance between Pycoin et Bitcoin Core's address derivations...
#
test_derive() {
local address
local address1

View File

@@ -3,6 +3,16 @@
. ./colors.sh
. ./mine.sh
# This needs to be run in regtest
# This will test the missed watched transactions mechanisms by broadcasting
# transactions on watched addresses while the proxy is shut down...
#
# - getnewaddress
# - watch
# - executecallbacks
#
trace() {
if [ "${1}" -le "${TRACING}" ]; then
echo "$(date -u +%FT%TZ) ${2}" 1>&2
@@ -46,10 +56,11 @@ test_manage_missed_0_conf() {
trace 3 "[test_manage_missed_0_conf] response=${response}"
trace 3 "[test_manage_missed_0_conf] Shutting down the proxy..."
docker stop $(docker ps -q -f "name=proxy")
docker stop $(docker ps -q -f "name=proxy\.")
trace 3 "[test_manage_missed_0_conf] Sending coins to watched address while proxy is down..."
docker exec -it $(docker ps -q -f "name=cyphernode_bitcoin") bitcoin-cli -rpcwallet=spending01.dat sendtoaddress ${address} 0.0001
# txid1=$(exec_in_test_container curl -d '{"address":"'${address}'","amount":0.0001}' proxy:8888/spend | jq -r ".txid")
trace 3 "[test_manage_missed_0_conf] Sleeping for 10 seconds to let the proxy restart..."
sleep 10
@@ -87,12 +98,13 @@ test_manage_missed_1_conf() {
trace 3 "[test_manage_missed_1_conf] Sending coins to watched address while proxy is up..."
docker exec -it $(docker ps -q -f "name=cyphernode_bitcoin") bitcoin-cli -rpcwallet=spending01.dat sendtoaddress ${address} 0.0001
# txid1=$(exec_in_test_container curl -d '{"address":"'${address}'","amount":0.0001}' proxy:8888/spend | jq -r ".txid")
trace 3 "[test_manage_missed_1_conf] Sleeping for 10 seconds to let the 0-conf callbacks to happen..."
sleep 10
trace 3 "[test_manage_missed_1_conf] Shutting down the proxy..."
docker stop $(docker ps -q -f "name=proxy")
docker stop $(docker ps -q -f "name=proxy\.")
trace 3 "[test_manage_missed_1_conf] Mine a new block..."
mine
@@ -116,6 +128,7 @@ wait_for_callbacks() {
TRACING=3
stop_test_container
start_test_container
wait_for_callbacks

View File

@@ -0,0 +1,445 @@
#!/bin/sh
. ./colors.sh
. ./mine.sh
# This needs to be run in regtest
# This will test:
#
# - watchxpub
# - get_unused_addresses_by_watchlabel
# - derivepubpath_bitcoind
# - getactivexpubwatches
# - getactivewatchesbyxpub
# - getactivewatchesbylabel
# - spend
# - get_txns_by_watchlabel
# - unwatchxpubbyxpub
# - unwatchxpubbylabel
#
trace() {
if [ "${1}" -le "${TRACING}" ]; then
echo "$(date -u +%FT%TZ) ${2}" 1>&2
fi
}
start_test_container() {
docker run -d --rm -it --name tests-watch-pub32 --network=cyphernodenet alpine
}
stop_test_container() {
trace 1 "\n\n[test_watch_pub32] ${BCyan}Stopping existing containers if they are running...${Color_Off}\n"
docker stop tests-watch-pub32
docker stop tests-watch-pub32-cb
}
exec_in_test_container() {
docker exec -it tests-watch-pub32 "$@"
}
test_watch_pub32() {
# Watch an xpub
# 1. Call watchxpub with xpub1 label1 with url1 as callback
# 2. Call watchxpub with xpub2 label2 with url2 as callback
# 3. Call get_unused_addresses_by_watchlabel with label1 /10, take last as address1, save index1
# 4. Call get_unused_addresses_by_watchlabel with label2 /10, take last as address2, save index2
# 5. Call derivepubpath_bitcoind with xpub1 path 0/index1, compare with address1
# 6. Call derivepubpath_bitcoind with xpub2 path 0/index2, compare with address2
# 7. Call getactivexpubwatches
# 8. Call getactivewatchesbyxpub with xpub1, compare index1'th address with address1
# 9. Call getactivewatchesbyxpub with xpub2, compare index2'th address with address2
# 10. Call getactivewatchesbylabel with label1, compare index1'th address with address1
# 11. Call getactivewatchesbylabel with label2, compare index2'th address with address2
# 12. Send coins to address1, wait for callback
# 13. Send coins to address2, wait for callback
# 14. Call get_txns_by_watchlabel for label1, search sent tx
# 15. Call get_txns_by_watchlabel for label2, search sent tx
# 16. Call get_unused_addresses_by_watchlabel with label1 /10, check address1 is NOT there
# 17. Call get_unused_addresses_by_watchlabel with label2 /10, check address2 is NOT there
# 18. Call getactivexpubwatches
# 19. Call getactivewatchesbyxpub with xpub1, last n should be 10 more (index1 + 100)
# 20. Call getactivewatchesbyxpub with xpub2, last n should be 10 more (index2 + 100)
# 21. Call unwatchxpubbyxpub with xpub1
# 22. Call unwatchxpubbylabel with label2
# 23. Call getactivewatchesbyxpub with xpub1, should be empty
# 24. Call getactivewatchesbyxpub with xpub2, should be empty
local xpub1="upub5GtUcgGed1aGH4HKQ3vMYrsmLXwmHhS1AeX33ZvDgZiyvkGhNTvGd2TA5Lr4v239Fzjj4ZY48t6wTtXUy2yRgapf37QHgt6KWEZ6bgsCLpb"
local xpub2="tpubD6NzVbkrYhZ4YR3QK2tyfMMvBghAvqtNaNK1LTyDWcRHLcMUm3ZN2cGm5BS3MhCRCeCkXQkTXXjiJgqxpqXK7PeUSp86DTTgkLpcjMtpKWk"
local label1="label$RANDOM"
local label2="label$RANDOM"
local path1="0/n"
local path2="0/n"
local path_a1
local path_a2
local callbackurl0conf1="http://${callbackservername}:1111/callbackurl0conf1"
local callbackurl1conf1="http://${callbackservername}:1112/callbackurl1conf1"
local callbackurl0conf2="http://${callbackservername}:1113/callbackurl0conf2"
local callbackurl1conf2="http://${callbackservername}:1114/callbackurl1conf2"
local address
local address1
local address2
local last_imported_n1
local last_imported_n2
local last_imported_n1_x
local last_imported_n2_x
local index
local index1
local index2
local txid
local txid1
local txid2
local data
local response
trace 1 "\n\n[test_watch_pub32] ${BCyan}Let's test \"watch by xpub\" features!...${Color_Off}\n"
# 1. Call watchxpub with xpub1 label1 with url1 as callback
trace 2 "\n\n[test_watch_pub32] ${BCyan}1. watchxpub 1...${Color_Off}\n"
data='{"label":"'${label1}'","pub32":"'${xpub1}'","path":"'${path1}'","nstart":0,"unconfirmedCallbackURL":"'${callbackurl0conf1}'","confirmedCallbackURL":"'${callbackurl1conf1}'"}'
trace 3 "[test_watch_pub32] data=${data}"
response=$(exec_in_test_container curl -d "${data}" proxy:8888/watchxpub)
trace 3 "[test_watch_pub32] response=${response}"
data=$(echo "${response}" | jq -re ".label")
if [ "${label1}" != "${data}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 1. watchxpub 1 failed! ${Color_Off}\n"
return 10
fi
# 2. Call watchxpub with xpub2 label2 with url2 as callback
trace 2 "\n\n[test_watch_pub32] ${BCyan}2. watchxpub 2...${Color_Off}\n"
data='{"label":"'${label2}'","pub32":"'${xpub2}'","path":"'${path2}'","nstart":0,"unconfirmedCallbackURL":"'${callbackurl0conf2}'","confirmedCallbackURL":"'${callbackurl1conf2}'"}'
trace 3 "[test_watch_pub32] data=${data}"
response=$(exec_in_test_container curl -d "${data}" proxy:8888/watchxpub)
trace 3 "[test_watch_pub32] response=${response}"
data=$(echo "${response}" | jq -re ".label")
if [ "${label2}" != "${data}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 2. watchxpub 2 failed! ${Color_Off}\n"
return 20
fi
# 3. Call get_unused_addresses_by_watchlabel with label1 /10, take last as address1, save index1
trace 2 "\n\n[test_watch_pub32] ${BCyan}3. Call get_unused_addresses_by_watchlabel with label1 /10...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/get_unused_addresses_by_watchlabel/${label1}/10)
trace 3 "[test_watch_pub32] response=${response}"
address1=$(echo "${response}" | jq -r ".label_unused_addresses[9] | .address")
trace 3 "[test_watch_pub32] address1=${address1}"
index1=$(echo "${response}" | jq -r ".label_unused_addresses[9] | .address_pub32_index")
trace 3 "[test_watch_pub32] index1=${index1}"
if [ "${address1}" = "null" ] || [ "${index1}" = "null" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 3. Call get_unused_addresses_by_watchlabel with label1 /10! ${Color_Off}\n"
return 87
fi
# 4. Call get_unused_addresses_by_watchlabel with label2 /10, take last as address2, save index2
trace 2 "\n\n[test_watch_pub32] ${BCyan}4. Call get_unused_addresses_by_watchlabel with label2 /10...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/get_unused_addresses_by_watchlabel/${label2}/10)
trace 3 "[test_watch_pub32] response=${response}"
address2=$(echo "${response}" | jq -r ".label_unused_addresses[9] | .address")
trace 3 "[test_watch_pub32] address2=${address2}"
index2=$(echo "${response}" | jq -r ".label_unused_addresses[9] | .address_pub32_index")
trace 3 "[test_watch_pub32] index2=${index2}"
if [ "${address2}" = "null" ] || [ "${index2}" = "null" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 4. Call get_unused_addresses_by_watchlabel with label2 /10! ${Color_Off}\n"
return 87
fi
# 5. Call derivepubpath_bitcoind with xpub1 path 0/index1, compare with address1
trace 2 "\n\n[test_watch_pub32] ${BCyan}5. Call derivepubpath_bitcoind with xpub1 path 0/index1...${Color_Off}\n"
path_a1=$(echo "${path1}" | sed -En "s/n/${index1}/p")
data='{"pub32":"'${xpub1}'","path":"'${path_a1}'"}'
trace 3 "[test_watch_pub32] data=${data}"
response=$(exec_in_test_container curl -d "${data}" proxy:8888/derivepubpath_bitcoind)
trace 3 "[test_watch_pub32] response=${response}"
address=$(echo "${response}" | jq -r ".[0]")
trace 3 "[test_watch_pub32] address=${address}"
if [ "${address}" != "${address1}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 5. Call derivepubpath_bitcoind with xpub1 path 0/index1! ${Color_Off}\n"
return 30
fi
# 6. Call derivepubpath_bitcoind with xpub2 path 0/index2, compare with address2
trace 2 "\n\n[test_watch_pub32] ${BCyan}6. Call derivepubpath_bitcoind with xpub2 path 0/index2...${Color_Off}\n"
path_a2=$(echo "${path2}" | sed -En "s/n/${index2}/p")
data='{"pub32":"'${xpub2}'","path":"'${path_a2}'"}'
trace 3 "[test_watch_pub32] data=${data}"
response=$(exec_in_test_container curl -d "${data}" proxy:8888/derivepubpath_bitcoind)
trace 3 "[test_watch_pub32] response=${response}"
address=$(echo "${response}" | jq -r ".[0]")
trace 3 "[test_watch_pub32] address=${address}"
if [ "${address}" != "${address2}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 6. Call derivepubpath_bitcoind with xpub2 path 0/index2! ${Color_Off}\n"
return 30
fi
# 7. Call getactivexpubwatches
trace 2 "\n\n[test_watch_pub32] ${BCyan}7. getactivexpubwatches...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/getactivexpubwatches)
trace 3 "[test_watch_pub32] response=${response}"
last_imported_n1=$(echo "${response}" | jq -r ".watches | map(select(.pub32 == \"${xpub1}\"))[0] | .last_imported_n")
trace 3 "[test_watch_pub32] last_imported_n1=${last_imported_n1}"
last_imported_n2=$(echo "${response}" | jq -r ".watches | map(select(.pub32 == \"${xpub2}\"))[0] | .last_imported_n")
trace 3 "[test_watch_pub32] last_imported_n2=${last_imported_n2}"
if [ "${last_imported_n1}" -ne "100" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 7. \"${last_imported_n1}\" -ne \"100\"! ${Color_Off}\n"
return 50
fi
if [ "${last_imported_n2}" -ne "100" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 7. \"${last_imported_n2}\" -ne \"100\"! ${Color_Off}\n"
return 55
fi
# 8. Call getactivewatchesbyxpub with xpub1, compare index1'th address with address1
trace 2 "\n\n[test_watch_pub32] ${BCyan}8. Call getactivewatchesbyxpub with xpub1...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/getactivewatchesbyxpub/${xpub1})
# trace 3 "[test_watch_pub32] response=${response}"
address=$(echo "${response}" | jq -r ".watches | map(select(.pub32_index == ${index1}))[0] | .address")
trace 3 "[test_watch_pub32] ${index1}th address=${address}"
if [ "${address}" != "${address1}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 8. Call getactivewatchesbyxpub with xpub1: \"${address}\" != \"${address1}\"! ${Color_Off}\n"
return 60
fi
# Check if last_imported_n1 exists in watched list
index=$(echo "${response}" | jq -r "[.watches[].pub32_index] | index(${last_imported_n1})")
trace 3 "[test_watch_pub32] index=${index}"
if [ "${index}" != "100" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 8. Call getactivewatchesbyxpub with xpub1: \"${index}\" != \"100\"! ${Color_Off}\n"
return 65
fi
# 9. Call getactivewatchesbyxpub with xpub2, compare index2'th address with address2
trace 2 "\n\n[test_watch_pub32] ${BCyan}9. Call getactivewatchesbyxpub with xpub2...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/getactivewatchesbyxpub/${xpub2})
# trace 3 "[test_watch_pub32] response=${response}"
address=$(echo "${response}" | jq -r ".watches | map(select(.pub32_index == ${index2}))[0] | .address")
trace 3 "[test_watch_pub32] ${index2}th address=${address}"
if [ "${address}" != "${address2}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 9. Call getactivewatchesbyxpub with xpub2: \"${address}\" != \"${address2}\"! ${Color_Off}\n"
return 60
fi
# Check if last_imported_n1 exists in watched list
index=$(echo "${response}" | jq -r "[.watches[].pub32_index] | index(${last_imported_n2})")
trace 3 "[test_watch_pub32] index=${index}"
if [ "${index}" != "100" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 9. Call getactivewatchesbyxpub with xpub2: \"${index}\" != \"100\"! ${Color_Off}\n"
return 65
fi
# 10. Call getactivewatchesbylabel with label1, compare index1'th address with address1
trace 2 "\n\n[test_watch_pub32] ${BCyan}10. Call getactivewatchesbylabel with label1...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/getactivewatchesbylabel/${label1})
# trace 3 "[test_watch_pub32] response=${response}"
address=$(echo "${response}" | jq -r ".watches | map(select(.pub32_index == ${index1}))[0] | .address")
trace 3 "[test_watch_pub32] ${index1}th address=${address}"
if [ "${address}" != "${address1}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 10. Call getactivewatchesbylabel with label1: \"${address}\" != \"${address1}\"! ${Color_Off}\n"
return 80
fi
# 11. Call getactivewatchesbylabel with label2, compare index2'th address with address2
trace 2 "\n\n[test_watch_pub32] ${BCyan}11. Call getactivewatchesbylabel with label2...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/getactivewatchesbylabel/${label2})
# trace 3 "[test_watch_pub32] response=${response}"
address=$(echo "${response}" | jq -r ".watches | map(select(.pub32_index == ${index2}))[0] | .address")
trace 3 "[test_watch_pub32] ${index2}th address=${address}"
if [ "${address}" != "${address2}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 11. Call getactivewatchesbylabel with label2: \"${address}\" != \"${address2}\"! ${Color_Off}\n"
return 80
fi
# 12. Send coins to address1, wait for callback
trace 2 "\n\n[test_watch_pub32] ${BCyan}12. Send coins to address1...${Color_Off}\n"
start_callback_server 1111
# Let's use the bitcoin node directly to better simulate an external spend
txid1=$(docker exec -it $(docker ps -q -f "name=cyphernode_bitcoin") bitcoin-cli -rpcwallet=spending01.dat sendtoaddress ${address1} 0.0001 | tr -d "\r\n")
# txid1=$(exec_in_test_container curl -d '{"address":"'${address1}'","amount":0.001}' proxy:8888/spend | jq -r ".txid")
trace 3 "[test_watch_pub32] txid1=${txid1}"
trace 3 "[test_watch_pub32] Waiting for 0-conf callback on address1..."
wait
# 13. Send coins to address2, wait for callback
trace 2 "\n\n[test_watch_pub32] ${BCyan}13. Send coins to address2...${Color_Off}\n"
start_callback_server 1113
# Let's use the bitcoin node directly to better simulate an external spend
txid2=$(docker exec -it $(docker ps -q -f "name=cyphernode_bitcoin") bitcoin-cli -rpcwallet=spending01.dat sendtoaddress ${address2} 0.0001 | tr -d "\r\n")
# txid2=$(exec_in_test_container curl -d '{"address":"'${address2}'","amount":0.001}' proxy:8888/spend | jq -r ".txid")
trace 3 "[test_watch_pub32] txid2=${txid2}"
trace 3 "[test_watch_pub32] Waiting for 0-conf callback on address2..."
wait
# 14. Call get_txns_by_watchlabel for label1, search sent tx
trace 2 "\n\n[test_watch_pub32] ${BCyan}14. Call get_txns_by_watchlabel for label1...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/get_txns_by_watchlabel/${label1}/1000)
trace 3 "[test_watch_pub32] response=${response}"
txid=$(echo "${response}" | jq -r ".label_txns | map(select(.txid == \"${txid1}\"))[0] | .txid")
trace 3 "[test_watch_pub32] txid searched=${txid}"
if [ "${txid}" != "${txid1}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 14. Call get_txns_by_watchlabel for label1: \"${txid}\" != \"${txid1}\"! ${Color_Off}\n"
return 88
fi
# 15. Call get_txns_by_watchlabel for label2, search sent tx
trace 2 "\n\n[test_watch_pub32] ${BCyan}15. Call get_txns_by_watchlabel for label2...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/get_txns_by_watchlabel/${label2}/1000)
trace 3 "[test_watch_pub32] response=${response}"
txid=$(echo "${response}" | jq -r ".label_txns | map(select(.txid == \"${txid2}\"))[0] | .txid")
trace 3 "[test_watch_pub32] txid searched=${txid}"
if [ "${txid}" != "${txid2}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 15. Call get_txns_by_watchlabel for label2: \"${txid}\" != \"${txid2}\"! ${Color_Off}\n"
return 88
fi
# 16. Call get_unused_addresses_by_watchlabel with label1 /10, check address1 is NOT there
trace 2 "\n\n[test_watch_pub32] ${BCyan}16. Call get_unused_addresses_by_watchlabel with label1 /10...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/get_unused_addresses_by_watchlabel/${label1}/10)
trace 3 "[test_watch_pub32] response=${response}"
address=$(echo "${response}" | jq -r ".label_unused_addresses | map(select(.address == \"${address1}\"))[0] | .address")
trace 3 "[test_watch_pub32] ${index1}th address searched=${address}"
if [ "${address}" = "${address1}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 16. Call get_unused_addresses_by_watchlabel with label1 /10: \"${address}\" = \"${address1}\"! ${Color_Off}\n"
return 87
fi
# 17. Call get_unused_addresses_by_watchlabel with label2 /10, check address2 is NOT there
trace 2 "\n\n[test_watch_pub32] ${BCyan}17. Call get_unused_addresses_by_watchlabel with label2 /10...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/get_unused_addresses_by_watchlabel/${label2}/10)
trace 3 "[test_watch_pub32] response=${response}"
address=$(echo "${response}" | jq -r ".label_unused_addresses | map(select(.address == \"${address2}\"))[0] | .address")
trace 3 "[test_watch_pub32] ${index2}th address searched=${address}"
if [ "${address}" = "${address2}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 17. Call get_unused_addresses_by_watchlabel with label2 /10: \"${address}\" = \"${address2}\"! ${Color_Off}\n"
return 87
fi
# 18. Call getactivexpubwatches
trace 2 "\n\n[test_watch_pub32] ${BCyan}18. getactivexpubwatches...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/getactivexpubwatches)
trace 3 "[test_watch_pub32] response=${response}"
last_imported_n1_x=$(echo "${response}" | jq -r ".watches | map(select(.pub32 == \"${xpub1}\"))[0] | .last_imported_n")
trace 3 "[test_watch_pub32] last_imported_n1_x=${last_imported_n1_x}"
last_imported_n2_x=$(echo "${response}" | jq -r ".watches | map(select(.pub32 == \"${xpub2}\"))[0] | .last_imported_n")
trace 3 "[test_watch_pub32] last_imported_n2_x=${last_imported_n2_x}"
if [ "${last_imported_n1_x}" -ne "$((100+${index1}))" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 18. Call getactivexpubwatches: \"${last_imported_n1_x}\" -ne \"$((100+${index1}))\"! ${Color_Off}\n"
return 90
fi
if [ "${last_imported_n2_x}" -ne "$((100+${index2}))" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 18. Call getactivexpubwatches \"${last_imported_n2_x}\" -ne \"$((100+${index2}))\"! ${Color_Off}\n"
return 95
fi
# 19. Call getactivewatchesbyxpub with xpub1, last n should be 10 more (index1 + 100)
trace 2 "\n\n[test_watch_pub32] ${BCyan}19. Call getactivewatchesbyxpub with xpub1...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/getactivewatchesbyxpub/${xpub1})
# trace 3 "[test_watch_pub32] response=${response}"
index=$(echo "${response}" | jq -r "[.watches[].pub32_index] | index(${last_imported_n1_x})")
trace 3 "[test_watch_pub32] index=${index}"
if [ "${index}" != "${last_imported_n1_x}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 19. Call getactivewatchesbyxpub with xpub1: \"${index}\" != \"${last_imported_n1_x}\"! ${Color_Off}\n"
return 100
fi
# 20. Call getactivewatchesbyxpub with xpub2, last n should be 10 more (index2 + 100)
trace 2 "\n\n[test_watch_pub32] ${BCyan}20. Call getactivewatchesbyxpub with xpub2...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/getactivewatchesbyxpub/${xpub2})
# trace 3 "[test_watch_pub32] response=${response}"
index=$(echo "${response}" | jq -r "[.watches[].pub32_index] | index(${last_imported_n2_x})")
trace 3 "[test_watch_pub32] index=${index}"
if [ "${index}" != "${last_imported_n2_x}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 20. Call getactivewatchesbyxpub with xpub2: \"${index}\" != \"${last_imported_n2_x}\"! ${Color_Off}\n"
return 100
fi
# 21. Call unwatchxpubbyxpub with xpub1
trace 2 "\n\n[test_watch_pub32] ${BCyan}21. unwatchxpubbyxpub with xpub1...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/unwatchxpubbyxpub/${xpub1})
trace 3 "[test_watch_pub32] response=${response}"
data=$(echo "${response}" | jq -re ".pub32")
if [ "${xpub1}" != "${data}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 21. Call unwatchxpubbyxpub with xpub1! ${Color_Off}\n"
return 120
fi
# 22. Call unwatchxpubbylabel with label2
trace 2 "\n\n[test_watch_pub32] ${BCyan}22. unwatchxpubbylabel with label2...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/unwatchxpubbylabel/${label2})
trace 3 "[test_watch_pub32] response=${response}"
data=$(echo "${response}" | jq -re ".label")
if [ "${label2}" != "${data}" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 22. Call unwatchxpubbylabel with label2 failed! ${Color_Off}\n"
return 130
fi
# 23. Call getactivewatchesbyxpub with xpub1, should be empty
trace 2 "\n\n[test_watch_pub32] ${BCyan}23. getactivewatchesbyxpub with xpub1...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/getactivewatchesbyxpub/${xpub1})
trace 3 "[test_watch_pub32] response=${response}"
data=$(echo "${response}" | jq ".watches | length")
if [ "${data}" -ne "0" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 23. getactivewatchesbyxpub xpub1 still watching! ${Color_Off}\n"
return 140
fi
# 24. Call getactivewatchesbyxpub with xpub2, should be empty
trace 2 "\n\n[test_watch_pub32] ${BCyan}24. getactivewatchesbyxpub with xpub2...${Color_Off}\n"
response=$(exec_in_test_container curl proxy:8888/getactivewatchesbyxpub/${xpub2})
trace 3 "[test_watch_pub32] response=${response}"
data=$(echo "${response}" | jq ".watches | length")
if [ "${data}" -ne "0" ]; then
trace 1 "\n\n[test_watch_pub32] ${On_Red}${BBlack} 24. getactivewatchesbyxpub xpub2 still watching! ${Color_Off}\n"
return 150
fi
trace 1 "\n\n[test_watch_pub32] ${On_IGreen}${BBlack} ALL GOOD! Yayyyy! ${Color_Off}\n"
}
start_callback_server() {
trace 1 "\n\n[start_callback_server] ${BCyan}Let's start a callback server!...${Color_Off}\n"
port=${1:-${callbackserverport}}
docker run --rm -t --name tests-watch-pub32-cb --network=cyphernodenet alpine sh -c "nc -vlp${port} -e sh -c 'echo -en \"HTTP/1.1 200 OK\\\\r\\\\n\\\\r\\\\n\" ; echo -en \"\\033[40m\\033[0;37m\" >&2 ; date >&2 ; timeout 1 tee /dev/tty | cat ; echo -e \"\033[0m\" >&2'" &
# docker run --rm -it --name tests-watch-pub32-cb --network=cyphernodenet alpine sh -c "nc -vlkp1111 -e sh -c 'echo -en \"HTTP/1.1 200 OK\\\\r\\\\n\\\\r\\\\n\" ; echo -en \"\\033[40m\\033[0;37m\" >&2 ; date >&2 ; timeout 1 tee /dev/tty | cat ; echo -e \"\033[0m\" >&2'"
}
TRACING=3
stop_test_container
start_test_container
callbackserverport="1111"
callbackservername="tests-watch-pub32-cb"
trace 1 "\n\n[test_watch_pub32] ${BCyan}Installing needed packages...${Color_Off}\n"
exec_in_test_container apk add curl
test_watch_pub32
trace 1 "\n\n[test_watch_pub32] ${BCyan}Tearing down...${Color_Off}\n"
wait
stop_test_container
trace 1 "\n\n[test_watch_pub32] ${BCyan}See ya!${Color_Off}\n"

View File

@@ -2,8 +2,28 @@
# . /mine.sh
# This should be run in regtest
# docker run -it --rm -it --name cn-tests --network=cyphernodenet -v "$PWD/mine.sh:/mine.sh" -v "$PWD/tests.sh:/tests.sh" -v "$PWD/tests-cb.sh:/tests-cb.sh" alpine /tests.sh
# This will test:
#
# - getbestblockhash
# - getbestblockinfo
# - getblockinfo
# - getnewaddress
# - getbalance
# - watch and callbacks
# - getactivewatches
# - unwatch
# - deriveindex
# - derivepubpath
# - spend
# - gettransaction
# - ln_getinfo
# - ln_newaddr
#
#
tests()
{
@@ -108,12 +128,12 @@ tests()
fi
local imported=$(echo "${response}" | jq ".imported" | tr -d '\"')
echo "imported=${imported}"
if [ "${imported}" != "1" ]; then
if [ "${imported}" != "true" ]; then
exit 30
fi
local inserted=$(echo "${response}" | jq ".inserted" | tr -d '\"')
echo "inserted=${inserted}"
if [ "${inserted}" != "1" ]; then
if [ "${inserted}" != "true" ]; then
exit 40
fi
local unconfirmedCallbackURL=$(echo "${response}" | jq ".unconfirmedCallbackURL" | tr -d '\"')