Fix testing

This commit is contained in:
emdee 2022-10-04 11:53:29 +00:00
parent a466687471
commit 0148a36726
3 changed files with 168 additions and 63 deletions

View file

@ -32,11 +32,11 @@ to a file.
``` ```
usage: tox_savefile.py [-h] [--output OUTPUT] usage: tox_savefile.py [-h] [--output OUTPUT]
[--command info|decrypt|nodes|edit] [--command info|decrypt|nodes|edit]
[--indent INDENT]
[--info info|repr|yaml|json|pprint|nmap_udp|nmap_tcp] [--info info|repr|yaml|json|pprint|nmap_udp|nmap_tcp]
[--nodes select_tcp|select_udp|select_version|nmap_tcp|nmap_udp] [--indent INDENT]
[--edit help|section,num,key,val] [--nodes select_tcp|select_udp|select_version|nmap_tcp|nmap_udp,download]
[--download_nodes_url DOWNLOAD_NODES_URL] [--download_nodes_url DOWNLOAD_NODES_URL]
[--edit help|section,num,key,val]
profile profile
``` ```
Positional arguments: Positional arguments:
@ -49,13 +49,13 @@ Optional arguments:
--command {info,decrypt,nodes,edit} --command {info,decrypt,nodes,edit}
Action command - default: info Action command - default: info
--output OUTPUT Destination for info/decrypt/nodes - defaults to stdout --output OUTPUT Destination for info/decrypt/nodes - defaults to stdout
--info info|repr|yaml|json|pprint|nmap_udp|nmap_tcp --info info|repr|yaml|json|pprint|nmap_udp|nmap_tcp (may require nmap)
Format for info command Format for info command
--nodes select_tcp|select_udp|select_version|nmap_tcp|nmap_udp
Action for nodes command (requires jq)
--edit help|section,num,key,val
--indent INDENT Indent for yaml/json/pprint --indent INDENT Indent for yaml/json/pprint
--nodes select_tcp|select_udp|select_version|nmap_tcp|nmap_udp|download
Action for nodes command (requires jq and nmap)
--download_nodes_url DOWNLOAD_NODES_URL --download_nodes_url DOWNLOAD_NODES_URL
--edit help|section,num,key,val
``` ```
### --command info ### --command info
@ -91,6 +91,8 @@ Choose one of ```{nmap_tcp,nmap_udp}``` to run tests using ```nmap```
for the ```status_tcp==True``` and ```status_udp==True``` nodes. for the ```status_tcp==True``` and ```status_udp==True``` nodes.
Reguires ```nmap``` and uses ```sudo```. Reguires ```nmap``` and uses ```sudo```.
Choose ```download``` to download the nodes from ```--download_nodes_url```
### --command decrypt ### --command decrypt
Decrypt a profile, with ```--output``` to a filename. Decrypt a profile, with ```--output``` to a filename.
@ -149,6 +151,10 @@ Because it's written in Python it is easy to extend to, for example,
rekeying a profile when copying a profile to a new device: rekeying a profile when copying a profile to a new device:
<https://git.plastiras.org/emdee/tox_profile/wiki/MultiDevice-Announcements-POC> <https://git.plastiras.org/emdee/tox_profile/wiki/MultiDevice-Announcements-POC>
Or you could keep the keypair and synchronize profiles between different
clients: e.g. your could keep your profile from toxic as master,
and copy it over your qtox/toxygen/TriFa profile while preserving their
ToxId keypair.
## Specification ## Specification

View file

@ -6,7 +6,7 @@ Reads a tox profile and prints out information on what's in there to stderr.
Call it with one argument, the filename of the profile for the decrypt or info Call it with one argument, the filename of the profile for the decrypt or info
commands, or the filename of the nodes file for the nodes command. commands, or the filename of the nodes file for the nodes command.
3 commands are supported: 4 commands are supported:
--command decrypt --command decrypt
decrypts the profile and writes to the result to stdout decrypts the profile and writes to the result to stdout
@ -15,22 +15,25 @@ commands, or the filename of the nodes file for the nodes command.
--command nodes --command nodes
assumes you are reading a json nodes file instead of a profile assumes you are reading a json nodes file instead of a profile
--command edits
edits fields in a Tox profile with --output to a file
""" """
""" """
--output Destination for info/decrypt - defaults to stdout --output Destination for info/decrypt/edit/nodes/download
--info default='info', --info default='info',
choices=['info', 'save', 'repr', 'yaml','json', 'pprint'] choices=[info, save, repr, yaml,json, pprint]
with --info=info prints info about the profile to stderr with --info=info prints info about the profile to stderr
yaml,json, pprint, repr - output format
nmap_udp - test DHT nodes with nmap nmap_udp - test DHT nodes with nmap
nmap_tcp - test TCP_RELAY nodes with nmap nmap_tcp - test TCP_RELAY nodes with nmap
nmap_onion - test PATH_NODE nodes with nmap nmap_onion - test PATH_NODE nodes with nmap
indents the output as: 'yaml','json', 'pprint'
--indent for pprint/yaml/json default=2 --indent for pprint/yaml/json default=2
--output Destination for the command - required
--nodes --nodes
choices=['select_tcp', 'select_udp', 'nmap_tcp', 'select_version', 'nmap_udp'] choices=[select_tcp, select_udp, nmap_tcp, select_version, nmap_udp]
select_udp - select udp nodes select_udp - select udp nodes
select_tcp - select tcp nodes select_tcp - select tcp nodes
nmap_udp - test UDP nodes with nmap nmap_udp - test UDP nodes with nmap
@ -39,6 +42,11 @@ commands, or the filename of the nodes file for the nodes command.
download - download nodes from --download_nodes_url download - download nodes from --download_nodes_url
--download_nodes_url https://nodes.tox.chat/json --download_nodes_url https://nodes.tox.chat/json
--edit
help - print a summary of what fields can be edited
section,num,key,val - edit the field section,num,key with val
""" """
# originally from: # originally from:

