package integration_test import ( "fmt" "net/http" "net/http/httptest" "strings" "github.com/udacity/graphb" "edge-infra.dev/test/framework/integration" ) // create helm server with a valid index.yaml, then try create helm repo on it func (s Suite) TestCreateHelmRepository() { integration.SkipIf(s.Framework) srv := s.createHelmRepoIndexTestServer(true, true) url := srv.URL bannerEdgeID := testOrgBannerEdgeID username := "" password := "" name := fmt.Sprintf("create-helmrepo-%s", s.testTime) var response struct{ CreateHelmRepository bool } mutation := createHelmRepositoryMutation(name, bannerEdgeID, url, username, password) s.NoError(ResolverClient.Post(mutation, &response)) s.NotNil(response.CreateHelmRepository) s.Equal(response.CreateHelmRepository, true) } // create helm server with no index.yaml, then try create helm repo on it func (s Suite) TestCreateHelmRepositoryNoIndex() { integration.SkipIf(s.Framework) srv := s.createHelmRepoIndexTestServer(false, false) url := srv.URL bannerEdgeID := testOrgBannerEdgeID username := "" password := "" name := fmt.Sprintf("create-helmrepo-%s", s.testTime) var response struct{ CreateHelmRepository bool } mutation := createHelmRepositoryMutation(name, bannerEdgeID, url, username, password) s.ErrorContains(ResolverClient.Post(mutation, &response), "invalid helm repository, missing index.yaml") s.NotNil(response.CreateHelmRepository) s.Equal(response.CreateHelmRepository, false) } // create helm server with invalid index.yaml, then try create helm repo on it func (s Suite) TestCreateHelmRepositoryInvalidIndex() { integration.SkipIf(s.Framework) srv := s.createHelmRepoIndexTestServer(true, false) url := srv.URL bannerEdgeID := testOrgBannerEdgeID username := "" password := "" name := fmt.Sprintf("create-helmrepo-%s", s.testTime) var response struct{ CreateHelmRepository bool } mutation := createHelmRepositoryMutation(name, bannerEdgeID, url, username, password) s.ErrorContains(ResolverClient.Post(mutation, &response), "invalid helm repository, invalid index.yaml file") s.NotNil(response.CreateHelmRepository) s.Equal(response.CreateHelmRepository, false) } // create helm server with a valid index.yaml, then try create helm repo on it with no creds func (s Suite) TestCreateHelmRepositoryNoCreds() { integration.SkipIf(s.Framework) srv := s.createHelmRepoIndexTestServer(true, true) url := srv.URL bannerEdgeID := testOrgBannerEdgeID name := fmt.Sprintf("create-helmrepo-%s", s.testTime) var response struct{ CreateHelmRepository bool } mutation := createHelmRepositoryMutationNoCreds(name, bannerEdgeID, url) s.NoError(ResolverClient.Post(mutation, &response)) s.NotNil(response.CreateHelmRepository) s.Equal(response.CreateHelmRepository, true) } func (s Suite) createHelmRepoIndexTestServer(withIndex bool, validIndex bool) *httptest.Server { return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var err error if withIndex { w.WriteHeader(200) } else { w.WriteHeader(404) } if validIndex && strings.HasSuffix(r.URL.String(), "/index.yaml") { _, err = w.Write([]byte(getTestHelmRepoIndex(helmCharts, r.Host))) } else if !validIndex { _, err = w.Write([]byte("abc")) } s.NoError(err) })) } func createHelmRepositoryMutation(name, bannerEdgeID, url, username, password string) string { //nolint: unparam args := []graphb.Argument{ graphb.ArgumentString("name", name), graphb.ArgumentString("bannerEdgeId", bannerEdgeID), graphb.ArgumentString("url", url), graphb.ArgumentString("username", username), graphb.ArgumentString("password", password), } return MustParse(graphb.Query{ Type: graphb.TypeMutation, Fields: []*graphb.Field{ { Name: "createHelmRepository", Arguments: args, }, }, }) } func createHelmRepositoryMutationNoCreds(name, bannerEdgeID, url string) string { //nolint: unparam args := []graphb.Argument{ graphb.ArgumentString("name", name), graphb.ArgumentString("bannerEdgeId", bannerEdgeID), graphb.ArgumentString("url", url), } return MustParse(graphb.Query{ Type: graphb.TypeMutation, Fields: []*graphb.Field{ { Name: "createHelmRepository", Arguments: args, }, }, }) }