Svarog 05941a76e7
Make DomainHash and TransactionID read-only structs (#1282)
* Increase size of reachability cache

* Change DomainHash to struct with unexported hashArray

* Fixing compilation errors stemming from new DomainHash structure

* Remove obsolete Read/WriteElement methods in appmessage

* Fix all tests

* Fix all tests

* Add comments

* A few renamings

* go mod tidy
2020-12-24 16:15:23 +02:00

242 lines
6.3 KiB
Go

package externalapi
import (
"reflect"
"testing"
)
func TestDomainBlockHeader_Equal(t *testing.T) {
type headerToCompare struct {
header *DomainBlockHeader
expectedResult bool
}
tests := []struct {
baseHeader *DomainBlockHeader
headersToCompareTo []headerToCompare
}{
{
baseHeader: nil,
headersToCompareTo: []headerToCompare{
{
header: nil,
expectedResult: true,
},
{
header: &DomainBlockHeader{
0,
[]*DomainHash{NewDomainHashFromByteArray(&[DomainHashSize]byte{0})},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{1}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{2}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{3}),
4,
5,
6,
},
expectedResult: false,
},
},
},
{
baseHeader: &DomainBlockHeader{
0,
[]*DomainHash{NewDomainHashFromByteArray(&[DomainHashSize]byte{1})},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{2}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{3}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{4}),
5,
6,
7,
},
headersToCompareTo: []headerToCompare{
{
header: nil,
expectedResult: false,
},
{
header: &DomainBlockHeader{
0,
[]*DomainHash{NewDomainHashFromByteArray(&[DomainHashSize]byte{1})},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{2}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{3}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{4}),
5,
6,
7,
},
expectedResult: true,
},
{
header: &DomainBlockHeader{
100,
[]*DomainHash{NewDomainHashFromByteArray(&[DomainHashSize]byte{1})},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{2}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{3}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{4}),
5,
6,
7,
},
expectedResult: false,
},
{
header: &DomainBlockHeader{
0,
// []*DomainHash{{1}, {2}},
[]*DomainHash{
NewDomainHashFromByteArray(&[DomainHashSize]byte{1}),
NewDomainHashFromByteArray(&[DomainHashSize]byte{2})},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{2}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{3}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{4}),
5,
6,
7,
},
expectedResult: false,
},
{
header: &DomainBlockHeader{
0,
[]*DomainHash{NewDomainHashFromByteArray(&[DomainHashSize]byte{100})},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{2}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{3}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{4}),
5,
6,
7,
},
expectedResult: false,
},
{
header: &DomainBlockHeader{
0,
[]*DomainHash{NewDomainHashFromByteArray(&[DomainHashSize]byte{1})},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{100}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{3}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{4}),
5,
6,
7,
},
expectedResult: false,
},
{
header: &DomainBlockHeader{
0,
[]*DomainHash{NewDomainHashFromByteArray(&[DomainHashSize]byte{1})},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{2}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{100}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{4}),
5,
6,
7,
},
expectedResult: false,
},
{
header: &DomainBlockHeader{
0,
[]*DomainHash{NewDomainHashFromByteArray(&[DomainHashSize]byte{1})},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{2}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{3}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{100}),
5,
6,
7,
},
expectedResult: false,
},
{
header: &DomainBlockHeader{
0,
[]*DomainHash{NewDomainHashFromByteArray(&[DomainHashSize]byte{1})},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{2}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{3}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{4}),
100,
6,
7,
},
expectedResult: false,
},
{
header: &DomainBlockHeader{
0,
[]*DomainHash{NewDomainHashFromByteArray(&[DomainHashSize]byte{1})},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{2}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{3}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{4}),
5,
100,
7,
},
expectedResult: false,
},
{
header: &DomainBlockHeader{
0,
[]*DomainHash{NewDomainHashFromByteArray(&[DomainHashSize]byte{1})},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{2}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{3}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{4}),
5,
6,
100,
},
expectedResult: false,
},
},
},
}
for i, test := range tests {
for j, subTest := range test.headersToCompareTo {
result1 := test.baseHeader.Equal(subTest.header)
if result1 != subTest.expectedResult {
t.Fatalf("Test #%d:%d: Expected %t but got %t", i, j, subTest.expectedResult, result1)
}
result2 := subTest.header.Equal(test.baseHeader)
if result2 != subTest.expectedResult {
t.Fatalf("Test #%d:%d: Expected %t but got %t", i, j, subTest.expectedResult, result2)
}
}
}
}
func TestDomainBlockHeader_Clone(t *testing.T) {
headers := []*DomainBlockHeader{
{
0,
[]*DomainHash{NewDomainHashFromByteArray(&[DomainHashSize]byte{0})},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{1}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{2}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{3}),
4,
5,
6,
},
{
0,
[]*DomainHash{},
*NewDomainHashFromByteArray(&[DomainHashSize]byte{1}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{2}),
*NewDomainHashFromByteArray(&[DomainHashSize]byte{3}),
4,
5,
6,
},
}
for i, header := range headers {
clone := header.Clone()
if !clone.Equal(header) {
t.Fatalf("Test #%d: clone should be equal to the original", i)
}
if !reflect.DeepEqual(header, clone) {
t.Fatalf("Test #%d: clone should be equal to the original", i)
}
}
}