-
Notifications
You must be signed in to change notification settings - Fork 141
/
sequence_id_test.go
126 lines (105 loc) · 3.52 KB
/
sequence_id_test.go
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package db
import (
"encoding/json"
"testing"
"github.com/couchbaselabs/go.assert"
)
func TestParseSequenceID(t *testing.T) {
s, err := ParseSequenceID("1234")
assertNoError(t, err, "ParseSequenceID")
assert.Equals(t, s, SequenceID{Seq: 1234})
s, err = ParseSequenceID("5678:1234")
assertNoError(t, err, "ParseSequenceID")
assert.Equals(t, s, SequenceID{Seq: 1234, TriggeredBy: 5678})
s, err = ParseSequenceID("")
assertNoError(t, err, "ParseSequenceID")
assert.Equals(t, s, SequenceID{Seq: 0, TriggeredBy: 0})
s, err = ParseSequenceID("123:456:789")
assertNoError(t, err, "ParseSequenceID")
assert.Equals(t, s, SequenceID{Seq: 789, TriggeredBy: 456, LowSeq: 123})
s, err = ParseSequenceID("123::789")
assertNoError(t, err, "ParseSequenceID")
assert.Equals(t, s, SequenceID{Seq: 789, TriggeredBy: 0, LowSeq: 123})
s, err = ParseSequenceID("foo")
assert.True(t, err != nil)
s, err = ParseSequenceID(":")
assert.True(t, err != nil)
s, err = ParseSequenceID(":1")
assert.True(t, err != nil)
s, err = ParseSequenceID("::1")
assert.True(t, err != nil)
s, err = ParseSequenceID("10:11:12:13")
assert.True(t, err != nil)
s, err = ParseSequenceID("123:ggg")
assert.True(t, err != nil)
}
func TestMarshalSequenceID(t *testing.T) {
s := SequenceID{Seq: 1234}
assert.Equals(t, s.String(), "1234")
asJson, err := json.Marshal(s)
assertNoError(t, err, "Marshal failed")
assert.Equals(t, string(asJson), "1234")
var s2 SequenceID
err = json.Unmarshal(asJson, &s2)
assertNoError(t, err, "Unmarshal failed")
assert.Equals(t, s2, s)
}
func TestSequenceIDUnmarshalJSON(t *testing.T) {
str := "123"
s := SequenceID{}
err := s.UnmarshalJSON([]byte(str))
assertNoError(t, err, "UnmarshalJSON failed")
assert.Equals(t, s, SequenceID{Seq: 123})
str = "456:123"
s = SequenceID{}
err = s.UnmarshalJSON([]byte(str))
assertNoError(t, err, "UnmarshalJSON failed")
assert.Equals(t, s, SequenceID{TriggeredBy: 456, Seq: 123})
str = "220::222"
s = SequenceID{}
err = s.UnmarshalJSON([]byte(str))
assertNoError(t, err, "UnmarshalJSON failed")
assert.Equals(t, s, SequenceID{ LowSeq: 220, TriggeredBy: 0, Seq: 222})
str = "\"234\""
s = SequenceID{}
err = s.UnmarshalJSON([]byte(str))
assertNoError(t, err, "UnmarshalJSON failed")
assert.Equals(t, s, SequenceID{Seq: 234})
str = "\"567:234\""
s = SequenceID{}
err = s.UnmarshalJSON([]byte(str))
assertNoError(t, err, "UnmarshalJSON failed")
assert.Equals(t, s, SequenceID{TriggeredBy: 567, Seq: 234})
str = "\"220::222\""
s = SequenceID{}
err = s.UnmarshalJSON([]byte(str))
assertNoError(t, err, "UnmarshalJSON failed")
assert.Equals(t, s, SequenceID{ LowSeq: 220, TriggeredBy: 0, Seq: 222})
}
func TestMarshalTriggeredSequenceID(t *testing.T) {
s := SequenceID{TriggeredBy: 5678, Seq: 1234}
assert.Equals(t, s.String(), "5678:1234")
asJson, err := json.Marshal(s)
assertNoError(t, err, "Marshal failed")
assert.Equals(t, string(asJson), "\"5678:1234\"")
var s2 SequenceID
err = json.Unmarshal(asJson, &s2)
assertNoError(t, err, "Unmarshal failed")
assert.Equals(t, s2, s)
}
func TestCompareSequenceIDs(t *testing.T) {
orderedSeqs := []SequenceID{
SequenceID{Seq: 1234},
SequenceID{Seq: 5677},
SequenceID{TriggeredBy: 5678, Seq: 1234},
SequenceID{TriggeredBy: 5678, Seq: 2222},
SequenceID{Seq: 5678}, // 5678 comes after the sequences it triggered
SequenceID{TriggeredBy: 6666, Seq: 5678},
SequenceID{Seq: 6666},
}
for i := 0; i < len(orderedSeqs); i++ {
for j := 0; j < len(orderedSeqs); j++ {
assert.Equals(t, orderedSeqs[i].Before(orderedSeqs[j]), i < j)
}
}
}