From 65afb2b0354c4d8a495603c98e5902e4d1302a3b Mon Sep 17 00:00:00 2001
From: "Richard T. Carback III" <rick.carback@gmail.com>
Date: Mon, 7 Jun 2021 23:03:04 +0000
Subject: [PATCH] WIP group chat integration test

---
 basice2e/clients.goldoutput/client80.txt |  10 ++
 basice2e/clients.goldoutput/client81.txt |  11 ++
 basice2e/clients.goldoutput/client82.txt |  11 ++
 basice2e/run.sh                          | 197 +++++++++++++++++++++++
 4 files changed, 229 insertions(+)
 create mode 100644 basice2e/clients.goldoutput/client80.txt
 create mode 100644 basice2e/clients.goldoutput/client81.txt
 create mode 100644 basice2e/clients.goldoutput/client82.txt

diff --git a/basice2e/clients.goldoutput/client80.txt b/basice2e/clients.goldoutput/client80.txt
new file mode 100644
index 0000000..859ae7d
--- /dev/null
+++ b/basice2e/clients.goldoutput/client80.txt
@@ -0,0 +1,10 @@
+Created new group with name "Group Name" and message "80 inviting 81 and 82 to new group"
+Got group with name "Group Name" and message "80 inviting 81 and 82 to new group"
+Printed list of 1 groups.
+Received group message: "Hello 2 from 82"
+Received group message: "Hello from 81"
+Received group message: "Hello from 82"
+Sent message "Hello 2 from 80" to group.
+Sent message "Hello from 80" to group.
+Waiting for 1 group message(s) to be received.
+Waiting for 2 group message(s) to be received.
diff --git a/basice2e/clients.goldoutput/client81.txt b/basice2e/clients.goldoutput/client81.txt
new file mode 100644
index 0000000..e6a105d
--- /dev/null
+++ b/basice2e/clients.goldoutput/client81.txt
@@ -0,0 +1,11 @@
+Got group with name "Group Name" and message "80 inviting 81 and 82 to new group"
+Joined group with name "Group Name" and message "80 inviting 81 and 82 to new group"
+Left group.
+Printed list of 1 groups.
+Received group message: "Hello from 80"
+Received group message: "Hello from 82"
+Sent message "Hello from 81" to group.
+Timed out waiting for 1 group message(s).
+Waiting for 1 group message(s) to be received.
+Waiting for 2 group message(s) to be received.
+Waiting for group request to be received.
diff --git a/basice2e/clients.goldoutput/client82.txt b/basice2e/clients.goldoutput/client82.txt
new file mode 100644
index 0000000..170f71e
--- /dev/null
+++ b/basice2e/clients.goldoutput/client82.txt
@@ -0,0 +1,11 @@
+Got group with name "Group Name" and message "80 inviting 81 and 82 to new group"
+Joined group with name "Group Name" and message "80 inviting 81 and 82 to new group"
+Printed list of 1 groups.
+Received group message: "Hello 2 from 80"
+Received group message: "Hello from 80"
+Received group message: "Hello from 81"
+Sent message "Hello 2 from 82" to group.
+Sent message "Hello from 82" to group.
+Waiting for 1 group message(s) to be received.
+Waiting for 2 group message(s) to be received.
+Waiting for group request to be received.
diff --git a/basice2e/run.sh b/basice2e/run.sh
index 42408ed..a56c9b3 100755
--- a/basice2e/run.sh
+++ b/basice2e/run.sh
@@ -37,6 +37,7 @@ CLIENTCLEAN=results/clients-cleaned
 CLIENTOPTS="--password hello --ndf results/ndf.json --waitTimeout 90 --unsafe-channel-creation -v $DEBUGLEVEL"
 CLIENTUDOPTS="--password hello --ndf results/ndf.json -v $DEBUGLEVEL"
 CLIENTSINGLEOPTS="--password hello --ndf results/ndf.json -v $DEBUGLEVEL"
+CLIENTGROUPOPTS="--password hello --ndf results/ndf.json -v $DEBUGLEVEL"
 
 mkdir -p $SERVERLOGS
 mkdir -p $GATEWAYLOGS
@@ -495,6 +496,202 @@ then
     wait $PIDVAL2
 fi
 
