aboutsummaryrefslogtreecommitdiff
path: root/types/namespace_pool_test.go
blob: f5810a2910b0849212ffcde8501d97896ef2de52 (plain)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package types

import (
	"bytes"
	"reflect"
	"testing"
)

func TestNewNamespacePool(t *testing.T) {
	ns1 := mustInitNamespaceEd25519V1(t, 0x00)
	ns2 := mustInitNamespaceEd25519V1(t, 0xff)
	nsr := &Namespace{Format: NamespaceFormatReserved}
	for _, table := range []struct {
		description string
		namespaces  []*Namespace
		wantErr     bool
	}{
		{
			description: "invalid: duplicate namespace",
			namespaces:  []*Namespace{ns1, ns1, ns2},
			wantErr:     true,
		},
		{
			description: "invalid: namespace without key",
			namespaces:  []*Namespace{ns1, nsr, ns2},
			wantErr:     true,
		},
		{
			description: "valid: empty",
			namespaces:  []*Namespace{},
		},
		{
			description: "valid: one namespace",
			namespaces:  []*Namespace{ns1},
		},
		{
			description: "valid: two namespaces",
			namespaces:  []*Namespace{ns1, ns2},
		},
	} {
		_, err := NewNamespacePool(table.namespaces)
		if got, want := err != nil, table.wantErr; got != want {
			t.Errorf("got error %v but wanted %v in test %q: %v", got, want, table.description, err)
		}
	}
}

func TestFind(t *testing.T) {
	ns1 := mustInitNamespaceEd25519V1(t, 0x00)
	ns2 := mustInitNamespaceEd25519V1(t, 0xff)

	// Empty pool
	pool, err := NewNamespacePool(nil)
	if err != nil {
		t.Fatalf("must create new namespace pool: %v", err)
	}
	if _, ok := pool.Find(ns1); ok {
		t.Errorf("found namespace in empty pool")
	}

	// Pool with one namespace
	pool, err = NewNamespacePool([]*Namespace{ns1})
	if err != nil {
		t.Fatalf("must create new namespace pool: %v", err)
	}
	if ns, ok := pool.Find(ns1); !ok {
		t.Errorf("could not find namespace that is a member of the pool")
	} else if !reflect.DeepEqual(ns, ns1) {
		t.Errorf("found namespace but it is wrong")
	}
	if _, ok := pool.Find(ns2); ok {
		t.Errorf("found namespace although it is not a member of the pool")
	}
}

func TestList(t *testing.T) {
	ns1 := mustInitNamespaceEd25519V1(t, 0x00)
	ns2 := mustInitNamespaceEd25519V1(t, 0xff)
	namespaces := []*Namespace{ns1, ns2}
	pool, err := NewNamespacePool(namespaces)
	if err != nil {
		t.Fatalf("must create new namespace pool: %v", err)
	}
	if got, want := len(pool.List()), len(namespaces); got != want {
		t.Errorf("got len %v but wanted %v", got, want)
	}
	pool.List()[0] = ns2
	if got, want := pool.List()[0].Ed25519V1.Namespace[:], ns1.Ed25519V1.Namespace[:]; !bytes.Equal(got, want) {
		t.Errorf("returned list is not a copy")
	}
}