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
24 s.Len(versionsResponse.AvailableFleetVersions, 3)
25
26
27 currentBuild := version.New().SemVer
28 s.Equal(currentBuild, versionsResponse.AvailableFleetVersions[0])
29
30
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
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
52 s.Len(versionsResponse.AvailableFleetVersions, 0)
53 }
54
55 func (s *Suite) TestAutoUpdateTrigger() {
56 integration.SkipIf(s.Framework)
57
58
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
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