forked from cwtch.im/cwtch
Fixing up integration test for commit
This commit is contained in:
parent
617bb601a8
commit
a4532910d0
|
@ -36,11 +36,12 @@ func compareSignatures(a []byte, b []byte) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (t *Timeline) GetMessages() (messages []Message) {
|
||||
func (t *Timeline) GetMessages() []Message {
|
||||
t.lock.Lock()
|
||||
copy(messages[:], t.Messages)
|
||||
messages := make([]Message, len(t.Messages))
|
||||
copy(messages[:], t.Messages[:])
|
||||
t.lock.Unlock()
|
||||
return
|
||||
return messages
|
||||
}
|
||||
|
||||
// Len gets the length of the timeline
|
||||
|
|
|
@ -54,7 +54,7 @@ func TestTranscriptConsistency(t *testing.T) {
|
|||
timeline.Insert(m3)
|
||||
timeline.Insert(m2)
|
||||
|
||||
for i, m := range timeline.Messages {
|
||||
for i, m := range timeline.GetMessages() {
|
||||
t.Logf("Messages %v: %v %x %x", i, m.Message, m.Signature, m.PreviousMessageSig)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -156,7 +156,7 @@ func (p *Profile) AttemptDecryption(ciphertext []byte) (bool, *Message) {
|
|||
success, dgm := group.DecryptMessage(ciphertext)
|
||||
if success {
|
||||
|
||||
// Asser that we know the owner of the group
|
||||
// Assert that we know the owner of the group
|
||||
owner, ok := p.Contacts[group.Owner]
|
||||
if ok {
|
||||
valid := ed25519.Verify(owner.Ed25519PublicKey, []byte(group.GroupID+group.GroupServer), dgm.SignedGroupId)
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"Name":"Sarah","Ed25519PublicKey":"W9PpKZvtZgVlHZ6wT2oTaStaUXHFYO553TyM/kcx+j0=","Trusted":false,"Blocked":false,"Onion":"b56kmtfigbjj4oed","Contacts":{"b56kmtfigbjj4oed":{"Name":"Sarah","Ed25519PublicKey":"W9PpKZvtZgVlHZ6wT2oTaStaUXHFYO553TyM/kcx+j0=","Trusted":false,"Blocked":false,"Onion":"b56kmtfigbjj4oed"}},"Ed25519PrivateKey":"D9VtCjO9WRscq1J1hBHj5KNTWhJqCzeZHTv76iuD5Alb0+kpm+1mBWUdnrBPahNpK1pRccVg7nndPIz+RzH6PQ==","OnionPrivateKey":{"N":131431908350807887726680282316542867215751372260346817354651281962467765863817142968881902964613976074829288548976846611912590630516744102978481639231882423095250930957765239944153566210775495249916207632888810237972001419936958220195829843082407234641091082084103419783680884292376945307398827177826045917213,"E":65537,"D":6527776091091744732751641346725468556498935207706011726038572452016915298025921240882411372962120513962636895599731994472976829917939515925278205223000399956250499414440500849418156829119221518850817208974047327356576252006802914743934160449516927022744695396017974696922331017645717939347896803326305764673,"Primes":[13025701017471365410286943463589035042960291474418354951794759000498929713389834945845345637495625867751746594507969387541024007744235240081409789677106193,10090198460299245573384301425475815284645715053514216764835542359499265357695622569689478708035086000871913905222809009531316465232841423534462476890808141],"Precomputed":{"Dp":5662484123285460129988785255316105533880688833882828517885052473018516372956900645545781729591686848226913964287838134962597829937794863816155223887281313,"Dq":5664872700127415683157635940750372271896095940903643615749255314942947793934002728674713209079496380915836859007400929195649145090211137792804253699748153,"Qinv":7915626106616008088617615457915827664685512673801991601529702673140410770136418670435683522388873693637240686678200328224101409032168571783863608820704490,"CRTValues":[]}},"Groups":{}}
|
||||
{"Name":"Sarah","Ed25519PublicKey":"/2xUC3+EcM69CnYrYSKW499gXtH65DQ65R6UGRmbpHM=","Trusted":false,"Blocked":false,"Onion":"4g3rdfpq4fryjyg2","Contacts":{"4g3rdfpq4fryjyg2":{"Name":"Sarah","Ed25519PublicKey":"/2xUC3+EcM69CnYrYSKW499gXtH65DQ65R6UGRmbpHM=","Trusted":false,"Blocked":false,"Onion":"4g3rdfpq4fryjyg2"}},"Ed25519PrivateKey":"RJ8K69ZZG5B4ufBDVUvXprYpGsDM8iFiQMEdc1MCDh7/bFQLf4Rwzr0KdithIpbj32Be0frkNDrlHpQZGZukcw==","OnionPrivateKey":{"N":137900602813611213189041103405418371044707088095490122917581331230896621428290390270991677482016645829512106617167800422226984565513726430820993290694895580565153249656392070078179688609933325529529966437840233160619179283162861419376169773461376606874165643290168384848468920199602266115187846439397770310477,"E":65537,"D":32650314385138245495740586257257379243796937393803809104965279410254098825133618960815689755229142214879218737180413493930087118773768909578548802839811012970470413974184929457770929480883399498950171683167037292603270431438053986057858898333372137069087346537018540254886839274994781698804912229336225943149,"Primes":[13089226577015106801916990672183383260292068983897361545720483543242420102790612098089034534068816127751017739419172149354346726789445970796490590388209763,10535427895775514969658003258523047110222786921729773130757443070837085109335455191190769936580263568766152909466244437192612859171443040757316597016718479],"Precomputed":{"Dp":12060255227628015079020362264671767065516221151298383767006902951900354576910922250684443144174213984073808782746032168679711111237632100134978474763752483,"Dq":8251736413294062268756808600687345029751832941381372119183214218977652558818655880174762525208683785469816973554050280078947932833809034974347593595452587,"Qinv":11288899754516920495714102707684244008755697053785965771187317487773161282452886307082370168337103639984386063085142036280484558810305271619464191907337467,"CRTValues":[]}},"Groups":{}}
|
|
@ -1,19 +1,19 @@
|
|||
package testing
|
||||
|
||||
import (
|
||||
cwtchserver "git.mascherari.press/cwtch/server"
|
||||
"github.com/s-rah/go-ricochet/utils"
|
||||
"git.mascherari.press/cwtch/peer"
|
||||
"testing"
|
||||
"time"
|
||||
"log"
|
||||
"git.mascherari.press/cwtch/protocol"
|
||||
"github.com/golang/protobuf/proto"
|
||||
"io/ioutil"
|
||||
"fmt"
|
||||
"git.mascherari.press/cwtch/model"
|
||||
"os"
|
||||
"git.mascherari.press/cwtch/peer"
|
||||
"git.mascherari.press/cwtch/protocol"
|
||||
cwtchserver "git.mascherari.press/cwtch/server"
|
||||
"github.com/golang/protobuf/proto"
|
||||
"github.com/s-rah/go-ricochet"
|
||||
"github.com/s-rah/go-ricochet/utils"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -21,12 +21,11 @@ const (
|
|||
)
|
||||
|
||||
var (
|
||||
aliceLines = []string {"Hello", "My name is Alice", "bye"}
|
||||
bobLines = []string {"Hi", "My name is Bob.", "toodles", "hello?"}
|
||||
|
||||
aliceLines = []string{"Hello", "My name is Alice", "bye"}
|
||||
bobLines = []string{"Hi", "My name is Bob.", "toodles", "hello?"}
|
||||
)
|
||||
|
||||
func checkAndGenPrivateKey(privateKeyFile string) (generated bool){
|
||||
func checkAndGenPrivateKey(privateKeyFile string) (generated bool) {
|
||||
if _, err := os.Stat(privateKeyFile); os.IsNotExist(err) {
|
||||
fmt.Println("generating new private key...")
|
||||
pk, pk_err := utils.GeneratePrivateKey()
|
||||
|
@ -42,8 +41,8 @@ func checkAndGenPrivateKey(privateKeyFile string) (generated bool){
|
|||
return false
|
||||
}
|
||||
|
||||
func printAndVerifyTimeline(t *testing.T, timeline model.Timeline) error {
|
||||
for _, message := range timeline.Messages {
|
||||
func printAndVerifyTimeline(t *testing.T, timeline []model.Message) error {
|
||||
for _, message := range timeline {
|
||||
fmt.Printf("%v %v> %s [%t]\n", message.Timestamp, message.PeerID, message.Message, message.Verified)
|
||||
if !message.Verified {
|
||||
t.Errorf("Message '%s' from '%s' not verified!", message.Message, message.PeerID)
|
||||
|
@ -69,17 +68,17 @@ func TestCwtchPeerIntegration(t *testing.T) {
|
|||
|
||||
serverKey, err := utils.LoadPrivateKeyFromFile(keyfile)
|
||||
if err != nil {
|
||||
t.Error("Could not load server's key from %v", keyfile)
|
||||
t.Errorf("Could not load server's key from %v", keyfile)
|
||||
}
|
||||
serverAddr, _ := utils.GetOnionAddress(serverKey)
|
||||
|
||||
serverOnline := false
|
||||
if ! generatedKey {
|
||||
if !generatedKey {
|
||||
fmt.Printf("Checking if test server %v is online...\n", serverAddr)
|
||||
serverOnline = serverCheck(serverAddr)
|
||||
}
|
||||
|
||||
if ! serverOnline {
|
||||
if !serverOnline {
|
||||
// launch app
|
||||
server := new(cwtchserver.Server)
|
||||
fmt.Printf("No server found\nStarting cwtch server...\n")
|
||||
|
@ -87,7 +86,7 @@ func TestCwtchPeerIntegration(t *testing.T) {
|
|||
|
||||
// let tor get established
|
||||
fmt.Printf("Establishing Tor hidden service: %v...\n", serverAddr)
|
||||
time.Sleep(time.Second * 60)
|
||||
time.Sleep(time.Second * 120)
|
||||
} else {
|
||||
fmt.Printf("Found existing cwtch server %v, using for tests...\n", serverAddr)
|
||||
}
|
||||
|
@ -102,14 +101,13 @@ func TestCwtchPeerIntegration(t *testing.T) {
|
|||
groupId, invite, err := alice.Profile.StartGroup(serverAddr)
|
||||
fmt.Printf("Started group: %v!\n", groupId)
|
||||
if err != nil {
|
||||
t.Error("Failed to start group: %v", err)
|
||||
t.Errorf("Failed to start group: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
gci := &protocol.CwtchPeerPacket{}
|
||||
proto.Unmarshal(invite, gci)
|
||||
|
||||
|
||||
fmt.Println("Alice joining server/group...")
|
||||
alice.JoinServer(serverAddr)
|
||||
|
||||
|
@ -124,49 +122,54 @@ func TestCwtchPeerIntegration(t *testing.T) {
|
|||
alice.Profile.AddContact(bob.Profile.Onion, &bob.Profile.PublicProfile)
|
||||
bob.Profile.AddContact(alice.Profile.Onion, &alice.Profile.PublicProfile)
|
||||
|
||||
// TODO: have alice actually protocolly send the invite
|
||||
// TODO: have alice actually send the invite
|
||||
fmt.Printf("Bob processing invite to group %v\n", gci.GetGroupChatInvite().GroupName)
|
||||
bob.Profile.ProcessInvite(gci.GetGroupChatInvite(), alice.Profile.Onion)
|
||||
|
||||
fmt.Println("Bob joining server/group...")
|
||||
bob.JoinServer(serverAddr)
|
||||
|
||||
time.Sleep(time.Second * 10)
|
||||
|
||||
// Wait for them to join the server
|
||||
time.Sleep(time.Second * 60)
|
||||
|
||||
fmt.Println("Starting conversation in group...")
|
||||
// Conversation
|
||||
fmt.Println("Alice> ", aliceLines[0])
|
||||
alice.SendMessageToGroup(groupId, aliceLines[0])
|
||||
time.Sleep(time.Second * 2)
|
||||
err = alice.SendMessageToGroup(groupId, aliceLines[0])
|
||||
if err != nil {
|
||||
t.Errorf("Alice failed to send a message to the group: %v", err)
|
||||
}
|
||||
time.Sleep(time.Second * 10)
|
||||
|
||||
fmt.Println("Bob> ", bobLines[0])
|
||||
bob.SendMessageToGroup(groupId, bobLines[0])
|
||||
time.Sleep(time.Second * 2)
|
||||
err = bob.SendMessageToGroup(groupId, bobLines[0])
|
||||
if err != nil {
|
||||
t.Errorf("Bob failed to send a message to the group: %v", err)
|
||||
}
|
||||
time.Sleep(time.Second * 10)
|
||||
|
||||
// "instant" - could be either order?
|
||||
fmt.Println("Alice> ", aliceLines[1])
|
||||
alice.SendMessageToGroup(groupId, aliceLines[1])
|
||||
fmt.Println("Bob> ", bobLines[1])
|
||||
bob.SendMessageToGroup(groupId, bobLines[1])
|
||||
time.Sleep(time.Second * 3)
|
||||
time.Sleep(time.Second * 10)
|
||||
|
||||
fmt.Println("Alice> ", aliceLines[2])
|
||||
alice.SendMessageToGroup(groupId, aliceLines[2])
|
||||
// Todo: Alice disconnects
|
||||
time.Sleep(time.Second * 2)
|
||||
time.Sleep(time.Second * 10)
|
||||
|
||||
fmt.Println("Bob> ", bobLines[2])
|
||||
bob.SendMessageToGroup(groupId, bobLines[2])
|
||||
time.Sleep(time.Second * 2)
|
||||
|
||||
time.Sleep(time.Second * 10)
|
||||
|
||||
// Todo: Alice reconects, gets missed messages (from bob)
|
||||
|
||||
// Verify
|
||||
|
||||
// final syncing time...
|
||||
time.Sleep(time.Second * 4)
|
||||
time.Sleep(time.Second * 10)
|
||||
|
||||
alicesGroup := alice.Profile.GetGroupByGroupID(groupId)
|
||||
fmt.Printf("alice Groups:\n")
|
||||
|
@ -199,8 +202,9 @@ func TestCwtchPeerIntegration(t *testing.T) {
|
|||
}
|
||||
|
||||
// check message 0,1 and 4,5 for content (2,3 could be out of order)
|
||||
if alicesGroup.Timeline.Messages[0].Message != aliceLines[0] || alicesGroup.Timeline.Messages[1].Message != bobLines[0] ||
|
||||
alicesGroup.Timeline.Messages[4].Message != aliceLines[2] || alicesGroup.Timeline.Messages[5].Message != bobLines[2] {
|
||||
aliceGroupTimeline := alicesGroup.GetTimeline()
|
||||
if aliceGroupTimeline[0].Message != aliceLines[0] || aliceGroupTimeline[1].Message != bobLines[0] ||
|
||||
aliceGroupTimeline[4].Message != aliceLines[2] || aliceGroupTimeline[5].Message != bobLines[2] {
|
||||
t.Errorf("Some of the messages did not have the expected content!")
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue