package Ġdev . dom nik l . schema _ registry _ git ops . cli Ċ Ċ import Ġdev . dom nik l . schema _ registry _ git ops . CLI Ċ import Ġdev . dom nik l . schema _ registry _ git ops . Compatibility Ċ import Ġdev . dom nik l . schema _ registry _ git ops . Factory Ċ import Ġdev . dom nik l . schema _ registry _ git ops . State Ċ import Ġdev . dom nik l . schema _ registry _ git ops . Subject Ċ import Ġdev . dom nik l . schema _ registry _ git ops . state . Diff ing Ċ import Ġdev . dom nik l . schema _ registry _ git ops . state . Persistence Ċ import Ġio . con fluent . kafka . sche m are gistry . Parsed Schema Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . verify Ċ import Ġio . mock k . verify Order Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . contrib . java . lang . system . Expected System Exit Ċ import Ġorg . slf 4 j . Logger Ċ import Ġjava . io . File Ċ Ċ class ĠPlan Test Ġ{ ĊĠĠĠ Ġ@ Rule Ġ@ Jvm Field Ġval Ġexit : ĠExpected System Exit Ġ= ĠExpected System Exit . none () ĊĊĠĠĠ Ġprivate Ġval Ġdiff Ġ= Ġmock k < Diff ing >() ĊĠĠĠ Ġprivate Ġval Ġpersistence Ġ= Ġmock k < Persistence >() ĊĠĠĠ Ġprivate Ġval Ġfactory Ġ= Ġmock k < Factory >( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= Ġmock k < Logger >( relax ed Ġ= Ġtrue ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġvalidate ĠYAML Ġstate Ġfile `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠState ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Subject (" foo ", Ġnull , Ġmock k ())) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġfrom Resources (" with _ inline _ schema . yml ") ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . diff ing Ġ} Ġreturns Ġdiff ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . persistence Ġ} Ġreturns Ġpersistence ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġpersistence . load ( any (), Ġinput ) Ġ} Ġreturns Ġstate ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdiff . diff ( any ()) Ġ} Ġreturns ĠDiff ing . Result ( compatibility Ġ= ĠDiff ing . Change ( Compatibility . NONE , ĠCompatibility . BACK WARD )) ĊĊĠĠĠĠĠĠĠ Ġval Ġexit Code Ġ= ĠCLI . command Line ( factory , Ġlogger ). execute (" plan ", Ġ"-- registry ", Ġ" https :// foo . bar ", Ġinput . path ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġexit Code ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ GLOBAL ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ~ Ġcompatibility ĠNONE Ġ-> ĠBACK WARD ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ SUCCESS ] ĠAll Ġchanges Ġare Ġcompatible Ġand Ġcan Ġbe Ġapplied .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġlogger . error ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` will Ġlog Ġsuccess Ġwhen Ġno Ġchanges Ġwere Ġmade `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠState ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Subject (" foo ", Ġnull , Ġmock k ())) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġfrom Resources (" with _ inline _ schema . yml ") ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . diff ing Ġ} Ġreturns Ġdiff ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . persistence Ġ} Ġreturns Ġpersistence ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġpersistence . load ( any (), Ġinput ) Ġ} Ġreturns Ġstate ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdiff . diff ( any ()) Ġ} Ġreturns ĠDiff ing . Result () ĊĊĠĠĠĠĠĠĠ Ġval Ġexit Code Ġ= ĠCLI . command Line ( factory , Ġlogger ). execute (" plan ", Ġ"-- registry ", Ġ" https :// foo . bar ", Ġinput . path ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġexit Code ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ SUCCESS ] ĠThere Ġare Ġno Ġnecessary Ġchanges ; Ġthe Ġactual Ġstate Ġmatches Ġthe Ġdesired Ġstate .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġlogger . error ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` will Ġlog Ġdeletes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠState ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Subject (" foo ", Ġnull , Ġmock k ())) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġfrom Resources (" with _ inline _ schema . yml ") ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . diff ing Ġ} Ġreturns Ġdiff ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . persistence Ġ} Ġreturns Ġpersistence ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġpersistence . load ( any (), Ġinput ) Ġ} Ġreturns Ġstate ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdiff . diff ( any (), Ġtrue ) Ġ} Ġreturns ĠDiff ing . Result ( deleted Ġ= ĠlistOf (" foobar ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġexit Code Ġ= ĠCLI . command Line ( factory , Ġlogger ). execute (" plan ", Ġ"-- enable - de letes ", Ġ"-- registry ", Ġ" https :// foo . bar ", Ġinput . path ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġexit Code ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" The Ġfollowing Ġchanges Ġwould Ġbe Ġapplied :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ SUBJECT ] Ġfoo bar ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ- Ġdelete ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ SUCCESS ] ĠAll Ġchanges Ġare Ġcompatible Ġand Ġcan Ġbe Ġapplied .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġlogger . error ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` will Ġlog Ġadds `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠState ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Subject (" foo ", Ġnull , Ġmock k ())) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġfrom Resources (" with _ inline _ schema . yml ") ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . diff ing Ġ} Ġreturns Ġdiff ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . persistence Ġ} Ġreturns Ġpersistence ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġpersistence . load ( any (), Ġinput ) Ġ} Ġreturns Ġstate ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdiff . diff ( any ()) Ġ} Ġreturns ĠDiff ing . Result ( added Ġ= Ġstate . subjects ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexit Code Ġ= ĠCLI . command Line ( factory , Ġlogger ). execute (" plan ", Ġ"-- registry ", Ġ" https :// foo . bar ", Ġinput . path ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġexit Code ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" The Ġfollowing Ġchanges Ġwould Ġbe Ġapplied :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ SUBJECT ] Ġfoo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ+ Ġregister ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ SUCCESS ] ĠAll Ġchanges Ġare Ġcompatible Ġand Ġcan Ġbe Ġapplied .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġlogger . error ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` will Ġlog Ġchanges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠState ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Subject (" foo ", Ġnull , Ġmock k ())) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġschema Before Ġ= Ġmock k < Parsed Schema >( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġschema After Ġ= Ġmock k < Parsed Schema >( relax ed Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġfrom Resources (" with _ inline _ schema . yml ") ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . diff ing Ġ} Ġreturns Ġdiff ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . persistence Ġ} Ġreturns Ġpersistence ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġpersistence . load ( any (), Ġinput ) Ġ} Ġreturns Ġstate ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdiff . diff ( any ()) Ġ} Ġreturns ĠDiff ing . Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodified Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff ing . Changes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . subjects . first (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff ing . Change ( Compatibility . NONE , ĠCompatibility . BACK WARD ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff ing . Change ( schema Before , Ġschema After ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexit Code Ġ= ĠCLI . command Line ( factory , Ġlogger ). execute (" plan ", Ġ"-- registry ", Ġ" https :// foo . bar ", Ġinput . path ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" The Ġfollowing Ġchanges Ġwould Ġbe Ġapplied :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ SUBJECT ] Ġfoo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ~ Ġcompatibility ĠNONE Ġ-> ĠBACK WARD ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ~ Ġschema ĠĠ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ SUCCESS ] ĠAll Ġchanges Ġare Ġcompatible Ġand Ġcan Ġbe Ġapplied .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġlogger . error ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġexit Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġhandle Ġrelative Ġinput File Ġpaths `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠState ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Subject (" foo ", Ġnull , Ġmock k ())) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġ" with _ inline _ schema . yml " ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . diff ing Ġ} Ġreturns Ġdiff ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . persistence Ġ} Ġreturns Ġpersistence ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġpersistence . load ( any (), Ġany ()) Ġ} Ġreturns Ġstate ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdiff . diff ( any ()) Ġ} Ġreturns ĠDiff ing . Result () ĊĊĠĠĠĠĠĠĠ Ġval Ġexit Code Ġ= ĠCLI . command Line ( factory , Ġlogger ). execute (" plan ", Ġ"-- registry ", Ġ" https :// foo . bar ", Ġinput ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġexit Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġreport Ġvalidation Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠState ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSubject (" foo ", Ġnull , Ġmock k ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSubject (" bar ", Ġnull , Ġmock k ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġfrom Resources (" with _ inline _ schema . yml ") ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . diff ing Ġ} Ġreturns Ġdiff ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . persistence Ġ} Ġreturns Ġpersistence ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġpersistence . load ( any (), Ġinput ) Ġ} Ġreturns Ġstate ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdiff . diff ( any ()) Ġ} Ġreturns ĠDiff ing . Result ( in compatible Ġ= Ġstate . subjects ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexit Code Ġ= ĠCLI . command Line ( factory , Ġlogger ). execute (" plan ", Ġ"-- registry ", Ġ" foo ", Ġinput . path ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġexit Code ) ĊĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ("[ ERROR ] ĠThe Ġfollowing Ġschemas Ġare Ġincompatible Ġwith Ġan Ġearlier Ġversion : Ġ' foo ', Ġ' bar '") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġreport Ġother Ġerrors `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfactory . diff ing Ġ} Ġreturns Ġdiff ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdiff . diff ( any ()) Ġ} Ġthrows ĠIllegalArgumentException (" foobar ") ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġfrom Resources (" with _ inline _ schema . yml ") ĊĠĠĠĠĠĠĠ Ġval Ġexit Code Ġ= ĠCLI . command Line ( factory , Ġlogger ). execute (" plan ", Ġ"-- registry ", Ġ" foo ", Ġinput . path ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġexit Code ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġlogger . error (" java . lang . IllegalArgumentException : Ġfoo bar ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfrom Resources ( name : ĠString ) Ġ= ĠFile ( java Class . class Loader . getResource ( name ) !!. to URI ()) Ċ } Ċ