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