Skip to content
Snippets Groups Projects
Select Git revision
  • 5c890337aeca132d5d804402bc96d979a0fad668
  • 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

networkManager.go

Blame
  • private_test.go 3.90 KiB
    package api
    
    import (
    	"bytes"
    	"gitlab.com/elixxir/client/user"
    	"gitlab.com/elixxir/crypto/csprng"
    	"gitlab.com/elixxir/crypto/signature/rsa"
    	"reflect"
    	"testing"
    )
    
    type CountingReader struct {
    	count uint8
    }
    
    // Read just counts until 254 then starts over again
    func (c *CountingReader) Read(b []byte) (int, error) {
    	for i := 0; i < len(b); i++ {
    		c.count = (c.count + 1) % 255
    		b[i] = c.count
    	}
    	return len(b), nil
    }
    
    //Happy path: test it generates key when passed nil
    func TestGenerateKeys_NilPrivateKey(t *testing.T) {
    	privKey, pubKey, err := generateRsaKeys(nil)
    	if privKey == nil {
    		t.Errorf("Failed to generate private key when generateRsaKeys() is passed nil")
    	}
    	if pubKey == nil {
    		t.Errorf("Failed to pull public key from private key")
    	}
    
    	if err != nil {
    		t.Errorf("%+v", err)
    	}
    }
    
    //Tests it generates keys based on an existing privateKey
    func TestGenerateKeys(t *testing.T) {
    	notRand := &CountingReader{count: uint8(0)}
    
    	privKey, err := rsa.GenerateKey(notRand, 1024)
    	if err != nil {
    		t.Errorf("%+v", err)
    	}
    	expected_N := privKey.N.Bytes()
    	privKey, pubKey, err := generateRsaKeys(privKey)
    	if err != nil {
    		t.Errorf("Failecd to generate keys: %+v", err)
    	}
    	if bytes.Compare(expected_N, privKey.N.Bytes()) != 0 {
    		t.Errorf("Private key overwritten in generateKeys() despite privateKey not being nil")
    	}
    
    	if bytes.Compare(pubKey.GetN().Bytes(), expected_N) != 0 {
    		t.Logf("N: %v", pubKey.GetN().Bytes())
    		t.Errorf("Bad N-val, expected: %v", expected_N)
    	}
    }
    
    //Tests GenerateCmixKeys cases
    func TestGenerateCmixKeys(t *testing.T) {
    	//Test generateCmixKeys
    	cmixGrp, _ := generateGroups(def)
    	cmixPrivKey, _, err := generateCmixKeys(cmixGrp)
    	if err != nil {
    		t.Errorf("%+v", err)
    	}
    
    	if !csprng.InGroup(cmixPrivKey.Bytes(), cmixGrp.GetPBytes()) {
    		t.Errorf("Generated cmix private key is not in the cmix group!")
    	}
    	//Error case
    	_, _, err = generateCmixKeys(nil)
    	if err == nil {
    		t.Errorf("Expected error case, should not pass nil into GenerateCmixKeys()")
    	}
    
    }
    
    //Happy/error path: Tests generation of e2e keys
    func TestGenerateE2eKeys(t *testing.T) {
    	//Test generateCmixKeys
    	cmixGrp, e2eGrp := generateGroups(def)
    
    	//Test e2e key generation
    	e2ePrivKey, _, err := generateE2eKeys(cmixGrp, e2eGrp)
    	if err != nil {
    		t.Errorf("%+v", err)
    	}
    
    	if !csprng.InGroup(e2ePrivKey.Bytes(), cmixGrp.GetPBytes()) {
    		t.Errorf("Generated cmix private key is not in the cmix group!")
    	}
    
    	//Error case
    	_, _, err = generateE2eKeys(nil, nil)
    	if err == nil {
    		t.Errorf("Expected error case, should not pass nil into GenerateE2eKeys()")
    	}
    
    }
    
    //Happy path: tests that it generates a user and puts in the registry
    func TestGenerateUserInformation_EmptyNick(t *testing.T) {
    	grp, _ := generateGroups(def)
    	user.InitUserRegistry(grp)
    	_, pubkey, _ := generateRsaKeys(nil)
    	_, uid, usr, err := generateUserInformation(pubkey)
    	if err != nil {
    		t.Errorf("%+v", err)
    	}
    	retrievedUser, ok := user.Users.GetUser(uid)
    	if !ok {
    		t.Errorf("UserId not inserted into registry")
    	}
    
    	if !reflect.DeepEqual(usr, retrievedUser) {
    		t.Errorf("Did not retrieve correct user. \n\treceived: %v\n\texpected: %v", retrievedUser, usr)
    	}
    
    	if usr.Username != "" {
    		t.Errorf("User's username should be initally")
    	}
    
    }
    
    //Happy path: test GenerateUser with a nickname and puts in registry
    func TestGenerateUserInformation(t *testing.T) {
    	grp, _ := generateGroups(def)
    	user.InitUserRegistry(grp)
    	nickName := "test"
    	_, pubkey, _ := generateRsaKeys(nil)
    	_, uid, usr, err := generateUserInformation(pubkey)
    	usr.Username = nickName
    	if err != nil {
    		t.Errorf("%+v", err)
    	}
    
    	retrievedUser, ok := user.Users.GetUser(uid)
    	if !ok {
    		t.Errorf("UserId not inserted into registry")
    	}
    	if !reflect.DeepEqual(usr, retrievedUser) {
    		t.Errorf("Did not retrieve correct user. \n\treceived: %v\n\texpected: %v", retrievedUser, usr)
    	}
    
    	if usr.Username != nickName {
    		t.Errorf("User's nickname was overwritten\nreceived: %v\n\texpected: %v", usr.Username, nickName)
    	}
    
    }