]> nmode's Git Repositories - signal-cli/blob - run_tests.sh
Log the time it takes to send a group message
[signal-cli] / run_tests.sh
1 #!/bin/sh
2 if [ $# -ne 2 ]; then
3 echo "Usage: $0 NUMBER_1 NUMBER_2"
4 exit 1
5 fi
6
7 set -e
8 # To update graalvm config, set GRAALVM_HOME, e.g:
9 # export GRAALVM_HOME=/usr/lib/jvm/java-17-graalvm
10 if [ ! -z "$GRAALVM_HOME" ]; then
11 export JAVA_HOME=$GRAALVM_HOME
12 export SIGNAL_CLI_OPTS='-agentlib:native-image-agent=config-merge-dir=graalvm-config-dir/'
13 fi
14
15 NUMBER_1="$1"
16 NUMBER_2="$2"
17 TEST_PIN_1=456test_pin_foo123
18 NATIVE=0
19
20 PATH_TEST_CONFIG="$PWD/build/test-config"
21 PATH_MAIN="$PATH_TEST_CONFIG/main"
22 PATH_LINK="$PATH_TEST_CONFIG/link"
23
24 if [ "$NATIVE" -eq 1 ]; then
25 SIGNAL_CLI="$PWD/build/native/nativeCompile/signal-cli"
26 else
27 ./gradlew installDist
28 SIGNAL_CLI="$PWD/build/install/signal-cli/bin/signal-cli"
29 fi
30
31 run() {
32 set -x
33 "$SIGNAL_CLI" --service-environment="staging" $@
34 set +x
35 }
36
37 run_main() {
38 run --config="$PATH_MAIN" $@
39 }
40
41 run_linked() {
42 run --config="$PATH_LINK" $@
43 }
44
45 register() {
46 NUMBER=$1
47 PIN=$2
48 echo -n "Enter a captcha token (https://signalcaptchas.org/staging/challenge/generate.html): "
49 read CAPTCHA
50 run_main -a "$NUMBER" register --captcha "$CAPTCHA"
51 echo -n "Enter validation code for ${NUMBER}: "
52 read CODE
53 if [ -z "$PIN" ]; then
54 run_main -a "$NUMBER" verify "$CODE"
55 else
56 run_main -a "$NUMBER" verify "$CODE" --pin "$PIN"
57 fi
58 }
59
60 link() {
61 NUMBER=$1
62 LINK_CODE_FILE="$PATH_TEST_CONFIG/link_code"
63 rm -f "$LINK_CODE_FILE"
64 mkfifo "$LINK_CODE_FILE"
65 run_linked link -n "test-device" >"$LINK_CODE_FILE" &
66 read LINK_CODE <"$LINK_CODE_FILE"
67 run_main -a "$NUMBER" addDevice --uri "$LINK_CODE"
68 wait
69 run_linked -a "$NUMBER" send --note-to-self -m hi
70 run_main -a "$NUMBER" receive
71 run_linked -a "$NUMBER" receive
72 run_main -a "$NUMBER" receive
73 }
74
75 run_main --version
76 run_main --help
77
78 ## Register
79 register "$NUMBER_1" "$TEST_PIN_1"
80 register "$NUMBER_2"
81
82 sleep 5
83
84 run_main listAccounts
85 run_main --output=json listAccounts
86
87 ## DBus
88 #run_main -a "$NUMBER_1" --dbus send "$NUMBER_2" -m daemon_not_running || true
89 #run_main daemon &
90 #DAEMON_PID=$!
91 #sleep 10
92 #run_main -a "$NUMBER_1" --dbus send "$NUMBER_2" -m hii
93 #run_main -a "$NUMBER_2" --dbus receive
94 #kill "$DAEMON_PID"
95
96
97 # JSON-RPC
98 FIFO_FILE="${PATH_MAIN}/dbus-fifo"
99
100 rm -f "$FIFO_FILE"
101 mkfifo "$FIFO_FILE"
102
103 run_main -a "$NUMBER_1" send "$NUMBER_2" -m hi
104 run_main -a "$NUMBER_2" jsonRpc < "$FIFO_FILE" &
105
106 exec 3<> "$FIFO_FILE"
107 echo '{"jsonrpc":"2.0","id":"id","method":"updateContact","params":{"recipient":"'"$NUMBER_1"'","name":"NUMBER_1","expiration":10}}' >&3
108 echo '{"jsonrpc":"2.0","id":5,"method":"block","params":{"recipient":"'"$NUMBER_1"'"}}' >&3
109 echo '{"jsonrpc":"2.0","id":null,"method":"unblock","params":{"recipient":"'"$NUMBER_1"'"}}' >&3
110 echo '{"jsonrpc":"2.0","id":"id","method":"listContacts"}' >&3
111 echo '{"jsonrpc":"2.0","id":"id","method":"listGroups"}' >&3
112 echo '{"jsonrpc":"2.0","id":"id","method":"listDevices"}' >&3
113 echo '{"jsonrpc":"2.0","id":"id","method":"listIdentities"}' >&3
114 echo '{"jsonrpc":"2.0","id":"id","method":"sendSyncRequest"}' >&3
115 echo '{"jsonrpc":"2.0","id":"id","method":"sendContacts"}' >&3
116 echo '{"jsonrpc":"2.0","id":"id","method":"version"}' >&3
117 echo '{"jsonrpc":"2.0","id":"id","method":"updateAccount"}' >&3
118 echo '{"jsonrpc":"2.0","id":7,"method":"sendReceipt","params":{"recipient":"'"$NUMBER_1"'","targetTimestamp":1629919505575}}' >&3
119 echo '{"jsonrpc":"2.0","id":7,"method":"sendTyping","params":{"recipient":"'"$NUMBER_1"'"}}' >&3
120 echo '{"jsonrpc":"2.0","id":7,"method":"send","params":{"recipient":"'"$NUMBER_1"'","message":"some text"}}' >&3
121 echo '{"jsonrpc":"2.0","id":7,"method":"send","params":{"recipients":["'"$NUMBER_1"'","'"$NUMBER_2"'"],"message":"some other text"}}' >&3
122 echo '{"jsonrpc":"2.0","id":7,"method":"updateProfile","params":{"givenName":"n1","familyName":"n2","about":"ABA","aboutEmoji":"EMO","avatar":"LICENSE"}}' >&3
123 echo '{"jsonrpc":"2.0","id":7,"method":"getUserStatus","params":{"recipient":"'"$NUMBER_1"'"}}' >&3
124
125 # Error expected:
126 echo '{"jsonrpc":"2.0","id":7,"method":"sendReceipt","params":{"recipient":5}}' >&3
127 exec 3>&-
128
129 wait
130
131 run_main -a "$NUMBER_1" setPin "$TEST_PIN_1"
132 run_main -a "$NUMBER_2" removePin
133
134 ## Contacts
135 run_main -a "$NUMBER_2" updateContact "$NUMBER_1" -n NUMBER_1 -e 10
136 run_main -a "$NUMBER_2" block "$NUMBER_1"
137 run_main -a "$NUMBER_2" unblock "$NUMBER_1"
138 run_main -a "$NUMBER_2" listContacts
139
140 run_main -a "$NUMBER_1" send "$NUMBER_2" -m hi
141 run_main -a "$NUMBER_2" receive
142 run_main -a "$NUMBER_2" send "$NUMBER_1" -m hi
143 run_main -a "$NUMBER_1" receive
144 run_main -a "$NUMBER_2" receive
145 ## Groups
146 GROUP_ID=$(run_main -a "$NUMBER_1" updateGroup -n GRUPPE -a LICENSE -m "$NUMBER_1" | grep -oP '(?<=").+(?=")')
147 run_main -a "$NUMBER_1" send "$NUMBER_2" -m first
148 run_main -a "$NUMBER_1" updateGroup -g "$GROUP_ID" -n GRUPPE_UMB -m "$NUMBER_2" --admin "$NUMBER_2" --description DESCRIPTION --link=enabled-with-approval --set-permission-add-member=only-admins --set-permission-edit-details=only-admins --set-permission-send-messages=only-admins -e 42
149 run_main -a "$NUMBER_1" updateGroup -g "$GROUP_ID" --remove-admin "$NUMBER_2" --reset-link --set-permission-send-messages=every-member
150 run_main -a "$NUMBER_1" updateGroup -g "$GROUP_ID" -r "$NUMBER_2"
151 run_main -a "$NUMBER_1" updateGroup -g "$GROUP_ID" -m "$NUMBER_2"
152 run_main -a "$NUMBER_1" listGroups -d
153 run_main -a "$NUMBER_1" --output=json listGroups -d
154 run_main -a "$NUMBER_2" --verbose receive
155 run_main -a "$NUMBER_2" quitGroup -g "$GROUP_ID"
156 run_main -a "$NUMBER_2" listGroups -d
157 run_main -a "$NUMBER_2" --output=json listGroups -d
158 run_main -a "$NUMBER_1" receive
159 run_main -a "$NUMBER_1" updateGroup -g "$GROUP_ID" -m "$NUMBER_2"
160 run_main -a "$NUMBER_1" --verbose block -g "$GROUP_ID"
161 run_main -a "$NUMBER_1" --verbose unblock -g "$GROUP_ID"
162
163 ## Configuration
164 run_main -a "$NUMBER_1" updateConfiguration --read-receipts=true
165
166 ## Identities
167 run_main -a "$NUMBER_1" listIdentities
168 run_main -a "$NUMBER_2" listIdentities
169 run_main -a "$NUMBER_2" trust "$NUMBER_1" -a
170
171 ## Basic send/receive
172 for OUTPUT in "plain-text" "json"; do
173 run_main -a "$NUMBER_1" --output="$OUTPUT" getUserStatus "$NUMBER_1" "$NUMBER_2" "+111111111"
174 run_main -a "$NUMBER_1" send "$NUMBER_2" -m hi
175 run_main -a "$NUMBER_2" send "$NUMBER_1" -m hi
176 run_main -a "$NUMBER_1" send -g "$GROUP_ID" -m hi -a LICENSE --mention "1:1:$NUMBER_2"
177 TIMESTAMP=$(uname -a | run_main -a "$NUMBER_1" send "$NUMBER_2")
178 run_main -a "$NUMBER_2" sendReaction "$NUMBER_1" -e 🍀 -a "$NUMBER_1" -t "$TIMESTAMP"
179 run_main -a "$NUMBER_1" remoteDelete "$NUMBER_2" -t "$TIMESTAMP"
180 run_main -a "$NUMBER_2" --output="$OUTPUT" receive
181 run_main -a "$NUMBER_1" --output="$OUTPUT" receive
182 run_main -a "$NUMBER_1" send -e "$NUMBER_2"
183 run_main -a "$NUMBER_2" --output="$OUTPUT" receive
184 done
185
186 ## Profile
187 run_main -a "$NUMBER_1" updateProfile --given-name=GIVEN --family-name=FAMILY --about=ABOUT --about-emoji=EMOJI --avatar=LICENSE
188
189 ## Provisioning
190 link "$NUMBER_1"
191 link "$NUMBER_2"
192 run_main -a "$NUMBER_1" listDevices
193 run_linked -a "$NUMBER_1" sendSyncRequest
194 run_main -a "$NUMBER_1" sendContacts
195
196 for OUTPUT in "plain-text" "json"; do
197 run_main -a "$NUMBER_1" send "$NUMBER_2" -m hi
198 run_main -a "$NUMBER_2" send "$NUMBER_1" -m hi
199 run_main -a "$NUMBER_2" --output="$OUTPUT" receive
200 run_main -a "$NUMBER_1" --output="$OUTPUT" receive
201 run_linked -a "$NUMBER_1" --output="$OUTPUT" receive
202 done
203
204 run_main -a "$NUMBER_1" removeDevice -d 2
205
206 ## Unregister
207 run_main -a "$NUMBER_1" unregister
208 run_main -a "$NUMBER_2" unregister --delete-account