...

Source file src/edge-infra.dev/pkg/edge/datasync/controllers/couchctl/leader_node_test.go

Documentation: edge-infra.dev/pkg/edge/datasync/controllers/couchctl

     1  package couchctl
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  	"github.com/stretchr/testify/require"
     8  	corev1 "k8s.io/api/core/v1"
     9  	"k8s.io/apimachinery/pkg/api/resource"
    10  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    11  
    12  	"edge-infra.dev/pkg/edge/datasync/couchdb"
    13  	v1ien "edge-infra.dev/pkg/sds/ien/k8s/apis/v1"
    14  	nodemeta "edge-infra.dev/pkg/sds/ien/node"
    15  )
    16  
    17  func TestNodeResourceAvailability(t *testing.T) {
    18  	nodes := []corev1.Node{{
    19  		ObjectMeta: metav1.ObjectMeta{
    20  			Name: "node1",
    21  		},
    22  		Status: corev1.NodeStatus{
    23  			Allocatable: corev1.ResourceList{
    24  				corev1.ResourceMemory: resource.MustParse("1Gi"),
    25  			},
    26  		},
    27  	}, {
    28  		ObjectMeta: metav1.ObjectMeta{
    29  			Name: "node2",
    30  		},
    31  		Status: corev1.NodeStatus{
    32  			Allocatable: corev1.ResourceList{
    33  				corev1.ResourceMemory: resource.MustParse("2Gi"),
    34  			},
    35  		},
    36  	}, {
    37  		ObjectMeta: metav1.ObjectMeta{
    38  			Name: "node3",
    39  		},
    40  		Status: corev1.NodeStatus{
    41  			Allocatable: corev1.ResourceList{
    42  				corev1.ResourceMemory: resource.MustParse("3Gi"),
    43  			},
    44  		},
    45  	},
    46  	}
    47  	elector := NodeMemoryElector{}
    48  	node, err := elector.Elect(nodes)
    49  	assert.Error(t, err)
    50  	assert.Nil(t, node)
    51  
    52  	// Ignore memory if leader node already selected
    53  	nodes[0].Labels = map[string]string{
    54  		nodemeta.RoleLabel: string(v1ien.ControlPlane),
    55  	}
    56  
    57  	nodes[1].Labels = map[string]string{
    58  		nodemeta.RoleLabel: string(v1ien.ControlPlane),
    59  	}
    60  
    61  	node, err = elector.Elect(nodes)
    62  	require.NoError(t, err)
    63  	assert.Equal(t, "node2", node.Name)
    64  
    65  	nodes[0].Labels = map[string]string{
    66  		couchdb.NodeLeaderLabel: "true",
    67  		nodemeta.RoleLabel:      string(v1ien.ControlPlane),
    68  	}
    69  	node, err = elector.Elect(nodes)
    70  	require.NoError(t, err)
    71  	assert.Equal(t, "node1", node.Name)
    72  }
    73  

View as plain text