helpers_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. package enable_cluster_preview_envs
  2. import (
  3. "os"
  4. "testing"
  5. "time"
  6. "github.com/porter-dev/porter/api/server/shared/config/env"
  7. "github.com/porter-dev/porter/internal/adapter"
  8. "github.com/porter-dev/porter/internal/features"
  9. "github.com/porter-dev/porter/internal/models"
  10. ints "github.com/porter-dev/porter/internal/models/integrations"
  11. "github.com/porter-dev/porter/internal/repository"
  12. "github.com/porter-dev/porter/internal/repository/gorm"
  13. _gorm "gorm.io/gorm"
  14. )
  15. type tester struct {
  16. Key *[32]byte
  17. DB *_gorm.DB
  18. repo repository.Repository
  19. dbFileName string
  20. key *[32]byte
  21. initUsers []*models.User
  22. initProjects []*models.Project
  23. initClusters []*models.Cluster
  24. initKIs []*ints.KubeIntegration
  25. }
  26. func setupTestEnv(tester *tester, t *testing.T) {
  27. t.Helper()
  28. db, err := adapter.New(&env.DBConf{
  29. EncryptionKey: "__random_strong_encryption_key__",
  30. SQLLite: true,
  31. SQLLitePath: tester.dbFileName,
  32. })
  33. if err != nil {
  34. t.Fatalf("%\n", err)
  35. }
  36. err = db.AutoMigrate(
  37. &models.Project{},
  38. &models.User{},
  39. &models.Cluster{},
  40. &ints.KubeIntegration{},
  41. &ints.ClusterTokenCache{},
  42. )
  43. if err != nil {
  44. t.Fatalf("%v\n", err)
  45. }
  46. var key [32]byte
  47. for i, b := range []byte("__random_strong_encryption_key__") {
  48. key[i] = b
  49. }
  50. tester.key = &key
  51. tester.Key = &key
  52. tester.DB = db
  53. tester.repo = gorm.NewRepository(db, &key, nil)
  54. }
  55. func cleanup(tester *tester, t *testing.T) {
  56. t.Helper()
  57. // remove the created file file
  58. os.Remove(tester.dbFileName)
  59. }
  60. func initUser(tester *tester, t *testing.T) {
  61. t.Helper()
  62. user := &models.User{
  63. Email: "example@example.com",
  64. Password: "hello1234",
  65. }
  66. user, err := tester.repo.User().CreateUser(user)
  67. if err != nil {
  68. t.Fatalf("%v\n", err)
  69. }
  70. tester.initUsers = append(tester.initUsers, user)
  71. }
  72. func initCluster(tester *tester, t *testing.T) {
  73. t.Helper()
  74. if len(tester.initKIs) == 0 {
  75. initKubeIntegration(tester, t)
  76. }
  77. cluster := &models.Cluster{
  78. ProjectID: tester.initProjects[0].ID,
  79. Name: "cluster-test",
  80. Server: "https://localhost",
  81. KubeIntegrationID: tester.initKIs[0].ID,
  82. CertificateAuthorityData: []byte("-----BEGIN"),
  83. TokenCache: ints.ClusterTokenCache{
  84. TokenCache: ints.TokenCache{
  85. Token: []byte("token-1"),
  86. Expiry: time.Now().Add(-1 * time.Hour),
  87. },
  88. },
  89. }
  90. cluster, err := tester.repo.Cluster().CreateCluster(cluster, &features.Client{})
  91. if err != nil {
  92. t.Fatalf("%v\n", err)
  93. }
  94. tester.initClusters = append(tester.initClusters, cluster)
  95. }
  96. func initProjectPreviewEnabled(tester *tester, t *testing.T) {
  97. t.Helper()
  98. proj := &models.Project{
  99. Name: "project-test",
  100. PreviewEnvsEnabled: true,
  101. }
  102. proj, err := tester.repo.Project().CreateProject(proj)
  103. if err != nil {
  104. t.Fatalf("%v\n", err)
  105. }
  106. tester.initProjects = append(tester.initProjects, proj)
  107. }
  108. func initProjectPreviewDisabled(tester *tester, t *testing.T) {
  109. t.Helper()
  110. proj := &models.Project{
  111. Name: "project-test",
  112. }
  113. proj, err := tester.repo.Project().CreateProject(proj)
  114. if err != nil {
  115. t.Fatalf("%v\n", err)
  116. }
  117. tester.initProjects = append(tester.initProjects, proj)
  118. }
  119. func initKubeIntegration(tester *tester, t *testing.T) {
  120. t.Helper()
  121. if len(tester.initUsers) == 0 {
  122. initUser(tester, t)
  123. }
  124. ki := &ints.KubeIntegration{
  125. Mechanism: ints.KubeLocal,
  126. ProjectID: tester.initProjects[0].ID,
  127. UserID: tester.initUsers[0].ID,
  128. Kubeconfig: []byte("current-context: testing\n"),
  129. ClientCertificateData: []byte("clientcertdata"),
  130. ClientKeyData: []byte("clientkeydata"),
  131. Token: []byte("token"),
  132. Username: []byte("username"),
  133. Password: []byte("password"),
  134. }
  135. ki, err := tester.repo.KubeIntegration().CreateKubeIntegration(ki)
  136. if err != nil {
  137. t.Fatalf("%v\n", err)
  138. }
  139. tester.initKIs = append(tester.initKIs, ki)
  140. }