helpers_test.go 3.5 KB

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