Skip to content
Snippets Groups Projects
Commit dbd4a97b authored by Jake Taylor's avatar Jake Taylor :lips:
Browse files

Merge branch 'hotfix/UdRefactor' into 'release'

Unify fiels of ud.Manager under xxdk.E2e

See merge request !276
parents f8a7eb29 fa09b2a2
No related branches found
No related tags found
2 merge requests!510Release,!276Unify fiels of ud.Manager under xxdk.E2e
...@@ -49,7 +49,7 @@ func (m *Manager) addFact(inFact fact.Fact, myId *id.ID, ...@@ -49,7 +49,7 @@ func (m *Manager) addFact(inFact fact.Fact, myId *id.ID,
if err != nil { if err != nil {
return "", err return "", err
} }
stream := m.rng.GetStream() stream := m.getRng().GetStream()
defer stream.Close() defer stream.Close()
fSig, err := rsa.Sign(stream, privKey, hash.CMixHash, fHash, nil) fSig, err := rsa.Sign(stream, privKey, hash.CMixHash, fHash, nil)
if err != nil { if err != nil {
......
...@@ -87,7 +87,7 @@ func TestManager_Lookup(t *testing.T) { ...@@ -87,7 +87,7 @@ func TestManager_Lookup(t *testing.T) {
} }
// Run the lookup // Run the lookup
_, _, err = Lookup(m.network, prng, _, _, err = Lookup(m.getCmix(), prng,
grp, udContact, callback, uid, p) grp, udContact, callback, uid, p)
if err != nil { if err != nil {
t.Errorf("Lookup() returned an error: %+v", err) t.Errorf("Lookup() returned an error: %+v", err)
......
...@@ -26,18 +26,11 @@ const ( ...@@ -26,18 +26,11 @@ const (
// Manager is the control structure for the contacting the user discovery service. // Manager is the control structure for the contacting the user discovery service.
type Manager struct { type Manager struct {
// Network is a sub-interface of the cmix.Client interface. It
// allows the Manager to retrieve network state.
network CMix
// e2e is a sub-interface of the e2e.Handler. It allows the Manager // e2e is a sub-interface of the e2e.Handler. It allows the Manager
// to retrieve the client's E2E information. // to retrieve the client's E2E information.
e2e E2E e2e E2E
// events allows the Manager to report events to the other
// levels of the client.
events event.Reporter
// store is an instantiation of this package's storage object. // store is an instantiation of this package's storage object.
// It contains the facts that are in some state of being registered // It contains the facts that are in some state of being registered
// with the UD service // with the UD service
...@@ -47,11 +40,6 @@ type Manager struct { ...@@ -47,11 +40,6 @@ type Manager struct {
// gRPC functions for registering and fact operations. // gRPC functions for registering and fact operations.
comms Comms comms Comms
// kv is a versioned key-value store used for isRegistered and
// setRegistered. This is separated from store operations as store's kv
// has a different prefix which breaks backwards compatibility.
kv *versioned.KV
// factMux is to be used for Add/Remove fact.Fact operations. // factMux is to be used for Add/Remove fact.Fact operations.
// This prevents simultaneous calls to Add/Remove calls which // This prevents simultaneous calls to Add/Remove calls which
// may cause unexpected behaviour. // may cause unexpected behaviour.
...@@ -61,10 +49,6 @@ type Manager struct { ...@@ -61,10 +49,6 @@ type Manager struct {
// production. This is for testing with a separately deployed UD service. // production. This is for testing with a separately deployed UD service.
alternativeUd *alternateUd alternativeUd *alternateUd
// rng is a fastRNG.StreamGenerator which is used to generate random
// data. This is used for signatures for adding/removing facts.
rng *fastRNG.StreamGenerator
// registrationValidationSignature for the ReceptionID // registrationValidationSignature for the ReceptionID
// Optional, depending on UD configuration // Optional, depending on UD configuration
registrationValidationSignature []byte registrationValidationSignature []byte
...@@ -85,12 +69,8 @@ func NewManager(e2e E2E, comms Comms, follower NetworkStatus, ...@@ -85,12 +69,8 @@ func NewManager(e2e E2E, comms Comms, follower NetworkStatus,
// Initialize manager // Initialize manager
m := &Manager{ m := &Manager{
network: e2e.GetCmix(),
e2e: e2e, e2e: e2e,
events: e2e.GetEventReporter(),
comms: comms, comms: comms,
kv: e2e.GetStorage().GetKV(),
rng: e2e.GetRng(),
registrationValidationSignature: registrationValidationSignature, registrationValidationSignature: registrationValidationSignature,
} }
...@@ -100,7 +80,7 @@ func NewManager(e2e E2E, comms Comms, follower NetworkStatus, ...@@ -100,7 +80,7 @@ func NewManager(e2e E2E, comms Comms, follower NetworkStatus,
// Initialize store // Initialize store
var err error var err error
m.store, err = store.NewOrLoadStore(m.kv) m.store, err = store.NewOrLoadStore(m.getKv())
if err != nil { if err != nil {
return nil, errors.Errorf("Failed to initialize store: %v", err) return nil, errors.Errorf("Failed to initialize store: %v", err)
} }
...@@ -113,7 +93,7 @@ func NewManager(e2e E2E, comms Comms, follower NetworkStatus, ...@@ -113,7 +93,7 @@ func NewManager(e2e E2E, comms Comms, follower NetworkStatus,
} }
// Register with user discovery // Register with user discovery
stream := m.rng.GetStream() stream := m.getRng().GetStream()
defer stream.Close() defer stream.Close()
err = m.register(username, stream, m.comms, udHost) err = m.register(username, stream, m.comms, udHost)
if err != nil { if err != nil {
...@@ -121,8 +101,8 @@ func NewManager(e2e E2E, comms Comms, follower NetworkStatus, ...@@ -121,8 +101,8 @@ func NewManager(e2e E2E, comms Comms, follower NetworkStatus,
} }
// Set storage to registered // Set storage to registered
if err = setRegistered(m.kv); err != nil && m.events != nil { if err = setRegistered(m.getKv()); err != nil && m.getEventReporter() != nil {
m.events.Report(1, "UserDiscovery", "Registration", m.getEventReporter().Report(1, "UserDiscovery", "Registration",
fmt.Sprintf("User Registered with UD: %+v", fmt.Sprintf("User Registered with UD: %+v",
username)) username))
} }
...@@ -144,17 +124,13 @@ func NewManagerFromBackup(e2e E2E, comms Comms, follower NetworkStatus, ...@@ -144,17 +124,13 @@ func NewManagerFromBackup(e2e E2E, comms Comms, follower NetworkStatus,
// Initialize manager // Initialize manager
m := &Manager{ m := &Manager{
network: e2e.GetCmix(),
e2e: e2e, e2e: e2e,
events: e2e.GetEventReporter(),
comms: comms, comms: comms,
kv: e2e.GetStorage().GetKV(),
rng: e2e.GetRng(),
} }
// Initialize our store // Initialize our store
var err error var err error
m.store, err = store.NewOrLoadStore(m.kv) m.store, err = store.NewOrLoadStore(m.getKv())
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -168,7 +144,7 @@ func NewManagerFromBackup(e2e E2E, comms Comms, follower NetworkStatus, ...@@ -168,7 +144,7 @@ func NewManagerFromBackup(e2e E2E, comms Comms, follower NetworkStatus,
// Set as registered. Since it's from a backup, // Set as registered. Since it's from a backup,
// the client is already registered // the client is already registered
if err = setRegistered(m.kv); err != nil { if err = setRegistered(m.getKv()); err != nil {
return nil, errors.WithMessage(err, "failed to set client as "+ return nil, errors.WithMessage(err, "failed to set client as "+
"registered with user discovery.") "registered with user discovery.")
} }
...@@ -213,14 +189,9 @@ func InitStoreFromBackup(kv *versioned.KV, ...@@ -213,14 +189,9 @@ func InitStoreFromBackup(kv *versioned.KV,
// from disk. This is meant to be called after any the first // from disk. This is meant to be called after any the first
// instantiation of the manager by NewUserDiscovery. // instantiation of the manager by NewUserDiscovery.
func LoadManager(e2e E2E, comms Comms) (*Manager, error) { func LoadManager(e2e E2E, comms Comms) (*Manager, error) {
m := &Manager{ m := &Manager{
network: e2e.GetCmix(),
e2e: e2e, e2e: e2e,
events: e2e.GetEventReporter(),
comms: comms, comms: comms,
rng: e2e.GetRng(),
kv: e2e.GetStorage().GetKV(),
} }
if !m.isRegistered() { if !m.isRegistered() {
...@@ -229,7 +200,7 @@ func LoadManager(e2e E2E, comms Comms) (*Manager, error) { ...@@ -229,7 +200,7 @@ func LoadManager(e2e E2E, comms Comms) (*Manager, error) {
} }
var err error var err error
m.store, err = store.NewOrLoadStore(m.kv) m.store, err = store.NewOrLoadStore(m.getKv())
if err != nil { if err != nil {
return nil, errors.Errorf("Failed to initialize store: %v", err) return nil, errors.Errorf("Failed to initialize store: %v", err)
} }
...@@ -274,7 +245,7 @@ func (m *Manager) GetContact() (contact.Contact, error) { ...@@ -274,7 +245,7 @@ func (m *Manager) GetContact() (contact.Contact, error) {
}, nil }, nil
} }
netDef := m.network.GetInstance().GetPartialNdf().Get() netDef := m.getCmix().GetInstance().GetPartialNdf().Get()
// Unmarshal UD ID from the NDF // Unmarshal UD ID from the NDF
udID, err := id.Unmarshal(netDef.UDB.ID) udID, err := id.Unmarshal(netDef.UDB.ID)
...@@ -307,7 +278,7 @@ func (m *Manager) getOrAddUdHost() (*connect.Host, error) { ...@@ -307,7 +278,7 @@ func (m *Manager) getOrAddUdHost() (*connect.Host, error) {
return m.alternativeUd.host, nil return m.alternativeUd.host, nil
} }
netDef := m.network.GetInstance().GetPartialNdf().Get() netDef := m.getCmix().GetInstance().GetPartialNdf().Get()
if netDef.UDB.Cert == "" { if netDef.UDB.Cert == "" {
return nil, errors.New("NDF does not have User Discovery information, " + return nil, errors.New("NDF does not have User Discovery information, " +
"is there network access?: Cert not present.") "is there network access?: Cert not present.")
...@@ -340,3 +311,32 @@ func (m *Manager) getOrAddUdHost() (*connect.Host, error) { ...@@ -340,3 +311,32 @@ func (m *Manager) getOrAddUdHost() (*connect.Host, error) {
return host, nil return host, nil
} }
/////////////////////////////////////////////////////////////////////////////////////////
// Internal getters /////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
// getCmix retrieve a sub-interface of cmix.Client.
// It allows the Manager to retrieve network state.
func (m *Manager) getCmix() CMix {
return m.e2e.GetCmix()
}
// getKv returns a versioned.KV used for isRegistered and setRegistered.
// This is separated from store operations as store's kv
// has a different prefix which breaks backwards compatibility.
func (m *Manager) getKv() *versioned.KV {
return m.e2e.GetStorage().GetKV()
}
// getEventReporter returns an event.Reporter. This allows
// the Manager to report events to the other levels of the client.
func (m *Manager) getEventReporter() event.Reporter {
return m.e2e.GetEventReporter()
}
// getRng returns a fastRNG.StreamGenerator. This RNG is for
// generating signatures for adding/removing facts.
func (m *Manager) getRng() *fastRNG.StreamGenerator {
return m.e2e.GetRng()
}
...@@ -12,6 +12,7 @@ import ( ...@@ -12,6 +12,7 @@ import (
"gitlab.com/elixxir/client/event" "gitlab.com/elixxir/client/event"
"gitlab.com/elixxir/client/stoppable" "gitlab.com/elixxir/client/stoppable"
"gitlab.com/elixxir/client/storage" "gitlab.com/elixxir/client/storage"
"gitlab.com/elixxir/client/storage/versioned"
"gitlab.com/elixxir/client/xxdk" "gitlab.com/elixxir/client/xxdk"
"gitlab.com/elixxir/crypto/cyclic" "gitlab.com/elixxir/crypto/cyclic"
cryptoE2e "gitlab.com/elixxir/crypto/e2e" cryptoE2e "gitlab.com/elixxir/crypto/e2e"
...@@ -29,6 +30,10 @@ import ( ...@@ -29,6 +30,10 @@ import (
type mockE2e struct { type mockE2e struct {
grp *cyclic.Group grp *cyclic.Group
events event.Reporter
rng *fastRNG.StreamGenerator
kv *versioned.KV
network cmix.Client
t testing.TB t testing.TB
key *rsa.PrivateKey key *rsa.PrivateKey
} }
...@@ -80,8 +85,7 @@ func (m mockE2e) GetEventReporter() event.Reporter { ...@@ -80,8 +85,7 @@ func (m mockE2e) GetEventReporter() event.Reporter {
} }
func (m mockE2e) GetCmix() cmix.Client { func (m mockE2e) GetCmix() cmix.Client {
//TODO implement me return m.network
panic("implement me")
} }
func (m mockE2e) GetStorage() storage.Session { func (m mockE2e) GetStorage() storage.Session {
......
package ud
import (
"bytes"
"gitlab.com/elixxir/client/cmix"
"gitlab.com/elixxir/client/cmix/gateway"
"gitlab.com/elixxir/client/cmix/identity"
"gitlab.com/elixxir/client/cmix/identity/receptionID"
"gitlab.com/elixxir/client/cmix/message"
"gitlab.com/elixxir/client/cmix/rounds"
"gitlab.com/elixxir/client/stoppable"
"gitlab.com/elixxir/comms/network"
"gitlab.com/elixxir/crypto/contact"
"gitlab.com/elixxir/primitives/format"
"gitlab.com/xx_network/comms/connect"
"gitlab.com/xx_network/primitives/id"
"gitlab.com/xx_network/primitives/id/ephemeral"
"time"
)
// testNetworkManager is a mock implementation of the CMix interface.
type testNetworkManager struct {
requestProcess message.Processor
instance *network.Instance
testingFace interface{}
c contact.Contact
responseProcessor message.Processor
}
func (tnm *testNetworkManager) Send(recipient *id.ID, fingerprint format.Fingerprint,
service message.Service,
payload, mac []byte, cmixParams cmix.CMIXParams) (id.Round, ephemeral.Id, error) {
msg := format.NewMessage(tnm.instance.GetE2EGroup().GetP().ByteLen())
// Build message. Will panic if inputs are not correct.
msg.SetKeyFP(fingerprint)
msg.SetContents(payload)
msg.SetMac(mac)
msg.SetSIH(service.Hash(msg.GetContents()))
// If the recipient for a call to Send is UD, then this
// is the request pathway. Call the UD processor to simulate
// the UD picking up the request
if bytes.Equal(tnm.instance.GetFullNdf().
Get().UDB.ID,
recipient.Bytes()) {
tnm.responseProcessor.Process(msg, receptionID.EphemeralIdentity{}, rounds.Round{})
} else {
// This should happen when the mock UD service Sends back a response.
// Calling process mocks up the requester picking up the response.
tnm.requestProcess.Process(msg, receptionID.EphemeralIdentity{}, rounds.Round{})
}
return 0, ephemeral.Id{}, nil
}
func (tnm *testNetworkManager) AddFingerprint(identity *id.ID,
fingerprint format.Fingerprint, mp message.Processor) error {
// AddFingerprint gets called in both the request and response
// code-paths. We only want to set in the code-path transmitting
// from UD
if !bytes.Equal(tnm.instance.GetFullNdf().Get().UDB.ID,
identity.Bytes()) {
tnm.requestProcess = mp
}
return nil
}
func (tnm *testNetworkManager) AddService(clientID *id.ID,
newService message.Service,
response message.Processor) {
tnm.responseProcessor = response
return
}
func (tnm *testNetworkManager) CheckInProgressMessages() {
return
}
func (tnm *testNetworkManager) GetMaxMessageLength() int {
return 700
}
func (tnm *testNetworkManager) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) {
return
}
func (tnm *testNetworkManager) DeleteClientFingerprints(identity *id.ID) {
return
}
func (tnm *testNetworkManager) Process(ecrMsg format.Message,
receptionID receptionID.EphemeralIdentity, round rounds.Round) {
}
func (tnm *testNetworkManager) String() string {
return "mockPRocessor"
}
func (tnm *testNetworkManager) DeleteService(clientID *id.ID, toDelete message.Service, processor message.Processor) {
return
}
func (tnm *testNetworkManager) IsHealthy() bool {
return true
}
func (tnm *testNetworkManager) GetAddressSpace() uint8 {
return 8
}
func (tnm *testNetworkManager) GetInstance() *network.Instance {
return tnm.instance
}
func (tnm *testNetworkManager) Follow(report cmix.ClientErrorReport) (stoppable.Stoppable, error) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) GetVerboseRounds() string {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) SendToAny(sendFunc func(host *connect.Host) (interface{}, error), stop *stoppable.Single) (interface{}, error) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) SendMany(messages []cmix.TargetedCmixMessage, p cmix.CMIXParams) (id.Round, []ephemeral.Id, error) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) RemoveIdentity(id *id.ID) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) GetIdentity(get *id.ID) (identity.TrackedID, error) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) DeleteFingerprint(identity *id.ID, fingerprint format.Fingerprint) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) DeleteClientService(clientID *id.ID) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) TrackServices(tracker message.ServicesTracker) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) WasHealthy() bool {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) AddHealthCallback(f func(bool)) uint64 {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) RemoveHealthCallback(u uint64) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) HasNode(nid *id.ID) bool {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) NumRegisteredNodes() int {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) TriggerNodeRegistration(nid *id.ID) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) GetRoundResults(timeout time.Duration, roundCallback cmix.RoundEventCallback, roundList ...id.Round) error {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) LookupHistoricalRound(rid id.Round, callback rounds.RoundResultCallback) error {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) SendToPreferred(targets []*id.ID, sendFunc gateway.SendToPreferredFunc, stop *stoppable.Single, timeout time.Duration) (interface{}, error) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) SetGatewayFilter(f gateway.Filter) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) GetHostParams() connect.HostParams {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) RegisterAddressSpaceNotification(tag string) (chan uint8, error) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) UnregisterAddressSpaceNotification(tag string) {
//TODO implement me
panic("implement me")
}
...@@ -14,7 +14,7 @@ const isRegisteredVersion = 0 ...@@ -14,7 +14,7 @@ const isRegisteredVersion = 0
// isRegistered loads from storage if the client is registered with user // isRegistered loads from storage if the client is registered with user
// discovery. // discovery.
func (m *Manager) isRegistered() bool { func (m *Manager) isRegistered() bool {
_, err := m.kv.Get(isRegisteredKey, isRegisteredVersion) _, err := m.getKv().Get(isRegisteredKey, isRegisteredVersion)
if err != nil { if err != nil {
return false return false
} }
......
...@@ -50,7 +50,7 @@ func (m *Manager) removeFact(f fact.Fact, ...@@ -50,7 +50,7 @@ func (m *Manager) removeFact(f fact.Fact,
if err != nil { if err != nil {
return err return err
} }
stream := m.rng.GetStream() stream := m.getRng().GetStream()
defer stream.Close() defer stream.Close()
fSig, err := rsa.Sign(stream, privKey, hash.CMixHash, fHash, nil) fSig, err := rsa.Sign(stream, privKey, hash.CMixHash, fHash, nil)
if err != nil { if err != nil {
...@@ -113,7 +113,7 @@ func (m *Manager) permanentDeleteAccount(f fact.Fact, myId *id.ID, privateKey *r ...@@ -113,7 +113,7 @@ func (m *Manager) permanentDeleteAccount(f fact.Fact, myId *id.ID, privateKey *r
fHash := factID.Fingerprint(f) fHash := factID.Fingerprint(f)
// Sign our inFact for putting into the request // Sign our inFact for putting into the request
stream := m.rng.GetStream() stream := m.getRng().GetStream()
defer stream.Close() defer stream.Close()
fsig, err := rsa.Sign(stream, privateKey, hash.CMixHash, fHash, nil) fsig, err := rsa.Sign(stream, privateKey, hash.CMixHash, fHash, nil)
if err != nil { if err != nil {
......
...@@ -71,7 +71,7 @@ func TestManager_Search(t *testing.T) { ...@@ -71,7 +71,7 @@ func TestManager_Search(t *testing.T) {
CmixParams: cmix.GetDefaultCMIXParams(), CmixParams: cmix.GetDefaultCMIXParams(),
} }
_, _, err = Search(m.network, m.events, prng, m.e2e.GetE2E().GetGroup(), _, _, err = Search(m.getCmix(), m.getEventReporter(), prng, m.e2e.GetE2E().GetGroup(),
udContact, callback, factList, p) udContact, callback, factList, p)
if err != nil { if err != nil {
t.Fatalf("Search() returned an error: %+v", err) t.Fatalf("Search() returned an error: %+v", err)
......
...@@ -8,15 +8,12 @@ ...@@ -8,15 +8,12 @@
package ud package ud
import ( import (
"bytes"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
"gitlab.com/elixxir/client/cmix" "gitlab.com/elixxir/client/cmix"
"gitlab.com/elixxir/client/cmix/identity/receptionID" "gitlab.com/elixxir/client/cmix/identity/receptionID"
"gitlab.com/elixxir/client/cmix/message"
"gitlab.com/elixxir/client/cmix/rounds" "gitlab.com/elixxir/client/cmix/rounds"
"gitlab.com/elixxir/client/event" "gitlab.com/elixxir/client/event"
"gitlab.com/elixxir/client/single" "gitlab.com/elixxir/client/single"
"gitlab.com/elixxir/client/stoppable"
"gitlab.com/elixxir/client/storage/user" "gitlab.com/elixxir/client/storage/user"
"gitlab.com/elixxir/client/storage/versioned" "gitlab.com/elixxir/client/storage/versioned"
store "gitlab.com/elixxir/client/ud/store" store "gitlab.com/elixxir/client/ud/store"
...@@ -24,11 +21,9 @@ import ( ...@@ -24,11 +21,9 @@ import (
"gitlab.com/elixxir/crypto/cyclic" "gitlab.com/elixxir/crypto/cyclic"
"gitlab.com/elixxir/crypto/fastRNG" "gitlab.com/elixxir/crypto/fastRNG"
"gitlab.com/elixxir/ekv" "gitlab.com/elixxir/ekv"
"gitlab.com/elixxir/primitives/format"
"gitlab.com/xx_network/crypto/csprng" "gitlab.com/xx_network/crypto/csprng"
"gitlab.com/xx_network/crypto/large" "gitlab.com/xx_network/crypto/large"
"gitlab.com/xx_network/crypto/signature/rsa" "gitlab.com/xx_network/crypto/signature/rsa"
"gitlab.com/xx_network/primitives/id/ephemeral"
"io" "io"
"math/rand" "math/rand"
"testing" "testing"
...@@ -61,22 +56,22 @@ func newTestManager(t *testing.T) (*Manager, *testNetworkManager) { ...@@ -61,22 +56,22 @@ func newTestManager(t *testing.T) (*Manager, *testNetworkManager) {
stream.Close() stream.Close()
// Create our Manager object // Create our Manager object
tnm := newTestNetworkManager(t)
m := &Manager{ m := &Manager{
e2e: mockE2e{ e2e: mockE2e{
grp: getGroup(), grp: getGroup(),
events: event.NewEventManager(),
rng: rngGen,
kv: kv,
network: tnm,
t: t, t: t,
key: privKey, key: privKey,
}, },
events: event.NewEventManager(),
store: udStore, store: udStore,
comms: &mockComms{}, comms: &mockComms{},
rng: rngGen,
kv: kv,
} }
tnm := newTestNetworkManager(t)
m.network = tnm
netDef := m.network.GetInstance().GetPartialNdf().Get() netDef := m.getCmix().GetInstance().GetPartialNdf().Get()
// Unmarshal UD ID from the NDF // Unmarshal UD ID from the NDF
udID, err := id.Unmarshal(netDef.UDB.ID) udID, err := id.Unmarshal(netDef.UDB.ID)
if err != nil { if err != nil {
...@@ -225,107 +220,6 @@ func (receiver *mockReceiver) Callback(req *single.Request, ...@@ -225,107 +220,6 @@ func (receiver *mockReceiver) Callback(req *single.Request,
} }
// testNetworkManager is a mock implementation of the CMix interface.
type testNetworkManager struct {
requestProcess message.Processor
instance *network.Instance
testingFace interface{}
c contact.Contact
responseProcessor message.Processor
}
func (tnm *testNetworkManager) Send(recipient *id.ID, fingerprint format.Fingerprint,
service message.Service,
payload, mac []byte, cmixParams cmix.CMIXParams) (id.Round, ephemeral.Id, error) {
msg := format.NewMessage(tnm.instance.GetE2EGroup().GetP().ByteLen())
// Build message. Will panic if inputs are not correct.
msg.SetKeyFP(fingerprint)
msg.SetContents(payload)
msg.SetMac(mac)
msg.SetSIH(service.Hash(msg.GetContents()))
// If the recipient for a call to Send is UD, then this
// is the request pathway. Call the UD processor to simulate
// the UD picking up the request
if bytes.Equal(tnm.instance.GetFullNdf().
Get().UDB.ID,
recipient.Bytes()) {
tnm.responseProcessor.Process(msg, receptionID.EphemeralIdentity{}, rounds.Round{})
} else {
// This should happen when the mock UD service Sends back a response.
// Calling process mocks up the requester picking up the response.
tnm.requestProcess.Process(msg, receptionID.EphemeralIdentity{}, rounds.Round{})
}
return 0, ephemeral.Id{}, nil
}
func (tnm *testNetworkManager) AddFingerprint(identity *id.ID,
fingerprint format.Fingerprint, mp message.Processor) error {
// AddFingerprint gets called in both the request and response
// code-paths. We only want to set in the code-path transmitting
// from UD
if !bytes.Equal(tnm.instance.GetFullNdf().Get().UDB.ID,
identity.Bytes()) {
tnm.requestProcess = mp
}
return nil
}
func (tnm *testNetworkManager) AddService(clientID *id.ID,
newService message.Service,
response message.Processor) {
tnm.responseProcessor = response
return
}
func (tnm *testNetworkManager) CheckInProgressMessages() {
return
}
func (tnm *testNetworkManager) GetMaxMessageLength() int {
return 700
}
func (tnm *testNetworkManager) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) {
return
}
func (tnm *testNetworkManager) DeleteClientFingerprints(identity *id.ID) {
return
}
func (tnm *testNetworkManager) Process(ecrMsg format.Message,
receptionID receptionID.EphemeralIdentity, round rounds.Round) {
}
func (tnm *testNetworkManager) String() string {
return "mockPRocessor"
}
func (tnm *testNetworkManager) DeleteService(clientID *id.ID, toDelete message.Service, processor message.Processor) {
return
}
func (tnm *testNetworkManager) IsHealthy() bool {
return true
}
func (tnm *testNetworkManager) SendToAny(sendFunc func(host *connect.Host) (interface{}, error), stop *stoppable.Single) (interface{}, error) {
//TODO implement me
panic("implement me")
}
func (tnm *testNetworkManager) GetAddressSpace() uint8 {
return 8
}
func (tnm *testNetworkManager) GetInstance() *network.Instance {
return tnm.instance
}
type mockReporter struct{} type mockReporter struct{}
func (m mockReporter) Report(priority int, category, evtType, details string) { func (m mockReporter) Report(priority int, category, evtType, details string) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment