migrations_runner_checksum_test.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package repository
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/require"
  5. )
  6. func TestIsMigrationChecksumCompatible(t *testing.T) {
  7. t.Run("054历史checksum可兼容", func(t *testing.T) {
  8. ok := isMigrationChecksumCompatible(
  9. "054_drop_legacy_cache_columns.sql",
  10. "182c193f3359946cf094090cd9e57d5c3fd9abaffbc1e8fc378646b8a6fa12b4",
  11. "82de761156e03876653e7a6a4eee883cd927847036f779b0b9f34c42a8af7a7d",
  12. )
  13. require.True(t, ok)
  14. })
  15. t.Run("054在未知文件checksum下不兼容", func(t *testing.T) {
  16. ok := isMigrationChecksumCompatible(
  17. "054_drop_legacy_cache_columns.sql",
  18. "182c193f3359946cf094090cd9e57d5c3fd9abaffbc1e8fc378646b8a6fa12b4",
  19. "0000000000000000000000000000000000000000000000000000000000000000",
  20. )
  21. require.False(t, ok)
  22. })
  23. t.Run("061历史checksum可兼容", func(t *testing.T) {
  24. ok := isMigrationChecksumCompatible(
  25. "061_add_usage_log_request_type.sql",
  26. "08a248652cbab7cfde147fc6ef8cda464f2477674e20b718312faa252e0481c0",
  27. "66207e7aa5dd0429c2e2c0fabdaf79783ff157fa0af2e81adff2ee03790ec65c",
  28. )
  29. require.True(t, ok)
  30. })
  31. t.Run("061第二个历史checksum可兼容", func(t *testing.T) {
  32. ok := isMigrationChecksumCompatible(
  33. "061_add_usage_log_request_type.sql",
  34. "222b4a09c797c22e5922b6b172327c824f5463aaa8760e4f621bc5c22e2be0f3",
  35. "66207e7aa5dd0429c2e2c0fabdaf79783ff157fa0af2e81adff2ee03790ec65c",
  36. )
  37. require.True(t, ok)
  38. })
  39. t.Run("非白名单迁移不兼容", func(t *testing.T) {
  40. ok := isMigrationChecksumCompatible(
  41. "001_init.sql",
  42. "182c193f3359946cf094090cd9e57d5c3fd9abaffbc1e8fc378646b8a6fa12b4",
  43. "82de761156e03876653e7a6a4eee883cd927847036f779b0b9f34c42a8af7a7d",
  44. )
  45. require.False(t, ok)
  46. })
  47. t.Run("109历史checksum可兼容", func(t *testing.T) {
  48. ok := isMigrationChecksumCompatible(
  49. "109_auth_identity_compat_backfill.sql",
  50. "551e498aa5616d2d91096e9d72cf9fb36e418ee22eacc557f8811cadbc9e20ee",
  51. "0580b4602d85435edf9aca1633db580bb3932f26517f75134106f80275ec2ace",
  52. )
  53. require.True(t, ok)
  54. })
  55. t.Run("109当前checksum可兼容历史checksum", func(t *testing.T) {
  56. ok := isMigrationChecksumCompatible(
  57. "109_auth_identity_compat_backfill.sql",
  58. "551e498aa5616d2d91096e9d72cf9fb36e418ee22eacc557f8811cadbc9e20ee",
  59. "0580b4602d85435edf9aca1633db580bb3932f26517f75134106f80275ec2ace",
  60. )
  61. require.True(t, ok)
  62. })
  63. t.Run("109回滚到历史文件后仍兼容已应用的新checksum", func(t *testing.T) {
  64. ok := isMigrationChecksumCompatible(
  65. "109_auth_identity_compat_backfill.sql",
  66. "0580b4602d85435edf9aca1633db580bb3932f26517f75134106f80275ec2ace",
  67. "551e498aa5616d2d91096e9d72cf9fb36e418ee22eacc557f8811cadbc9e20ee",
  68. )
  69. require.True(t, ok)
  70. })
  71. t.Run("110历史checksum可兼容", func(t *testing.T) {
  72. ok := isMigrationChecksumCompatible(
  73. "110_pending_auth_and_provider_default_grants.sql",
  74. "e3d1f433be2b564cfbdc549adf98fce13c5c7b363ebc20fd05b765d0563b0925",
  75. "32cf87ee787b1bb36b5c691367c96eee37518fa3eed6f3322cf68795e3745279",
  76. )
  77. require.True(t, ok)
  78. })
  79. t.Run("112历史checksum可兼容", func(t *testing.T) {
  80. ok := isMigrationChecksumCompatible(
  81. "112_add_payment_order_provider_key_snapshot.sql",
  82. "ffd3e8a2c9295fa9cbefefd629a78268877e5b51bc970a82d9b3f46ec4ebd15e",
  83. "b75f8f56d39455682787696a3d92ad25b055444ca328fb7fca9a460a15d68d99",
  84. )
  85. require.True(t, ok)
  86. })
  87. t.Run("115历史checksum可兼容修复后的legacy external backfill", func(t *testing.T) {
  88. ok := isMigrationChecksumCompatible(
  89. "115_auth_identity_legacy_external_backfill.sql",
  90. "4cf39e508be9fd1a5aa41610cbbebeb80385c9adda45bf78a706de9db4f1385f",
  91. "022aadd97bb53e755f0cf7a3a957e0cb1a1353b0c39ec4de3234acd2871fd04f",
  92. )
  93. require.True(t, ok)
  94. })
  95. t.Run("116历史checksum可兼容修复后的legacy external safety reports", func(t *testing.T) {
  96. ok := isMigrationChecksumCompatible(
  97. "116_auth_identity_legacy_external_safety_reports.sql",
  98. "f7757bd929ac67ffb08ce69fa4cf20fad39dbff9d5a5085fb2adabb7607e5877",
  99. "07edb09fa8d04ffb172b0621e3c22f4d1757d20a24ae267b3b36b087ab72d488",
  100. )
  101. require.True(t, ok)
  102. })
  103. t.Run("119历史checksum可兼容占位文件", func(t *testing.T) {
  104. ok := isMigrationChecksumCompatible(
  105. "119_enforce_payment_orders_out_trade_no_unique.sql",
  106. "ebd2c67cce0116393fb4f1b5d5116a67c6aceb73820dfb5133d1ff6f36d72d34",
  107. "0bbe809ae48a9d811dabda1ba1c74955bd71c4a9cc610f9128816818dfa6c11e",
  108. )
  109. require.True(t, ok)
  110. })
  111. t.Run("118多个历史checksum都可兼容当前版本", func(t *testing.T) {
  112. for _, dbChecksum := range []string{
  113. "a38243ca0a72c3a01c0a92b7986423054d6133c0399441f853b99802852720fb",
  114. "e0cdf835d6c688d64100f483d31bc02ac9ebad414bf1837af239a84bf75b8227",
  115. } {
  116. ok := isMigrationChecksumCompatible(
  117. "118_wechat_dual_mode_and_auth_source_defaults.sql",
  118. dbChecksum,
  119. "b54194d7a3e4fbf710e0a3590d22a2fe7966804c487052a356e0b55f53ef96b0",
  120. )
  121. require.True(t, ok)
  122. }
  123. })
  124. t.Run("120多个历史checksum都可兼容新的notx修复版本", func(t *testing.T) {
  125. for _, dbChecksum := range []string{
  126. "e77921f79d539bc24575cb9c16cbe566d2b23ce816190343d0a7568f6a3fcf61",
  127. "707431450603e70a43ce9fbd61e0c12fa67da4875158ccefabacea069587ab22",
  128. "04b082b5a239c525154fe9185d324ee2b05ff90da9297e10dba19f9be79aa59a",
  129. } {
  130. ok := isMigrationChecksumCompatible(
  131. "120_enforce_payment_orders_out_trade_no_unique_notx.sql",
  132. dbChecksum,
  133. "34aadc0db59a4e390f92a12b73bd74642d9724f33124f73638ae00089ea5e074",
  134. )
  135. require.True(t, ok)
  136. }
  137. })
  138. t.Run("119未知checksum不兼容", func(t *testing.T) {
  139. ok := isMigrationChecksumCompatible(
  140. "119_enforce_payment_orders_out_trade_no_unique.sql",
  141. "ebd2c67cce0116393fb4f1b5d5116a67c6aceb73820dfb5133d1ff6f36d72d34",
  142. "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  143. )
  144. require.False(t, ok)
  145. })
  146. }