/* ĠCopyright Ġ( c ) Ġ 2 0 1 9 , ĠSales force . com , ĠInc . Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠBSD - 3 - Clause . Ċ Ġ* ĠFor Ġfull Ġlicense Ġtext , Ġsee ĠLICENSE Ġfile Ġin Ġthe Ġrepo Ġroot Ġor Ġhttps :// opensource . org / licenses / BSD - 3 - Clause . Ċ Ġ*/ Ċ package Ġcom . sales force . dynamodb v 2 . mt . map pers Ċ Ċ import Ġcom . amazonaws . services . dynamodb v 2 . model . Backup Status Ċ import Ġcom . amazonaws . services . dynamodb v 2 . model . Create Backup Request Ċ import Ġcom . amazonaws . services . dynamodb v 2 . model . List Backups Request Ċ import Ġcom . amazonaws . services . s 3 . Amazon S 3 Ċ import Ġcom . google . common . collect . Immutable Map Ċ import Ġcom . sales force . dynamodb v 2 . dynamodb local . Amazon D ynamo Db Local Ċ import Ġcom . sales force . dynamodb v 2 . mt . backups . Mt Backup Aws Adaptor Ċ import Ġcom . sales force . dynamodb v 2 . mt . backups . Mt Backup Metadata Ċ import Ġcom . sales force . dynamodb v 2 . mt . backups . Mt Sc anning Snapshot ter Ċ import Ġcom . sales force . dynamodb v 2 . mt . backups . Status Ċ import Ġcom . sales force . dynamodb v 2 . mt . backups . Tenant Backup Metadata Ċ import Ġcom . sales force . dynamodb v 2 . mt . backups . Tenant Table Backup Metadata Ċ import Ġcom . sales force . dynamodb v 2 . mt . context . impl . Mt Amazon D ynamo DbContext Provider Thread Local Impl Ċ import Ġcom . sales force . dynamodb v 2 . mt . map pers . shared table . Shared Table Builder Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Assertions . fail Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . mockito . Mockito . mock Ċ import Ġjava . util . Date Ċ Ċ internal Ġclass ĠM t Backup Manager Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Describe Backup () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbackup Id Ġ= Ġ" backup - id - 1 2 3 4 " ĊĠĠĠĠĠĠĠ Ġval Ġtenant Ġ= Ġ" tenant - 1 2 3 4 " ĊĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġ" table - 1 2 3 4 " ĊĠĠĠĠĠĠĠ Ġval Ġfake Date Ġ= Ġ 1 0 2 0 3 0 4 0 L ĊĠĠĠĠĠĠĠ Ġval Ġbackup Metadata Ġ= ĠM t Backup Metadata (" s 3 - bucket ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackup Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . IN _ PROGRESS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImmutableMap . of ( Tenant Table Backup Metadata (" s 3 - bucket ", Ġbackup Id , Ġtenant , Ġtable ), Ġ 1 L ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfake Date ) ĊĠĠĠĠĠĠĠ Ġval Ġdescribe Backup Result Ġ= ĠM t Backup Aws Adaptor (). get Describe Backup Result ( backup Metadata ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Backup Status . CRE ATING . name , Ġdescribe Backup Result . backup Description . backup Details . backup Status ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" s 3 - bucket :$ backup Id ", Ġdescribe Backup Result . backup Description . backup Details . backup Arn ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( backup Id , Ġdescribe Backup Result . backup Description . backup Details . backup Name ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Date ( fake Date ), Ġdescribe Backup Result . backup Description . backup Details . backup Creation DateTime ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Describe Tenant Backup () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbackup Id Ġ= Ġ" backup - id - 1 2 3 4 " ĊĠĠĠĠĠĠĠ Ġval Ġtenant Ġ= Ġ" tenant - 1 2 3 4 " ĊĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġ" table - 1 2 3 4 " ĊĠĠĠĠĠĠĠ Ġval Ġfake Date Ġ= Ġ 1 0 2 0 3 0 4 0 L ĊĠĠĠĠĠĠĠ Ġval Ġbackup Metadata Ġ= ĠTenant Backup Metadata (" s 3 - bucket ", ĠM t Amazon D ynamo Db . Tenant Table ( table , Ġtenant ), Ġbackup Id , ĠStatus . IN _ PROGRESS , Ġfake Date ) ĊĠĠĠĠĠĠĠ Ġval Ġdescribe Backup Result Ġ= ĠM t Backup Aws Adaptor (). get Describe Backup Result ( backup Metadata ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Backup Status . CRE ATING . name , Ġdescribe Backup Result . backup Description . backup Details . backup Status ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Mt Backup Aws Adaptor (). get Backup Arn For Tenant Table Backup ( backup Metadata ), Ġdescribe Backup Result . backup Description . backup Details . backup Arn ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( backup Id , Ġdescribe Backup Result . backup Description . backup Details . backup Name ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Date ( fake Date ), Ġdescribe Backup Result . backup Description . backup Details . backup Creation DateTime ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGiven Ġcreate - backup Ġcommands , Ġuse Ġthe Ġsame ĠPO JO Ġas ĠAWS Ġon Ġdemand Ġbackups . ĠThere Ġare Ġsome Ġparams Ġrelevant Ġto ĊĠĠĠĠ Ġ* Ġon - demand Ġbackups Ġwhich Ġare Ġignored Ġwith Ġmt - d ynamo 's Ġbackup ĠAPI , Ġand Ġthus , Ġshould Ġthrow Ġan Ġerror Ġif Ġusing Ġignored ĊĠĠĠĠ Ġ* Ġparams . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Create Backup Request Input Validation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs 3 Client : ĠAmazon S 3 Ġ= Ġmock ( Amazon S 3 :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġd ynamo Ġ= ĠAmazon D ynamo Db Local . get Amazon D ynamo Db Local () ĊĠĠĠĠĠĠĠ Ġval Ġmt Context Ġ= ĠM t Amazon D ynamo DbContext Provider Thread Local Impl () ĊĠĠĠĠĠĠĠ Ġval Ġshared Table Binary Hash Key Ġ= ĠShared Table Builder . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Amazon D ynamo Db ( d ynamo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Context ( mt Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Backup Support ( s 3 Client , Ġ" fake - bucket ", ĠM t Sc anning Snapshot ter ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Truncate On Delete Table ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Binary Hash Key ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Table Binary Hash Key . create Backup ( Create Backup Request (). with Backup Name (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with TableName (" bar ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Should Ġhave Ġfailed Ġtrying Ġto Ġcreate Ġbackup Ġwith Ġtable Ġname Ġspecified ") Ġas ĠUnit ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( ex . message !!. contains (" table - name Ġarguments Ġare Ġdis allowed "), Ġex . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Table Binary Hash Key . create Backup ( Create Backup Request ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Should Ġhave Ġfailed Ġtrying Ġto Ġcreate Ġbackup Ġwithout Ġconfiguring Ġa Ġbackup Ġname ") Ġas ĠUnit ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( ex . message !!. contains (" Must Ġpass Ġbackup Ġname ."), Ġex . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠValidate Ġparams Ġof Ġlist Ġbackup Ġrequests Ġthat Ġare Ġignored Ġin Ġa Ġmult it enant Ġbackup Ġmanager Ġare Ġexplicitly ĊĠĠĠĠ Ġ* Ġdis allowed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest List Backups Request Input Validation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs 3 Client : ĠAmazon S 3 Ġ= Ġmock ( Amazon S 3 :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġd ynamo Ġ= ĠAmazon D ynamo Db Local . get Amazon D ynamo Db Local () ĊĠĠĠĠĠĠĠ Ġval Ġmt Context Ġ= ĠM t Amazon D ynamo DbContext Provider Thread Local Impl () ĊĠĠĠĠĠĠĠ Ġval Ġshared Table Binary Hash Key Ġ= ĠShared Table Builder . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Amazon D ynamo Db ( d ynamo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Context ( mt Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Backup Support ( s 3 Client , Ġ" fake - bucket ", ĠM t Sc anning Snapshot ter ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Truncate On Delete Table ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Binary Hash Key ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġmt Context . with Context ( null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Table Binary Hash Key . list Backups ( List Backups Request (). with Backup Type (" foo ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Should Ġhave Ġfailed Ġtrying Ġto Ġlist Ġbackups Ġof Ġa Ġparticular Ġtype ") Ġas ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( ex . message !!. contains (" Listing Ġbackups Ġby Ġbackup Type Ġunsupported ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Table Binary Hash Key . list Backups ( List Backups Request (). with TableName (" foo ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Should Ġhave Ġfailed Ġtrying Ġto Ġlist Ġbackups Ġof Ġa Ġparticular Ġtable Ġname ") Ġas ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( ex . message !!. contains (" Listing Ġbackups Ġby Ġtable Ġname Ġunsupported Ġfor Ġmult it enant Ġbackups ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Table Binary Hash Key . list Backups ( List Backups Request (). with Time Range Lower Bound ( Date ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Should Ġhave Ġfailed Ġtrying Ġto Ġlist Ġbackups Ġwith Ġtime Ġranges ") Ġas ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( ex . message !!. contains (" Listing Ġbackups Ġfiltered Ġby Ġtime Ġrange Ġunsupported ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Table Binary Hash Key . list Backups ( List Backups Request (). with Time Range Upper Bound ( Date ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Should Ġhave Ġfailed Ġtrying Ġto Ġlist Ġbackups Ġwith Ġtime Ġranges ") Ġas ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( ex . message !!. contains (" Listing Ġbackups Ġfiltered Ġby Ġtime Ġrange Ġunsupported ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }