package Ġorg . vit riv r . cott ont ail . dbms . catalog ue Ċ Ċ import Ġorg . junit . jupiter . api . Assertions Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . vit riv r . cott ont ail . config . Config Ċ import Ġorg . vit riv r . cott ont ail . dbms . Abstract Database Test Ċ import Ġorg . vit riv r . cott ont ail . dbms . exceptions . Database Exception Ċ import Ġorg . vit riv r . cott ont ail . dbms . execution . transactions . Transaction Type Ċ import Ġorg . vit riv r . cott ont ail . dbms . schema . Default Schema Ċ import Ġorg . vit riv r . cott ont ail . dbms . schema . Schema Tx Ċ import Ġorg . vit riv r . cott ont ail . test . Test Constants Ċ import Ġorg . vit riv r . cott ont ail . utilities . io . Tx File Utilities Ċ import Ġjava . nio . file . Files Ċ Ċ /** Ċ Ġ* ĠA Ġset Ġof Ġunit Ġtests Ġto Ġtest Ġbasic Ġ[ Default Catalog ue ] Ġfunctionality . Ċ Ġ* Ċ Ġ* Ġ@ author ĠR alph ĠG asser Ċ Ġ* Ġ@ version Ġ 1 . 2 . 0 Ċ Ġ*/ Ċ class ĠCatalog ue Test : ĠAbstract Database Test () Ġ{ ĊĊĠĠĠ Ġ/** Ġ[ Config ] Ġused Ġfor Ġthis Ġ[ Catalog ue Test ]. Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġconfig : ĠConfig Ġ= ĠTest Constants . test Config () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠAss ure Ġthat Ġroot Ġfolder Ġis Ġempty ! Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( Files . exists ( this . config . root )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTx File Utilities . delete ( this . config . root ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠFiles . create Directories ( this . config . root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Default Schema ] Ġand Ġruns Ġsome Ġbasic Ġtests Ġon Ġthe Ġexistence Ġof Ġthe Ġrequired Ġfiles Ġand Ġinitialization Ġof Ġthe Ġcorrect Ġattributes . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcreate Schema Commit Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠTransaction Ġ 1 : ĠCreate Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtxn 1 Ġ= Ġthis . manager . Transaction Impl ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog ue Txn 1 Ġ= Ġtxn 1 . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 1 . create Schema ( this . schema Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 1 . commit () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 1 . rollback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġt ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠTransaction Ġ 2 : ĠRead Ġand Ġcompare Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtxn 2 Ġ= Ġthis . manager . Transaction Impl ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog ue Txn 2 Ġ= Ġtxn 2 . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġcatalog ue Txn 2 . schema For Name ( this . schema Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschema Txn 2 Ġ= Ġtxn 2 . get Tx ( schema ) Ġas ĠSchema Tx ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġif Ġschema Ġcontains Ġthe Ġexpected Ġnumber Ġof Ġentities Ġ( zero ). Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 0 , Ġschema Txn 2 . list Entities (). size ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 2 . rollback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Default Schema ] Ġand Ġruns Ġsome Ġbasic Ġtests Ġon Ġthe Ġexistence Ġof Ġthe Ġrequired Ġfiles Ġand Ġinitialization Ġof Ġthe Ġcorrect Ġattributes . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcreate Schema Rollback Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠTransaction Ġ 1 : ĠCreate Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtxn 1 Ġ= Ġthis . manager . Transaction Impl ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog ue Txn 1 Ġ= Ġtxn 1 . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 1 . create Schema ( this . schema Name ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 1 . rollback () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠTransaction Ġ 2 : ĠRead Ġand Ġcompare Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtxn 2 Ġ= Ġthis . manager . Transaction Impl ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog ue Txn 2 Ġ= Ġtxn 2 . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠRead Ġschema Ġ( should Ġthrow Ġerror ). Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assert Throws ( Database Exception . Schema DoesNotExist Exception :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 2 . schema For Name ( this . schema Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 2 . rollback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Default Schema ] Ġand Ġthen Ġdrops Ġit . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠRuns Ġsome Ġbasic Ġtests Ġon Ġthe Ġexistence Ġof Ġthe Ġrequired Ġfiles Ġand Ġinitialization Ġof Ġthe Ġcorrect Ġattributes . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdrop Schema Commit Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠTransaction Ġ 1 : ĠCreate Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtxn 1 Ġ= Ġthis . manager . Transaction Impl ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog ue Txn 1 Ġ= Ġtxn 1 . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 1 . create Schema ( this . schema Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 1 . commit () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 1 . rollback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġt ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/* ĠTransaction Ġ 2 : ĠRead , Ġcheck Ġand Ġdrop Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtxn 2 Ġ= Ġthis . manager . Transaction Impl ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog ue Txn 2 Ġ= Ġtxn 2 . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 2 . schema For Name ( this . schema Name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠDrop Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 2 . drop Schema ( this . schema Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 2 . commit () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 2 . rollback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġt ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠTransaction Ġ 3 : ĠRead Ġand Ġcompare Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtxn 3 Ġ= Ġthis . manager . Transaction Impl ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog ue Txn 3 Ġ= Ġtxn 3 . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠRead Ġschema Ġ( should Ġthrow Ġerror ). Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assert Throws ( Database Exception . Schema DoesNotExist Exception :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 3 . schema For Name ( this . schema Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 3 . rollback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Default Schema ] Ġand Ġthen Ġdrops Ġit Ġfollowed Ġby Ġa Ġrollback . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠRuns Ġsome Ġbasic Ġtests Ġon Ġthe Ġexistence Ġof Ġthe Ġrequired Ġfiles Ġand Ġinitialization Ġof Ġthe Ġcorrect Ġattributes . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdrop Schema Rollback Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠTransaction Ġ 1 : ĠCreate Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtxn 1 Ġ= Ġthis . manager . Transaction Impl ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog ue Txn 1 Ġ= Ġtxn 1 . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 1 . create Schema ( this . schema Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 1 . commit () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 1 . rollback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġt ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/* ĠTransaction Ġ 2 : ĠRead , Ġcheck Ġand Ġdrop Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtxn 2 Ġ= Ġthis . manager . Transaction Impl ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog ue Txn 2 Ġ= Ġtxn 2 . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assert DoesNot Throw Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 2 . schema For Name ( this . schema Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠDrop Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 2 . drop Schema ( this . schema Name ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 2 . rollback () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/* ĠTransaction Ġ 3 : ĠRead Ġand Ġcompare Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtxn 3 Ġ= Ġthis . manager . Transaction Impl ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog ue Txn 3 Ġ= Ġtxn 3 . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assert DoesNot Throw Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 3 . schema For Name ( this . schema Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 3 . rollback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Default Schema ] Ġand Ġthen Ġdrops Ġit . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠRuns Ġsome Ġbasic Ġtests Ġon Ġthe Ġexistence Ġof Ġthe Ġrequired Ġfiles Ġand Ġinitialization Ġof Ġthe Ġcorrect Ġattributes . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcreate And Drop Schema Single Transaction Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠTransaction Ġ 1 : ĠCreate Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtxn 1 Ġ= Ġthis . manager . Transaction Impl ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog ue Txn 1 Ġ= Ġtxn 1 . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assert DoesNot Throw Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 1 . create Schema ( this . schema Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 1 . drop Schema ( this . schema Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 1 . commit () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠTransaction Ġ 2 : ĠRead Ġand Ġcompare Ġschema . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtxn 3 Ġ= Ġthis . manager . Transaction Impl ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog ue Txn 3 Ġ= Ġtxn 3 . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠRead Ġschema Ġ( should Ġthrow Ġerror ). Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assert Throws ( Database Exception . Schema DoesNotExist Exception :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue Txn 3 . schema For Name ( this . schema Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn 3 . rollback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