+
+
+echo "TESTING GROUP CHAT..."
+# Create authenticated channel between client 80 and 81
+CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client80.log -s blob80 --writeContact $CLIENTOUT/client80-contact.bin --unsafe -m \"Hello from contact 80 to myself, without E2E Encryption\""
+eval $CLIENTCMD >> $CLIENTOUT/client80.txt || true &
+PIDVAL1=$!
+echo "$CLIENTCMD -- $PIDVAL1"
+wait $PIDVAL1
+CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client81.log -s blob81 --writeContact $CLIENTOUT/client81-contact.bin --destfile $CLIENTOUT/client80-contact.bin --send-auth-request --sendCount 0 --receiveCount 0"
+eval $CLIENTCMD >> $CLIENTOUT/client81.txt || true &
+PIDVAL2=$!
+echo "$CLIENTCMD -- $PIDVAL2"
+
+while [ ! -s $CLIENTOUT/client81-contact.bin ]; do
+    sleep 1
+    echo -n "."
+done
+echo
+
+TMPID=$(cat $CLIENTOUT/client80.log | grep "User\:" | awk -F' ' '{print $5}')
+CLIENT80ID=${TMPID}
+echo "CLIENT 80 ID: $CLIENT80ID"
+TMPID=$(cat $CLIENTOUT/client81.log | grep "User\:" | awk -F' ' '{print $5}')
+CLIENT81ID=${TMPID}
+echo "CLIENT 81 ID: $CLIENT81ID"
+
+# Client 81 will now wait for client 81's E2E Auth channel request and confirm
+CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client80.log -s blob80 --destfile $CLIENTOUT/client81-contact.bin --sendCount 0 --receiveCount 0"
+eval $CLIENTCMD >> $CLIENTOUT/client80.txt || true &
+PIDVAL1=$!
+echo "$CLIENTCMD -- $PIDVAL1"
+wait $PIDVAL1
+wait $PIDVAL2
+
+
+# Create authenticated channel between client 80 and 82
+CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client82.log -s blob82 --writeContact $CLIENTOUT/client82-contact.bin --destfile $CLIENTOUT/client80-contact.bin --send-auth-request --sendCount 0 --receiveCount 0"
+eval $CLIENTCMD >> $CLIENTOUT/client82.txt || true &
+PIDVAL3=$!
+echo "$CLIENTCMD -- $PIDVAL3"
+
+while [ ! -s $CLIENTOUT/client82-contact.bin ]; do
+    sleep 1
+    echo -n "."
+done
+echo
+
+TMPID=$(cat $CLIENTOUT/client82.log | grep "User\:" | awk -F' ' '{print $5}')
+CLIENT82ID=${TMPID}
+echo "CLIENT 82 ID: $CLIENT82ID"
+
+# Client 82 will now wait for client 82's E2E Auth channel request and confirm
+CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client80.log -s blob80 --destfile $CLIENTOUT/client82-contact.bin --sendCount 0 --receiveCount 0"
+eval $CLIENTCMD >> $CLIENTOUT/client80.txt || true &
+PIDVAL1=$!
+echo "$CLIENTCMD -- $PIDVAL1"
+wait $PIDVAL1
+wait $PIDVAL3
+
+# User 1 Creates Group
+echo "Group User IDs: $CLIENT80ID $CLIENT81ID $CLIENT82ID"
+echo "b64:$CLIENT81ID" > $CLIENTOUT/groupParticipants
+echo "b64:$CLIENT82ID" >> $CLIENTOUT/groupParticipants
+CLIENTCMD="timeout 60s ../bin/client group -s blob80 -l $CLIENTOUT/client80.log $CLIENTGROUPOPTS --create $CLIENTOUT/groupParticipants --message \"80 inviting 81 and 82 to new group\""
+eval $CLIENTCMD > $CLIENTOUT/client80.txt 2>&1 || true &
+PIDVAL1=$!
+echo "$CLIENTCMD -- $PIDVAL1"
+CLIENTCMD="../bin/client group -s blob81 -l $CLIENTOUT/client81.log $CLIENTGROUPOPTS --join"
+eval $CLIENTCMD > $CLIENTOUT/client81.txt 2>&1 || true &
+PIDVAL2=$!
+echo "$CLIENTCMD -- $PIDVAL2"
+CLIENTCMD="../bin/client group -s blob82 -l $CLIENTOUT/client82.log $CLIENTGROUPOPTS --join"
+eval $CLIENTCMD > $CLIENTOUT/client82.txt 2>&1 || true &
+PIDVAL3=$!
+echo "$CLIENTCMD -- $PIDVAL3"
+wait $PIDVAL1
+wait $PIDVAL2
+wait $PIDVAL3
+
+# Extract group ID -- Note to Jono this probably needs to be fixed!
+GROUPID=$(cat $CLIENTOUT/client80.log | grep -a "NewGroupID\:" | awk -F' ' '{print $5}')
+echo "Group ID: $GROUPID"
+
+# Print the group list from all users
+CLIENTCMD="../bin/client group -s blob80 -l $CLIENTOUT/client80.log $CLIENTGROUPOPTS --list"
+eval $CLIENTCMD >> $CLIENTOUT/client80.txt 2>&1 || true &
+PIDVAL1=$!
+echo "$CLIENTCMD -- $PIDVAL1"
+CLIENTCMD="../bin/client group -s blob81 -l $CLIENTOUT/client81.log $CLIENTGROUPOPTS --list"
+eval $CLIENTCMD >> $CLIENTOUT/client81.txt 2>&1 || true &
+PIDVAL2=$!
+echo "$CLIENTCMD -- $PIDVAL2"
+CLIENTCMD="../bin/client group -s blob82 -l $CLIENTOUT/client82.log $CLIENTGROUPOPTS --list"
+eval $CLIENTCMD >> $CLIENTOUT/client82.txt 2>&1 || true &
+PIDVAL3=$!
+echo "$CLIENTCMD -- $PIDVAL3"
+wait $PIDVAL1
+wait $PIDVAL2
+wait $PIDVAL3
+
+# Print group from all users
+CLIENTCMD="../bin/client group -s blob80 -l $CLIENTOUT/client80.log $CLIENTGROUPOPTS --show $GROUPID"
+eval $CLIENTCMD >> $CLIENTOUT/client80.txt 2>&1 || true &
+PIDVAL1=$!
+echo "$CLIENTCMD -- $PIDVAL1"
+CLIENTCMD="../bin/client group -s blob81 -l $CLIENTOUT/client81.log $CLIENTGROUPOPTS --show $GROUPID"
+eval $CLIENTCMD >> $CLIENTOUT/client81.txt 2>&1 || true &
+PIDVAL2=$!
+echo "$CLIENTCMD -- $PIDVAL2"
+CLIENTCMD="../bin/client group -s blob82 -l $CLIENTOUT/client82.log $CLIENTGROUPOPTS --show $GROUPID"
+eval $CLIENTCMD >> $CLIENTOUT/client82.txt 2>&1 || true &
+PIDVAL3=$!
+echo "$CLIENTCMD -- $PIDVAL3"
+wait $PIDVAL1
+wait $PIDVAL2
+wait $PIDVAL3
+
+# Now everyone sends their message
+CLIENTCMD="../bin/client group -s blob80 -l $CLIENTOUT/client80.log $CLIENTGROUPOPTS --sendMessage $GROUPID --message \"Hello from 80\""
+eval $CLIENTCMD >> $CLIENTOUT/client80.txt 2>&1 || true &
+PIDVAL1=$!
+echo "$CLIENTCMD -- $PIDVAL1"
+CLIENTCMD="../bin/client group -s blob81 -l $CLIENTOUT/client81.log $CLIENTGROUPOPTS --sendMessage $GROUPID --message \"Hello from 81\""
+eval $CLIENTCMD >> $CLIENTOUT/client81.txt 2>&1 || true &
+PIDVAL2=$!
+echo "$CLIENTCMD -- $PIDVAL2"
+CLIENTCMD="../bin/client group -s blob82 -l $CLIENTOUT/client82.log $CLIENTGROUPOPTS --sendMessage $GROUPID --message \"Hello from 82\""
+eval $CLIENTCMD >> $CLIENTOUT/client82.txt 2>&1 || true &
+PIDVAL3=$!
+echo "$CLIENTCMD -- $PIDVAL3"
+wait $PIDVAL1
+wait $PIDVAL2
+wait $PIDVAL3
+
+# Everyone waits for their message
+CLIENTCMD="../bin/client group -s blob80 -l $CLIENTOUT/client80.log $CLIENTGROUPOPTS --wait 2"
+eval $CLIENTCMD >> $CLIENTOUT/client80.txt 2>&1 || true &
+PIDVAL1=$!
+echo "$CLIENTCMD -- $PIDVAL1"
+CLIENTCMD="../bin/client group -s blob81 -l $CLIENTOUT/client81.log $CLIENTGROUPOPTS --wait 2"
+eval $CLIENTCMD >> $CLIENTOUT/client81.txt 2>&1 || true &
+PIDVAL2=$!
+echo "$CLIENTCMD -- $PIDVAL2"
+CLIENTCMD="../bin/client group -s blob82 -l $CLIENTOUT/client82.log $CLIENTGROUPOPTS --wait 2"
+eval $CLIENTCMD >> $CLIENTOUT/client82.txt 2>&1 || true &
+PIDVAL3=$!
+echo "$CLIENTCMD -- $PIDVAL3"
+wait $PIDVAL1
+wait $PIDVAL2
+wait $PIDVAL3
+
+# Member 2 leaves the group
+CLIENTCMD="../bin/client group -s blob81 -l $CLIENTOUT/client81.log $CLIENTGROUPOPTS --leave $GROUPID"
+eval $CLIENTCMD >> $CLIENTOUT/client81.txt 2>&1 || true &
+PIDVAL2=$!
+echo "$CLIENTCMD -- $PIDVAL2"
+wait $PIDVAL2
+
+# 1 and 3 send a message successfully now, 2 does not
+CLIENTCMD="../bin/client group -s blob80 -l $CLIENTOUT/client80.log $CLIENTGROUPOPTS --sendMessage $GROUPID --message \"Hello 2 from 80\""
+eval $CLIENTCMD >> $CLIENTOUT/client80.txt 2>&1 || true &
+PIDVAL1=$!
+echo "$CLIENTCMD -- $PIDVAL2"
+CLIENTCMD="../bin/client group -s blob82 -l $CLIENTOUT/client82.log $CLIENTGROUPOPTS --sendMessage $GROUPID --message \"Hello 2 from 82\""
+eval $CLIENTCMD >> $CLIENTOUT/client82.txt 2>&1 || true &
+PIDVAL3=$!
+echo "$CLIENTCMD -- $PIDVAL3"
+wait $PIDVAL1
+wait $PIDVAL2
+wait $PIDVAL3
+
+# All 3 wait again
+CLIENTCMD="../bin/client group -s blob80 -l $CLIENTOUT/client80.log $CLIENTGROUPOPTS --wait 1"
+eval $CLIENTCMD >> $CLIENTOUT/client80.txt 2>&1 || true &
+PIDVAL1=$!
+echo "$CLIENTCMD -- $PIDVAL1"
+CLIENTCMD="../bin/client group -s blob81 -l $CLIENTOUT/client81.log $CLIENTGROUPOPTS --wait 1"
+eval $CLIENTCMD >> $CLIENTOUT/client81.txt 2>&1 || true &
+PIDVAL2=$!
+echo "$CLIENTCMD -- $PIDVAL2"
+CLIENTCMD="../bin/client group -s blob82 -l $CLIENTOUT/client82.log $CLIENTGROUPOPTS --wait 1"
+eval $CLIENTCMD >> $CLIENTOUT/client82.txt 2>&1 || true &
+PIDVAL3=$!
+echo "$CLIENTCMD -- $PIDVAL3"
+wait $PIDVAL1
+wait $PIDVAL2
+wait $PIDVAL3
+
+sort -b -o "$CLIENTOUT/client80.txt" "$CLIENTOUT/client80.txt"
+sort -b -o "$CLIENTOUT/client81.txt" "$CLIENTOUT/client81.txt"
+sort -b -o "$CLIENTOUT/client82.txt" "$CLIENTOUT/client82.txt"
+
+echo "GROUP CHAT FINISHED!"
+
+
 cp $CLIENTOUT/*.txt $CLIENTCLEAN/
 
 sed -i.bak 's/Sending\ to\ .*\:/Sent:/g' $CLIENTCLEAN/client*.txt
-- 
GitLab