populate_test.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. package stable_source_config_id_population_test
  2. import (
  3. "testing"
  4. "github.com/porter-dev/porter/cmd/migrate/stable_source_config_id_population"
  5. "github.com/porter-dev/porter/internal/encryption"
  6. "github.com/porter-dev/porter/internal/models"
  7. lr "github.com/porter-dev/porter/pkg/logger"
  8. )
  9. func TestAllSourceConfigHaveSameStableSourceConfigID(t *testing.T) {
  10. logger := lr.NewConsole(true)
  11. tester := &tester{
  12. dbFileName: "./porter_stable_source_config_id_population.db",
  13. }
  14. setupTestEnv(tester, t)
  15. defer cleanup(tester, t)
  16. stackName := "first-stack"
  17. initStack(tester, t, stackName)
  18. createNewStackRevision(tester, t, stackName)
  19. createNewStackRevision(tester, t, stackName)
  20. createNewStackRevision(tester, t, stackName)
  21. stable_source_config_id_population.PopulateStableSourceConfigId(tester.DB, logger)
  22. sourceConfigs := []*models.StackSourceConfig{}
  23. if err := tester.DB.Find(&sourceConfigs).Error; err != nil {
  24. t.Fatalf("failed to find source configs: %s", err)
  25. }
  26. if len(sourceConfigs) != 4 {
  27. t.Fatalf("expected 4 source configs, got %d", len(sourceConfigs))
  28. }
  29. for _, sc := range sourceConfigs {
  30. if sc.StableSourceConfigID == "" {
  31. t.Fatalf("expected stable source config id to be populated, got empty string")
  32. }
  33. }
  34. // check if all StableSourceConfigID are equal
  35. for _, sc := range sourceConfigs {
  36. if sc.StableSourceConfigID != sourceConfigs[0].StableSourceConfigID {
  37. t.Fatalf("expected all StableSourceConfigID to be equal, got %s", sc.StableSourceConfigID)
  38. }
  39. }
  40. }
  41. func TestSourceConfigWithDifferentNamesShouldHaveDifferentStableSourceConfigID(t *testing.T) {
  42. logger := lr.NewConsole(true)
  43. tester := &tester{
  44. dbFileName: "./porter_stable_source_config_id_population.db",
  45. }
  46. setupTestEnv(tester, t)
  47. initStack(tester, t, "first-stack")
  48. defer cleanup(tester, t)
  49. createNewStackRevision(tester, t, "first-stack")
  50. uid, _ := encryption.GenerateRandomBytes(16)
  51. newSourceConfig := &models.StackSourceConfig{
  52. Name: "second-source-config",
  53. ImageRepoURI: "docker.io/porter-dev/porter-test-image",
  54. ImageTag: "latest",
  55. UID: uid,
  56. }
  57. appendNewSourceConfig(t, tester, tester.initStacks[0], *newSourceConfig)
  58. stable_source_config_id_population.PopulateStableSourceConfigId(tester.DB, logger)
  59. sourceConfigs := []*models.StackSourceConfig{}
  60. if err := tester.DB.Find(&sourceConfigs).Error; err != nil {
  61. t.Fatalf("failed to find source configs: %s", err)
  62. }
  63. if len(sourceConfigs) != 3 {
  64. t.Fatalf("expected 3 source configs, got %d", len(sourceConfigs))
  65. }
  66. for _, sc := range sourceConfigs {
  67. if sc.StableSourceConfigID == "" {
  68. t.Fatalf("expected stable source config id to be populated, got empty string on source config %s", sc.Name)
  69. }
  70. }
  71. // map source configs into a map of StableSourceConfigID to SourceConfig
  72. sourceConfigMap := make(map[string][]*models.StackSourceConfig)
  73. for _, sc := range sourceConfigs {
  74. sourceConfigMap[sc.Name] = append(sourceConfigMap[sc.Name], sc)
  75. }
  76. // check if all source configs that share name have the same StableSourceConfigID
  77. for sourceConfigName := range sourceConfigMap {
  78. for _, sc := range sourceConfigMap[sourceConfigName] {
  79. if sc.StableSourceConfigID != sourceConfigMap[sourceConfigName][0].StableSourceConfigID {
  80. t.Fatalf("expected all StableSourceConfigID to be equal, got %s", sc.StableSourceConfigID)
  81. }
  82. }
  83. }
  84. }
  85. func TestSourceConfigsFromDifferentStacksShouldHaveDifferentStableSourceConfigId(t *testing.T) {
  86. logger := lr.NewConsole(true)
  87. tester := &tester{
  88. dbFileName: "./porter_stable_source_config_id_population.db",
  89. }
  90. setupTestEnv(tester, t)
  91. initStack(tester, t, "first-stack")
  92. initStack(tester, t, "second-stack")
  93. defer cleanup(tester, t)
  94. createNewStackRevision(tester, t, "first-stack")
  95. createNewStackRevision(tester, t, "second-stack")
  96. createNewStackRevision(tester, t, "first-stack")
  97. createNewStackRevision(tester, t, "second-stack")
  98. stable_source_config_id_population.PopulateStableSourceConfigId(tester.DB, logger)
  99. sourceConfigs := []*models.StackSourceConfig{}
  100. if err := tester.DB.Find(&sourceConfigs).Error; err != nil {
  101. t.Fatalf("failed to find source configs: %s", err)
  102. }
  103. if len(sourceConfigs) != 6 {
  104. t.Fatalf("expected 6 source configs, got %d", len(sourceConfigs))
  105. }
  106. for _, sc := range sourceConfigs {
  107. if sc.StableSourceConfigID == "" {
  108. t.Fatalf("expected stable source config id to be populated, got empty string on source config %s", sc.Name)
  109. }
  110. }
  111. var firstStack *models.Stack
  112. var secondStack *models.Stack
  113. stacks := []*models.Stack{}
  114. if err := tester.DB.Model(&models.Stack{}).Preload("Revisions").Preload("Revisions.SourceConfigs").Find(&stacks).Error; err != nil {
  115. t.Fatalf("failed to find stacks: %s", err)
  116. }
  117. for _, stack := range stacks {
  118. if stack.Name == "first-stack" {
  119. firstStack = stack
  120. } else if stack.Name == "second-stack" {
  121. secondStack = stack
  122. }
  123. }
  124. firstStackSourceConfigs := []models.StackSourceConfig{}
  125. // Get source configs from revisions on firstStack
  126. for _, revision := range firstStack.Revisions {
  127. for _, sourceConfig := range revision.SourceConfigs {
  128. firstStackSourceConfigs = append(firstStackSourceConfigs, sourceConfig)
  129. }
  130. }
  131. secondStackSourceConfigs := []models.StackSourceConfig{}
  132. // Get source configs from revisions on secondStack
  133. for _, revision := range secondStack.Revisions {
  134. for _, sourceConfig := range revision.SourceConfigs {
  135. secondStackSourceConfigs = append(secondStackSourceConfigs, sourceConfig)
  136. }
  137. }
  138. // Check that all the source configs from the stacks have the same StableSourceConfigID
  139. for _, sc := range firstStackSourceConfigs {
  140. if sc.StableSourceConfigID != firstStackSourceConfigs[0].StableSourceConfigID {
  141. t.Fatalf("expected all StableSourceConfigID to be equal, got %s", sc.StableSourceConfigID)
  142. }
  143. }
  144. for _, sc := range secondStackSourceConfigs {
  145. if sc.StableSourceConfigID != secondStackSourceConfigs[0].StableSourceConfigID {
  146. t.Fatalf("expected all StableSourceConfigID to be equal, got %s", sc.StableSourceConfigID)
  147. }
  148. }
  149. // check that all source configs from first stack have different StableSourceConfigID than source configs from second stack
  150. for _, sc := range firstStackSourceConfigs {
  151. for _, sc2 := range secondStackSourceConfigs {
  152. if sc.StableSourceConfigID == sc2.StableSourceConfigID {
  153. t.Fatalf("expected all StableSourceConfigID to be different, got %s", sc.StableSourceConfigID)
  154. }
  155. }
  156. }
  157. }