Skip to content
Snippets Groups Projects
Commit 9aa51880 authored by lunfardo314's avatar lunfardo314
Browse files

- optimized address sorting in NewOutputs

- unit tests cleanup
parent 3c6efa48
Branches
Tags
No related merge requests found
package address
import (
"bytes"
"sort"
)
type sortedAddresses []Address
func (s sortedAddresses) Len() int {
return len(s)
}
func (s sortedAddresses) Less(i, j int) bool {
return bytes.Compare(s[i][:], s[j][:]) < 0
}
func (s sortedAddresses) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
// Sort function sorts the slice of addresses
func Sort(addresses []Address) {
sort.Sort(sortedAddresses(addresses))
}
package transaction package transaction
import ( import (
"bytes"
"github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/marshalutil"
"sort"
"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/address" "github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/address"
"github.com/iotaledger/goshimmer/packages/binary/datastructure/orderedmap" "github.com/iotaledger/goshimmer/packages/binary/datastructure/orderedmap"
...@@ -21,7 +23,10 @@ func NewOutputs(outputs map[address.Address][]*balance.Balance) (result *Outputs ...@@ -21,7 +23,10 @@ func NewOutputs(outputs map[address.Address][]*balance.Balance) (result *Outputs
for a := range outputs { for a := range outputs {
toSort = append(toSort, a) toSort = append(toSort, a)
} }
address.Sort(toSort)
sort.Slice(toSort, func(i, j int) bool {
return bytes.Compare(toSort[i][:], toSort[j][:]) < 0
})
result = &Outputs{orderedmap.New()} result = &Outputs{orderedmap.New()}
for _, addr := range toSort { for _, addr := range toSort {
......
...@@ -2,12 +2,12 @@ package transaction ...@@ -2,12 +2,12 @@ package transaction
import ( import (
"bytes" "bytes"
"github.com/stretchr/testify/assert"
"testing" "testing"
"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/address" "github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/address"
"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/balance" "github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/balance"
"github.com/magiconair/properties/assert"
"golang.org/x/crypto/blake2b" "golang.org/x/crypto/blake2b"
) )
...@@ -29,9 +29,6 @@ func TestOutputs(t *testing.T) { ...@@ -29,9 +29,6 @@ func TestOutputs(t *testing.T) {
} }
out2 := NewOutputs(theMap2) out2 := NewOutputs(theMap2)
//t.Logf("%s", out1.String())
//t.Logf("%s", out2.String())
h1 := hashOutputs(t, out1) h1 := hashOutputs(t, out1)
h2 := hashOutputs(t, out2) h2 := hashOutputs(t, out2)
...@@ -40,7 +37,7 @@ func TestOutputs(t *testing.T) { ...@@ -40,7 +37,7 @@ func TestOutputs(t *testing.T) {
func hashOutputs(t *testing.T, out *Outputs) []byte { func hashOutputs(t *testing.T, out *Outputs) []byte {
h, err := blake2b.New256(nil) h, err := blake2b.New256(nil)
assert.Equal(t, err, nil) assert.NoError(t, err)
h.Write(out.Bytes()) h.Write(out.Bytes())
return h.Sum(nil) return h.Sum(nil)
......
...@@ -38,7 +38,7 @@ func TestShortDataPayload(t *testing.T) { ...@@ -38,7 +38,7 @@ func TestShortDataPayload(t *testing.T) {
dataPayload := []byte("data payload test") dataPayload := []byte("data payload test")
err := tx.SetDataPayload(dataPayload) err := tx.SetDataPayload(dataPayload)
assert.Equal(t, nil, err) assert.NoError(t, err)
dpBack := tx.GetDataPayload() dpBack := tx.GetDataPayload()
assert.Equal(t, true, bytes.Equal(dpBack, dataPayload)) assert.Equal(t, true, bytes.Equal(dpBack, dataPayload))
...@@ -52,7 +52,7 @@ func TestShortDataPayload(t *testing.T) { ...@@ -52,7 +52,7 @@ func TestShortDataPayload(t *testing.T) {
tx.essenceBytes = nil tx.essenceBytes = nil
dataPayload[2] = '?' dataPayload[2] = '?'
err = tx.SetDataPayload(dataPayload) err = tx.SetDataPayload(dataPayload)
assert.Equal(t, nil, err) assert.NoError(t, err)
// expect signature is not valid // expect signature is not valid
check = tx.SignaturesValid() check = tx.SignaturesValid()
...@@ -70,7 +70,7 @@ func TestTooLongDataPayload(t *testing.T) { ...@@ -70,7 +70,7 @@ func TestTooLongDataPayload(t *testing.T) {
dataPayload := []byte(strings.Repeat("1", MaxDataPayloadSize+1)) dataPayload := []byte(strings.Repeat("1", MaxDataPayloadSize+1))
err := tx.SetDataPayload(dataPayload) err := tx.SetDataPayload(dataPayload)
assert.Equal(t, true, err != nil) assert.Error(t, err)
} }
func TestMarshalingEmptyDataPayload(t *testing.T) { func TestMarshalingEmptyDataPayload(t *testing.T) {
...@@ -90,9 +90,8 @@ func TestMarshalingEmptyDataPayload(t *testing.T) { ...@@ -90,9 +90,8 @@ func TestMarshalingEmptyDataPayload(t *testing.T) {
tx1 := Transaction{} tx1 := Transaction{}
_, err := tx1.UnmarshalObjectStorageValue(v) _, err := tx1.UnmarshalObjectStorageValue(v)
if err != nil { assert.NoError(t, err)
assert.Error(t, err)
}
assert.Equal(t, true, tx1.SignaturesValid()) assert.Equal(t, true, tx1.SignaturesValid())
assert.Equal(t, true, bytes.Equal(tx1.ID().Bytes(), tx.ID().Bytes())) assert.Equal(t, true, bytes.Equal(tx1.ID().Bytes(), tx.ID().Bytes()))
} }
...@@ -108,7 +107,7 @@ func TestMarshalingDataPayload(t *testing.T) { ...@@ -108,7 +107,7 @@ func TestMarshalingDataPayload(t *testing.T) {
dataPayload := []byte("data payload test") dataPayload := []byte("data payload test")
err := tx.SetDataPayload(dataPayload) err := tx.SetDataPayload(dataPayload)
assert.Equal(t, nil, err) assert.NoError(t, err)
tx.Sign(sigScheme) tx.Sign(sigScheme)
check := tx.SignaturesValid() check := tx.SignaturesValid()
...@@ -119,7 +118,7 @@ func TestMarshalingDataPayload(t *testing.T) { ...@@ -119,7 +118,7 @@ func TestMarshalingDataPayload(t *testing.T) {
tx1 := Transaction{} tx1 := Transaction{}
_, err = tx1.UnmarshalObjectStorageValue(v) _, err = tx1.UnmarshalObjectStorageValue(v)
assert.Equal(t, nil, err) assert.NoError(t, err)
assert.Equal(t, true, tx1.SignaturesValid()) assert.Equal(t, true, tx1.SignaturesValid())
assert.Equal(t, true, bytes.Equal(tx1.ID().Bytes(), tx.ID().Bytes())) assert.Equal(t, true, bytes.Equal(tx1.ID().Bytes(), tx.ID().Bytes()))
...@@ -136,13 +135,13 @@ func TestPutSignatureValid(t *testing.T) { ...@@ -136,13 +135,13 @@ func TestPutSignatureValid(t *testing.T) {
dataPayload := []byte("data payload test") dataPayload := []byte("data payload test")
err := tx.SetDataPayload(dataPayload) err := tx.SetDataPayload(dataPayload)
assert.Equal(t, nil, err) assert.NoError(t, err)
signature := sigScheme.Sign(tx.EssenceBytes()) signature := sigScheme.Sign(tx.EssenceBytes())
assert.Equal(t, signature.IsValid(tx.EssenceBytes()), true) assert.Equal(t, signature.IsValid(tx.EssenceBytes()), true)
err = tx.PutSignature(signature) err = tx.PutSignature(signature)
assert.Equal(t, nil, err) assert.NoError(t, err)
check := tx.SignaturesValid() check := tx.SignaturesValid()
assert.Equal(t, true, check) assert.Equal(t, true, check)
...@@ -159,7 +158,7 @@ func TestPutSignatureInvalid(t *testing.T) { ...@@ -159,7 +158,7 @@ func TestPutSignatureInvalid(t *testing.T) {
dataPayload := []byte("data payload test") dataPayload := []byte("data payload test")
err := tx.SetDataPayload(dataPayload) err := tx.SetDataPayload(dataPayload)
assert.Equal(t, nil, err) assert.NoError(t, err)
signatureValid := sigScheme.Sign(tx.EssenceBytes()) signatureValid := sigScheme.Sign(tx.EssenceBytes())
assert.Equal(t, true, signatureValid.IsValid(tx.EssenceBytes())) assert.Equal(t, true, signatureValid.IsValid(tx.EssenceBytes()))
...@@ -171,22 +170,21 @@ func TestPutSignatureInvalid(t *testing.T) { ...@@ -171,22 +170,21 @@ func TestPutSignatureInvalid(t *testing.T) {
sigCorrupted, consumed, err := signaturescheme.BLSSignatureFromBytes(sigBytes) sigCorrupted, consumed, err := signaturescheme.BLSSignatureFromBytes(sigBytes)
assert.Equal(t, nil, err) assert.NoError(t, err)
assert.Equal(t, consumed, len(sigBytes)) assert.Equal(t, consumed, len(sigBytes))
assert.Equal(t, false, sigCorrupted.IsValid(tx.EssenceBytes())) assert.Equal(t, false, sigCorrupted.IsValid(tx.EssenceBytes()))
err = tx.PutSignature(sigCorrupted) err = tx.PutSignature(sigCorrupted)
// error expected // error expected
assert.Equal(t, true, err != nil) assert.Error(t, err)
// 0 signatures is not valid // 0 signatures is not valid
assert.Equal(t, true, !tx.SignaturesValid()) assert.Equal(t, true, !tx.SignaturesValid())
err = tx.PutSignature(signatureValid) err = tx.PutSignature(signatureValid)
// no error expected // no error expected
assert.Equal(t, nil, err) assert.NoError(t, err)
// valid signatures expected // valid signatures expected
assert.Equal(t, true, tx.SignaturesValid()) assert.Equal(t, true, tx.SignaturesValid())
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment