go.temporal.io/server@v1.23.0/common/persistence/tests/mysql_test.go (about) 1 // The MIT License 2 // 3 // Copyright (c) 2020 Temporal Technologies Inc. All rights reserved. 4 // 5 // Copyright (c) 2020 Uber Technologies, Inc. 6 // 7 // Permission is hereby granted, free of charge, to any person obtaining a copy 8 // of this software and associated documentation files (the "Software"), to deal 9 // in the Software without restriction, including without limitation the rights 10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 // copies of the Software, and to permit persons to whom the Software is 12 // furnished to do so, subject to the following conditions: 13 // 14 // The above copyright notice and this permission notice shall be included in 15 // all copies or substantial portions of the Software. 16 // 17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 // THE SOFTWARE. 24 25 package tests 26 27 import ( 28 "testing" 29 30 "github.com/stretchr/testify/suite" 31 32 persistencetests "go.temporal.io/server/common/persistence/persistence-tests" 33 "go.temporal.io/server/common/persistence/serialization" 34 "go.temporal.io/server/common/persistence/sql" 35 "go.temporal.io/server/common/persistence/sql/sqlplugin" 36 _ "go.temporal.io/server/common/persistence/sql/sqlplugin/mysql" 37 sqltests "go.temporal.io/server/common/persistence/sql/sqlplugin/tests" 38 "go.temporal.io/server/common/resolver" 39 ) 40 41 func TestMySQLShardStoreSuite(t *testing.T) { 42 testData, tearDown := setUpMySQLTest(t) 43 defer tearDown() 44 45 shardStore, err := testData.Factory.NewShardStore() 46 if err != nil { 47 t.Fatalf("unable to create MySQL DB: %v", err) 48 } 49 50 s := NewShardSuite( 51 t, 52 shardStore, 53 serialization.NewSerializer(), 54 testData.Logger, 55 ) 56 suite.Run(t, s) 57 } 58 59 func TestMySQLExecutionMutableStateStoreSuite(t *testing.T) { 60 testData, tearDown := setUpMySQLTest(t) 61 defer tearDown() 62 63 shardStore, err := testData.Factory.NewShardStore() 64 if err != nil { 65 t.Fatalf("unable to create MySQL DB: %v", err) 66 } 67 executionStore, err := testData.Factory.NewExecutionStore() 68 if err != nil { 69 t.Fatalf("unable to create MySQL DB: %v", err) 70 } 71 72 s := NewExecutionMutableStateSuite( 73 t, 74 shardStore, 75 executionStore, 76 serialization.NewSerializer(), 77 testData.Logger, 78 ) 79 suite.Run(t, s) 80 } 81 82 func TestMySQLExecutionMutableStateTaskStoreSuite(t *testing.T) { 83 testData, tearDown := setUpMySQLTest(t) 84 defer tearDown() 85 86 shardStore, err := testData.Factory.NewShardStore() 87 if err != nil { 88 t.Fatalf("unable to create MySQL DB: %v", err) 89 } 90 executionStore, err := testData.Factory.NewExecutionStore() 91 if err != nil { 92 t.Fatalf("unable to create MySQL DB: %v", err) 93 } 94 95 s := NewExecutionMutableStateTaskSuite( 96 t, 97 shardStore, 98 executionStore, 99 serialization.NewSerializer(), 100 testData.Logger, 101 ) 102 suite.Run(t, s) 103 } 104 105 func TestMySQLHistoryStoreSuite(t *testing.T) { 106 testData, tearDown := setUpMySQLTest(t) 107 defer tearDown() 108 109 store, err := testData.Factory.NewExecutionStore() 110 if err != nil { 111 t.Fatalf("unable to create MySQL DB: %v", err) 112 } 113 114 s := NewHistoryEventsSuite(t, store, testData.Logger) 115 suite.Run(t, s) 116 } 117 118 func TestMySQLTaskQueueSuite(t *testing.T) { 119 testData, tearDown := setUpMySQLTest(t) 120 defer tearDown() 121 122 taskQueueStore, err := testData.Factory.NewTaskStore() 123 if err != nil { 124 t.Fatalf("unable to create MySQL DB: %v", err) 125 } 126 defer func() { 127 testData.Factory.Close() 128 TearDownMySQLDatabase(testData.Cfg) 129 }() 130 131 s := NewTaskQueueSuite(t, taskQueueStore, testData.Logger) 132 suite.Run(t, s) 133 } 134 135 func TestMySQLTaskQueueTaskSuite(t *testing.T) { 136 testData, tearDown := setUpMySQLTest(t) 137 defer tearDown() 138 139 taskQueueStore, err := testData.Factory.NewTaskStore() 140 if err != nil { 141 t.Fatalf("unable to create MySQL DB: %v", err) 142 } 143 144 s := NewTaskQueueTaskSuite(t, taskQueueStore, testData.Logger) 145 suite.Run(t, s) 146 } 147 148 func TestMySQLVisibilityPersistenceSuite(t *testing.T) { 149 s := &VisibilityPersistenceSuite{ 150 TestBase: persistencetests.NewTestBaseWithSQL(persistencetests.GetMySQLTestClusterOption()), 151 } 152 suite.Run(t, s) 153 } 154 155 func TestMySQL8VisibilityPersistenceSuite(t *testing.T) { 156 s := &VisibilityPersistenceSuite{ 157 TestBase: persistencetests.NewTestBaseWithSQL(persistencetests.GetMySQL8TestClusterOption()), 158 } 159 suite.Run(t, s) 160 } 161 162 // TODO: Merge persistence-tests into the tests directory. 163 164 func TestMySQLHistoryV2PersistenceSuite(t *testing.T) { 165 s := new(persistencetests.HistoryV2PersistenceSuite) 166 s.TestBase = persistencetests.NewTestBaseWithSQL(persistencetests.GetMySQLTestClusterOption()) 167 s.TestBase.Setup(nil) 168 suite.Run(t, s) 169 } 170 171 func TestMySQLMetadataPersistenceSuiteV2(t *testing.T) { 172 s := new(persistencetests.MetadataPersistenceSuiteV2) 173 s.TestBase = persistencetests.NewTestBaseWithSQL(persistencetests.GetMySQLTestClusterOption()) 174 s.TestBase.Setup(nil) 175 suite.Run(t, s) 176 } 177 178 func TestMySQLQueuePersistence(t *testing.T) { 179 s := new(persistencetests.QueuePersistenceSuite) 180 s.TestBase = persistencetests.NewTestBaseWithSQL(persistencetests.GetMySQLTestClusterOption()) 181 s.TestBase.Setup(nil) 182 suite.Run(t, s) 183 } 184 185 func TestMySQLClusterMetadataPersistence(t *testing.T) { 186 s := new(persistencetests.ClusterMetadataManagerSuite) 187 s.TestBase = persistencetests.NewTestBaseWithSQL(persistencetests.GetMySQLTestClusterOption()) 188 s.TestBase.Setup(nil) 189 suite.Run(t, s) 190 } 191 192 func TestMySQL8HistoryV2PersistenceSuite(t *testing.T) { 193 s := new(persistencetests.HistoryV2PersistenceSuite) 194 s.TestBase = persistencetests.NewTestBaseWithSQL(persistencetests.GetMySQL8TestClusterOption()) 195 s.TestBase.Setup(nil) 196 suite.Run(t, s) 197 } 198 199 func TestMySQL8MetadataPersistenceSuiteV2(t *testing.T) { 200 s := new(persistencetests.MetadataPersistenceSuiteV2) 201 s.TestBase = persistencetests.NewTestBaseWithSQL(persistencetests.GetMySQL8TestClusterOption()) 202 s.TestBase.Setup(nil) 203 suite.Run(t, s) 204 } 205 206 func TestMySQL8QueuePersistence(t *testing.T) { 207 s := new(persistencetests.QueuePersistenceSuite) 208 s.TestBase = persistencetests.NewTestBaseWithSQL(persistencetests.GetMySQL8TestClusterOption()) 209 s.TestBase.Setup(nil) 210 suite.Run(t, s) 211 } 212 213 func TestMySQL8ClusterMetadataPersistence(t *testing.T) { 214 s := new(persistencetests.ClusterMetadataManagerSuite) 215 s.TestBase = persistencetests.NewTestBaseWithSQL(persistencetests.GetMySQL8TestClusterOption()) 216 s.TestBase.Setup(nil) 217 suite.Run(t, s) 218 } 219 220 // SQL Store tests 221 222 func TestMySQLNamespaceSuite(t *testing.T) { 223 cfg := NewMySQLConfig() 224 SetupMySQLDatabase(cfg) 225 SetupMySQLSchema(cfg) 226 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 227 if err != nil { 228 t.Fatalf("unable to create MySQL DB: %v", err) 229 } 230 defer func() { 231 _ = store.Close() 232 TearDownMySQLDatabase(cfg) 233 }() 234 235 s := sqltests.NewNamespaceSuite(t, store) 236 suite.Run(t, s) 237 } 238 239 func TestMySQLQueueMessageSuite(t *testing.T) { 240 cfg := NewMySQLConfig() 241 SetupMySQLDatabase(cfg) 242 SetupMySQLSchema(cfg) 243 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 244 if err != nil { 245 t.Fatalf("unable to create MySQL DB: %v", err) 246 } 247 defer func() { 248 _ = store.Close() 249 TearDownMySQLDatabase(cfg) 250 }() 251 252 s := sqltests.NewQueueMessageSuite(t, store) 253 suite.Run(t, s) 254 } 255 256 func TestMySQLQueueMetadataSuite(t *testing.T) { 257 cfg := NewMySQLConfig() 258 SetupMySQLDatabase(cfg) 259 SetupMySQLSchema(cfg) 260 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 261 if err != nil { 262 t.Fatalf("unable to create MySQL DB: %v", err) 263 } 264 defer func() { 265 _ = store.Close() 266 TearDownMySQLDatabase(cfg) 267 }() 268 269 s := sqltests.NewQueueMetadataSuite(t, store) 270 suite.Run(t, s) 271 } 272 273 func TestMySQLMatchingTaskSuite(t *testing.T) { 274 cfg := NewMySQLConfig() 275 SetupMySQLDatabase(cfg) 276 SetupMySQLSchema(cfg) 277 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 278 if err != nil { 279 t.Fatalf("unable to create MySQL DB: %v", err) 280 } 281 defer func() { 282 _ = store.Close() 283 TearDownMySQLDatabase(cfg) 284 }() 285 286 s := sqltests.NewMatchingTaskSuite(t, store) 287 suite.Run(t, s) 288 } 289 290 func TestMySQLMatchingTaskQueueSuite(t *testing.T) { 291 cfg := NewMySQLConfig() 292 SetupMySQLDatabase(cfg) 293 SetupMySQLSchema(cfg) 294 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 295 if err != nil { 296 t.Fatalf("unable to create MySQL DB: %v", err) 297 } 298 defer func() { 299 _ = store.Close() 300 TearDownMySQLDatabase(cfg) 301 }() 302 303 s := sqltests.NewMatchingTaskQueueSuite(t, store) 304 suite.Run(t, s) 305 } 306 307 func TestMySQLHistoryShardSuite(t *testing.T) { 308 cfg := NewMySQLConfig() 309 SetupMySQLDatabase(cfg) 310 SetupMySQLSchema(cfg) 311 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 312 if err != nil { 313 t.Fatalf("unable to create MySQL DB: %v", err) 314 } 315 defer func() { 316 _ = store.Close() 317 TearDownMySQLDatabase(cfg) 318 }() 319 320 s := sqltests.NewHistoryShardSuite(t, store) 321 suite.Run(t, s) 322 } 323 324 func TestMySQLHistoryNodeSuite(t *testing.T) { 325 cfg := NewMySQLConfig() 326 SetupMySQLDatabase(cfg) 327 SetupMySQLSchema(cfg) 328 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 329 if err != nil { 330 t.Fatalf("unable to create MySQL DB: %v", err) 331 } 332 defer func() { 333 _ = store.Close() 334 TearDownMySQLDatabase(cfg) 335 }() 336 337 s := sqltests.NewHistoryNodeSuite(t, store) 338 suite.Run(t, s) 339 } 340 341 func TestMySQLHistoryTreeSuite(t *testing.T) { 342 cfg := NewMySQLConfig() 343 SetupMySQLDatabase(cfg) 344 SetupMySQLSchema(cfg) 345 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 346 if err != nil { 347 t.Fatalf("unable to create MySQL DB: %v", err) 348 } 349 defer func() { 350 _ = store.Close() 351 TearDownMySQLDatabase(cfg) 352 }() 353 354 s := sqltests.NewHistoryTreeSuite(t, store) 355 suite.Run(t, s) 356 } 357 358 func TestMySQLHistoryCurrentExecutionSuite(t *testing.T) { 359 cfg := NewMySQLConfig() 360 SetupMySQLDatabase(cfg) 361 SetupMySQLSchema(cfg) 362 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 363 if err != nil { 364 t.Fatalf("unable to create MySQL DB: %v", err) 365 } 366 defer func() { 367 _ = store.Close() 368 TearDownMySQLDatabase(cfg) 369 }() 370 371 s := sqltests.NewHistoryCurrentExecutionSuite(t, store) 372 suite.Run(t, s) 373 } 374 375 func TestMySQLHistoryExecutionSuite(t *testing.T) { 376 cfg := NewMySQLConfig() 377 SetupMySQLDatabase(cfg) 378 SetupMySQLSchema(cfg) 379 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 380 if err != nil { 381 t.Fatalf("unable to create MySQL DB: %v", err) 382 } 383 defer func() { 384 _ = store.Close() 385 TearDownMySQLDatabase(cfg) 386 }() 387 388 s := sqltests.NewHistoryExecutionSuite(t, store) 389 suite.Run(t, s) 390 } 391 392 func TestMySQLHistoryTransferTaskSuite(t *testing.T) { 393 cfg := NewMySQLConfig() 394 SetupMySQLDatabase(cfg) 395 SetupMySQLSchema(cfg) 396 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 397 if err != nil { 398 t.Fatalf("unable to create MySQL DB: %v", err) 399 } 400 defer func() { 401 _ = store.Close() 402 TearDownMySQLDatabase(cfg) 403 }() 404 405 s := sqltests.NewHistoryTransferTaskSuite(t, store) 406 suite.Run(t, s) 407 } 408 409 func TestMySQLHistoryTimerTaskSuite(t *testing.T) { 410 cfg := NewMySQLConfig() 411 SetupMySQLDatabase(cfg) 412 SetupMySQLSchema(cfg) 413 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 414 if err != nil { 415 t.Fatalf("unable to create MySQL DB: %v", err) 416 } 417 defer func() { 418 _ = store.Close() 419 TearDownMySQLDatabase(cfg) 420 }() 421 422 s := sqltests.NewHistoryTimerTaskSuite(t, store) 423 suite.Run(t, s) 424 } 425 426 func TestMySQLHistoryReplicationTaskSuite(t *testing.T) { 427 cfg := NewMySQLConfig() 428 SetupMySQLDatabase(cfg) 429 SetupMySQLSchema(cfg) 430 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 431 if err != nil { 432 t.Fatalf("unable to create MySQL DB: %v", err) 433 } 434 defer func() { 435 _ = store.Close() 436 TearDownMySQLDatabase(cfg) 437 }() 438 439 s := sqltests.NewHistoryReplicationTaskSuite(t, store) 440 suite.Run(t, s) 441 } 442 443 func TestMySQLHistoryVisibilityTaskSuite(t *testing.T) { 444 cfg := NewMySQLConfig() 445 SetupMySQLDatabase(cfg) 446 SetupMySQLSchema(cfg) 447 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 448 if err != nil { 449 t.Fatalf("unable to create MySQL DB: %v", err) 450 } 451 defer func() { 452 _ = store.Close() 453 TearDownMySQLDatabase(cfg) 454 }() 455 456 s := sqltests.NewHistoryVisibilityTaskSuite(t, store) 457 suite.Run(t, s) 458 } 459 460 func TestMySQLHistoryReplicationDLQTaskSuite(t *testing.T) { 461 cfg := NewMySQLConfig() 462 SetupMySQLDatabase(cfg) 463 SetupMySQLSchema(cfg) 464 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 465 if err != nil { 466 t.Fatalf("unable to create MySQL DB: %v", err) 467 } 468 defer func() { 469 _ = store.Close() 470 TearDownMySQLDatabase(cfg) 471 }() 472 473 s := sqltests.NewHistoryReplicationDLQTaskSuite(t, store) 474 suite.Run(t, s) 475 } 476 477 func TestMySQLHistoryExecutionBufferSuite(t *testing.T) { 478 cfg := NewMySQLConfig() 479 SetupMySQLDatabase(cfg) 480 SetupMySQLSchema(cfg) 481 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 482 if err != nil { 483 t.Fatalf("unable to create MySQL DB: %v", err) 484 } 485 defer func() { 486 _ = store.Close() 487 TearDownMySQLDatabase(cfg) 488 }() 489 490 s := sqltests.NewHistoryExecutionBufferSuite(t, store) 491 suite.Run(t, s) 492 } 493 494 func TestMySQLHistoryExecutionActivitySuite(t *testing.T) { 495 cfg := NewMySQLConfig() 496 SetupMySQLDatabase(cfg) 497 SetupMySQLSchema(cfg) 498 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 499 if err != nil { 500 t.Fatalf("unable to create MySQL DB: %v", err) 501 } 502 defer func() { 503 _ = store.Close() 504 TearDownMySQLDatabase(cfg) 505 }() 506 507 s := sqltests.NewHistoryExecutionActivitySuite(t, store) 508 suite.Run(t, s) 509 } 510 511 func TestMySQLHistoryExecutionChildWorkflowSuite(t *testing.T) { 512 cfg := NewMySQLConfig() 513 SetupMySQLDatabase(cfg) 514 SetupMySQLSchema(cfg) 515 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 516 if err != nil { 517 t.Fatalf("unable to create MySQL DB: %v", err) 518 } 519 defer func() { 520 _ = store.Close() 521 TearDownMySQLDatabase(cfg) 522 }() 523 524 s := sqltests.NewHistoryExecutionChildWorkflowSuite(t, store) 525 suite.Run(t, s) 526 } 527 528 func TestMySQLHistoryExecutionTimerSuite(t *testing.T) { 529 cfg := NewMySQLConfig() 530 SetupMySQLDatabase(cfg) 531 SetupMySQLSchema(cfg) 532 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 533 if err != nil { 534 t.Fatalf("unable to create MySQL DB: %v", err) 535 } 536 defer func() { 537 _ = store.Close() 538 TearDownMySQLDatabase(cfg) 539 }() 540 541 s := sqltests.NewHistoryExecutionTimerSuite(t, store) 542 suite.Run(t, s) 543 } 544 545 func TestMySQLHistoryExecutionRequestCancelSuite(t *testing.T) { 546 cfg := NewMySQLConfig() 547 SetupMySQLDatabase(cfg) 548 SetupMySQLSchema(cfg) 549 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 550 if err != nil { 551 t.Fatalf("unable to create MySQL DB: %v", err) 552 } 553 defer func() { 554 _ = store.Close() 555 TearDownMySQLDatabase(cfg) 556 }() 557 558 s := sqltests.NewHistoryExecutionRequestCancelSuite(t, store) 559 suite.Run(t, s) 560 } 561 562 func TestMySQLHistoryExecutionSignalSuite(t *testing.T) { 563 cfg := NewMySQLConfig() 564 SetupMySQLDatabase(cfg) 565 SetupMySQLSchema(cfg) 566 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 567 if err != nil { 568 t.Fatalf("unable to create MySQL DB: %v", err) 569 } 570 defer func() { 571 _ = store.Close() 572 TearDownMySQLDatabase(cfg) 573 }() 574 575 s := sqltests.NewHistoryExecutionSignalSuite(t, store) 576 suite.Run(t, s) 577 } 578 579 func TestMySQLHistoryExecutionSignalRequestSuite(t *testing.T) { 580 cfg := NewMySQLConfig() 581 SetupMySQLDatabase(cfg) 582 SetupMySQLSchema(cfg) 583 store, err := sql.NewSQLDB(sqlplugin.DbKindMain, cfg, resolver.NewNoopResolver()) 584 if err != nil { 585 t.Fatalf("unable to create MySQL DB: %v", err) 586 } 587 defer func() { 588 _ = store.Close() 589 TearDownMySQLDatabase(cfg) 590 }() 591 592 s := sqltests.NewHistoryExecutionSignalRequestSuite(t, store) 593 suite.Run(t, s) 594 } 595 596 func TestMySQLVisibilitySuite(t *testing.T) { 597 cfg := NewMySQLConfig() 598 SetupMySQLDatabase(cfg) 599 SetupMySQLSchema(cfg) 600 store, err := sql.NewSQLDB(sqlplugin.DbKindVisibility, cfg, resolver.NewNoopResolver()) 601 if err != nil { 602 t.Fatalf("unable to create MySQL DB: %v", err) 603 } 604 defer func() { 605 _ = store.Close() 606 TearDownMySQLDatabase(cfg) 607 }() 608 609 s := sqltests.NewVisibilitySuite(t, store) 610 suite.Run(t, s) 611 } 612 613 func TestMySQLClosedConnectionError(t *testing.T) { 614 testData, tearDown := setUpMySQLTest(t) 615 defer tearDown() 616 617 s := newConnectionSuite(t, testData.Factory) 618 suite.Run(t, s) 619 } 620 621 func TestMySQLQueueV2(t *testing.T) { 622 testData, tearDown := setUpMySQLTest(t) 623 t.Cleanup(tearDown) 624 RunQueueV2TestSuiteForSQL(t, testData.Factory) 625 }