Skip to content
Snippets Groups Projects
Select Git revision
  • 00f89f08112d2411a897f1c95e25d04405f3e869
  • release default protected
  • 11-22-implement-kv-interface-defined-in-collectiveversionedkvgo
  • hotfix/TestHostPool_UpdateNdf_AddFilter
  • XX-4719/announcementChannels
  • xx-4717/logLevel
  • jonah/noob-channel
  • master protected
  • XX-4707/tagDiskJson
  • xx-4698/notification-retry
  • hotfix/notifylockup
  • syncNodes
  • hotfix/localCB
  • XX-4677/NewChanManagerMobile
  • XX-4689/DmSync
  • duplicatePrefix
  • XX-4601/HavenInvites
  • finalizedUICallbacks
  • XX-4673/AdminKeySync
  • debugNotifID
  • anne/test
  • v4.7.5
  • v4.7.4
  • v4.7.3
  • v4.7.2
  • v4.7.1
  • v4.6.3
  • v4.6.1
  • v4.5.0
  • v4.4.4
  • v4.3.11
  • v4.3.8
  • v4.3.7
  • v4.3.6
  • v4.3.5
  • v4.2.0
  • v4.3.0
  • v4.3.4
  • v4.3.3
  • v4.3.2
  • v4.3.1
41 results

receive.go

  • garbled_test.go 3.37 KiB
    package message
    
    import (
    	"encoding/binary"
    	"gitlab.com/elixxir/client/interfaces/message"
    	"gitlab.com/elixxir/client/interfaces/params"
    	"gitlab.com/elixxir/client/network/internal"
    	"gitlab.com/elixxir/client/network/message/parse"
    	"gitlab.com/elixxir/client/storage"
    	"gitlab.com/elixxir/client/storage/e2e"
    	"gitlab.com/elixxir/client/switchboard"
    	"gitlab.com/elixxir/comms/client"
    	"gitlab.com/elixxir/crypto/fastRNG"
    	"gitlab.com/elixxir/primitives/format"
    	"gitlab.com/xx_network/crypto/csprng"
    	"math/rand"
    	"testing"
    	"time"
    )
    
    type TestListener struct {
    	ch chan bool
    }
    
    // the Hear function is called to exercise the listener, passing in the
    // data as an item
    func (l TestListener) Hear(item message.Receive) {
    	l.ch <- true
    }
    
    // Returns a name, used for debugging
    func (l TestListener) Name() string {
    	return "TEST LISTENER FOR GARBLED MESSAGES"
    }
    
    func TestManager_CheckGarbledMessages(t *testing.T) {
    	sess1 := storage.InitTestingSession(t)
    
    	sess2 := storage.InitTestingSession(t)
    
    	sw := switchboard.New()
    	l := TestListener{
    		ch: make(chan bool),
    	}
    	sw.RegisterListener(sess2.GetUser().ID, message.Raw, l)
    	comms, err := client.NewClientComms(sess1.GetUser().ID, nil, nil, nil)
    	if err != nil {
    		t.Errorf("Failed to start client comms: %+v", err)
    	}
    	i := internal.Internal{
    		Session:          sess1,
    		Switchboard:      sw,
    		Rng:              fastRNG.NewStreamGenerator(1, 1, csprng.NewSystemRNG),
    		Comms:            comms,
    		Health:           nil,
    		Uid:              sess1.GetUser().ID,
    		Instance:         nil,
    		NodeRegistration: nil,
    	}
    	m := NewManager(i, params.Messages{
    		MessageReceptionBuffLen:        20,
    		MessageReceptionWorkerPoolSize: 20,
    		MaxChecksGarbledMessage:        20,
    		GarbledMessageWait:             time.Hour,
    	}, nil)
    
    	e2ekv := i.Session.E2e()
    	err = e2ekv.AddPartner(sess2.GetUser().ID, sess2.E2e().GetDHPublicKey(), e2ekv.GetDHPrivateKey(), e2e.GetDefaultSessionParams(), e2e.GetDefaultSessionParams())
    	if err != nil {
    		t.Errorf("Failed to add e2e partner: %+v", err)
    		t.FailNow()
    	}
    
    	err = sess2.E2e().AddPartner(sess1.GetUser().ID, sess1.E2e().GetDHPublicKey(), sess2.E2e().GetDHPrivateKey(), e2e.GetDefaultSessionParams(), e2e.GetDefaultSessionParams())
    	if err != nil {
    		t.Errorf("Failed to add e2e partner: %+v", err)
    		t.FailNow()
    	}
    	partner1, err := sess2.E2e().GetPartner(sess1.GetUser().ID)
    	if err != nil {
    		t.Errorf("Failed to get partner: %+v", err)
    		t.FailNow()
    	}
    
    	msg := format.NewMessage(m.Session.Cmix().GetGroup().GetP().ByteLen())
    
    	key, err := partner1.GetKeyForSending(params.Standard)
    	if err != nil {
    		t.Errorf("failed to get key: %+v", err)
    		t.FailNow()
    	}
    
    	contents := make([]byte, msg.ContentsSize())
    	prng := rand.New(rand.NewSource(42))
    	prng.Read(contents)
    	fmp := parse.FirstMessagePartFromBytes(contents)
    	binary.BigEndian.PutUint32(fmp.Type, uint32(message.Raw))
    	fmp.NumParts[0] = uint8(1)
    	binary.BigEndian.PutUint16(fmp.Len, 256)
    	fmp.Part[0] = 0
    	ts, err := time.Now().MarshalBinary()
    	if err != nil {
    		t.Errorf("failed to martial ts: %+v", err)
    	}
    	copy(fmp.Timestamp, ts)
    	msg.SetContents(fmp.Bytes())
    	encryptedMsg := key.Encrypt(msg)
    	i.Session.GetGarbledMessages().Add(encryptedMsg)
    
    	quitch := make(chan struct{})
    	go m.processGarbledMessages(quitch)
    
    	m.CheckGarbledMessages()
    
    	ticker := time.NewTicker(time.Second)
    	select {
    	case <-ticker.C:
    		t.Error("Didn't hear anything")
    	case <-l.ch:
    		t.Log("Heard something")
    	}
    
    }