package Ġm ary k . ro cksdb Ċ Ċ import Ġm ary k . create Folder Ċ import Ġm ary k . decode ToString Ċ import Ġm ary k . encode To ByteArray Ċ import Ġm ary k . ro cksdb . util . create Test DB Folder Ċ import Ġkotlin . random . Random Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠBackup Engine Test Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġcreate Test Folder () Ġ= Ġcreate Test DB Folder (" Backup Engine Test ") ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Backup Folder (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfolder Ġ= Ġcreate Test Folder () ĊĠĠĠĠĠĠĠ Ġcreate Folder ( folder ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfolder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbackup Db () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġempty Ġdatabase . ĊĠĠĠĠĠĠĠ ĠOptions (). set Create If Missing ( true ). use Ġ{ Ġopt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen R ocks DB ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Test Folder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFill Ġdatabase Ġwith Ġsome Ġtest Ġvalues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepare Database ( db ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġtwo Ġbackups ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBackup able DB Options ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Backup Folder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġb opt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Backup Engine ( opt . get Env (), Ġb opt ). use Ġ{ Ġbe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . createNew Backup ( db , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . createNew Backup ( db , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify NumberOf Valid Backups ( be , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Backup () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġempty Ġdatabase . ĊĠĠĠĠĠĠĠ ĠOptions (). set Create If Missing ( true ). use Ġ{ Ġopt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen R ocks DB ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Test Folder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFill Ġdatabase Ġwith Ġsome Ġtest Ġvalues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepare Database ( db ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġtwo Ġbackups ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBackup able DB Options ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Backup Folder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġb opt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Backup Engine ( opt . get Env (), Ġb opt ). use Ġ{ Ġbe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . createNew Backup ( db , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . createNew Backup ( db , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackup Info Ġ= Ġverify NumberOf Valid Backups ( be , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDelete Ġthe Ġfirst Ġbackup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . delete Backup ( backup Info [ 0 ]. backup Id ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Backup Info Ġ= Ġverify NumberOf Valid Backups ( be , Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġsecond Ġbackup Ġmust Ġremain . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( backup Info [ 1 ]. backup Id (), Ġnew Backup Info [ 0 ]. backup Id ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpurge Old Backups () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġempty Ġdatabase . ĊĠĠĠĠĠĠĠ ĠOptions (). set Create If Missing ( true ). use Ġ{ Ġopt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen R ocks DB ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Test Folder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFill Ġdatabase Ġwith Ġsome Ġtest Ġvalues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepare Database ( db ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġfour Ġbackups ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBackup able DB Options ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Backup Folder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġb opt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Backup Engine ( opt . get Env (), Ġb opt ). use Ġ{ Ġbe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . createNew Backup ( db , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . createNew Backup ( db , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . createNew Backup ( db , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . createNew Backup ( db , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackup Info Ġ= Ġverify NumberOf Valid Backups ( be , Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDelete Ġeverything Ġexcept Ġthe Ġlatest Ġbackup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . purge Old Backups ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Backup Info Ġ= Ġverify NumberOf Valid Backups ( be , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġlatest Ġbackup Ġmust Ġremain . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( backup Info [ 3 ]. backup Id (), Ġnew Backup Info [ 0 ]. backup Id ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrestore Latest Backup () Ġ{ ĊĠĠĠĠĠĠĠ ĠOptions (). set Create If Missing ( true ). use Ġ{ Ġopt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOpen Ġempty Ġdatabase . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdb : ĠR ocks DB ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Folder Ġ= Ġcreate Test Folder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Ġ= Ġopen R ocks DB ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Folder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFill Ġdatabase Ġwith Ġsome Ġtest Ġvalues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepare Database ( db ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBackup able DB Options ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Backup Folder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġb opt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Backup Engine ( opt . get Env (), Ġb opt ). use Ġ{ Ġbe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . createNew Backup ( db !! , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify NumberOf Valid Backups ( be , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. put (" key 1 ". encode To ByteArray (), Ġ" value V 2 ". encode To ByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. put (" key 2 ". encode To ByteArray (), Ġ" value V 2 ". encode To ByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . createNew Backup ( db !! , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify NumberOf Valid Backups ( be , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. put (" key 1 ". encode To ByteArray (), Ġ" value V 3 ". encode To ByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. put (" key 2 ". encode To ByteArray (), Ġ" value V 3 ". encode To ByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( db !! [" key 1 ". encode To ByteArray ()] !!. decode ToString (). endsWith (" V 3 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( db !! [" key 2 ". encode To ByteArray ()] !!. decode ToString (). endsWith (" V 3 ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify NumberOf Valid Backups ( be , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrestore Ġdb Ġfrom Ġlatest Ġbackup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRestore Options ( false ). use Ġ{ Ġro pts Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . restore Db From Latest Backup ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Folder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Folder , Ġro pts ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOpen Ġdatabase Ġagain . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Ġ= Ġopen R ocks DB ( opt , Ġtest Folder ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠValues Ġmust Ġhave Ġsuffix ĠV 2 Ġbecause Ġof Ġrest oring Ġlatest Ġbackup . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( db !! [" key 1 ". encode To ByteArray ()] !!. decode ToString (). endsWith (" V 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( db !! [" key 2 ". encode To ByteArray ()] !!. decode ToString (). endsWith (" V 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( db Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrestore From Backup () Ġ{ ĊĠĠĠĠĠĠĠ ĠOptions (). set Create If Missing ( true ). use Ġ{ Ġopt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdb : ĠR ocks DB ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Folder Ġ= Ġcreate Test Folder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOpen Ġempty Ġdatabase . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Ġ= Ġopen R ocks DB ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Folder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFill Ġdatabase Ġwith Ġsome Ġtest Ġvalues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepare Database ( db ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBackup able DB Options ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Backup Folder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġb opt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Backup Engine ( opt . get Env (), Ġb opt ). use Ġ{ Ġbe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . createNew Backup ( db !! , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify NumberOf Valid Backups ( be , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. put (" key 1 ". encode To ByteArray (), Ġ" value V 2 ". encode To ByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. put (" key 2 ". encode To ByteArray (), Ġ" value V 2 ". encode To ByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . createNew Backup ( db !! , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify NumberOf Valid Backups ( be , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. put (" key 1 ". encode To ByteArray (), Ġ" value V 3 ". encode To ByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. put (" key 2 ". encode To ByteArray (), Ġ" value V 3 ". encode To ByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( db !! [" key 1 ". encode To ByteArray ()] !!. decode ToString (). endsWith (" V 3 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( db !! [" key 2 ". encode To ByteArray ()] !!. decode ToString (). endsWith (" V 3 ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// close Ġthe Ġdatabase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// restore Ġthe Ġbackup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackup Info Ġ= Ġverify NumberOf Valid Backups ( be , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrestore Ġdb Ġfrom Ġfirst Ġbackup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . restore Db From Backup ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackup Info [ 0 ]. backup Id (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Folder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Folder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRestore Options ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOpen Ġdatabase Ġagain . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Ġ= Ġopen R ocks DB ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Folder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠValues Ġmust Ġhave Ġsuffix ĠV 2 Ġbecause Ġof Ġrest oring Ġlatest Ġbackup . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( db !! [" key 1 ". encode To ByteArray ()] !!. decode ToString (). endsWith (" V 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( db !! [" key 2 ". encode To ByteArray ()] !!. decode ToString (). endsWith (" V 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( db Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbackup Db With Metadata () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġempty Ġdatabase . ĊĠĠĠĠĠĠĠ ĠOptions (). set Create If Missing ( true ). use Ġ{ Ġopt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen R ocks DB ( opt , Ġcreate Test Folder ()). use Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFill Ġdatabase Ġwith Ġsome Ġtest Ġvalues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepare Database ( db ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġtwo Ġbackups ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBackup able DB Options ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Backup Folder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġb opt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Backup Engine ( opt . get Env (), Ġb opt ). use Ġ{ Ġbe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠRandom . nextInt (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe . createNew Backup With Metadata ( db , Ġmetadata , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackup InfoList Ġ= Ġverify NumberOf Valid Backups ( be , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( metadata , Ġbackup InfoList [ 0 ]. app Metadata ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVerify Ġbackups . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbe Ġ[ Backup Engine ] Ġinstance . ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected NumberOf Backups Ġnumerical Ġvalue ĊĠĠĠĠ Ġ* Ġ@ throws ĠR ocks DB Exception Ġthrown Ġif Ġan Ġerror Ġoccurs Ġwithin Ġthe Ġnative ĊĠĠĠĠ Ġ* Ġpart Ġof Ġthe Ġlibrary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġverify NumberOf Valid Backups ( ĊĠĠĠĠĠĠĠ Ġbe : ĠBackup Engine , ĊĠĠĠĠĠĠĠ Ġexpected NumberOf Backups : ĠInt ĊĠĠĠ Ġ): ĠList < Backup Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġbackups Ġexist ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġbe . get Cor rupted Backups (). size ) ĊĠĠĠĠĠĠĠ Ġbe . garbage Collect () ĊĠĠĠĠĠĠĠ Ġval Ġbackup Info Ġ= Ġbe . get Backup Info () ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected NumberOf Backups , Ġbackup Info . size ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbackup Info ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFill Ġdatabase Ġwith Ġsome Ġtest Ġvalues . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdb Ġ[ R ocks DB ] Ġinstance . ĊĠĠĠĠ Ġ* Ġ@ throws ĠR ocks DB Exception Ġthrown Ġif Ġan Ġerror Ġoccurs Ġwithin Ġthe Ġnative ĊĠĠĠĠ Ġ* Ġpart Ġof Ġthe Ġlibrary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġprepare Database ( db : ĠR ocks DB ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . put (" key 1 ". encode To ByteArray (), Ġ" value V 1 ". encode To ByteArray ()) ĊĠĠĠĠĠĠĠ Ġdb . put (" key 2 ". encode To ByteArray (), Ġ" value V 1 ". encode To ByteArray ()) ĊĠĠĠ Ġ} Ċ } Ċ