You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
helm/pkg/registry/client_scope_test.go

97 lines
3.1 KiB

package registry
import (
"context"
"fmt"
"log"
"net/http"
"os"
"testing"
"github.com/stretchr/testify/suite"
)
type RegistryScopeTestSuite struct {
TestSuite
}
func (suite *RegistryScopeTestSuite) SetupSuite() {
// set registry use token auth
dockerRegistry := setup(&suite.TestSuite, true, true, "token")
// Start Docker registry
go dockerRegistry.ListenAndServe()
}
func (suite *RegistryScopeTestSuite) TearDownSuite() {
teardown(&suite.TestSuite)
os.RemoveAll(suite.WorkspaceDir)
}
func (suite *RegistryScopeTestSuite) Test_1_Cehck_Push_Request_Scope() {
//set simple auth server to check the auth request scope
server := &http.Server{
Addr: suite.AuthServerHost,
Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
suite.Equal(r.URL.String(), string("/auth?scope=repository%3Atestrepo%2Flocal-subchart%3Apull%2Cpush&service=testservice"))
w.WriteHeader(http.StatusOK)
}),
}
go func() {
err := server.ListenAndServe()
if err != nil && err != http.ErrServerClosed {
log.Fatalf("http server failed to ListenAndServe:%v", err)
}
}()
// basic push, good ref
testingChartCreationTime := "1977-09-02T22:04:05Z"
chartData, err := os.ReadFile("../downloader/testdata/local-subchart-0.1.0.tgz")
suite.Nil(err, "no error loading test chart")
meta, err := extractChartMeta(chartData)
suite.Nil(err, "no error extracting chart meta")
ref := fmt.Sprintf("%s/testrepo/%s:%s", suite.DockerRegistryHost, meta.Name, meta.Version)
_, err = suite.RegistryClient.Push(chartData, ref, PushOptCreationTime(testingChartCreationTime))
suite.NotNil(err, "error pushing good ref because auth server don't give proper token")
//shutdown auth server
err = server.Shutdown(context.Background())
suite.Nil(err, "shutdown simple auth server")
}
func (suite *RegistryScopeTestSuite) Test_2_Cehck_Pull_Request_Scope() {
//set simple auth server to check the auth request scope
server := &http.Server{
Addr: suite.AuthServerHost,
Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
suite.Equal(r.URL.String(), string("/auth?scope=repository%3Atestrepo%2Flocal-subchart%3Apull&service=testservice"))
w.WriteHeader(http.StatusOK)
}),
}
go func() {
err := server.ListenAndServe()
if err != nil && err != http.ErrServerClosed {
log.Fatalf("http server failed to ListenAndServe:%v", err)
}
}()
// Load test chart (to build ref pushed in previous test)
// Simple pull, chart only
chartData, err := os.ReadFile("../downloader/testdata/local-subchart-0.1.0.tgz")
suite.Nil(err, "no error loading test chart")
meta, err := extractChartMeta(chartData)
suite.Nil(err, "no error extracting chart meta")
ref := fmt.Sprintf("%s/testrepo/%s:%s", suite.DockerRegistryHost, meta.Name, meta.Version)
_, err = suite.RegistryClient.Pull(ref)
suite.NotNil(err, "error pulling a simple chart because auth server don't give proper token")
//shutdown auth server
err = server.Shutdown(context.Background())
suite.Nil(err, "shutdown simple auth server")
}
func TestRegistryScopeTestSuite(t *testing.T) {
suite.Run(t, new(RegistryScopeTestSuite))
}