41 lines
1.8 KiB
Go
41 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
|
|
"felis.lolicon.best/internal/nodecontrol"
|
|
"felis.lolicon.best/internal/platform"
|
|
appsv1 "k8s.io/api/apps/v1"
|
|
corev1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/client-go/kubernetes/fake"
|
|
)
|
|
|
|
func TestNodeControlTopologyAndBootstrapID(t *testing.T) {
|
|
node := corev1.Node{ObjectMeta: metav1.ObjectMeta{Name: "controller", Labels: map[string]string{"node-role.kubernetes.io/control-plane": "true"}}, Status: corev1.NodeStatus{Conditions: []corev1.NodeCondition{{Type: corev1.NodeReady, Status: corev1.ConditionTrue}}, Addresses: []corev1.NodeAddress{{Type: corev1.NodeInternalIP, Address: "192.0.2.1"}}}}
|
|
controller, peers, err := nodeController([]corev1.Node{node}, "192.0.2.2", []string{"192.0.2.1/32"})
|
|
if err != nil || controller.Name != "controller" || strings.Join(peers, ",") != "192.0.2.1/32,192.0.2.2/32" {
|
|
t.Fatal(controller, peers, err)
|
|
}
|
|
duplicate := node
|
|
duplicate.Name = "second"
|
|
if _, _, err = nodeController([]corev1.Node{node, duplicate}, "", nil); err == nil {
|
|
t.Fatal("multiple controllers accepted")
|
|
}
|
|
for _, token := range []string{"abcdef.0123456789abcdef", "K10hash::abcdef.0123456789abcdef\n"} {
|
|
if bootstrapTokenID(token) != "abcdef" {
|
|
t.Fatal("token secret passed to revocation")
|
|
}
|
|
}
|
|
}
|
|
func TestNodeControlRejectsActiveWorkloadsBeforeHostCommands(t *testing.T) {
|
|
replicas := int32(1)
|
|
set := &appsv1.StatefulSet{ObjectMeta: metav1.ObjectMeta{Name: "survival", Namespace: "minecraft"}, Spec: appsv1.StatefulSetSpec{Replicas: &replicas}}
|
|
executor := nodeExecutor{cs: fake.NewSimpleClientset(set), namespace: platform.DefaultMinecraftNamespace}
|
|
if err := executor.requireStopped(context.Background(), nodecontrol.Request{Action: "enable"}); err == nil {
|
|
t.Fatal("host changes permitted with active worlds")
|
|
}
|
|
}
|