1 package integration_test
2
3 import (
4 "github.com/udacity/graphb"
5 "k8s.io/utils/ptr"
6
7 "edge-infra.dev/pkg/edge/api/graph/model"
8 vmstatus "edge-infra.dev/pkg/edge/api/services/virtualmachine/status"
9 "edge-infra.dev/test/framework/integration"
10 )
11
12 var (
13 seededVMStatuses = []*model.VirtualMachineStatus{
14 {
15 Name: "test-vm-0",
16 ClusterEdgeID: "3396a52c-6a22-4049-9593-5a63b596a101",
17 Namespace: "edge-vm",
18 Conditions: []*model.ObjStatusCondition{
19 {
20 Type: "Ready",
21 Status: false,
22 Message: ptr.To("VMI does not exist"),
23 Reason: ptr.To("VMINotExists"),
24 },
25 },
26 },
27 {
28 Name: "test-vm-1",
29 ClusterEdgeID: "3396a52c-6a22-4049-9593-5a63b596a101",
30 Namespace: "edge-vm",
31 Conditions: nil,
32 },
33 {
34 Name: "test-vm-2",
35 ClusterEdgeID: "3396a52c-6a22-4049-9593-5a63b596a200",
36 Namespace: "edge-vm",
37 Conditions: nil,
38 },
39 {
40 Name: "test-vm-3",
41 ClusterEdgeID: "3396a52c-6a22-4049-9593-5a63b596a101",
42 Namespace: "my-vms",
43 Conditions: []*model.ObjStatusCondition{
44 {
45 Type: "Ready",
46 Status: true,
47 },
48 },
49 },
50 }
51 )
52
53 func (s *Suite) TestGetVirtualMachineStatuses() {
54 integration.SkipIf(s.Framework)
55 testCaseList := []struct {
56 description string
57 name *string
58 namespace *string
59 clusterEdgeID *string
60 expectedList []*model.VirtualMachineStatus
61 err error
62 }{
63 {
64 description: "Query by name, namespace and clusterEdgeID",
65 name: &seededVMStatuses[0].Name,
66 namespace: &seededVMStatuses[0].Namespace,
67 clusterEdgeID: &seededVMStatuses[0].ClusterEdgeID,
68 expectedList: []*model.VirtualMachineStatus{seededVMStatuses[0]},
69 err: nil,
70 },
71 {
72 description: "Query by name and namespace only",
73 name: &seededVMStatuses[1].Name,
74 namespace: &seededVMStatuses[1].Namespace,
75 clusterEdgeID: nil,
76 expectedList: []*model.VirtualMachineStatus{seededVMStatuses[1]},
77 err: nil,
78 },
79 {
80 description: "Query by clusterEdgeID only",
81 name: nil,
82 namespace: nil,
83 clusterEdgeID: &seededVMStatuses[0].ClusterEdgeID,
84 expectedList: []*model.VirtualMachineStatus{seededVMStatuses[0], seededVMStatuses[1], seededVMStatuses[3]},
85 err: nil,
86 },
87 {
88 description: "Query with no filters",
89 name: nil,
90 namespace: nil,
91 clusterEdgeID: nil,
92 expectedList: seededVMStatuses,
93 err: nil,
94 },
95 {
96 description: "Query by name only",
97 name: &seededVMStatuses[2].Name,
98 namespace: nil,
99 clusterEdgeID: nil,
100 expectedList: []*model.VirtualMachineStatus{seededVMStatuses[2]},
101 err: nil,
102 },
103 {
104 description: "Query by namespace only",
105 name: nil,
106 namespace: &seededVMStatuses[3].Namespace,
107 clusterEdgeID: nil,
108 expectedList: []*model.VirtualMachineStatus{seededVMStatuses[3]},
109 err: nil,
110 },
111 }
112 for _, testCase := range testCaseList {
113 query := getVirtualMachineStatusesQuery(testCase.name, testCase.namespace, testCase.clusterEdgeID)
114 var response struct{ VirtualMachineStatuses []*model.VirtualMachineStatus }
115 s.ErrorIsf(ResolverClient.Post(query, &response), testCase.err, testCase.description)
116 actualList := response.VirtualMachineStatuses
117 s.NotNilf(actualList, testCase.description)
118 s.Truef(vmstatus.StatusesEqual(testCase.expectedList, actualList), testCase.description)
119 }
120 }
121
122 func getVirtualMachineStatusesQuery(name *string, namespace *string, clusterEdgeID *string) string {
123 args := []graphb.Argument{}
124 if name != nil {
125 args = append(args, graphb.ArgumentString("name", *name))
126 }
127 if namespace != nil {
128 args = append(args, graphb.ArgumentString("namespace", *namespace))
129 }
130 if clusterEdgeID != nil {
131 args = append(args, graphb.ArgumentString("clusterEdgeId", *clusterEdgeID))
132 }
133 return MustParse(graphb.Query{
134 Type: graphb.TypeQuery,
135 Fields: []*graphb.Field{
136 {
137 Name: "virtualMachineStatuses",
138 Arguments: args,
139 Fields: vmStatusFields,
140 },
141 },
142 })
143 }
144
145 var vmStatusFields = []*graphb.Field{
146 {Name: "name"},
147 {Name: "clusterEdgeId"},
148 {Name: "namespace"},
149 {
150 Name: "conditions",
151 Fields: conditionStatusFields,
152 },
153 }
154
155 var conditionStatusFields = []*graphb.Field{
156 {Name: "message"},
157 {Name: "reason"},
158 {Name: "status"},
159 {Name: "lastTransitionTime"},
160 {Name: "type"},
161 }
162
View as plain text