/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 - 2 0 2 1 ĠON IX Labs Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . on ix labs . cord a . bn ms . workflow . relationship Ċ Ċ import Ġio . on ix labs . cord a . bn ms . contract . membership . Membership Ċ import Ġio . on ix labs . cord a . bn ms . contract . membership . reject Ċ import Ġio . on ix labs . cord a . bn ms . contract . relationship . Relationship Ċ import Ġio . on ix labs . cord a . bn ms . workflow . Flow Test Ċ import Ġio . on ix labs . cord a . bn ms . workflow . Pipeline Ċ import Ġio . on ix labs . cord a . bn ms . workflow . membership . Issue Membership At testation Flow Ċ import Ġio . on ix labs . cord a . bn ms . workflow . membership . Issue Membership Flow Ċ import Ġnet . cord a . core . transactions . Signed Transaction Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . fail Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠIssue Relationship Flow With Membership Checking Tests Ġ: ĠFlow Test () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtransaction : ĠSigned Transaction ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrelationship : ĠRelationship ĊĊĠĠĠ Ġoverride Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ ĠPipeline ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( network ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run ( node A ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmembership Ġ= ĠMembers hip ( NETWORK , Ġparty A ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIssue Membership Flow . Init iator ( membership , Ġob servers Ġ= Ġset Of ( party B )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run ( node B ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmembership Ġ= Ġit . tx . out Refs OfType < Membership >(). single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġat testation Ġ= Ġmembership . reject ( party B ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIssue Membership At testation Flow . Init iator ( at testation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run ( node B ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmembership Ġ= ĠMembers hip ( NETWORK , Ġparty B ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIssue Membership Flow . Init iator ( membership , Ġob servers Ġ= Ġset Of ( party A )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run ( node A ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmembership Ġ= Ġit . tx . out Refs OfType < Membership >(). single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġat testation Ġ= Ġmembership . reject ( party A ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIssue Membership At testation Flow . Init iator ( at testation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run ( node A ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelationship Ġ= ĠREL ATION SHIP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIssue Relationship Flow . Init iator ( relationship , Ġcheck Membership Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. finally Ġ{ Ġtransaction Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Issue Relationship Flow Ġshould Ġbe Ġsigned Ġby Ġthe Ġinit iator `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction . verify Signatures Except ( party B . own ing Key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Issue Relationship Flow Ġshould Ġbe Ġsigned Ġby Ġall Ġparticipants `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction . verify Signatures Except ( party A . own ing Key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Issue Relationship Flow Ġshould Ġrecord Ġa Ġtransaction Ġfor Ġall Ġrelationship Ġmembers `() Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf ( node A , Ġnode B ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecorded Transaction Ġ= Ġit . services . validated Transactions . getTransaction ( transaction . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfail (" Failed Ġto Ġfind Ġa Ġrecorded Ġtransaction Ġwith Ġid : Ġ${ transaction . id }. ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( transaction , Ġrecorded Transaction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Issue Relationship Flow Ġshould Ġrecord Ġa Ġrelationship Ġfor Ġall Ġrelationship Ġmembers `() Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf ( node A , Ġnode B ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecorded Transaction Ġ= Ġit . services . validated Transactions . getTransaction ( transaction . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfail (" Failed Ġto Ġfind Ġa Ġrecorded Ġtransaction Ġwith Ġid : Ġ${ transaction . id }. ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecorded Relationship Ġ= Ġrecorded Transaction . tx . outputs OfType < Relationship >(). single OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfail (" Failed Ġto Ġfind Ġa Ġrecorded Ġrelationship .") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( relationship , Ġrecorded Relationship ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