...

Source file src/edge-infra.dev/pkg/edge/api/graph/integration/vm_status_test.go

Documentation: edge-infra.dev/pkg/edge/api/graph/integration

     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 { // defines expected values for each test case
    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