blob: 8f58b4edd2a04426eeccc5ab1eefc73a39f694a5 [file] [log] [blame]
package clusternet
import (
"testing"
apb "source.monogon.dev/metropolis/node/core/curator/proto/api"
cpb "source.monogon.dev/metropolis/proto/common"
)
func TestNodeUpdate(t *testing.T) {
var n node
for i, te := range []struct {
p *apb.Node
want bool
}{
// Case 0: empty incoming node, no change.
{
p: &apb.Node{Status: &cpb.NodeStatus{}, Clusternet: &cpb.NodeClusterNetworking{}},
want: false,
},
// Case 1: wireguard key set.
{
p: &apb.Node{Status: &cpb.NodeStatus{}, Clusternet: &cpb.NodeClusterNetworking{WireguardPubkey: "fake"}},
want: true,
},
// Case 2: wireguard key updated.
{
p: &apb.Node{Status: &cpb.NodeStatus{}, Clusternet: &cpb.NodeClusterNetworking{WireguardPubkey: "fake2"}},
want: true,
},
// Case 3: external address added.
{
p: &apb.Node{Status: &cpb.NodeStatus{ExternalAddress: "1.2.3.4"}, Clusternet: &cpb.NodeClusterNetworking{WireguardPubkey: "fake2"}},
want: true,
},
// Case 4: external address changed.
{
p: &apb.Node{Status: &cpb.NodeStatus{ExternalAddress: "1.2.3.5"}, Clusternet: &cpb.NodeClusterNetworking{WireguardPubkey: "fake2"}},
want: true,
},
// Case 5: prefixes added
{
p: &apb.Node{
Status: &cpb.NodeStatus{ExternalAddress: "1.2.3.5"},
Clusternet: &cpb.NodeClusterNetworking{
WireguardPubkey: "fake2",
Prefixes: []*cpb.NodeClusterNetworking_Prefix{
{Cidr: "10.0.2.0/24"},
{Cidr: "10.0.1.0/24"},
},
},
},
want: true,
},
// Case 6: prefixes changed
{
p: &apb.Node{
Status: &cpb.NodeStatus{ExternalAddress: "1.2.3.5"},
Clusternet: &cpb.NodeClusterNetworking{
WireguardPubkey: "fake2",
Prefixes: []*cpb.NodeClusterNetworking_Prefix{
{Cidr: "10.0.3.0/24"},
{Cidr: "10.0.1.0/24"},
},
},
},
want: true,
},
// Case 6: prefixes reordered (no change expected)
{
p: &apb.Node{
Status: &cpb.NodeStatus{ExternalAddress: "1.2.3.5"},
Clusternet: &cpb.NodeClusterNetworking{
WireguardPubkey: "fake2",
Prefixes: []*cpb.NodeClusterNetworking_Prefix{
{Cidr: "10.0.3.0/24"},
{Cidr: "10.0.1.0/24"},
},
},
},
want: false,
},
// Case 6: prefixes removed
{
p: &apb.Node{
Status: &cpb.NodeStatus{ExternalAddress: "1.2.3.5"},
Clusternet: &cpb.NodeClusterNetworking{
WireguardPubkey: "fake2",
Prefixes: []*cpb.NodeClusterNetworking_Prefix{},
},
},
want: true,
},
} {
got := n.update(te.p)
if te.want && !got {
t.Fatalf("Case %d: expected change, got no change", i)
}
if !te.want && got {
t.Fatalf("Case %d: expected no change, got change", i)
}
}
}