registry_test.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. package gorm_test
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/go-test/deep"
  6. "github.com/porter-dev/porter/internal/models"
  7. ints "github.com/porter-dev/porter/internal/models/integrations"
  8. "gorm.io/gorm"
  9. orm "gorm.io/gorm"
  10. )
  11. func TestCreateRegistry(t *testing.T) {
  12. tester := &tester{
  13. dbFileName: "./porter_create_reg.db",
  14. }
  15. setupTestEnv(tester, t)
  16. initProject(tester, t)
  17. defer cleanup(tester, t)
  18. reg := &models.Registry{
  19. Name: "registry-test",
  20. ProjectID: tester.initProjects[0].Model.ID,
  21. }
  22. reg, err := tester.repo.Registry().CreateRegistry(reg)
  23. if err != nil {
  24. t.Fatalf("%v\n", err)
  25. }
  26. reg, err = tester.repo.Registry().ReadRegistry(tester.initProjects[0].Model.ID, reg.Model.ID)
  27. if err != nil {
  28. t.Fatalf("%v\n", err)
  29. }
  30. // make sure id is 1 and name is "registry-test"
  31. if reg.Model.ID != 1 {
  32. t.Errorf("incorrect registry ID: expected %d, got %d\n", 1, reg.Model.ID)
  33. }
  34. if reg.Name != "registry-test" {
  35. t.Errorf("incorrect project name: expected %s, got %s\n", "registry-test", reg.Name)
  36. }
  37. }
  38. func TestListRegistriesByProjectID(t *testing.T) {
  39. tester := &tester{
  40. dbFileName: "./porter_list_regs.db",
  41. }
  42. setupTestEnv(tester, t)
  43. initProject(tester, t)
  44. initRegistry(tester, t)
  45. defer cleanup(tester, t)
  46. regs, err := tester.repo.Registry().ListRegistriesByProjectID(
  47. tester.initProjects[0].Model.ID,
  48. )
  49. if err != nil {
  50. t.Fatalf("%v\n", err)
  51. }
  52. if len(regs) != 1 {
  53. t.Fatalf("length of registries incorrect: expected %d, got %d\n", 1, len(regs))
  54. }
  55. // make sure data is correct
  56. expRegistry := models.Registry{
  57. ProjectID: tester.initProjects[0].ID,
  58. Name: "registry-test",
  59. }
  60. reg := regs[0]
  61. // reset fields for reflect.DeepEqual
  62. reg.Model = gorm.Model{}
  63. if diff := deep.Equal(expRegistry, *reg); diff != nil {
  64. t.Errorf("incorrect registry")
  65. t.Error(diff)
  66. }
  67. }
  68. func TestUpdateRegistry(t *testing.T) {
  69. tester := &tester{
  70. dbFileName: "./porter_update_registry.db",
  71. }
  72. setupTestEnv(tester, t)
  73. initProject(tester, t)
  74. initRegistry(tester, t)
  75. defer cleanup(tester, t)
  76. reg := tester.initRegs[0]
  77. reg.Name = "registry-new-name"
  78. reg, err := tester.repo.Registry().UpdateRegistry(
  79. reg,
  80. )
  81. if err != nil {
  82. t.Fatalf("%v\n", err)
  83. }
  84. reg, err = tester.repo.Registry().ReadRegistry(tester.initProjects[0].Model.ID, tester.initRegs[0].ID)
  85. // make sure data is correct
  86. expRegistry := models.Registry{
  87. ProjectID: tester.initProjects[0].ID,
  88. Name: "registry-new-name",
  89. }
  90. // reset fields for reflect.DeepEqual
  91. reg.Model = orm.Model{}
  92. if diff := deep.Equal(expRegistry, *reg); diff != nil {
  93. t.Errorf("incorrect registry")
  94. t.Error(diff)
  95. }
  96. }
  97. func TestUpdateRegistryToken(t *testing.T) {
  98. tester := &tester{
  99. dbFileName: "./porter_test_update_registry_token.db",
  100. }
  101. setupTestEnv(tester, t)
  102. initProject(tester, t)
  103. defer cleanup(tester, t)
  104. reg := &models.Registry{
  105. Name: "registry-test",
  106. ProjectID: tester.initProjects[0].Model.ID,
  107. TokenCache: ints.RegTokenCache{
  108. TokenCache: ints.TokenCache{
  109. Token: []byte("token-1"),
  110. Expiry: time.Now().Add(-1 * time.Hour),
  111. },
  112. },
  113. }
  114. reg, err := tester.repo.Registry().CreateRegistry(reg)
  115. if err != nil {
  116. t.Fatalf("%v\n", err)
  117. }
  118. reg, err = tester.repo.Registry().ReadRegistry(tester.initProjects[0].Model.ID, reg.Model.ID)
  119. if err != nil {
  120. t.Fatalf("%v\n", err)
  121. }
  122. // make sure registry id of token is 1
  123. if reg.TokenCache.RegistryID != 1 {
  124. t.Fatalf("incorrect registry id in token cache: expected %d, got %d\n", 1, reg.TokenCache.RegistryID)
  125. }
  126. // make sure old token is expired
  127. if isExpired := reg.TokenCache.IsExpired(); !isExpired {
  128. t.Fatalf("token was not expired\n")
  129. }
  130. if string(reg.TokenCache.Token) != "token-1" {
  131. t.Errorf("incorrect token in cache: expected %s, got %s\n", "token-1", reg.TokenCache.Token)
  132. }
  133. reg.TokenCache.Token = []byte("token-2")
  134. reg.TokenCache.Expiry = time.Now().Add(24 * time.Hour)
  135. reg, err = tester.repo.Registry().UpdateRegistryTokenCache(&reg.TokenCache)
  136. if err != nil {
  137. t.Fatalf("%v\n", err)
  138. }
  139. reg, err = tester.repo.Registry().ReadRegistry(tester.initProjects[0].Model.ID, reg.Model.ID)
  140. if err != nil {
  141. t.Fatalf("%v\n", err)
  142. }
  143. // make sure id is 1
  144. if reg.Model.ID != 1 {
  145. t.Errorf("incorrect registry ID: expected %d, got %d\n", 1, reg.Model.ID)
  146. }
  147. // make sure new token is correct and not expired
  148. if reg.TokenCache.RegistryID != 1 {
  149. t.Fatalf("incorrect registry ID in token cache: expected %d, got %d\n", 1, reg.TokenCache.RegistryID)
  150. }
  151. if isExpired := reg.TokenCache.IsExpired(); isExpired {
  152. t.Fatalf("token was expired\n")
  153. }
  154. if string(reg.TokenCache.Token) != "token-2" {
  155. t.Errorf("incorrect token in cache: expected %s, got %s\n", "token-2", reg.TokenCache.Token)
  156. }
  157. }
  158. func TestDeleteRegistry(t *testing.T) {
  159. tester := &tester{
  160. dbFileName: "./porter_delete_registry.db",
  161. }
  162. setupTestEnv(tester, t)
  163. initProject(tester, t)
  164. initRegistry(tester, t)
  165. defer cleanup(tester, t)
  166. reg, err := tester.repo.Registry().ReadRegistry(tester.initProjects[0].Model.ID, tester.initRegs[0].Model.ID)
  167. if err != nil {
  168. t.Fatalf("%v\n", err)
  169. }
  170. err = tester.repo.Registry().DeleteRegistry(reg)
  171. if err != nil {
  172. t.Fatalf("%v\n", err)
  173. }
  174. _, err = tester.repo.Registry().ReadRegistry(tester.initProjects[0].Model.ID, tester.initRegs[0].Model.ID)
  175. if err != orm.ErrRecordNotFound {
  176. t.Fatalf("incorrect error: expected %v, got %v\n", orm.ErrRecordNotFound, err)
  177. }
  178. regs, err := tester.repo.Registry().ListRegistriesByProjectID(tester.initProjects[0].Model.ID)
  179. if err != nil {
  180. t.Fatalf("%v\n", err)
  181. }
  182. if len(regs) != 0 {
  183. t.Fatalf("length of clusters was not 0")
  184. }
  185. }