106 lines
2.3 KiB
Go
106 lines
2.3 KiB
Go
package tests
|
|
|
|
import (
|
|
"lux/crypto"
|
|
"lux/host"
|
|
"lux/node"
|
|
"lux/proto"
|
|
"testing"
|
|
)
|
|
|
|
type DummyWANProvider2 struct{}
|
|
|
|
func (*DummyWANProvider2) Provide() (host.LuxOption, error) {
|
|
wan := host.NewLuxOptionWAN()
|
|
wan.Addr4 = proto.LuxProtoIPToAddr([]byte{1, 2, 3, 4})
|
|
|
|
return &wan, nil
|
|
}
|
|
|
|
func TestNodeHeartbeat(t *testing.T) {
|
|
ks := crypto.NewLuxKeyStore("/tmp/keystore.dat")
|
|
|
|
keyNode, _ := crypto.NewLuxKey(proto.LuxTypeNode)
|
|
ks.Put(keyNode)
|
|
keyHost, _ := crypto.NewLuxKey(proto.LuxTypeHost)
|
|
ks.Put(keyHost)
|
|
|
|
node := node.NewLuxNode(keyNode, ks)
|
|
node.AddExterior("127.0.0.1:9979")
|
|
node.Start()
|
|
defer node.Stop()
|
|
|
|
host := host.NewLuxHost("test-host", keyHost, ks)
|
|
host.AddNode(keyNode.Id, "127.0.0.1:9979")
|
|
host.AddOptionProvider(&DummyWANProvider2{})
|
|
host.Start()
|
|
defer host.Stop()
|
|
|
|
for i := 0; i < 2; i++ {
|
|
if err := host.Heartbeat(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
hostState := <-node.GetHostStateChannel()
|
|
t.Log(hostState)
|
|
}
|
|
}
|
|
|
|
func TestNodeSync(t *testing.T) {
|
|
/*
|
|
NODE A has neighbor NODE B
|
|
|
|
NODE A <-- interior 127.0.0.2:9980 --> NODE B
|
|
^
|
|
|
|
|
| <- exterior 127.0.0.1:9979
|
|
|
|
|
HOST heartbeats to NODE A
|
|
|
|
*/
|
|
|
|
ks := crypto.NewLuxKeyStore("/tmp/keystore.dat")
|
|
|
|
keyNodeA, _ := crypto.NewLuxKey(proto.LuxTypeNode)
|
|
ks.Put(keyNodeA)
|
|
keyNodeB, _ := crypto.NewLuxKey(proto.LuxTypeNode)
|
|
ks.Put(keyNodeB)
|
|
keyHost, _ := crypto.NewLuxKey(proto.LuxTypeHost)
|
|
ks.Put(keyHost)
|
|
|
|
nodeA := node.NewLuxNode(keyNodeA, ks)
|
|
nodeA.AddExterior("127.0.0.1:9979")
|
|
nodeA.AddNeighbor(keyNodeB.Id, "127.0.0.2:9980")
|
|
nodeA.Start()
|
|
defer nodeA.Stop()
|
|
|
|
nodeB := node.NewLuxNode(keyNodeB, ks)
|
|
nodeB.AddInterior("127.0.0.2:9980")
|
|
nodeB.Start()
|
|
defer nodeB.Stop()
|
|
|
|
host := host.NewLuxHost("test-host", keyHost, ks)
|
|
host.AddNode(keyNodeA.Id, "127.0.0.1:9979")
|
|
host.AddOptionProvider(&DummyWANProvider2{})
|
|
host.Start()
|
|
defer host.Stop()
|
|
|
|
// register some host state into node
|
|
if err := host.Heartbeat(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// block until node A registers heartbeat
|
|
hostState := <-nodeA.GetHostStateChannel()
|
|
t.Log(hostState)
|
|
|
|
// issue node sync
|
|
if err := nodeA.MulticastSync(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// now we wait and catch option update from node B,
|
|
// that should be merged from node A sync multicast
|
|
hostState = <-nodeB.GetHostStateChannel()
|
|
t.Log(hostState)
|
|
}
|