helpers_test.go 3.8 KB

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