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