-
Notifications
You must be signed in to change notification settings - Fork 1
/
journal_test.go
118 lines (94 loc) · 3.12 KB
/
journal_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
package gtmcdc
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func Test_Horolog2UnixTime(t *testing.T) {
// run the following command in GT.M to check day values
// write $$CDS^%H(day)
// 1971/1/1 is 47117 days after 1840/12/31
// any day that results in a date prior to 1971/1/1 in the
// local timezone will return an error because
// the timestamp value will be negative
// Unix system cannot handle this sort of thing
ts, err := Horolog2Timestamp("47117")
assert.Nil(t, err)
assert.Equal(t, int64(0), ts)
// this is a special case. GTM V6.3 sends this
_, err = Horolog2Timestamp("0,0")
assert.Nil(t, err)
assert.Equal(t, int64(0), ts)
expected, _ := time.Parse("2006-01-02 15:04:05", "2019-09-26 16:35:00")
ts, err = Horolog2Timestamp("65282,59700")
assert.Nil(t, err)
assert.Equal(t, expected.Unix(), ts)
expected, _ = time.Parse("2006-01-02 15:04:05", "2019-10-04 00:24:45")
ts, err = Horolog2Timestamp("65290,1485")
assert.Nil(t, err)
assert.Equal(t, expected.Unix(), ts)
_, err = Horolog2Timestamp("29800130,1234")
assert.NotNil(t, err)
}
func Test_Parse_JournalRecord_1(t *testing.T) {
rec, _ := Parse(`05\65282,59700\28\0\0\28\0\0\0\0\^acc("00027")="300.00"`)
// fmt.Println(rec)
assert.Equal(t, "SET", rec.opcode)
assert.Equal(t, "300.00", rec.detail.value)
// record is too short
_, err := Parse(`05\65282,59700\28`)
assert.NotNil(t, err)
}
func Test_Parse_JournalRecord_2(t *testing.T) {
rec, _ := Parse(`08\65287,62154\3\0\0\3\0\0`)
assert.Equal(t, "TSTART", rec.opcode)
rec, _ = Parse(`09\65287,58606\8\0\0\8\0\0\1\`)
assert.Equal(t, "TCOM", rec.opcode)
assert.Equal(t, 8, rec.tran.tokenSeq)
assert.Equal(t, "", rec.tran.tag)
assert.Equal(t, "1", rec.tran.partners)
}
func Test_JournalRecord_Json(t *testing.T) {
expected := `{"operand":"SET","transaction_num":"28",` +
`"token_seq":28,"update_num":0,"stream_num":0,"stream_seq":0,` +
`"journal_seq":0,"global":"ACN","key":"1234","subscripts":["51"],` +
`"node_values":["300.00","61212","1","","","",""],` +
`"time_stamp":1569515700}`
rec, err := Parse(`05\65282,59700\28\0\0\28\0\0\0\0\^ACN(1234,51)="300.00|61212|1||||"`)
assert.Nil(t, err)
jayson, err := rec.JSON()
assert.Nil(t, err)
assert.Equal(t, expected, jayson)
}
func Test_atli(t *testing.T) {
i := atoi("100")
assert.Equal(t, 100, i)
i = atoi("xx")
assert.Equal(t, 0, i)
}
func Test_parseNodeFlags(t *testing.T) {
r, err := parseNodeFlags("^ACN(5877000047,51)")
assert.Nil(t, err)
assert.Equal(t, 3, len(r))
assert.Equal(t, "ACN", r[0])
assert.Equal(t, "5877000047", r[1])
assert.Equal(t, "51", r[2])
r, err = parseNodeFlags("^ACN(5877000047)")
assert.Nil(t, err)
assert.Equal(t, 2, len(r))
assert.Equal(t, "ACN", r[0])
assert.Equal(t, "5877000047", r[1])
r, err = parseNodeFlags("^acn(5877000047,51,1245)")
assert.Nil(t, err)
assert.Equal(t, 4, len(r))
assert.Equal(t, "ACN", r[0])
assert.Equal(t, "5877000047", r[1])
assert.Equal(t, "51", r[2])
assert.Equal(t, "1245", r[3])
_, err = parseNodeFlags("^ACN()")
assert.NotNil(t, err)
_, err = parseNodeFlags("garbage")
assert.NotNil(t, err)
_, err = parseNodeFlags("")
assert.NotNil(t, err)
}