Mercurial > hg > orthanc-databases
comparison PostgreSQL/UnitTests/PostgreSQLTests.cpp @ 226:a4918d57435c
DatabaseManager doesn't IDatabaseFactory anymore
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 02 Apr 2021 19:23:36 +0200 |
parents | 94c9908e6aca |
children | 675f8322eb7c |
comparison
equal
deleted
inserted
replaced
225:94c9908e6aca | 226:a4918d57435c |
---|---|
347 } | 347 } |
348 | 348 |
349 | 349 |
350 TEST(PostgreSQL, StorageArea) | 350 TEST(PostgreSQL, StorageArea) |
351 { | 351 { |
352 PostgreSQLStorageArea storageArea(globalParameters_); | 352 PostgreSQLStorageArea storageArea(globalParameters_, true /* clear database */); |
353 storageArea.SetClearAll(true); | |
354 | 353 |
355 { | 354 { |
356 DatabaseManager::Transaction transaction(storageArea.GetManager(), TransactionType_ReadWrite); | 355 DatabaseManager::Transaction transaction(storageArea.GetManager(), TransactionType_ReadWrite); |
357 PostgreSQLDatabase& db = | 356 PostgreSQLDatabase& db = |
358 dynamic_cast<PostgreSQLDatabase&>(transaction.GetDatabase()); | 357 dynamic_cast<PostgreSQLDatabase&>(transaction.GetDatabase()); |
454 TEST(PostgreSQLIndex, CreateInstance) | 453 TEST(PostgreSQLIndex, CreateInstance) |
455 { | 454 { |
456 OrthancDatabases::PostgreSQLIndex db(NULL, globalParameters_); | 455 OrthancDatabases::PostgreSQLIndex db(NULL, globalParameters_); |
457 db.SetClearAll(true); | 456 db.SetClearAll(true); |
458 | 457 |
459 OrthancDatabases::DatabaseManager manager(db.CreateDatabaseFactory()); | 458 std::unique_ptr<OrthancDatabases::DatabaseManager> manager(OrthancDatabases::IndexBackend::CreateSingleDatabaseManager(db)); |
460 manager.Open(); | |
461 | 459 |
462 std::string s; | 460 std::string s; |
463 ASSERT_TRUE(db.LookupGlobalProperty(s, manager, MISSING_SERVER_IDENTIFIER, Orthanc::GlobalProperty_DatabaseInternal1)); | 461 ASSERT_TRUE(db.LookupGlobalProperty(s, *manager, MISSING_SERVER_IDENTIFIER, Orthanc::GlobalProperty_DatabaseInternal1)); |
464 ASSERT_EQ("2", s); | 462 ASSERT_EQ("2", s); |
465 | 463 |
466 OrthancPluginCreateInstanceResult r1, r2; | 464 OrthancPluginCreateInstanceResult r1, r2; |
467 | 465 |
468 memset(&r1, 0, sizeof(r1)); | 466 memset(&r1, 0, sizeof(r1)); |
469 db.CreateInstance(r1, manager, "a", "b", "c", "d"); | 467 db.CreateInstance(r1, *manager, "a", "b", "c", "d"); |
470 ASSERT_TRUE(r1.isNewInstance); | 468 ASSERT_TRUE(r1.isNewInstance); |
471 ASSERT_TRUE(r1.isNewSeries); | 469 ASSERT_TRUE(r1.isNewSeries); |
472 ASSERT_TRUE(r1.isNewStudy); | 470 ASSERT_TRUE(r1.isNewStudy); |
473 ASSERT_TRUE(r1.isNewPatient); | 471 ASSERT_TRUE(r1.isNewPatient); |
474 | 472 |
475 memset(&r2, 0, sizeof(r2)); | 473 memset(&r2, 0, sizeof(r2)); |
476 db.CreateInstance(r2, manager, "a", "b", "c", "d"); | 474 db.CreateInstance(r2, *manager, "a", "b", "c", "d"); |
477 ASSERT_FALSE(r2.isNewInstance); | 475 ASSERT_FALSE(r2.isNewInstance); |
478 ASSERT_EQ(r1.instanceId, r2.instanceId); | 476 ASSERT_EQ(r1.instanceId, r2.instanceId); |
479 | 477 |
480 // Breaking the hierarchy | 478 // Breaking the hierarchy |
481 memset(&r2, 0, sizeof(r2)); | 479 memset(&r2, 0, sizeof(r2)); |
482 ASSERT_THROW(db.CreateInstance(r2, manager, "a", "e", "c", "f"), Orthanc::OrthancException); | 480 ASSERT_THROW(db.CreateInstance(r2, *manager, "a", "e", "c", "f"), Orthanc::OrthancException); |
483 | 481 |
484 memset(&r2, 0, sizeof(r2)); | 482 memset(&r2, 0, sizeof(r2)); |
485 db.CreateInstance(r2, manager, "a", "b", "c", "e"); | 483 db.CreateInstance(r2, *manager, "a", "b", "c", "e"); |
486 ASSERT_TRUE(r2.isNewInstance); | 484 ASSERT_TRUE(r2.isNewInstance); |
487 ASSERT_FALSE(r2.isNewSeries); | 485 ASSERT_FALSE(r2.isNewSeries); |
488 ASSERT_FALSE(r2.isNewStudy); | 486 ASSERT_FALSE(r2.isNewStudy); |
489 ASSERT_FALSE(r2.isNewPatient); | 487 ASSERT_FALSE(r2.isNewPatient); |
490 ASSERT_EQ(r1.patientId, r2.patientId); | 488 ASSERT_EQ(r1.patientId, r2.patientId); |
491 ASSERT_EQ(r1.studyId, r2.studyId); | 489 ASSERT_EQ(r1.studyId, r2.studyId); |
492 ASSERT_EQ(r1.seriesId, r2.seriesId); | 490 ASSERT_EQ(r1.seriesId, r2.seriesId); |
493 ASSERT_NE(r1.instanceId, r2.instanceId); | 491 ASSERT_NE(r1.instanceId, r2.instanceId); |
494 | 492 |
495 memset(&r2, 0, sizeof(r2)); | 493 memset(&r2, 0, sizeof(r2)); |
496 db.CreateInstance(r2, manager, "a", "b", "f", "g"); | 494 db.CreateInstance(r2, *manager, "a", "b", "f", "g"); |
497 ASSERT_TRUE(r2.isNewInstance); | 495 ASSERT_TRUE(r2.isNewInstance); |
498 ASSERT_TRUE(r2.isNewSeries); | 496 ASSERT_TRUE(r2.isNewSeries); |
499 ASSERT_FALSE(r2.isNewStudy); | 497 ASSERT_FALSE(r2.isNewStudy); |
500 ASSERT_FALSE(r2.isNewPatient); | 498 ASSERT_FALSE(r2.isNewPatient); |
501 ASSERT_EQ(r1.patientId, r2.patientId); | 499 ASSERT_EQ(r1.patientId, r2.patientId); |
502 ASSERT_EQ(r1.studyId, r2.studyId); | 500 ASSERT_EQ(r1.studyId, r2.studyId); |
503 ASSERT_NE(r1.seriesId, r2.seriesId); | 501 ASSERT_NE(r1.seriesId, r2.seriesId); |
504 ASSERT_NE(r1.instanceId, r2.instanceId); | 502 ASSERT_NE(r1.instanceId, r2.instanceId); |
505 | 503 |
506 memset(&r2, 0, sizeof(r2)); | 504 memset(&r2, 0, sizeof(r2)); |
507 db.CreateInstance(r2, manager, "a", "h", "i", "j"); | 505 db.CreateInstance(r2, *manager, "a", "h", "i", "j"); |
508 ASSERT_TRUE(r2.isNewInstance); | 506 ASSERT_TRUE(r2.isNewInstance); |
509 ASSERT_TRUE(r2.isNewSeries); | 507 ASSERT_TRUE(r2.isNewSeries); |
510 ASSERT_TRUE(r2.isNewStudy); | 508 ASSERT_TRUE(r2.isNewStudy); |
511 ASSERT_FALSE(r2.isNewPatient); | 509 ASSERT_FALSE(r2.isNewPatient); |
512 ASSERT_EQ(r1.patientId, r2.patientId); | 510 ASSERT_EQ(r1.patientId, r2.patientId); |
513 ASSERT_NE(r1.studyId, r2.studyId); | 511 ASSERT_NE(r1.studyId, r2.studyId); |
514 ASSERT_NE(r1.seriesId, r2.seriesId); | 512 ASSERT_NE(r1.seriesId, r2.seriesId); |
515 ASSERT_NE(r1.instanceId, r2.instanceId); | 513 ASSERT_NE(r1.instanceId, r2.instanceId); |
516 | 514 |
517 memset(&r2, 0, sizeof(r2)); | 515 memset(&r2, 0, sizeof(r2)); |
518 db.CreateInstance(r2, manager, "k", "l", "m", "n"); | 516 db.CreateInstance(r2, *manager, "k", "l", "m", "n"); |
519 ASSERT_TRUE(r2.isNewInstance); | 517 ASSERT_TRUE(r2.isNewInstance); |
520 ASSERT_TRUE(r2.isNewSeries); | 518 ASSERT_TRUE(r2.isNewSeries); |
521 ASSERT_TRUE(r2.isNewStudy); | 519 ASSERT_TRUE(r2.isNewStudy); |
522 ASSERT_TRUE(r2.isNewPatient); | 520 ASSERT_TRUE(r2.isNewPatient); |
523 ASSERT_NE(r1.patientId, r2.patientId); | 521 ASSERT_NE(r1.patientId, r2.patientId); |
529 | 527 |
530 | 528 |
531 TEST(PostgreSQL, Lock2) | 529 TEST(PostgreSQL, Lock2) |
532 { | 530 { |
533 std::unique_ptr<PostgreSQLDatabase> db1(CreateTestDatabase()); | 531 std::unique_ptr<PostgreSQLDatabase> db1(CreateTestDatabase()); |
534 db1->Open(); | |
535 | 532 |
536 ASSERT_FALSE(db1->ReleaseAdvisoryLock(43)); // lock counter = 0 | 533 ASSERT_FALSE(db1->ReleaseAdvisoryLock(43)); // lock counter = 0 |
537 ASSERT_TRUE(db1->AcquireAdvisoryLock(43)); // lock counter = 1 | 534 ASSERT_TRUE(db1->AcquireAdvisoryLock(43)); // lock counter = 1 |
538 | 535 |
539 // OK, as this is the same connection | 536 // OK, as this is the same connection |
545 ASSERT_FALSE(db1->ReleaseAdvisoryLock(43)); // cannot unlock | 542 ASSERT_FALSE(db1->ReleaseAdvisoryLock(43)); // cannot unlock |
546 ASSERT_TRUE(db1->AcquireAdvisoryLock(43)); // lock counter = 1 | 543 ASSERT_TRUE(db1->AcquireAdvisoryLock(43)); // lock counter = 1 |
547 | 544 |
548 { | 545 { |
549 std::unique_ptr<PostgreSQLDatabase> db2(CreateTestDatabase()); | 546 std::unique_ptr<PostgreSQLDatabase> db2(CreateTestDatabase()); |
550 db2->Open(); | |
551 | 547 |
552 // The "db1" is still actively locking | 548 // The "db1" is still actively locking |
553 ASSERT_FALSE(db2->AcquireAdvisoryLock(43)); | 549 ASSERT_FALSE(db2->AcquireAdvisoryLock(43)); |
554 | 550 |
555 // Release the "db1" lock | 551 // Release the "db1" lock |