package couchctl import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "edge-infra.dev/pkg/edge/datasync/couchdb" v1ien "edge-infra.dev/pkg/sds/ien/k8s/apis/v1" nodemeta "edge-infra.dev/pkg/sds/ien/node" ) func TestNodeResourceAvailability(t *testing.T) { nodes := []corev1.Node{{ ObjectMeta: metav1.ObjectMeta{ Name: "node1", }, Status: corev1.NodeStatus{ Allocatable: corev1.ResourceList{ corev1.ResourceMemory: resource.MustParse("1Gi"), }, }, }, { ObjectMeta: metav1.ObjectMeta{ Name: "node2", }, Status: corev1.NodeStatus{ Allocatable: corev1.ResourceList{ corev1.ResourceMemory: resource.MustParse("2Gi"), }, }, }, { ObjectMeta: metav1.ObjectMeta{ Name: "node3", }, Status: corev1.NodeStatus{ Allocatable: corev1.ResourceList{ corev1.ResourceMemory: resource.MustParse("3Gi"), }, }, }, } elector := NodeMemoryElector{} node, err := elector.Elect(nodes) assert.Error(t, err) assert.Nil(t, node) // Ignore memory if leader node already selected nodes[0].Labels = map[string]string{ nodemeta.RoleLabel: string(v1ien.ControlPlane), } nodes[1].Labels = map[string]string{ nodemeta.RoleLabel: string(v1ien.ControlPlane), } node, err = elector.Elect(nodes) require.NoError(t, err) assert.Equal(t, "node2", node.Name) nodes[0].Labels = map[string]string{ couchdb.NodeLeaderLabel: "true", nodemeta.RoleLabel: string(v1ien.ControlPlane), } node, err = elector.Elect(nodes) require.NoError(t, err) assert.Equal(t, "node1", node.Name) }