|
|
@@ -0,0 +1,182 @@
|
|
|
+package enable_cluster_preview_envs
|
|
|
+
|
|
|
+import (
|
|
|
+ "os"
|
|
|
+ "testing"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ "github.com/porter-dev/porter/api/server/shared/config/env"
|
|
|
+ "github.com/porter-dev/porter/internal/adapter"
|
|
|
+ "github.com/porter-dev/porter/internal/models"
|
|
|
+ ints "github.com/porter-dev/porter/internal/models/integrations"
|
|
|
+ "github.com/porter-dev/porter/internal/repository"
|
|
|
+ "github.com/porter-dev/porter/internal/repository/gorm"
|
|
|
+ _gorm "gorm.io/gorm"
|
|
|
+)
|
|
|
+
|
|
|
+type tester struct {
|
|
|
+ Key *[32]byte
|
|
|
+ DB *_gorm.DB
|
|
|
+
|
|
|
+ repo repository.Repository
|
|
|
+ dbFileName string
|
|
|
+ key *[32]byte
|
|
|
+
|
|
|
+ initUsers []*models.User
|
|
|
+ initProjects []*models.Project
|
|
|
+ initClusters []*models.Cluster
|
|
|
+ initKIs []*ints.KubeIntegration
|
|
|
+}
|
|
|
+
|
|
|
+func setupTestEnv(tester *tester, t *testing.T) {
|
|
|
+ t.Helper()
|
|
|
+
|
|
|
+ db, err := adapter.New(&env.DBConf{
|
|
|
+ EncryptionKey: "__random_strong_encryption_key__",
|
|
|
+ SQLLite: true,
|
|
|
+ SQLLitePath: tester.dbFileName,
|
|
|
+ })
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ err = db.AutoMigrate(
|
|
|
+ &models.Project{},
|
|
|
+ &models.User{},
|
|
|
+ &models.Cluster{},
|
|
|
+ &ints.KubeIntegration{},
|
|
|
+ &ints.ClusterTokenCache{},
|
|
|
+ )
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ var key [32]byte
|
|
|
+
|
|
|
+ for i, b := range []byte("__random_strong_encryption_key__") {
|
|
|
+ key[i] = b
|
|
|
+ }
|
|
|
+
|
|
|
+ tester.key = &key
|
|
|
+ tester.Key = &key
|
|
|
+ tester.DB = db
|
|
|
+
|
|
|
+ tester.repo = gorm.NewRepository(db, &key, nil)
|
|
|
+}
|
|
|
+
|
|
|
+func cleanup(tester *tester, t *testing.T) {
|
|
|
+ t.Helper()
|
|
|
+
|
|
|
+ // remove the created file file
|
|
|
+ os.Remove(tester.dbFileName)
|
|
|
+}
|
|
|
+
|
|
|
+func initUser(tester *tester, t *testing.T) {
|
|
|
+ t.Helper()
|
|
|
+
|
|
|
+ user := &models.User{
|
|
|
+ Email: "example@example.com",
|
|
|
+ Password: "hello1234",
|
|
|
+ }
|
|
|
+
|
|
|
+ user, err := tester.repo.User().CreateUser(user)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ tester.initUsers = append(tester.initUsers, user)
|
|
|
+}
|
|
|
+
|
|
|
+func initCluster(tester *tester, t *testing.T) {
|
|
|
+ t.Helper()
|
|
|
+
|
|
|
+ if len(tester.initKIs) == 0 {
|
|
|
+ initKubeIntegration(tester, t)
|
|
|
+ }
|
|
|
+
|
|
|
+ cluster := &models.Cluster{
|
|
|
+ ProjectID: tester.initProjects[0].ID,
|
|
|
+ Name: "cluster-test",
|
|
|
+ Server: "https://localhost",
|
|
|
+ KubeIntegrationID: tester.initKIs[0].ID,
|
|
|
+ CertificateAuthorityData: []byte("-----BEGIN"),
|
|
|
+ TokenCache: ints.ClusterTokenCache{
|
|
|
+ TokenCache: ints.TokenCache{
|
|
|
+ Token: []byte("token-1"),
|
|
|
+ Expiry: time.Now().Add(-1 * time.Hour),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ cluster, err := tester.repo.Cluster().CreateCluster(cluster)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ tester.initClusters = append(tester.initClusters, cluster)
|
|
|
+}
|
|
|
+
|
|
|
+func initProjectPreviewEnabled(tester *tester, t *testing.T) {
|
|
|
+ t.Helper()
|
|
|
+
|
|
|
+ proj := &models.Project{
|
|
|
+ Name: "project-test",
|
|
|
+ PreviewEnvsEnabled: true,
|
|
|
+ }
|
|
|
+
|
|
|
+ proj, err := tester.repo.Project().CreateProject(proj)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ tester.initProjects = append(tester.initProjects, proj)
|
|
|
+}
|
|
|
+
|
|
|
+func initProjectPreviewDisabled(tester *tester, t *testing.T) {
|
|
|
+ t.Helper()
|
|
|
+
|
|
|
+ proj := &models.Project{
|
|
|
+ Name: "project-test",
|
|
|
+ }
|
|
|
+
|
|
|
+ proj, err := tester.repo.Project().CreateProject(proj)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ tester.initProjects = append(tester.initProjects, proj)
|
|
|
+}
|
|
|
+
|
|
|
+func initKubeIntegration(tester *tester, t *testing.T) {
|
|
|
+ t.Helper()
|
|
|
+
|
|
|
+ if len(tester.initUsers) == 0 {
|
|
|
+ initUser(tester, t)
|
|
|
+ }
|
|
|
+
|
|
|
+ ki := &ints.KubeIntegration{
|
|
|
+ Mechanism: ints.KubeLocal,
|
|
|
+ ProjectID: tester.initProjects[0].ID,
|
|
|
+ UserID: tester.initUsers[0].ID,
|
|
|
+ Kubeconfig: []byte("current-context: testing\n"),
|
|
|
+ ClientCertificateData: []byte("clientcertdata"),
|
|
|
+ ClientKeyData: []byte("clientkeydata"),
|
|
|
+ Token: []byte("token"),
|
|
|
+ Username: []byte("username"),
|
|
|
+ Password: []byte("password"),
|
|
|
+ }
|
|
|
+
|
|
|
+ ki, err := tester.repo.KubeIntegration().CreateKubeIntegration(ki)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ tester.initKIs = append(tester.initKIs, ki)
|
|
|
+}
|