View file

@ -1,6 +1,8 @@
#!/bin/sh #!/bin/sh
# -*- mode: sh; fill-column: 75; tab-width: 8; coding: utf-8-unix -*- # -*- mode: sh; fill-column: 75; tab-width: 8; coding: utf-8-unix -*-
# tox_savefile.py has a lot of features so it needs test coverage
PREFIX=/o/var/local/src PREFIX=/o/var/local/src
EXE=python3.sh EXE=python3.sh
WRAPPER=$PREFIX/toxygen_wrapper WRAPPER=$PREFIX/toxygen_wrapper
@ -20,113 +22,202 @@ target=$PREFIX/tox_profile/tox_savefile.py
tox=$HOME/.config/tox/toxic_profile.tox tox=$HOME/.config/tox/toxic_profile.tox
[ -s $tox ] || exit 2 [ -s $tox ] || exit 2
json=$HOME/.config/tox/DHTnodes.json [ -d $WRAPPER ] || {
[ -s $json ] || exit 3 ERROR wrapper is required https://git.plastiras.org/emdee/toxygen_wrapper
exit 3
[ -d $WRAPPER ] || { ERROR wrapper is required https://git.plastiras.org/emdee/toxygen_wrapper ; exit 5 ; } }
export PYTHONPATH=$WRAPPER export PYTHONPATH=$WRAPPER
json=$HOME/.config/tox/DHTnodes.json
[ -s $json ] || exit 4
which jq > /dev/null && HAVE_JQ=1 || HAVE_JQ=0 which jq > /dev/null && HAVE_JQ=1 || HAVE_JQ=0
which nmap > /dev/null && HAVE_NMAP=1 || HAVE_NMAP=0 which nmap > /dev/null && HAVE_NMAP=1 || HAVE_NMAP=0
sudo rm -f /tmp/toxic_profile.* /tmp/toxic_nodes.* sudo rm -f /tmp/toxic_profile.* /tmp/toxic_nodes.*
test_jq () {
[ $# -eq 3 ] || {
ERROR test_jq '#' "$@"
return 3
}
in=$1
out=$2
err=$3
[ -s $in ] || {
ERROR $i test_jq null $in
return 4
}
jq . < $in >$out 2>$err || {
ERROR $i test_jq $json
return 5
}
grep error: $err && {
ERROR $i test_jq $json
return 6
}
[ -s $out ] || {
ERROR $i null $out
return 7
}
[ -s $err ] || rm -f $err
return 0
}
i=0
[ "$HAVE_JQ" = 0 ] || \ [ "$HAVE_JQ" = 0 ] || \
jq . < $json >/tmp/toxic_nodes.json || { ERROR jq $json ; exit 4 ; } test_jq $json /tmp/toxic_nodes.json /tmp/toxic_nodes.err || exit ${i}$?
[ -f /tmp/toxic_nodes.json ] || cp -p $json /tmp/toxic_nodes.json [ -f /tmp/toxic_nodes.json ] || cp -p $json /tmp/toxic_nodes.json
json=/tmp/toxic_nodes.json json=/tmp/toxic_nodes.json
i=1
# required password # required password
INFO decrypt /tmp/toxic_profile.bin INFO $i decrypt /tmp/toxic_profile.bin
$EXE $target --command decrypt --output /tmp/toxic_profile.bin $tox || exit 11 $EXE $target --command decrypt --output /tmp/toxic_profile.bin $tox || exit ${i}1
[ -s /tmp/toxic_profile.bin ] || exit 12 [ -s /tmp/toxic_profile.bin ] || exit ${i}2
tox=/tmp/toxic_profile.bin tox=/tmp/toxic_profile.bin
INFO info $tox INFO $i info $tox
$EXE $target --command info --info info $tox 2>/tmp/toxic_profile.info || { $EXE $target --command info --info info $tox 2>/tmp/toxic_profile.info || {
ERROR $EXE $target --command info --info info $tox ERROR $i $EXE $target --command info --info info $tox
exit 13 exit ${i}3
} }
[ -s /tmp/toxic_profile.info ] || exit 14 [ -s /tmp/toxic_profile.info ] || exit ${i}4
INFO /tmp/toxic_profile.save INFO $i /tmp/toxic_profile.save
$EXE $target --command info --info save --output /tmp/toxic_profile.save $tox 2>/dev/null || exit 15 $EXE $target --command info --info save --output /tmp/toxic_profile.save $tox 2>/dev/null || exit ${i}5
[ -s /tmp/toxic_profile.save ] || exit 16 [ -s /tmp/toxic_profile.save ] || exit ${i}6
for the_tox in /tmp/toxic_profile.save ; do i=2
for the_tox in $tox /tmp/toxic_profile.save ; do
DBUG $i $the_tox
the_base=`echo $the_tox | sed -e 's/.save$//' -e 's/.tox$//'` the_base=`echo $the_tox | sed -e 's/.save$//' -e 's/.tox$//'`
for elt in json yaml pprint repr ; do for elt in json yaml pprint repr ; do
INFO $the_base.$elt INFO $i $the_base.$elt
[ "$DEBUG" != 1 ] || echo DEBUG $EXE $target \ DBUG $EXE $target \
--command info --info $elt \ --command info --info $elt \
--output $the_base.$elt $the_tox --output $the_base.$elt $the_tox '2>'$the_base.$elt.err
$EXE $target --command info --info $elt \ $EXE $target --command info --info $elt \
--output $the_base.$elt $the_tox 2>/dev/null || exit 20 --output $the_base.$elt $the_tox 2>$the_base.$nmap.err || exit ${i}0
[ -s $the_base.$elt ] || exit 21 [ -s $the_base.$elt ] || exit ${i}1
done done
$EXE $target --command edit --edit help $the_tox 2>/dev/null || exit 22 $EXE $target --command edit --edit help $the_tox 2>/dev/null || exit ${i}2
INFO $the_base.edit1 'STATUSMESSAGE,.,Status_message,Toxxed on Toxic' INFO $i $the_base.edit1 'STATUSMESSAGE,.,Status_message,Toxxed on Toxic'
$EXE $target --command edit --edit 'STATUSMESSAGE,.,Status_message,Toxxed on Toxic' \ $EXE $target --command edit --edit 'STATUSMESSAGE,.,Status_message,Toxxed on Toxic' \
--output $the_base.edit1.tox $the_tox 2>&1|grep EDIT --output $the_base.edit1.tox $the_tox 2>&1|grep EDIT
[ -s $the_base.edit1.tox ] || exit 23 [ -s $the_base.edit1.tox ] || exit ${i}3
$EXE $target --command info $the_base.edit1.tox 2>&1|grep Toxxed || exit 24 $EXE $target --command info $the_base.edit1.tox 2>&1|grep Toxxed || exit ${i}4
INFO $the_base.edit2 'NAME,.,Nick_name,FooBar' INFO $i $the_base.edit2 'NAME,.,Nick_name,FooBar'
$EXE $target --command edit --edit 'NAME,.,Nick_name,FooBar' \ $EXE $target --command edit --edit 'NAME,.,Nick_name,FooBar' \
--output $the_base.edit2.tox $the_tox 2>&1|grep EDIT --output $the_base.edit2.tox $the_tox 2>&1|grep EDIT
[ -s $the_base.edit2.tox ] || exit 25 [ -s $the_base.edit2.tox ] || exit ${i}5
$EXE $target --command info $the_base.edit2.tox 2>&1|grep FooBar || exit 26 $EXE $target --command info $the_base.edit2.tox 2>&1|grep FooBar || exit ${i}6
done done
the_tox=$json i=3
the_base=`echo $the_tox | sed -e 's/.save$//' -e 's/.json$//'`
[ "$HAVE_JQ" = 0 ] || \ [ "$HAVE_JQ" = 0 ] || \
for the_json in $json ; do
DBUG $i $the_json
the_base=`echo $the_json | sed -e 's/.json$//' -e 's/.tox$//'`
for nmap in select_tcp select_udp select_version ; do for nmap in select_tcp select_udp select_version ; do
INFO $the_base.$nmap
$EXE $target --command nodes --nodes $nmap \ $EXE $target --command nodes --nodes $nmap \
--output $the_base.$nmap.json $the_tox || exit 31 --output $the_base.$nmap.json $the_json || {
[ -s $the_base.$nmap.json ] || exit 32 WARN $i $the_json $nmap ${i}1
continue
}
[ -s $the_base.$nmap.json ] || {
WARN $i $the_json $nmap ${i}2
continue
}
[ $nmap = select_tcp ] && \ [ $nmap = select_tcp ] && \
grep '"status_tcp": false' $the_base.select_tcp.json && exit 33 grep '"status_tcp": false' $the_base.$nmap.json && {
WARN $i $the_json $nmap ${i}3
continue
}
[ $nmap = select_udp ] && \ [ $nmap = select_udp ] && \
grep '"status_udp": false' $the_base.select_udp.json && exit 34 grep '"status_udp": false' $the_base.$nmap.json && {
WARN $i $the_json $nmap ${i}4
continue
}
test_jq $the_base.$nmap.json $the_base.$nmap.json.out /tmp/toxic_nodes.err || {
retval=$?
WARN $i $the_base.$nmap.json 3$?
}
INFO $i $the_base.$nmap
done done
done
ls -l /tmp/toxic_profile.* /tmp/toxic_nodes.* ls -l /tmp/toxic_profile.* /tmp/toxic_nodes.*
/usr/local/bin/proxy_ping_test.bash tor || exit 0 # DEBUG=0 /usr/local/bin/proxy_ping_test.bash tor || exit 0
ip route | grep ^def || exit 0
i=4
the_tox=$tox the_tox=$tox
the_base=`echo $the_tox | sed -e 's/.save$//' -e 's/.tox$//'`
[ "$HAVE_JQ" = 0 ] || \ [ "$HAVE_JQ" = 0 ] || \
[ "$HAVE_NMAP" = 0 ] || \ [ "$HAVE_NMAP" = 0 ] || \
for the_tox in $tox /tmp/toxic_profile.save ; do
DBUG $i $the_tox
the_base=`echo $the_tox | sed -e 's/.save$//' -e 's/.tox$//'`
for nmap in nmap_tcp nmap_udp nmap_onion ; do for nmap in nmap_tcp nmap_udp nmap_onion ; do
# [ $nmap = select_tcp ] && continue # [ $nmap = select_tcp ] && continue
# [ $nmap = select_udp ] && continue # [ $nmap = select_udp ] && continue
INFO $the_base.$nmap INFO $i $the_base.$nmap
$EXE $target --command info --info $nmap \ $EXE $target --command info --info $nmap \
--output $the_base.$nmap $the_tox.json || { --output $the_base.$nmap.out $the_tox 2>$the_base.$nmap.err || {
# select_tcp may be empty and jq errors # select_tcp may be empty and jq errors
# exit 41 # exit ${i}1
WARN $the_base.$nmap.json WARN $i $the_base.$nmap.err
continue
}
[ -s $the_base.$nmap.out ] || {
ERROR $i $the_base.$nmap.out
continue continue
} }
[ -s $the_base.$nmap.json ] || exit 41
done done
done
the_json=$json i=5
the_base=`echo $json | sed -e 's/.save$//' -e 's/.json$//'`
[ "$HAVE_JQ" = 0 ] || \ [ "$HAVE_JQ" = 0 ] || \
for the_json in $json ; do
DBUG $i $the_json
the_base=`echo $the_json | sed -e 's/.save$//' -e 's/.json$//'`
for nmap in nmap_tcp nmap_udp ; do for nmap in nmap_tcp nmap_udp ; do
INFO $the_base.$nmap INFO $i $the_base.$nmap
$EXE $target --command nodes --nodes $nmap \ $EXE $target --command nodes --nodes $nmap \
--output $the_base.$nmap.json $the_json || exit 51 --output $the_base.$nmap $the_json 2>$the_base.$nmap.err || {
[ -s $the_base.$nmap.json ] || exit 52 WARN $i $the_json $nmap ${i}1
continue
}
[ -s $the_base.$nmap ] || {
ERROR $i $the_json $nmap ${i}2
exit ${i}2
}
done done
done
i=6
DBUG $i
$EXE $target --command nodes --nodes download \
--output /tmp/toxic_nodes.new $json || {
ERROR $i $EXE $target --command nodes --nodes download $json
exit ${i}1
}
[ -s /tmp/toxic_nodes.new ] || exit ${i}4
json=/tmp/toxic_nodes.new
[ "$HAVE_JQ" = 0 ] || \
jq . < $json >/tmp/toxic_nodes.new.json 2>>/tmp/toxic_nodes.new.err || {
ERROR $i jq $json
exit ${i}2
}
[ "$HAVE_JQ" = 0 ] || \
grep error: /tmp/toxic_nodes.new.err && {
ERROR $i jq $json
exit ${i}3
}
exit 0 exit 0