|
|
@@ -0,0 +1,250 @@
|
|
|
+package gorm_test
|
|
|
+
|
|
|
+import (
|
|
|
+ "testing"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ "github.com/go-test/deep"
|
|
|
+ "github.com/porter-dev/porter/internal/models"
|
|
|
+ ints "github.com/porter-dev/porter/internal/models/integrations"
|
|
|
+ "gorm.io/gorm"
|
|
|
+ orm "gorm.io/gorm"
|
|
|
+)
|
|
|
+
|
|
|
+func TestCreateHelmRepo(t *testing.T) {
|
|
|
+ tester := &tester{
|
|
|
+ dbFileName: "./porter_create_hr.db",
|
|
|
+ }
|
|
|
+
|
|
|
+ setupTestEnv(tester, t)
|
|
|
+ initProject(tester, t)
|
|
|
+ defer cleanup(tester, t)
|
|
|
+
|
|
|
+ hr := &models.HelmRepo{
|
|
|
+ Name: "helm-repo-test",
|
|
|
+ RepoURL: "https://example-repo.com",
|
|
|
+ ProjectID: tester.initProjects[0].Model.ID,
|
|
|
+ }
|
|
|
+
|
|
|
+ hr, err := tester.repo.HelmRepo.CreateHelmRepo(hr)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ hr, err = tester.repo.HelmRepo.ReadHelmRepo(hr.Model.ID)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ // make sure id is 1 and name is "registry-test"
|
|
|
+ if hr.Model.ID != 1 {
|
|
|
+ t.Errorf("incorrect registry ID: expected %d, got %d\n", 1, hr.Model.ID)
|
|
|
+ }
|
|
|
+
|
|
|
+ if hr.Name != "helm-repo-test" {
|
|
|
+ t.Errorf("incorrect helm repo name: expected %s, got %s\n", "helm-repo-test", hr.Name)
|
|
|
+ }
|
|
|
+
|
|
|
+ if hr.RepoURL != "https://example-repo.com" {
|
|
|
+ t.Errorf("incorrect helm repo url: expected %s, got %s\n", "https://example-repo.com", hr.RepoURL)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestListHelmReposByProjectID(t *testing.T) {
|
|
|
+ tester := &tester{
|
|
|
+ dbFileName: "./porter_list_hrs.db",
|
|
|
+ }
|
|
|
+
|
|
|
+ setupTestEnv(tester, t)
|
|
|
+ initProject(tester, t)
|
|
|
+ initHelmRepo(tester, t)
|
|
|
+ defer cleanup(tester, t)
|
|
|
+
|
|
|
+ hrs, err := tester.repo.HelmRepo.ListHelmReposByProjectID(
|
|
|
+ tester.initProjects[0].Model.ID,
|
|
|
+ )
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(hrs) != 1 {
|
|
|
+ t.Fatalf("length of helm repos incorrect: expected %d, got %d\n", 1, len(hrs))
|
|
|
+ }
|
|
|
+
|
|
|
+ // make sure data is correct
|
|
|
+ expHelmRepo := models.HelmRepo{
|
|
|
+ Name: "helm-repo-test",
|
|
|
+ RepoURL: "https://example-repo.com",
|
|
|
+ ProjectID: tester.initProjects[0].Model.ID,
|
|
|
+ }
|
|
|
+
|
|
|
+ hr := hrs[0]
|
|
|
+
|
|
|
+ // reset fields for reflect.DeepEqual
|
|
|
+ hr.Model = gorm.Model{}
|
|
|
+
|
|
|
+ if diff := deep.Equal(expHelmRepo, *hr); diff != nil {
|
|
|
+ t.Errorf("incorrect helm repo")
|
|
|
+ t.Error(diff)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestUpdateHelmRepo(t *testing.T) {
|
|
|
+ tester := &tester{
|
|
|
+ dbFileName: "./porter_update_hr.db",
|
|
|
+ }
|
|
|
+
|
|
|
+ setupTestEnv(tester, t)
|
|
|
+ initProject(tester, t)
|
|
|
+ initHelmRepo(tester, t)
|
|
|
+ defer cleanup(tester, t)
|
|
|
+
|
|
|
+ hr := tester.initHRs[0]
|
|
|
+
|
|
|
+ hr.Name = "helm-repo-new-name"
|
|
|
+
|
|
|
+ hr, err := tester.repo.HelmRepo.UpdateHelmRepo(
|
|
|
+ hr,
|
|
|
+ )
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ hr, err = tester.repo.HelmRepo.ReadHelmRepo(tester.initHRs[0].ID)
|
|
|
+
|
|
|
+ // make sure data is correct
|
|
|
+ expHelmRepo := models.HelmRepo{
|
|
|
+ Name: "helm-repo-new-name",
|
|
|
+ RepoURL: "https://example-repo.com",
|
|
|
+ ProjectID: tester.initProjects[0].Model.ID,
|
|
|
+ }
|
|
|
+
|
|
|
+ // reset fields for reflect.DeepEqual
|
|
|
+ hr.Model = orm.Model{}
|
|
|
+
|
|
|
+ if diff := deep.Equal(expHelmRepo, *hr); diff != nil {
|
|
|
+ t.Errorf("incorrect helm repo")
|
|
|
+ t.Error(diff)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestUpdateHelmRepoToken(t *testing.T) {
|
|
|
+ tester := &tester{
|
|
|
+ dbFileName: "./porter_test_update_hr_token.db",
|
|
|
+ }
|
|
|
+
|
|
|
+ setupTestEnv(tester, t)
|
|
|
+ initProject(tester, t)
|
|
|
+ defer cleanup(tester, t)
|
|
|
+
|
|
|
+ hr := &models.HelmRepo{
|
|
|
+ Name: "helm-repo-test",
|
|
|
+ RepoURL: "https://example-repo.com",
|
|
|
+ ProjectID: tester.initProjects[0].Model.ID,
|
|
|
+ TokenCache: ints.HelmRepoTokenCache{
|
|
|
+ TokenCache: ints.TokenCache{
|
|
|
+ Token: []byte("token-1"),
|
|
|
+ Expiry: time.Now().Add(-1 * time.Hour),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ hr, err := tester.repo.HelmRepo.CreateHelmRepo(hr)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ hr, err = tester.repo.HelmRepo.ReadHelmRepo(hr.Model.ID)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ // make sure helm repo id of token is 1
|
|
|
+ if hr.TokenCache.HelmRepoID != 1 {
|
|
|
+ t.Fatalf("incorrect helm repo id in token cache: expected %d, got %d\n", 1, hr.TokenCache.HelmRepoID)
|
|
|
+ }
|
|
|
+
|
|
|
+ // make sure old token is expired
|
|
|
+ if isExpired := hr.TokenCache.IsExpired(); !isExpired {
|
|
|
+ t.Fatalf("token was not expired\n")
|
|
|
+ }
|
|
|
+
|
|
|
+ if string(hr.TokenCache.Token) != "token-1" {
|
|
|
+ t.Errorf("incorrect token in cache: expected %s, got %s\n", "token-1", hr.TokenCache.Token)
|
|
|
+ }
|
|
|
+
|
|
|
+ hr.TokenCache.Token = []byte("token-2")
|
|
|
+ hr.TokenCache.Expiry = time.Now().Add(24 * time.Hour)
|
|
|
+
|
|
|
+ hr, err = tester.repo.HelmRepo.UpdateHelmRepoTokenCache(&hr.TokenCache)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+ hr, err = tester.repo.HelmRepo.ReadHelmRepo(hr.Model.ID)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ // make sure id is 1
|
|
|
+ if hr.Model.ID != 1 {
|
|
|
+ t.Errorf("incorrect helm repo ID: expected %d, got %d\n", 1, hr.Model.ID)
|
|
|
+ }
|
|
|
+
|
|
|
+ // make sure new token is correct and not expired
|
|
|
+ if hr.TokenCache.HelmRepoID != 1 {
|
|
|
+ t.Fatalf("incorrect helm repo ID in token cache: expected %d, got %d\n", 1, hr.TokenCache.HelmRepoID)
|
|
|
+ }
|
|
|
+
|
|
|
+ if isExpired := hr.TokenCache.IsExpired(); isExpired {
|
|
|
+ t.Fatalf("token was expired\n")
|
|
|
+ }
|
|
|
+
|
|
|
+ if string(hr.TokenCache.Token) != "token-2" {
|
|
|
+ t.Errorf("incorrect token in cache: expected %s, got %s\n", "token-2", hr.TokenCache.Token)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// func TestDeleteRegistry(t *testing.T) {
|
|
|
+// tester := &tester{
|
|
|
+// dbFileName: "./porter_delete_registry.db",
|
|
|
+// }
|
|
|
+
|
|
|
+// setupTestEnv(tester, t)
|
|
|
+// initProject(tester, t)
|
|
|
+// initRegistry(tester, t)
|
|
|
+// defer cleanup(tester, t)
|
|
|
+
|
|
|
+// reg, err := tester.repo.Registry.ReadRegistry(tester.initRegs[0].Model.ID)
|
|
|
+
|
|
|
+// if err != nil {
|
|
|
+// t.Fatalf("%v\n", err)
|
|
|
+// }
|
|
|
+
|
|
|
+// err = tester.repo.Registry.DeleteRegistry(reg)
|
|
|
+
|
|
|
+// if err != nil {
|
|
|
+// t.Fatalf("%v\n", err)
|
|
|
+// }
|
|
|
+
|
|
|
+// _, err = tester.repo.Registry.ReadRegistry(tester.initRegs[0].Model.ID)
|
|
|
+
|
|
|
+// if err != orm.ErrRecordNotFound {
|
|
|
+// t.Fatalf("incorrect error: expected %v, got %v\n", orm.ErrRecordNotFound, err)
|
|
|
+// }
|
|
|
+
|
|
|
+// regs, err := tester.repo.Registry.ListRegistriesByProjectID(tester.initProjects[0].Model.ID)
|
|
|
+
|
|
|
+// if err != nil {
|
|
|
+// t.Fatalf("%v\n", err)
|
|
|
+// }
|
|
|
+
|
|
|
+// if len(regs) != 0 {
|
|
|
+// t.Fatalf("length of clusters was not 0")
|
|
|
+// }
|
|
|
+// }
|