2018-03-09 20:44:13 +00:00
|
|
|
package model
|
|
|
|
|
|
|
|
import (
|
2021-05-14 18:26:04 +00:00
|
|
|
"crypto/sha256"
|
2020-07-14 00:46:05 +00:00
|
|
|
"cwtch.im/cwtch/protocol/groups"
|
2021-05-14 18:26:04 +00:00
|
|
|
"strings"
|
2018-03-30 21:16:51 +00:00
|
|
|
"testing"
|
2018-03-15 20:53:22 +00:00
|
|
|
"time"
|
2018-03-09 20:44:13 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestGroup(t *testing.T) {
|
2018-11-21 22:15:43 +00:00
|
|
|
g, _ := NewGroup("2c3kmoobnyghj2zw6pwv7d57yzld753auo3ugauezzpvfak3ahc4bdyd")
|
2020-07-14 00:46:05 +00:00
|
|
|
dgm := &groups.DecryptedGroupMessage{
|
|
|
|
Onion: "onion",
|
|
|
|
Text: "Hello World!",
|
|
|
|
Timestamp: uint64(time.Now().Unix()),
|
|
|
|
SignedGroupID: []byte{},
|
2018-04-28 17:52:59 +00:00
|
|
|
PreviousMessageSig: []byte{},
|
2018-05-28 17:44:47 +00:00
|
|
|
Padding: []byte{},
|
2018-03-15 20:53:22 +00:00
|
|
|
}
|
2021-05-14 18:26:04 +00:00
|
|
|
|
2021-11-17 22:34:13 +00:00
|
|
|
invite, err := g.Invite()
|
2021-05-14 18:26:04 +00:00
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("error creating group invite: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
validatedInvite, err := ValidateInvite(invite)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("error validating group invite: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if validatedInvite.GroupID != g.GroupID {
|
|
|
|
t.Fatalf("after validate group invite id should be identical to original: %v", err)
|
|
|
|
}
|
|
|
|
|
2018-09-27 00:08:54 +00:00
|
|
|
encMessage, _ := g.EncryptMessage(dgm)
|
2018-03-14 22:23:35 +00:00
|
|
|
ok, message := g.DecryptMessage(encMessage)
|
2020-07-14 00:46:05 +00:00
|
|
|
if !ok || message.Text != "Hello World!" {
|
2018-03-09 20:44:13 +00:00
|
|
|
t.Errorf("group encryption was invalid, or returned wrong message decrypted:%v message:%v", ok, message)
|
|
|
|
return
|
|
|
|
}
|
2021-11-11 00:41:43 +00:00
|
|
|
|
2018-03-09 20:44:13 +00:00
|
|
|
t.Logf("Got message %v", message)
|
|
|
|
}
|
2018-11-21 22:15:43 +00:00
|
|
|
|
|
|
|
func TestGroupErr(t *testing.T) {
|
|
|
|
_, err := NewGroup("not a real group name")
|
|
|
|
if err == nil {
|
|
|
|
t.Errorf("Group Setup Should Have Failed")
|
|
|
|
}
|
|
|
|
}
|
2021-05-14 18:26:04 +00:00
|
|
|
|
|
|
|
// Test various group invite validation failures...
|
|
|
|
func TestGroupValidation(t *testing.T) {
|
|
|
|
|
|
|
|
group := &Group{
|
2021-11-11 00:41:43 +00:00
|
|
|
GroupID: "",
|
|
|
|
GroupKey: [32]byte{},
|
|
|
|
GroupServer: "",
|
|
|
|
Timeline: Timeline{},
|
|
|
|
LocalID: "",
|
|
|
|
Version: 0,
|
2021-05-14 18:26:04 +00:00
|
|
|
}
|
|
|
|
|
2021-11-17 22:34:13 +00:00
|
|
|
invite, _ := group.Invite()
|
2021-05-14 18:26:04 +00:00
|
|
|
_, err := ValidateInvite(invite)
|
|
|
|
|
|
|
|
if err == nil {
|
|
|
|
t.Fatalf("Group with empty group id should have been an error")
|
|
|
|
}
|
|
|
|
t.Logf("Error: %v", err)
|
|
|
|
|
|
|
|
// Generate a valid group but replace the group server...
|
|
|
|
group, _ = NewGroup("2c3kmoobnyghj2zw6pwv7d57yzld753auo3ugauezzpvfak3ahc4bdyd")
|
|
|
|
group.GroupServer = "tcnkoch4nyr3cldkemejtkpqok342rbql6iclnjjs3ndgnjgufzyxvqd"
|
2021-11-17 22:34:13 +00:00
|
|
|
invite, _ = group.Invite()
|
2021-05-14 18:26:04 +00:00
|
|
|
_, err = ValidateInvite(invite)
|
|
|
|
|
|
|
|
if err == nil {
|
|
|
|
t.Fatalf("Group with empty group id should have been an error")
|
|
|
|
}
|
|
|
|
t.Logf("Error: %v", err)
|
|
|
|
|
|
|
|
// Generate a valid group but replace the group key...
|
|
|
|
group, _ = NewGroup("2c3kmoobnyghj2zw6pwv7d57yzld753auo3ugauezzpvfak3ahc4bdyd")
|
|
|
|
group.GroupKey = sha256.Sum256([]byte{})
|
2021-11-17 22:34:13 +00:00
|
|
|
invite, _ = group.Invite()
|
2021-05-14 18:26:04 +00:00
|
|
|
_, err = ValidateInvite(invite)
|
|
|
|
|
|
|
|
if err == nil {
|
|
|
|
t.Fatalf("Group with different group key should have errored")
|
|
|
|
}
|
|
|
|
t.Logf("Error: %v", err)
|
|
|
|
|
|
|
|
// mangle the invite
|
|
|
|
_, err = ValidateInvite(strings.ReplaceAll(invite, GroupInvitePrefix, ""))
|
|
|
|
if err == nil {
|
|
|
|
t.Fatalf("Group with different group key should have errored")
|
|
|
|
}
|
|
|
|
t.Logf("Error: %v", err)
|
|
|
|
|
|
|
|
}
|