topic_test.go 4.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
// Copyright 2016 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.

package whisperv5

import "testing"

var topicStringTests = []struct {
	topic TopicType
	str   string
}{
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, str: "0x00000000"},
	{topic: TopicType{0x00, 0x7f, 0x80, 0xff}, str: "0x007f80ff"},
	{topic: TopicType{0xff, 0x80, 0x7f, 0x00}, str: "0xff807f00"},
	{topic: TopicType{0xf2, 0x6e, 0x77, 0x79}, str: "0xf26e7779"},
}

31
func TestTopicString(t *testing.T) {
32 33 34
	for i, tst := range topicStringTests {
		s := tst.topic.String()
		if s != tst.str {
35
			t.Fatalf("failed test %d: have %s, want %s.", i, s, tst.str)
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
		}
	}
}

var bytesToTopicTests = []struct {
	data  []byte
	topic TopicType
}{
	{topic: TopicType{0x8f, 0x9a, 0x2b, 0x7d}, data: []byte{0x8f, 0x9a, 0x2b, 0x7d}},
	{topic: TopicType{0x00, 0x7f, 0x80, 0xff}, data: []byte{0x00, 0x7f, 0x80, 0xff}},
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte{0x00, 0x00, 0x00, 0x00}},
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte{0x00, 0x00, 0x00}},
	{topic: TopicType{0x01, 0x00, 0x00, 0x00}, data: []byte{0x01}},
	{topic: TopicType{0x00, 0xfe, 0x00, 0x00}, data: []byte{0x00, 0xfe}},
	{topic: TopicType{0xea, 0x1d, 0x43, 0x00}, data: []byte{0xea, 0x1d, 0x43}},
	{topic: TopicType{0x6f, 0x3c, 0xb0, 0xdd}, data: []byte{0x6f, 0x3c, 0xb0, 0xdd, 0x0f, 0x00, 0x90}},
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte{}},
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: nil},
}

56
func TestBytesToTopic(t *testing.T) {
57
	for i, tst := range bytesToTopicTests {
58 59 60
		top := BytesToTopic(tst.data)
		if top != tst.topic {
			t.Fatalf("failed test %d: have %v, want %v.", i, t, tst.topic)
61 62 63 64 65 66 67 68
		}
	}
}

var unmarshalTestsGood = []struct {
	topic TopicType
	data  []byte
}{
69 70 71 72
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0x00000000"`)},
	{topic: TopicType{0x00, 0x7f, 0x80, 0xff}, data: []byte(`"0x007f80ff"`)},
	{topic: TopicType{0xff, 0x80, 0x7f, 0x00}, data: []byte(`"0xff807f00"`)},
	{topic: TopicType{0xf2, 0x6e, 0x77, 0x79}, data: []byte(`"0xf26e7779"`)},
73 74 75 76 77 78
}

var unmarshalTestsBad = []struct {
	topic TopicType
	data  []byte
}{
79 80 81 82 83 84 85 86 87
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0x000000"`)},
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0x0000000"`)},
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0x000000000"`)},
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0x0000000000"`)},
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"000000"`)},
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0000000"`)},
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"000000000"`)},
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0000000000"`)},
	{topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"abcdefg0"`)},
88 89 90 91 92 93
}

var unmarshalTestsUgly = []struct {
	topic TopicType
	data  []byte
}{
94
	{topic: TopicType{0x01, 0x00, 0x00, 0x00}, data: []byte(`"0x00000001"`)},
95 96
}

97
func TestUnmarshalTestsGood(t *testing.T) {
98
	for i, tst := range unmarshalTestsGood {
99 100
		var top TopicType
		err := top.UnmarshalJSON(tst.data)
101
		if err != nil {
102
			t.Fatalf("failed test %d. input: %v. err: %v", i, tst.data, err)
103 104
		} else if top != tst.topic {
			t.Fatalf("failed test %d: have %v, want %v.", i, t, tst.topic)
105 106 107 108
		}
	}
}

109
func TestUnmarshalTestsBad(t *testing.T) {
110 111
	// in this test UnmarshalJSON() is supposed to fail
	for i, tst := range unmarshalTestsBad {
112 113
		var top TopicType
		err := top.UnmarshalJSON(tst.data)
114
		if err == nil {
115
			t.Fatalf("failed test %d. input: %v.", i, tst.data)
116 117 118 119
		}
	}
}

120
func TestUnmarshalTestsUgly(t *testing.T) {
121 122
	// in this test UnmarshalJSON() is NOT supposed to fail, but result should be wrong
	for i, tst := range unmarshalTestsUgly {
123 124
		var top TopicType
		err := top.UnmarshalJSON(tst.data)
125
		if err != nil {
126 127 128
			t.Fatalf("failed test %d. input: %v.", i, tst.data)
		} else if top == tst.topic {
			t.Fatalf("failed test %d: have %v, want %v.", i, top, tst.topic)
129 130 131
		}
	}
}