...
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
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