...

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

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

     1  package integration_test
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  	"strings"
     7  
     8  	"github.com/udacity/graphb"
     9  
    10  	"edge-infra.dev/pkg/edge/api/graph/model"
    11  	"edge-infra.dev/pkg/edge/constants/api/fleet"
    12  	"edge-infra.dev/pkg/lib/runtime/version"
    13  	"edge-infra.dev/test/framework/integration"
    14  )
    15  
    16  const clusterEdgeID = "79d6194b-0ace-44ff-93e0-ab91945dcd03"
    17  
    18  func (s *Suite) TestGetAvailableArtifactVersionsForStore() {
    19  	integration.SkipIf(s.Framework)
    20  	query := availableFleetVersionsQuery(fleet.Store)
    21  	var versionsResponse struct{ AvailableFleetVersions []string }
    22  	ResolverClient.MustPost(query, &versionsResponse)
    23  	// Currently asserting support window of 3 minor versions
    24  	s.Len(versionsResponse.AvailableFleetVersions, 3)
    25  
    26  	// The current build's version should always be the latest, and appears first in the sorted response
    27  	currentBuild := version.New().SemVer
    28  	s.Equal(currentBuild, versionsResponse.AvailableFleetVersions[0])
    29  
    30  	// N-1 version is supported
    31  	versionParts := strings.Split(versionsResponse.AvailableFleetVersions[1], ".")
    32  	s.Len(versionParts, 3)
    33  	versionMinor, err := strconv.Atoi(versionParts[1])
    34  	s.Require().NoError(err)
    35  	s.Contains(versionsResponse.AvailableFleetVersions[1], fmt.Sprintf("%d", versionMinor))
    36  
    37  	// N-2 version is supported
    38  	versionParts = strings.Split(versionsResponse.AvailableFleetVersions[2], ".")
    39  	s.Len(versionParts, 3)
    40  	versionMinor, err = strconv.Atoi(versionParts[1])
    41  	s.Require().NoError(err)
    42  	s.Contains(versionsResponse.AvailableFleetVersions[2], fmt.Sprintf("%d", versionMinor))
    43  }
    44  
    45  func (s *Suite) TestGetAvailableArtifactVersionsForNotStore() {
    46  	integration.SkipIf(s.Framework)
    47  	query := availableFleetVersionsQuery(fleet.Banner)
    48  	var versionsResponse struct{ AvailableFleetVersions []string }
    49  	ResolverClient.MustPost(query, &versionsResponse)
    50  
    51  	// Available artifacts are based on fleet type, so anything other than store should have 0 options
    52  	s.Len(versionsResponse.AvailableFleetVersions, 0)
    53  }
    54  
    55  func (s *Suite) TestAutoUpdateTrigger() {
    56  	integration.SkipIf(s.Framework)
    57  
    58  	// initially auto-update disabled
    59  	var initialConfig struct {
    60  		ClusterConfig model.ClusterConfig
    61  		Cluster       model.Cluster
    62  	}
    63  	ResolverClient.MustPost(clusterAutoUpdateAndVersionQuery(clusterEdgeID), &initialConfig)
    64  	s.Equal(false, initialConfig.ClusterConfig.AutoUpdateEnabled)
    65  	s.Equal("0.0.0-test", initialConfig.Cluster.FleetVersion)
    66  
    67  	// enable auto-update should trigger changes to cluster's fleetVersion
    68  	var updateResponse struct{ UpdateClusterConfig model.ClusterConfig }
    69  	ResolverClient.MustPost(updateClusterConfigAutoUpdateEnabled(clusterEdgeID, true), &updateResponse)
    70  	s.Equal(true, updateResponse.UpdateClusterConfig.AutoUpdateEnabled)
    71  
    72  	var updatedConfig struct {
    73  		ClusterConfig model.ClusterConfig
    74  		Cluster       model.Cluster
    75  	}
    76  	ResolverClient.MustPost(clusterAutoUpdateAndVersionQuery(clusterEdgeID), &updatedConfig)
    77  	s.Equal(true, updatedConfig.ClusterConfig.AutoUpdateEnabled)
    78  	s.Equal(version.New().SemVer, updatedConfig.Cluster.FleetVersion)
    79  }
    80  
    81  func availableFleetVersionsQuery(fleet string) string {
    82  	return MustParse(graphb.Query{
    83  		Type: graphb.TypeQuery,
    84  		Fields: []*graphb.Field{
    85  			{
    86  				Name: "availableFleetVersions",
    87  				Arguments: []graphb.Argument{
    88  					graphb.ArgumentString("fleet", fleet),
    89  				},
    90  			},
    91  		},
    92  	})
    93  }
    94  
    95  func updateClusterConfigAutoUpdateEnabled(clusterEdgeID string, autoUpdateEnabled bool) string {
    96  	config := graphb.ArgumentCustomTypeSliceElem(
    97  		graphb.ArgumentBool("autoUpdateEnabled", autoUpdateEnabled),
    98  	)
    99  	args := []graphb.Argument{
   100  		graphb.ArgumentString("clusterEdgeId", clusterEdgeID),
   101  		graphb.ArgumentCustomType("updateClusterConfig", config...),
   102  	}
   103  	return MustParse(graphb.Query{
   104  		Type: graphb.TypeMutation,
   105  		Fields: []*graphb.Field{
   106  			{
   107  				Name:      "updateClusterConfig",
   108  				Arguments: args,
   109  				Fields: []*graphb.Field{
   110  					graphb.NewField("autoUpdateEnabled"),
   111  				},
   112  			},
   113  		},
   114  	})
   115  }
   116  
   117  func clusterAutoUpdateAndVersionQuery(clusterEdgeID string) string {
   118  	args := []graphb.Argument{
   119  		graphb.ArgumentString("clusterEdgeId", clusterEdgeID),
   120  	}
   121  	return MustParse(graphb.Query{
   122  		Type: graphb.TypeQuery,
   123  		Fields: []*graphb.Field{
   124  			{
   125  				Name:      "cluster",
   126  				Arguments: args,
   127  				Fields: []*graphb.Field{
   128  					graphb.NewField("fleetVersion"),
   129  				},
   130  			},
   131  			{
   132  				Name:      "clusterConfig",
   133  				Arguments: args,
   134  				Fields: []*graphb.Field{
   135  					graphb.NewField("autoUpdateEnabled"),
   136  				},
   137  			},
   138  		},
   139  	})
   140  }
   141  

View as plain text