Skip to content

Commit

Permalink
Fix balance inconsistency
Browse files Browse the repository at this point in the history
Sending the total promised value instead of a diff caused a behaviour where balance would be shown incorrectly.

Sending the diff fixes this.

Closes #1558
  • Loading branch information
vkuznecovas committed Jan 28, 2020
1 parent 8fece4c commit c168168
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 3 deletions.
2 changes: 1 addition & 1 deletion session/pingpong/exchange_message_tracker.go
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ func (emt *ExchangeMessageTracker) issueExchangeMessage(invoice crypto.Invoice)

defer emt.deps.Publisher.Publish(ExchangeMessageTopic, ExchangeMessageEventPayload{
Identity: emt.deps.Identity,
AmountPromised: amountToPromise,
AmountPromised: diff,
})

// TODO: we'd probably want to check if we have enough balance here
Expand Down
47 changes: 47 additions & 0 deletions session/pingpong/exchange_message_tracker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -580,6 +580,53 @@ func TestExchangeMessageTracker_calculateAmountToPromise(t *testing.T) {
}
}

func TestExchangeMessageTracker_issueExchangeMessage_publishesEvents(t *testing.T) {
dir, err := ioutil.TempDir("", "TestExchangeMessageTracker_issueExchangeMessage_test")
assert.Nil(t, err)
defer os.RemoveAll(dir)

ks := keystore.NewKeyStore(dir, keystore.LightScryptN, keystore.LightScryptP)
acc, err := ks.NewAccount("")
assert.Nil(t, err)

err = ks.Unlock(acc, "")
assert.Nil(t, err)

peerID := identity.FromAddress("0x01")

mp := &mockPublisher{
publicationChan: make(chan event, 10),
}
emt := &ExchangeMessageTracker{
deps: ExchangeMessageTrackerDeps{
PeerExchangeMessageSender: &MockPeerExchangeMessageSender{
chanToWriteTo: make(chan crypto.ExchangeMessage, 10),
},
ConsumerTotalsStorage: &mockConsumerTotalsStorage{},
Peer: peerID,
ConsumerInvoiceStorage: &mockConsumerInvoiceStorage{
res: crypto.Invoice{
AgreementTotal: 10,
},
},
Ks: ks,
Identity: identity.FromAddress(acc.Address.Hex()),
Publisher: mp,
},
}
err = emt.issueExchangeMessage(crypto.Invoice{
AgreementTotal: 15,
Hashlock: "0x441Da57A51e42DAB7Daf55909Af93A9b00eEF23C",
})
assert.NoError(t, err)
ev := <-mp.publicationChan
assert.Equal(t, ExchangeMessageTopic, ev.name)
assert.EqualValues(t, ExchangeMessageEventPayload{
Identity: emt.deps.Identity,
AmountPromised: 5,
}, ev.value)
}

func TestExchangeMessageTracker_issueExchangeMessage(t *testing.T) {
dir, err := ioutil.TempDir("", "TestExchangeMessageTracker_issueExchangeMessage_test")
assert.Nil(t, err)
Expand Down
18 changes: 16 additions & 2 deletions session/pingpong/invoice_tracker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -654,6 +654,20 @@ func (mbh *mockBlockchainHelper) IsRegistered(registryAddress, addressToCheck co
return mbh.isRegistered, mbh.isRegisteredError
}

type mockPublisher struct{}
type event struct {
name string
value interface{}
}

type mockPublisher struct {
publicationChan chan event
}

func (mp *mockPublisher) Publish(_ string, _ interface{}) {}
func (mp *mockPublisher) Publish(topic string, payload interface{}) {
if mp.publicationChan != nil {
mp.publicationChan <- event{
name: topic,
value: payload,
}
}
}

0 comments on commit c168168

Please sign in to comment.