173 lines
8.2 KiB
Go
173 lines
8.2 KiB
Go
package main
|
|
|
|
import (
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
)
|
|
|
|
func Test_ChannelSetup(t *testing.T) {
|
|
_, channelToken, merchState, custState, err := setup(1000, 100)
|
|
assert.Nil(t, err)
|
|
|
|
assert.NotEqual(t, MerchState{}, merchState)
|
|
assert.NotEqual(t, CustState{}, custState)
|
|
assert.NotEqual(t, ChannelToken{}, channelToken)
|
|
}
|
|
|
|
func setup(b0Cust int, b0Merch int) (ChannelState, ChannelToken, MerchState, CustState, error) {
|
|
channelState, err := BidirectionalChannelSetup("Test Channel", false)
|
|
if err != nil {
|
|
return ChannelState{}, ChannelToken{}, MerchState{}, CustState{}, err
|
|
}
|
|
channelToken, merchState, channelState, err := BidirectionalInitMerchant(channelState, "Bob")
|
|
if err != nil {
|
|
return ChannelState{}, ChannelToken{}, MerchState{}, CustState{}, err
|
|
}
|
|
channelToken, custState, err := BidirectionalInitCustomer(channelToken, b0Cust, b0Merch, "Alice")
|
|
return channelState, channelToken, merchState, custState, err
|
|
}
|
|
|
|
func Test_Establish(t *testing.T) {
|
|
b0Cust := 1000
|
|
b0Merch := 100
|
|
channelState, channelToken, merchState, custState, err := setup(b0Cust, b0Merch)
|
|
assert.Nil(t, err)
|
|
|
|
channelToken, custState, com, comProof, err := BidirectionalEstablishCustomerGenerateProof(channelToken, custState)
|
|
assert.Nil(t, err)
|
|
|
|
closeToken, err := BidirectionalEstablishMerchantIssueCloseToken(channelState, com, comProof, custState.Wallet.ChannelId, b0Cust, b0Merch, merchState)
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, closeToken)
|
|
|
|
isTokenValid, channelState, custState, err := BidirectionalVerifyCloseToken(channelState, custState, closeToken)
|
|
assert.Nil(t, err)
|
|
assert.True(t, isTokenValid)
|
|
|
|
payToken, err := BidirectionalEstablishMerchantIssuePayToken(channelState, com, merchState)
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, payToken)
|
|
|
|
isChannelEstablished, channelState, custState, err := BidirectionalEstablishCustomerFinal(channelState, custState, payToken)
|
|
assert.Nil(t, err)
|
|
|
|
assert.True(t, isChannelEstablished)
|
|
}
|
|
|
|
func Test_Pay(t *testing.T) {
|
|
b0Cust := 1000
|
|
b0Merch := 100
|
|
channelState, channelToken, merchState, custState, err := setup(b0Cust, b0Merch)
|
|
assert.Nil(t, err)
|
|
channelToken, custState, com, comProof, err := BidirectionalEstablishCustomerGenerateProof(channelToken, custState)
|
|
assert.Nil(t, err)
|
|
closeToken, err := BidirectionalEstablishMerchantIssueCloseToken(channelState, com, comProof, custState.Wallet.ChannelId, b0Cust, b0Merch, merchState)
|
|
assert.Nil(t, err)
|
|
_, channelState, custState, err = BidirectionalVerifyCloseToken(channelState, custState, closeToken)
|
|
assert.Nil(t, err)
|
|
payToken, err := BidirectionalEstablishMerchantIssuePayToken(channelState, com, merchState)
|
|
assert.Nil(t, err)
|
|
_, channelState, custState, err = BidirectionalEstablishCustomerFinal(channelState, custState, payToken)
|
|
assert.Nil(t, err)
|
|
|
|
payment, newCustState, err := BidirectionalPayGeneratePaymentProof(channelState, custState, 10)
|
|
assert.Nil(t, err)
|
|
closeToken, merchState, err = BidirectionalPayVerifyPaymentProof(channelState, payment, merchState)
|
|
assert.Nil(t, err)
|
|
revokeToken, custState, err := BidirectionalPayGenerateRevokeToken(channelState, custState, newCustState, closeToken)
|
|
assert.Nil(t, err)
|
|
payToken, merchState, err = BidirectionalPayVerifyRevokeToken(revokeToken, merchState)
|
|
assert.Nil(t, err)
|
|
custState, isTokenValid, err := BidirectionalPayVerifyPaymentToken(channelState, custState, payToken)
|
|
assert.Nil(t, err)
|
|
assert.True(t, isTokenValid)
|
|
}
|
|
|
|
func Test_IntermediaryPay(t *testing.T) {
|
|
b0Alice := 1000
|
|
b0Bob := 100
|
|
b0Intermediary := 100
|
|
channelState, err := BidirectionalChannelSetup("Test Channel", false)
|
|
assert.Nil(t, err)
|
|
channelToken, merchState, channelState, err := BidirectionalInitMerchant(channelState, "Hub")
|
|
assert.Nil(t, err)
|
|
channelToken, custStateAlice, err := BidirectionalInitCustomer(channelToken, b0Alice, b0Intermediary, "Alice")
|
|
assert.Nil(t, err)
|
|
channelToken, custStateAlice, com, comProof, err := BidirectionalEstablishCustomerGenerateProof(channelToken, custStateAlice)
|
|
assert.Nil(t, err)
|
|
closeToken, err := BidirectionalEstablishMerchantIssueCloseToken(channelState, com, comProof, custStateAlice.Wallet.ChannelId, b0Alice, b0Intermediary, merchState)
|
|
assert.Nil(t, err)
|
|
_, channelState, custStateAlice, err = BidirectionalVerifyCloseToken(channelState, custStateAlice, closeToken)
|
|
assert.Nil(t, err)
|
|
payToken, err := BidirectionalEstablishMerchantIssuePayToken(channelState, com, merchState)
|
|
assert.Nil(t, err)
|
|
_, channelState, custStateAlice, err = BidirectionalEstablishCustomerFinal(channelState, custStateAlice, payToken)
|
|
assert.Nil(t, err)
|
|
channelToken, custStateBob, err := BidirectionalInitCustomer(channelToken, b0Bob, b0Intermediary, "Bob")
|
|
assert.Nil(t, err)
|
|
channelToken, custStateBob, com, comProof, err = BidirectionalEstablishCustomerGenerateProof(channelToken, custStateBob)
|
|
assert.Nil(t, err)
|
|
closeToken, err = BidirectionalEstablishMerchantIssueCloseToken(channelState, com, comProof, custStateBob.Wallet.ChannelId, b0Bob, b0Intermediary, merchState)
|
|
assert.Nil(t, err)
|
|
_, channelState, custStateBob, err = BidirectionalVerifyCloseToken(channelState, custStateBob, closeToken)
|
|
assert.Nil(t, err)
|
|
payToken, err = BidirectionalEstablishMerchantIssuePayToken(channelState, com, merchState)
|
|
assert.Nil(t, err)
|
|
_, channelState, custStateBob, err = BidirectionalEstablishCustomerFinal(channelState, custStateBob, payToken)
|
|
assert.Nil(t, err)
|
|
|
|
paymentA, newCustStateAlice, err := BidirectionalPayGeneratePaymentProof(channelState, custStateAlice, 10)
|
|
assert.Nil(t, err)
|
|
paymentB, newCustStateBob, err := BidirectionalPayGeneratePaymentProof(channelState, custStateBob, -10)
|
|
assert.Nil(t, err)
|
|
closeTokenA, closeTokenB, merchState, err := BidirectionalPayVerifyMultiplePaymentProofs(channelState, paymentA, paymentB, merchState)
|
|
assert.Nil(t, err)
|
|
revokeTokenA, custStateAlice, err := BidirectionalPayGenerateRevokeToken(channelState, custStateAlice, newCustStateAlice, closeTokenA)
|
|
assert.Nil(t, err)
|
|
revokeTokenB, custStateBob, err := BidirectionalPayGenerateRevokeToken(channelState, custStateBob, newCustStateBob, closeTokenB)
|
|
assert.Nil(t, err)
|
|
payTokenA, payTokenB, merchState, err := BidirectionalPayVerifyMultipleRevokeTokens(revokeTokenA, revokeTokenB, merchState)
|
|
assert.Nil(t, err)
|
|
custStateAlice, isTokenValid, err := BidirectionalPayVerifyPaymentToken(channelState, custStateAlice, payTokenA)
|
|
assert.Nil(t, err)
|
|
assert.True(t, isTokenValid)
|
|
custStateBob, isTokenValid, err = BidirectionalPayVerifyPaymentToken(channelState, custStateBob, payTokenB)
|
|
assert.Nil(t, err)
|
|
assert.True(t, isTokenValid)
|
|
}
|
|
|
|
func Test_Close(t *testing.T) {
|
|
b0Cust := 1000
|
|
b0Merch := 100
|
|
channelState, channelToken, merchState, custState, err := setup(b0Cust, b0Merch)
|
|
assert.Nil(t, err)
|
|
channelToken, custState, com, comProof, err := BidirectionalEstablishCustomerGenerateProof(channelToken, custState)
|
|
assert.Nil(t, err)
|
|
closeToken, err := BidirectionalEstablishMerchantIssueCloseToken(channelState, com, comProof, custState.Wallet.ChannelId, b0Cust, b0Merch, merchState)
|
|
assert.Nil(t, err)
|
|
_, channelState, custState, err = BidirectionalVerifyCloseToken(channelState, custState, closeToken)
|
|
assert.Nil(t, err)
|
|
payToken, err := BidirectionalEstablishMerchantIssuePayToken(channelState, com, merchState)
|
|
assert.Nil(t, err)
|
|
_, channelState, custState, err = BidirectionalEstablishCustomerFinal(channelState, custState, payToken)
|
|
assert.Nil(t, err)
|
|
|
|
payment, newCustState, err := BidirectionalPayGeneratePaymentProof(channelState, custState, 10)
|
|
assert.Nil(t, err)
|
|
closeToken, merchState, err = BidirectionalPayVerifyPaymentProof(channelState, payment, merchState)
|
|
assert.Nil(t, err)
|
|
revokeToken, custState, err := BidirectionalPayGenerateRevokeToken(channelState, custState, newCustState, closeToken)
|
|
assert.Nil(t, err)
|
|
payToken, merchState, err = BidirectionalPayVerifyRevokeToken(revokeToken, merchState)
|
|
assert.Nil(t, err)
|
|
custState, _, err = BidirectionalPayVerifyPaymentToken(channelState, custState, payToken)
|
|
assert.Nil(t, err)
|
|
|
|
custClose, err := BidirectionalCustomerClose(channelState, custState)
|
|
assert.Nil(t, err)
|
|
_, _, Err, err := BidirectionalMerchantClose(channelState, channelToken, "onChainAddress", custClose, merchState)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "merchant_close - Could not find entry for wpk & revoke token pair. Valid close!", Err)
|
|
}
|
|
|