/* Ċ Ġ* ĠCopyright ĠIBM ĠCorp . ĠAll ĠRights ĠReserved . Ċ Ġ* Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ*/ Ċ Ċ package Ġcom . we aver . cord a . app . interop Ċ Ċ import Ġcom . we aver . cord a . app . interop . flows . Create AccessControl Policy Ċ import Ġcom . we aver . cord a . app . interop . flows . Create External Request Ċ import Ġcom . we aver . cord a . app . interop . flows . Create Verification Policy State Ċ import Ġcom . we aver . cord a . app . interop . flows . verify Node Signature Ċ import Ġcom . we aver . cord a . app . interop . states . Policy Ċ import Ġcom . we aver . cord a . app . interop . states . Verification Policy State Ċ import Ġcom . we aver . cord a . app . interop . states . Identifier Ċ import Ġnet . cord a . core . utilities . get OrThrow Ċ import Ġnet . cord a . testing . node . Mock Network Ċ import Ġnet . cord a . testing . node . Mock Network Parameters Ċ import Ġnet . cord a . testing . node . Started Mock Node Ċ import Ġnet . cord a . testing . node . Test C ord app Ċ import Ġorg . junit . After Class Ċ import Ġorg . junit . BeforeClass Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠCreate External Request Tests Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġnetwork : ĠMock Network ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġparty A : ĠStarted Mock Node ĊĊĠĠĠĠĠĠĠ Ġ@ BeforeClass ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Ġ= ĠMock Network ( Mock Network Parameters ( cord apps ForAll Nodes Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest C ord app . find C ord app (" com . we aver . cord a . app . interop . contracts "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest C ord app . find C ord app (" com . we aver . cord a . app . interop . flows ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty A Ġ= Ġnetwork . create Party Node () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ After Class ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . stop Nodes () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . setProperty (" net . cord a . node . db transactions resolver . InMemory Resolution Limit ", Ġ" 0 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Create External Request Ġtests `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġverification Policy Ġ= ĠVerification Policy State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecurity Domain Ġ= Ġ" network 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidentifiers Ġ= Ġ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIdentifier ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern Ġ= Ġ" my channel : my chain code : chain co defn : chain code args ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpolicy Ġ= ĠPolicy (" Signature ", ĠlistOf (" org 1 . example . com ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIdentifier ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern Ġ= Ġ" my channel : my chain code : other Chain code Fn :* ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpolicy Ġ= ĠPolicy (" Signature ", ĠlistOf (" org 2 . example . com ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġparty A . start Flow ( Create Verification Policy State ( verification Policy )) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĊĠĠĠĠĠĠĠ Ġ// ĠH appy Ġcase Ġwith Ġvalid Ġaddress ĊĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġ" localhost : 9 0 8 0 / network 2 / my channel : my chain code : chain co defn : chain code args " ĊĠĠĠĠĠĠĠ Ġval Ġexternal Request Future Ġ= Ġparty A . start Flow ( Create External Request ( address )) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġval Ġexternal Request Ġ= Ġexternal Request Future . get OrThrow () ĊĠĠĠĠĠĠĠ ĠassertTrue ( external Request . is Right ()) ĊĠĠĠĠĠĠĠ Ġexternal Request . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" org 1 . example . com ", Ġit . policy [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠisValid Request Signature Ġ= Ġverify Node Signature ( it . certificate , Ġit . signature , Ġ( address Ġ+ Ġit . nonce ). toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( isValid Request Signature . is Right ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠH appy Ġcase Ġwith Ġvalid Ġaddress Ġwithout Ġargs ĊĠĠĠĠĠĠĠ Ġval Ġaddress No CC Args In Ver Policy Ġ= Ġ" localhost : 9 0 8 0 / network 2 / my channel : my chain code : other Chain code Fn : chain code args " ĊĠĠĠĠĠĠĠ Ġval Ġexternal Request Future Two Ġ= Ġparty A . start Flow ( Create External Request ( address No CC Args In Ver Policy )) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġval Ġexternal Request Two Ġ= Ġexternal Request Future Two . get OrThrow () ĊĠĠĠĠĠĠĠ ĠassertTrue ( external Request Two . is Right ()) ĊĠĠĠĠĠĠĠ Ġexternal Request Two . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" org 2 . example . com ", Ġit . policy [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠisValid Request Signature Ġ= Ġverify Node Signature ( it . certificate , Ġit . signature , Ġ( address No CC Args In Ver Policy Ġ+ Ġit . nonce ). toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( isValid Request Signature . is Right ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠH appy Ġcase Ġwith Ġvalid Ġaddress Ġwith Ġmultiple Ġargs Ġwhen Ġview Ġaddress Ġin Ġverification Ġpolicy Ġhas Ġno Ġargs Ċ // ĠĠĠĠĠĠĠ Ġval Ġmulti Arg Address No CC Args In Ver Policy Ġ= Ġ" localhost : 9 0 8 0 / network 2 / my channel : my chain code : other Chain code Fn : chain code args : other Chain code Arg " Ċ // ĠĠĠĠĠĠĠ Ġval Ġexternal Request Future Three Ġ= Ġparty A . start Flow ( Create External Request ( multi Arg Address No CC Args In Ver Policy )) Ċ // ĠĠĠĠĠĠĠ Ġnetwork . run Network () Ċ // ĠĠĠĠĠĠĠ Ġval Ġexternal Request Three Ġ= Ġexternal Request Future Two . get OrThrow () Ċ // ĠĠĠĠĠĠĠ ĠassertTrue ( external Request Three . is Right ()) Ċ // ĠĠĠĠĠĠĠ Ġexternal Request Three . map Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" org 2 . example . com ", Ġit . policy [ 0 ]) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠisValid Request Signature Ġ= Ġverify Node Signature ( it . certificate , Ġit . signature , Ġaddress No CC Args In Ver Policy Ġ+ Ġit . nonce ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( isValid Request Signature . is Right ()) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠUn happy Ġcase Ġwith Ġinvalid Ġnetwork Id ĊĠĠĠĠĠĠĠ Ġval Ġinvalid Network Address Ġ= Ġ" localhost : 9 0 8 0 / invalid Network / my channel : my chain code : chain co defn : chain code args " ĊĠĠĠĠĠĠĠ Ġval Ġinvalid Network Future Ġ= Ġparty A . start Flow ( Create External Request ( invalid Network Address )) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġval Ġinvalid Network Error Ġ= Ġinvalid Network Future . get OrThrow () ĊĠĠĠĠĠĠĠ ĠassertTrue ( invalid Network Error . is Left ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠUn happy Ġcase Ġwith Ġinvalid Ġview Ġaddress ĊĠĠĠĠĠĠĠ Ġval Ġinvalid View Address Ġ= Ġ" localhost : 9 0 8 0 / network 2 / my channel : my chain code : invalid Args " ĊĠĠĠĠĠĠĠ Ġval Ġinvalid View Address Future Ġ= Ġparty A . start Flow ( Create External Request ( invalid View Address )) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġval Ġinvalid View Address Error Ġ= Ġinvalid View Address Future . get OrThrow () ĊĠĠĠĠĠĠĠ ĠassertTrue ( invalid View Address Error . is Left ()) ĊĠĠĠ Ġ} Ċ }