]> nmode's Git Repositories - signal-cli/blob - run_tests.sh
Ignore invalid recipient numbers
[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
9 NUMBER_1="$1"
10 NUMBER_2="$2"
11 TEST_PIN_1=456test_pin_foo123
12 NATIVE=0
13 JSON_RPC=0
14 TEST_REGISTER=0
15
16 PATH_TEST_CONFIG="$PWD/test-config"
17 PATH_MAIN="$PATH_TEST_CONFIG/main"
18 PATH_LINK="$PATH_TEST_CONFIG/link"
19
20 if [ "$NATIVE" -eq 1 ]; then
21 SIGNAL_CLI="$PWD/build/native/nativeCompile/signal-cli"
22 elif [ "$JSON_RPC" -eq 1 ]; then
23 (cd client && cargo build)
24 "$PWD/build/install/signal-cli/bin/signal-cli" --verbose --verbose --trust-new-identities=always --config="$PATH_MAIN" --service-environment="staging" --log-file="$PATH_MAIN/log" daemon --socket --receive-mode=manual&
25 "$PWD/build/install/signal-cli/bin/signal-cli" --verbose --verbose --trust-new-identities=always --config="$PATH_LINK" --service-environment="staging" --log-file="$PATH_LINK/log" daemon --tcp --receive-mode=manual&
26 sleep 5
27 SIGNAL_CLI="$PWD/client/target/debug/signal-cli-client"
28 else
29 ./gradlew installDist
30 SIGNAL_CLI="$PWD/build/install/signal-cli/bin/signal-cli"
31 fi
32
33 run() {
34 # To update graalvm config, set GRAALVM_HOME, e.g:
35 # export GRAALVM_HOME=/usr/lib/jvm/java-17-graalvm
36 if [ ! -z "$GRAALVM_HOME" ]; then
37 export JAVA_HOME=$GRAALVM_HOME
38 export SIGNAL_CLI_OPTS="-agentlib:native-image-agent=config-merge-dir=graalvm-config-dir-${SIGNAL_CLI_AGENT_ID}/"
39 fi
40
41 set -x
42 if [ "$JSON_RPC" -eq 1 ]; then
43 "$SIGNAL_CLI" $@
44 else
45 "$SIGNAL_CLI" --service-environment="staging" --verbose --verbose $@
46 fi
47 set +x
48 }
49
50 run_main() {
51 export SIGNAL_CLI_AGENT_ID=main
52 if [ "$JSON_RPC" -eq 1 ]; then
53 run --json-rpc-socket="$XDG_RUNTIME_DIR/signal-cli/socket" $@
54 else
55 run --config="$PATH_MAIN" --log-file="$PATH_MAIN/log" $@
56 fi
57 unset SIGNAL_CLI_AGENT_ID
58 }
59
60 run_linked() {
61 export SIGNAL_CLI_AGENT_ID=linked
62 if [ "$JSON_RPC" -eq 1 ]; then
63 run --json-rpc-tcp="127.0.0.1:7583" $@
64 else
65 run --config="$PATH_LINK" --log-file="$PATH_LINK/log" $@
66 fi
67 unset SIGNAL_CLI_AGENT_ID
68 }
69
70 register() {
71 NUMBER=$1
72 PIN=$2
73 echo -n "Enter a captcha token (https://signalcaptchas.org/staging/registration/generate.html): "
74 read CAPTCHA
75 run_main -a "$NUMBER" register --captcha "$CAPTCHA"
76 echo -n "Enter validation code for ${NUMBER}: "
77 read CODE
78 if [ -z "$PIN" ]; then
79 run_main -a "$NUMBER" verify "$CODE"
80 else
81 run_main -a "$NUMBER" verify "$CODE" --pin "$PIN"
82 fi
83 }
84
85 link() {
86 NUMBER=$1
87 LINK_CODE_FILE="$PATH_TEST_CONFIG/link_code"
88 rm -f "$LINK_CODE_FILE"
89 mkfifo "$LINK_CODE_FILE"
90 run_linked link -n "test-device" >"$LINK_CODE_FILE" &
91 read LINK_CODE <"$LINK_CODE_FILE"
92 run_main -a "$NUMBER" addDevice --uri "$LINK_CODE"
93 wait
94 run_linked -a "$NUMBER" send --note-to-self -m hi
95 run_main -a "$NUMBER" receive
96 run_linked -a "$NUMBER" receive
97 run_main -a "$NUMBER" receive
98 }
99
100 run_main --version
101 run_main version
102 run_main --help
103
104 ## Register
105 if [ "$TEST_REGISTER" -eq 1 ]; then
106 register "$NUMBER_1" "$TEST_PIN_1"
107 register "$NUMBER_2"
108 fi
109
110 sleep 5
111
112 run_main listAccounts
113 run_main --output=json listAccounts
114 run_main --scrub-log listAccounts
115
116 if [ "$JSON_RPC" -eq 0 ]; then
117 ## DBus
118 #run_main -a "$NUMBER_1" --dbus send "$NUMBER_2" -m daemon_not_running || true
119 #run_main daemon &
120 #DAEMON_PID=$!
121 #sleep 10
122 #run_main -a "$NUMBER_1" --dbus send "$NUMBER_2" -m hii
123 #run_main -a "$NUMBER_2" --dbus receive
124 #kill "$DAEMON_PID"
125
126
127 # JSON-RPC
128 FIFO_FILE="${PATH_MAIN}/dbus-fifo"
129
130 rm -f "$FIFO_FILE"
131 mkfifo "$FIFO_FILE"
132
133 run_main -a "$NUMBER_1" send "$NUMBER_2" -m hi
134 run_main -a "$NUMBER_2" jsonRpc < "$FIFO_FILE" &
135
136 exec 3<> "$FIFO_FILE"
137 echo '{"jsonrpc":"2.0","id":"id","method":"updateContact","params":{"recipient":"'"$NUMBER_1"'","name":"NUMBER_1","expiration":10}}' >&3
138 echo '{"jsonrpc":"2.0","id":5,"method":"block","params":{"recipient":"'"$NUMBER_1"'"}}' >&3
139 echo '{"jsonrpc":"2.0","id":null,"method":"unblock","params":{"recipient":"'"$NUMBER_1"'"}}' >&3
140 echo '{"jsonrpc":"2.0","id":"id","method":"listContacts"}' >&3
141 echo '{"jsonrpc":"2.0","id":"id","method":"listGroups"}' >&3
142 echo '{"jsonrpc":"2.0","id":"id","method":"listDevices"}' >&3
143 echo '{"jsonrpc":"2.0","id":"id","method":"listIdentities"}' >&3
144 echo '{"jsonrpc":"2.0","id":"id","method":"sendSyncRequest"}' >&3
145 echo '{"jsonrpc":"2.0","id":"id","method":"sendContacts"}' >&3
146 echo '{"jsonrpc":"2.0","id":"id","method":"version"}' >&3
147 echo '{"jsonrpc":"2.0","id":"id","method":"updateAccount"}' >&3
148 echo '{"jsonrpc":"2.0","id":7,"method":"sendReceipt","params":{"recipient":"'"$NUMBER_1"'","targetTimestamp":1629919505575}}' >&3
149 echo '{"jsonrpc":"2.0","id":7,"method":"sendTyping","params":{"recipient":"'"$NUMBER_1"'"}}' >&3
150 echo '{"jsonrpc":"2.0","id":7,"method":"send","params":{"recipient":"'"$NUMBER_1"'","message":"some text"}}' >&3
151 echo '{"jsonrpc":"2.0","id":7,"method":"send","params":{"recipients":["'"$NUMBER_1"'","'"$NUMBER_2"'"],"message":"some other text"}}' >&3
152 echo '{"jsonrpc":"2.0","id":7,"method":"updateProfile","params":{"givenName":"n1","familyName":"n2","about":"ABA","aboutEmoji":"EMO","avatar":"LICENSE"}}' >&3
153 echo '{"jsonrpc":"2.0","id":7,"method":"getUserStatus","params":{"recipient":"'"$NUMBER_1"'"}}' >&3
154
155 # Error expected:
156 echo '{"jsonrpc":"2.0","id":7,"method":"sendReceipt","params":{"recipient":5}}' >&3
157 exec 3>&-
158
159 wait
160 fi
161
162 run_main -a "$NUMBER_1" setPin "$TEST_PIN_1"
163 run_main -a "$NUMBER_2" removePin
164
165 ## Contacts
166 run_main -a "$NUMBER_2" updateContact "$NUMBER_1" -n NUMBER_1 -e 10
167 run_main -a "$NUMBER_2" block "$NUMBER_1"
168 run_main -a "$NUMBER_2" unblock "$NUMBER_1"
169 run_main -a "$NUMBER_2" listContacts
170
171 run_main -a "$NUMBER_1" send "$NUMBER_2" -m hi
172 run_main -a "$NUMBER_2" receive
173 run_main -a "$NUMBER_2" send "$NUMBER_1" -m hi
174 run_main -a "$NUMBER_1" receive
175 run_main -a "$NUMBER_2" receive
176 ## Groups
177 GROUP_ID=$(run_main -a "$NUMBER_1" --output=json updateGroup -n GRUPPE -a LICENSE -m "$NUMBER_1" | jq -r '.groupId')
178 run_main -a "$NUMBER_1" send "$NUMBER_2" -m first
179 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
180 run_main -a "$NUMBER_1" updateGroup -g "$GROUP_ID" --remove-admin "$NUMBER_2" --reset-link --set-permission-send-messages=every-member
181 run_main -a "$NUMBER_1" updateGroup -g "$GROUP_ID" -r "$NUMBER_2"
182 run_main -a "$NUMBER_1" updateGroup -g "$GROUP_ID" -m "$NUMBER_2"
183 run_main -a "$NUMBER_1" listGroups -d
184 run_main -a "$NUMBER_1" --output=json listGroups -d
185 run_main -a "$NUMBER_2" receive
186 run_main -a "$NUMBER_2" quitGroup -g "$GROUP_ID"
187 run_main -a "$NUMBER_2" listGroups -d
188 run_main -a "$NUMBER_2" --output=json listGroups -d
189 run_main -a "$NUMBER_1" receive
190 run_main -a "$NUMBER_1" updateGroup -g "$GROUP_ID" -m "$NUMBER_2"
191 run_main -a "$NUMBER_1" block -g "$GROUP_ID"
192 run_main -a "$NUMBER_1" unblock -g "$GROUP_ID"
193
194 ## Basic send/receive
195 for OUTPUT in "plain-text" "json"; do
196 run_main -a "$NUMBER_1" --output="$OUTPUT" getUserStatus "$NUMBER_1" "$NUMBER_2" "+111111111"
197 run_main -a "$NUMBER_1" --output="$OUTPUT" send "$NUMBER_2" -m hi
198 run_main -a "$NUMBER_2" --output="$OUTPUT" send "$NUMBER_1" -m hi
199 run_main -a "$NUMBER_1" --output="$OUTPUT" send -g "$GROUP_ID" -m hi -a LICENSE --mention "1:1:$NUMBER_2"
200 TIMESTAMP=$(uname -a | run_main -a "$NUMBER_1" --output=json send --message-from-stdin "$NUMBER_2" | jq '.timestamp')
201 run_main -a "$NUMBER_2" --output="$OUTPUT" sendReaction "$NUMBER_1" -e 🍀 -a "$NUMBER_1" -t "$TIMESTAMP"
202 run_main -a "$NUMBER_1" --output="$OUTPUT" remoteDelete "$NUMBER_2" -t "$TIMESTAMP"
203 run_main -a "$NUMBER_2" --output="$OUTPUT" receive
204 run_main -a "$NUMBER_1" --output="$OUTPUT" receive
205 run_main -a "$NUMBER_1" --output="$OUTPUT" send -e "$NUMBER_2"
206 run_main -a "$NUMBER_2" --output="$OUTPUT" receive
207 done
208
209 ## Profile
210 run_main -a "$NUMBER_1" updateProfile --given-name=GIVEN --family-name=FAMILY --about=ABOUT --about-emoji=EMOJI --avatar=LICENSE --mobile-coin-address="YWJjCg=="
211
212 ## Provisioning
213 link "$NUMBER_1"
214 link "$NUMBER_2"
215 run_main -a "$NUMBER_1" listDevices
216 run_linked -a "$NUMBER_1" sendSyncRequest
217 run_main -a "$NUMBER_1" sendContacts
218
219 ## Configuration
220 run_main -a "$NUMBER_1" updateConfiguration --read-receipts=true
221
222 ## Identities
223 run_main -a "$NUMBER_1" listIdentities
224 run_main -a "$NUMBER_2" listIdentities
225 run_main -a "$NUMBER_2" trust "$NUMBER_1" -a
226
227 for OUTPUT in "plain-text" "json"; do
228 run_main -a "$NUMBER_1" --output="$OUTPUT" send "$NUMBER_2" -m hi
229 run_main -a "$NUMBER_1" --output="$OUTPUT" send "$NUMBER_2" -m hi --edit-timestamp 123456677
230 run_main -a "$NUMBER_2" --output="$OUTPUT" send "$NUMBER_1" -m hi --text-style "1:1:BOLD" --quote-timestamp 12345 --quote-author "$NUMBER_1" --quote-message hitest --quote-text-style "1:1:BOLD" --preview-url "https://example.com" --preview-title preview --preview-description foo --preview-image LICENSE --story-timestamp 1234567 --story-author "$NUMBER_1"
231 run_main -a "$NUMBER_1" --output="$OUTPUT" sendPaymentNotification --receipt "YWJjCg==" --note notefoo "$NUMBER_2"
232 run_main -a "$NUMBER_2" --output="$OUTPUT" receive
233 run_main -a "$NUMBER_1" --output="$OUTPUT" receive
234 run_linked -a "$NUMBER_1" --output="$OUTPUT" receive
235 done
236
237 run_main -a "$NUMBER_1" removeDevice -d 2
238
239 ## Unregister
240 if [ "$TEST_REGISTER" -eq 1 ]; then
241 run_main -a "$NUMBER_1" unregister
242 run_main -a "$NUMBER_2" unregister --delete-account
243 fi
244 run_main -a "$NUMBER_2" deleteLocalAccountData || true
245
246 if [ ! -z "$GRAALVM_HOME" ]; then
247 "$GRAALVM_HOME"/lib/svm/bin/native-image-configure generate --input-dir=graalvm-config-dir/ --input-dir=graalvm-config-dir-linked/ --input-dir=graalvm-config-dir-main/ --output-dir=graalvm-config-dir//
248 rm -r graalvm-config-dir-main graalvm-config-dir-linked
249 fi