...

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

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

     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  // create helm server with a valid index.yaml, then try create helm repo on it
    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  // create helm server with no index.yaml, then try create helm repo on it
    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  // create helm server with invalid index.yaml, then try create helm repo on it
    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  // create helm server with a valid index.yaml, then try create helm repo on it with no creds
    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 { //nolint: unparam
    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 { //nolint: unparam
   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