matrix-commander/tests/test-setget.sh

440 lines
13 KiB
Bash
Executable File

#!/bin/bash
# just in case PATH is not set correctly
PATH=".:./matrix_commander:../matrix_commander:$PATH"
# One may set similar values in the terminal before calling the script.
# export MC_OPTIONS="-d --room \!...some.room.id:matrix.example.org "
# getting some optional arguments
if [ "$MC_OPTIONS" != "" ]; then
echo "Exellent. Variable MC_OPTIONS already set. " \
"Using \"$MC_OPTIONS\" as additional options for testing."
else
echo "Optionally, set variable \"MC_OPTIONS\" for further options."
fi
echo "Python version is: $(python --version)"
echo "GITHUB_WORKFLOW = $GITHUB_WORKFLOW"
echo "GITHUB_REPOSITORY = $GITHUB_REPOSITORY"
echo "MC_OPTIONS = $MC_OPTIONS"
if [[ "$GITHUB_WORKFLOW" != "" ]]; then # if in Github Action Workflow
echo "I am in Github Action Workflow $GITHUB_WORKFLOW."
fi
failures=0
type eog >/dev/null 2>&1 || {
echo "The test works better if you install 'eog'."
}
type convert >/dev/null 2>&1 || {
echo "The test works better if you install 'convert' from ImageMagick."
}
function test1() {
echo "=== Test 1: getting its own avatar ==="
TMPFILE="test.png.tmp"
rm -f "$TMPFILE"
N=1
mxc_urls=$(matrix-commander --get-avatar $MC_OPTIONS)
if [[ "$mxc_urls" == "" ]]; then
echo "FAILURE."
let failures++
return
fi
echo "$mxc_urls" # has the N URIs and URLs, like "mxc://... https://..."
for ii in $(seq $N); do
echo "Handling avatar $ii"
mxc_url=$(echo "$mxc_urls" | head -n $ii | tail -n 1)
mxc="${mxc_url% *}" # before " "
url="${mxc_url##* }" # after " "
echo "mxc is \"$mxc\""
echo "url is \"$url\""
wget "$url" -O "$TMPFILE"
type eog >/dev/null 2>&1 && {
echo "Let's look at the avatar."
eog "$TMPFILE" >/dev/null 2>&1
}
rm -f "$TMPFILE"
done
}
function test2() {
echo "=== Test 2: getting the avatars of 2 users ==="
user1=$(matrix-commander --whoami) # get some user_id
if [[ "$user1" == "" ]]; then
echo "FAILURE."
let failures++
return
fi
user2=$user1 # now we have 2 user ids
TMPFILE="test.png.tmp"
rm -f "$TMPFILE"
N=2
mxc_urls=$(matrix-commander --get-avatar "$user1" "$user2" $MC_OPTIONS)
if [[ "$mxc_urls" == "" ]]; then
echo "FAILURE."
let failures++
return
fi
echo "$mxc_urls" # has the N URIs and URLs, like "mxc://... https://..."
for ii in $(seq $N); do
echo "Handling avatar $ii"
mxc_url=$(echo "$mxc_urls" | head -n $ii | tail -n 1)
mxc="${mxc_url% *}" # before " "
url="${mxc_url##* }" # after " "
echo " mxc is \"$mxc\""
echo " url is \"$url\""
wget "$url" -O "$TMPFILE"
echo " Downloaded the avatar to \"$TMPFILE\"."
ls -l "$TMPFILE"
type eog >/dev/null 2>&1 && {
echo " Let's look at the avatar."
eog "$TMPFILE" >/dev/null 2>&1
}
rm -f "$TMPFILE"
done
}
function test3() {
echo "=== Test 3: get the avatar, convert it to black-and-white, ==="
echo "=== set the avatar to the new black-and-white one, ==="
echo "=== set the avatar back to the original one. ==="
TMPFILE="test.png.tmp"
TMPFILEBW="test.png.bw.tmp"
rm -f "$TMPFILE" "$TMPFILEBW"
N=1
mxc_urls=$(matrix-commander --get-avatar $MC_OPTIONS)
if [[ "$mxc_urls" == "" ]]; then
echo "FAILURE."
let failures++
return
fi
echo "$mxc_urls" # has the N URIs and URLs, like "mxc://... https://..."
for ii in $(seq $N); do
echo "Handling avatar $ii"
mxc_url=$(echo "$mxc_urls" | head -n $ii | tail -n 1)
mxc="${mxc_url% *}" # before " "
url="${mxc_url##* }" # after " "
echo " mxc is \"$mxc\""
echo " url is \"$url\""
wget "$url" -O "$TMPFILE"
echo " Downloaded the avatar to \"$TMPFILE\"."
ls -l "$TMPFILE"
type eog >/dev/null 2>&1 && {
echo " Let's look at the avatar."
eog "$TMPFILE" >/dev/null 2>&1
}
convert "$TMPFILE" -colorspace Gray "$TMPFILEBW"
type eog >/dev/null 2>&1 && {
echo " Let's look at the new black-and-white avatar."
eog "$TMPFILEBW" >/dev/null 2>&1
}
# avatars must not be encrypted, use --plain
mxc_key=$(matrix-commander --upload "$TMPFILEBW" --plain)
if [[ "$mxc_key" == "" ]]; then
echo "FAILURE."
let failures++
return
fi
mxcbw="${mxc_key% *}" # before " "
echo " Uploaded the new black-and-white avatar to URI \"$mxcbw\"."
matrix-commander --set-avatar $mxcbw $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "SUCCESS."
else
echo "FAILURE."
let failures++
fi
echo " Setted the new avatar. Have a look at your client."
read -t 30 -p "Like the new avatar?"
matrix-commander --set-avatar $mxc $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "SUCCESS."
else
echo "FAILURE."
let failures++
fi
echo " Setted the avatar to as it was before. Have a look at your client."
read -t 30 -p "Prefer the old avatar?"
echo "" # add linebreak after timeout
echo " Done. We set it back to the original."
rm -f "$TMPFILE" "$TMPFILEBW"
done
}
function test4() {
echo "=== Test 4: exporting keys to file ==="
TMPFILE="test.keys.tmp"
matrix-commander --export-keys "$TMPFILE" "bad-passphrase-3582" $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "SUCCESS."
else
echo "FAILURE."
let failures++
fi
echo "Here is the file with the exported keys:"
ls -l "$TMPFILE"
}
function test5() {
echo "=== Test 5: importing keys from file ==="
TMPFILEBK="test.keys.bad.tmp"
echo "bad key file" >"$TMPFILEBK"
echo "This should fail because of bad keys file."
matrix-commander --import-keys "$TMPFILEBK" "bad-passphrase-3582" $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "FAILURE."
let failures++
else
echo "SUCCESS."
fi
echo "This should fail because of wrong passphrase."
matrix-commander --import-keys "$TMPFILE" "wrong-passphrase" $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "FAILURE."
let failures++
else
echo "SUCCESS."
fi
echo "This should work."
# slow, many keys usually
matrix-commander --import-keys "$TMPFILE" "bad-passphrase-3582" $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "SUCCESS."
else
echo "FAILURE."
let failures++
fi
rm -f "$TMPFILE" "$TMPFILEBK"
}
function test6() {
echo "=== Test 6: getting its own user profile ==="
N=1
dispname_mxc_url_others=$(matrix-commander --get-profile $MC_OPTIONS)
if [[ "$dispname_mxc_url_others" == "" ]]; then
echo "FAILURE."
let failures++
return
fi
echo "$dispname_mxc_url_others" # lines with 4 pieces of information
for ii in $(seq $N); do
echo "Handling user profile $ii"
dispname_mxc_url_other=$(echo "$dispname_mxc_url_others" | head -n $ii | tail -n 1)
# shellcheck disable=SC2207
out=($(grep -Eo ' |.+' <<<"$dispname_mxc_url_other")) # split by " "
dispname="${out[0]}" # before first " "
mxc="${out[1]}" # after first " " and before 2nd " "
url="${out[2]}"
other="${out[3]}"
echo " displayname is \"$dispname\""
echo " mxc is \"$mxc\""
echo " url is \"$url\""
echo " other info is \"$other\""
done
}
function test7() {
echo "=== Test 7: getting the user profiles of 2 users ==="
user1=$(matrix-commander --whoami) # get some user_id
if [[ "$user1" == "" ]]; then
echo "FAILURE."
let failures++
return
fi
user2=$user1 # now we have 2 user ids
N=2
dispname_mxc_url_others=$(matrix-commander --get-profile "$user1" "$user2" $MC_OPTIONS)
if [[ "$dispname_mxc_url_others" == "" ]]; then
echo "FAILURE."
let failures++
return
fi
echo "$dispname_mxc_url_others" # lines with 4 pieces of information
for ii in $(seq $N); do
echo "Handling user profile $ii"
dispname_mxc_url_other=$(echo "$dispname_mxc_url_others" | head -n $ii | tail -n 1)
# dispname="$(sed -n "s/\(.*\) \(mxc[^ ]*\) \(http[^ ]*\) \(.*\)/\1/p")"
# shellcheck disable=SC2207
out=($(grep -Eo ' |.+' <<<"$dispname_mxc_url_other")) # split by " "
dispname="${out[0]}" # before first " "
mxc="${out[1]}" # after first " " and before 2nd " "
url="${out[2]}"
other="${out[3]}"
echo " displayname is \"$dispname\""
echo " mxc is \"$mxc\""
echo " url is \"$url\""
echo " other info is \"$other\""
done
}
function test8() {
echo "=== Test 8: getting the state of default room ==="
matrix-commander --room-get-state $MC_OPTIONS --output json | jq
res="$?"
if [ "$res" == "0" ]; then
echo "SUCCESS."
else
echo "FAILURE."
let failures++
fi
}
function test9() {
echo "=== Test 9: getting the visibility of default room ==="
visi_room=$(matrix-commander --room-get-visibility $MC_OPTIONS)
if [[ "$visi_room" == "" ]]; then
echo "FAILURE."
let failures++
return
fi
visibility="${visi_room% *}" # before " "
roomid="${visi_room##* }" # after " "
echo " Visibility of room \"$roomid\" is \"$visibility\"."
}
function test10() {
echo "=== Test 10: adding an alias to the default room ==="
matrix-commander --room-set-alias $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "FAILURE. The program should have failed, but didn't."
let failures++
else
echo "SUCCESS. The program failed as expected."
fi
}
function test11() {
echo "=== Test 11: adding an alias to the default room ==="
matrix-commander --room-set-alias a b c $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "FAILURE. The program should have failed, but didn't."
let failures++
else
echo "SUCCESS. The program failed as expected."
fi
}
function test12() {
echo "=== Test 12: adding an alias to the default room ==="
matrix-commander --room-set-alias " spaces not allowed" r "wrong#" r "" r $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "FAILURE. The program should have failed, but didn't."
let failures++
else
echo "SUCCESS. The program failed as expected."
fi
}
function test13() {
echo "=== Test 13: adding an alias to the default room ==="
matrix-commander --room-set-alias "Testing-room-A" $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "SUCCESS. Alias set."
else
echo "FAILURE. Alias not set."
let failures++
fi
}
function test14() {
echo "=== Test 14: adding an alias to the default room ==="
matrix-commander --room-set-alias "Testing-room-B" $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "SUCCESS. Alias set."
else
echo "FAILURE. Alias not set."
let failures++
fi
}
function test15() {
echo "=== Test 15: resolving a room alias ==="
matrix-commander --room-resolve-alias "doesntexist" "doesntexist2" "wrong#" " spa ce " "wrong:too" $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "FAILURE. The program should have failed, but didn't."
let failures++
else
echo "SUCCESS. The program failed as expected."
fi
}
function test16() {
echo "=== Test 16: resolving a room alias ==="
matrix-commander --room-resolve-alias "Testing-room-A" "Testing-room-B" $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "SUCCESS. Aliases resolved."
else
echo "FAILURE. Aliases not resolved."
let failures++
fi
}
function test17() {
echo "=== Test 17: deleting a room alias ==="
matrix-commander --room-delete-alias "doesntexist" "doesntexist2" "wrong#" " spa ce " "wrong:too" $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "FAILURE. The program should have failed, but didn't."
let failures++
else
echo "SUCCESS. The program failed as expected."
fi
}
function test18() {
echo "=== Test 18: deleting a room alias ==="
matrix-commander --room-delete-alias "Testing-room-A" "Testing-room-B" $MC_OPTIONS
res="$?"
if [ "$res" == "0" ]; then
echo "SUCCESS. Alias deleted."
else
echo "FAILURE. Alias not deleted."
let failures++
fi
}
if [[ "$GITHUB_WORKFLOW" == "" ]]; then # skip in Github Action Workflow
test1
test2
test3
fi
test4
test5
test6
test7
if [[ "$GITHUB_WORKFLOW" == "" ]]; then # skip in Github Action Workflow
test8 # uses jq
fi
test9
test10
test11
test12
test13
test14
test15
test16
test17
test18
echo "Finished test series with $failures failures."
exit $failures