-
Notifications
You must be signed in to change notification settings - Fork 34
/
simd_test.go
221 lines (194 loc) · 4.18 KB
/
simd_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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
package simdb
import (
"os"
"testing"
)
type Customer struct {
CustID string `json:"custid"`
Name string `json:"name"`
Address string `json:"address"`
Contact Contact
}
type Contact struct {
Phone string `json:"phone"`
Email string `json:"email"`
}
func (c Customer) ID() (jsonField string, value interface{}) {
value = c.CustID
jsonField = "custid"
return
}
type Product struct {
ProdID string `json:"productId"`
Name string `json:"name"`
Price float32 `json:"price"`
}
func (p Product) ID() (jsonField string, value interface{}) {
value = p.ProdID
jsonField = "productId"
return
}
func TestNew(t *testing.T) {
_, err := New("test")
if err != nil {
t.Error(err)
}
}
func TestInsertCustomer(t *testing.T) {
driver, err := New("test")
if err != nil {
t.Error(err)
}
customer := Customer{
CustID: "CU1",
Name: "sarouje",
Address: "address",
Contact: Contact{
Phone: "45533355",
Email: "[email protected]",
},
}
err = driver.Insert(customer)
if err != nil {
t.Error(err)
}
if _, err := os.Stat("./test/Customer"); err != nil {
t.Errorf("Failed to create customer db file")
}
fetched, err := getCustomer(customer)
if err != nil {
t.Error(err)
}
if fetched.CustID != "CU1" {
t.Errorf("unable to get the customer with customer id CU1")
}
}
func TestUpdateCustomer(t *testing.T) {
driver, err := New("test")
if err != nil {
t.Error(err)
}
customer := Customer{
CustID: "CU1",
}
if fetched, err := getCustomer(customer); err == nil {
fetched.Name = "Sony Arouje"
driver.Update(fetched)
afterUpdate, _ := getCustomer(customer)
if afterUpdate.Name != fetched.Name {
t.Errorf("unable to update the customer record")
}
} else {
t.Error(err)
}
}
func TestUpdateCustomerNonExistingId(t *testing.T) {
driver, err := New("test")
if err != nil {
t.Error(err)
}
customer := Customer{
CustID: "CU2",
Name: "sony",
}
err = driver.Update(customer)
if err != nil {
t.Errorf(err.Error())
}
}
func TestUpsert(t *testing.T) {
driver, err := New("test")
if err != nil {
t.Error(err)
}
customer := Customer{
CustID: "CU4",
Name: "sarouje",
Address: "address",
Contact: Contact{
Phone: "45533355",
Email: "[email protected]",
},
}
err = driver.Upsert(customer)
if err != nil {
t.Errorf(err.Error())
}
fetched, err := getCustomer(customer)
if err != nil {
t.Errorf(err.Error())
}
if fetched.CustID != customer.CustID {
t.Errorf("unable to do upsert for cust id %s", customer.CustID)
}
customer.Name = "Sony Arouje"
err = driver.Upsert(customer)
if err != nil {
t.Errorf(err.Error())
}
fetched, err = getCustomer(fetched)
if err != nil {
t.Errorf(err.Error())
}
if fetched.Name != customer.Name {
t.Errorf("unable to do upsert for cust id %s", customer.CustID)
}
}
func getCustomer(c Customer) (Customer, error) {
driver, err := New("test")
var fetchedCustomer Customer
err = driver.Open(Customer{}).Where("custid", "=", c.CustID).First().AsEntity(&fetchedCustomer)
return fetchedCustomer, err
}
func TestInsertProduct(t *testing.T) {
driver, err := New("test")
if err != nil {
t.Error(err)
}
product := Product{
ProdID: "P1",
Name: "Test product 1",
Price: 10,
}
err = driver.Insert(product)
if err != nil {
t.Error(err)
}
if _, err := os.Stat("./test/Product"); err != nil {
t.Errorf("Failed to create product db file")
}
fetched, err := getProduct(product)
if err != nil {
t.Error(err)
}
if fetched.ProdID != product.ProdID {
t.Errorf("unable to get the Product with given product id")
}
if fetched.Price != product.Price {
t.Errorf("incorrect price for the fetched product")
}
}
func getProduct(p Product) (Product, error) {
driver, err := New("test")
var fetchedProduct Product
err = driver.Open(Product{}).Where("productId", "=", p.ProdID).First().AsEntity(&fetchedProduct)
return fetchedProduct, err
}
func TestDeleteCustomer(t *testing.T) {
driver, _ := New("test")
customer := Customer{
CustID: "CU1",
}
if err := driver.Delete(customer); err != nil {
t.Error(err)
}
}
func TestDeleteProduct(t *testing.T) {
driver, _ := New("test")
product := Product{
ProdID: "P1",
}
if err := driver.Delete(product); err != nil {
t.Error(err)
}
}