helpers_test.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package api_test
  2. import (
  3. "net/http"
  4. "net/http/httptest"
  5. "strings"
  6. "time"
  7. "github.com/go-chi/chi"
  8. "github.com/porter-dev/porter/api/server/shared"
  9. "github.com/porter-dev/porter/internal/adapter"
  10. "github.com/porter-dev/porter/internal/config"
  11. "github.com/porter-dev/porter/internal/helm"
  12. "github.com/porter-dev/porter/internal/kubernetes"
  13. lr "github.com/porter-dev/porter/internal/logger"
  14. "github.com/porter-dev/porter/internal/models"
  15. ints "github.com/porter-dev/porter/internal/models/integrations"
  16. "github.com/porter-dev/porter/internal/repository"
  17. "github.com/porter-dev/porter/internal/repository/gorm"
  18. "github.com/porter-dev/porter/server/api"
  19. "github.com/porter-dev/porter/server/router"
  20. "github.com/porter-dev/porter/internal/auth/sessionstore"
  21. )
  22. type tester struct {
  23. app *api.App
  24. repo repository.Repository
  25. store *sessionstore.PGStore
  26. router *chi.Mux
  27. req *http.Request
  28. rr *httptest.ResponseRecorder
  29. cookie *http.Cookie
  30. }
  31. func (t *tester) execute() {
  32. t.router.ServeHTTP(t.rr, t.req)
  33. }
  34. func (t *tester) reset() {
  35. t.rr = httptest.NewRecorder()
  36. t.req = nil
  37. }
  38. func (t *tester) createUserSession(email string, pw string) {
  39. req, err := http.NewRequest(
  40. "POST",
  41. "/api/users",
  42. strings.NewReader(`{"email":"`+email+`","password":"`+pw+`"}`),
  43. )
  44. if err != nil {
  45. panic(err)
  46. }
  47. t.req = req
  48. t.execute()
  49. if cookies := t.rr.Result().Cookies(); len(cookies) > 0 {
  50. t.cookie = cookies[0]
  51. }
  52. t.reset()
  53. }
  54. func newTester(canQuery bool) *tester {
  55. appConf := config.Conf{
  56. Debug: true,
  57. Server: config.ServerConf{
  58. Port: 8080,
  59. CookieName: "porter",
  60. CookieSecrets: []string{"secret"},
  61. TimeoutRead: time.Second * 5,
  62. TimeoutWrite: time.Second * 10,
  63. TimeoutIdle: time.Second * 15,
  64. IsTesting: true,
  65. TokenGeneratorSecret: "secret",
  66. BasicLoginEnabled: true,
  67. },
  68. // unimportant here
  69. Db: config.DBConf{},
  70. // set the helm config to testing
  71. K8s: config.K8sConf{
  72. IsTesting: true,
  73. },
  74. }
  75. logger := lr.NewConsole(appConf.Debug)
  76. db, _ := adapter.New(&shared.DBConf{
  77. EncryptionKey: "__random_strong_encryption_key__",
  78. SQLLite: true,
  79. SQLLitePath: "api_test.db",
  80. })
  81. db.AutoMigrate(
  82. &models.Project{},
  83. &models.Role{},
  84. &models.User{},
  85. &models.Session{},
  86. &models.GitRepo{},
  87. &models.Registry{},
  88. &models.Release{},
  89. &models.HelmRepo{},
  90. &models.Cluster{},
  91. &models.ClusterCandidate{},
  92. &models.ClusterResolver{},
  93. &models.Infra{},
  94. &models.GitActionConfig{},
  95. &models.Invite{},
  96. &ints.KubeIntegration{},
  97. &ints.BasicIntegration{},
  98. &ints.OIDCIntegration{},
  99. &ints.OAuthIntegration{},
  100. &ints.GCPIntegration{},
  101. &ints.AWSIntegration{},
  102. &ints.ClusterTokenCache{},
  103. &ints.RegTokenCache{},
  104. &ints.HelmRepoTokenCache{},
  105. &ints.GithubAppInstallation{},
  106. )
  107. var key [32]byte
  108. for i, b := range []byte("__random_strong_encryption_key__") {
  109. key[i] = b
  110. }
  111. repo := gorm.NewRepository(db, &key)
  112. store, _ := sessionstore.NewStore(
  113. &sessionstore.NewStoreOpts{
  114. SessionRepository: repo.Session(),
  115. CookieSecrets: []string{"secret"},
  116. },
  117. )
  118. k8sAgent := kubernetes.GetAgentTesting()
  119. app, _ := api.New(&api.AppConfig{
  120. Logger: logger,
  121. Repository: repo,
  122. ServerConf: appConf.Server,
  123. TestAgents: &api.TestAgents{
  124. HelmAgent: helm.GetAgentTesting(&helm.Form{}, nil, logger, k8sAgent),
  125. HelmTestStorageDriver: helm.StorageMap["memory"](nil, nil, ""),
  126. K8sAgent: k8sAgent,
  127. },
  128. })
  129. r := router.New(app)
  130. return &tester{
  131. app: app,
  132. repo: repo,
  133. store: store,
  134. router: r,
  135. req: nil,
  136. rr: httptest.NewRecorder(),
  137. cookie: nil,
  138. }
  139. }