1 package integration_test
2
3 import (
4 "fmt"
5 "net/http"
6 "net/http/httptest"
7 "strings"
8
9 "github.com/udacity/graphb"
10
11 "edge-infra.dev/test/framework/integration"
12 )
13
14
15 func (s Suite) TestCreateHelmRepository() {
16 integration.SkipIf(s.Framework)
17 srv := s.createHelmRepoIndexTestServer(true, true)
18 url := srv.URL
19 bannerEdgeID := testOrgBannerEdgeID
20 username := ""
21 password := ""
22 name := fmt.Sprintf("create-helmrepo-%s", s.testTime)
23 var response struct{ CreateHelmRepository bool }
24 mutation := createHelmRepositoryMutation(name, bannerEdgeID, url, username, password)
25 s.NoError(ResolverClient.Post(mutation, &response))
26 s.NotNil(response.CreateHelmRepository)
27 s.Equal(response.CreateHelmRepository, true)
28 }
29
30
31 func (s Suite) TestCreateHelmRepositoryNoIndex() {
32 integration.SkipIf(s.Framework)
33 srv := s.createHelmRepoIndexTestServer(false, false)
34 url := srv.URL
35 bannerEdgeID := testOrgBannerEdgeID
36 username := ""
37 password := ""
38 name := fmt.Sprintf("create-helmrepo-%s", s.testTime)
39 var response struct{ CreateHelmRepository bool }
40 mutation := createHelmRepositoryMutation(name, bannerEdgeID, url, username, password)
41 s.ErrorContains(ResolverClient.Post(mutation, &response), "invalid helm repository, missing index.yaml")
42 s.NotNil(response.CreateHelmRepository)
43 s.Equal(response.CreateHelmRepository, false)
44 }
45
46
47 func (s Suite) TestCreateHelmRepositoryInvalidIndex() {
48 integration.SkipIf(s.Framework)
49 srv := s.createHelmRepoIndexTestServer(true, false)
50 url := srv.URL
51 bannerEdgeID := testOrgBannerEdgeID
52 username := ""
53 password := ""
54 name := fmt.Sprintf("create-helmrepo-%s", s.testTime)
55 var response struct{ CreateHelmRepository bool }
56 mutation := createHelmRepositoryMutation(name, bannerEdgeID, url, username, password)
57 s.ErrorContains(ResolverClient.Post(mutation, &response), "invalid helm repository, invalid index.yaml file")
58 s.NotNil(response.CreateHelmRepository)
59 s.Equal(response.CreateHelmRepository, false)
60 }
61
62
63 func (s Suite) TestCreateHelmRepositoryNoCreds() {
64 integration.SkipIf(s.Framework)
65 srv := s.createHelmRepoIndexTestServer(true, true)
66 url := srv.URL
67 bannerEdgeID := testOrgBannerEdgeID
68 name := fmt.Sprintf("create-helmrepo-%s", s.testTime)
69 var response struct{ CreateHelmRepository bool }
70 mutation := createHelmRepositoryMutationNoCreds(name, bannerEdgeID, url)
71 s.NoError(ResolverClient.Post(mutation, &response))
72 s.NotNil(response.CreateHelmRepository)
73 s.Equal(response.CreateHelmRepository, true)
74 }
75
76 func (s Suite) createHelmRepoIndexTestServer(withIndex bool, validIndex bool) *httptest.Server {
77 return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
78 var err error
79 if withIndex {
80 w.WriteHeader(200)
81 } else {
82 w.WriteHeader(404)
83 }
84
85 if validIndex && strings.HasSuffix(r.URL.String(), "/index.yaml") {
86 _, err = w.Write([]byte(getTestHelmRepoIndex(helmCharts, r.Host)))
87 } else if !validIndex {
88 _, err = w.Write([]byte("abc"))
89 }
90 s.NoError(err)
91 }))
92 }
93
94 func createHelmRepositoryMutation(name, bannerEdgeID, url, username, password string) string {
95 args := []graphb.Argument{
96 graphb.ArgumentString("name", name),
97 graphb.ArgumentString("bannerEdgeId", bannerEdgeID),
98 graphb.ArgumentString("url", url),
99 graphb.ArgumentString("username", username),
100 graphb.ArgumentString("password", password),
101 }
102 return MustParse(graphb.Query{
103 Type: graphb.TypeMutation,
104 Fields: []*graphb.Field{
105 {
106 Name: "createHelmRepository",
107 Arguments: args,
108 },
109 },
110 })
111 }
112
113 func createHelmRepositoryMutationNoCreds(name, bannerEdgeID, url string) string {
114 args := []graphb.Argument{
115 graphb.ArgumentString("name", name),
116 graphb.ArgumentString("bannerEdgeId", bannerEdgeID),
117 graphb.ArgumentString("url", url),
118 }
119 return MustParse(graphb.Query{
120 Type: graphb.TypeMutation,
121 Fields: []*graphb.Field{
122 {
123 Name: "createHelmRepository",
124 Arguments: args,
125 },
126 },
127 })
128 }
129
View as plain text