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