Browse code

Test cases for network ID allocator interface

Ravi Sankar Penta authored on 2016/08/09 06:35:28
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,86 @@
0
+package netid
1
+
2
+import (
3
+	"strconv"
4
+	"testing"
5
+
6
+	"k8s.io/kubernetes/pkg/util/sets"
7
+)
8
+
9
+func TestAllocate(t *testing.T) {
10
+	nr, err := NewNetIDRange(201, 300)
11
+	if err != nil {
12
+		t.Fatal(err)
13
+	}
14
+	r := NewInMemory(nr)
15
+	if f := r.Free(); f != 100 {
16
+		t.Errorf("unexpected free %d", f)
17
+	}
18
+
19
+	// Test AllocateNext()
20
+	found := sets.NewString()
21
+	count := 0
22
+	for r.Free() > 0 {
23
+		netid, err := r.AllocateNext()
24
+		if err != nil {
25
+			t.Fatalf("error @ %d: %v", count, err)
26
+		}
27
+		count++
28
+		if ok, _ := nr.Contains(netid); !ok {
29
+			t.Fatalf("allocated %d which is outside of %v", netid, nr)
30
+		}
31
+		netidString := strconv.Itoa(int(netid))
32
+		if found.Has(netidString) {
33
+			t.Fatalf("allocated %d twice @ %d", netid, count)
34
+		}
35
+		found.Insert(netidString)
36
+	}
37
+	if count != 100 {
38
+		t.Fatal("failed to allocate all netids in the given range")
39
+	}
40
+	if _, err := r.AllocateNext(); err != ErrFull {
41
+		t.Fatal(err)
42
+	}
43
+
44
+	// Test Release()
45
+	released := uint32(210)
46
+	if err := r.Release(released); err != nil {
47
+		t.Fatal(err)
48
+	}
49
+	if f := r.Free(); f != 1 {
50
+		t.Errorf("unexpected free %d", f)
51
+	}
52
+	netid, err := r.AllocateNext()
53
+	if err != nil {
54
+		t.Fatal(err)
55
+	}
56
+	if released != netid {
57
+		t.Errorf("unexpected %d : %d", netid, released)
58
+	}
59
+
60
+	// Test Allocate()
61
+	if err := r.Release(released); err != nil {
62
+		t.Fatal(err)
63
+	}
64
+	if err := r.Allocate(1); err != ErrNotInRange {
65
+		t.Fatal(err)
66
+	}
67
+	if err := r.Allocate(201); err != ErrAllocated {
68
+		t.Fatal(err)
69
+	}
70
+	if err := r.Allocate(301); err != ErrNotInRange {
71
+		t.Fatal(err)
72
+	}
73
+	if err := r.Allocate(500); err != ErrNotInRange {
74
+		t.Fatal(err)
75
+	}
76
+	if f := r.Free(); f != 1 {
77
+		t.Errorf("unexpected free %d", f)
78
+	}
79
+	if err := r.Allocate(released); err != nil {
80
+		t.Fatal(err)
81
+	}
82
+	if f := r.Free(); f != 0 {
83
+		t.Errorf("unexpected free %d", f)
84
+	}
85
+}