1 package db
2
3 import (
4 "testing"
5
6 "github.com/letsencrypt/boulder/test"
7 )
8
9 func TestNewMulti(t *testing.T) {
10 _, err := NewMultiInserter("", []string{"colA"}, "")
11 test.AssertError(t, err, "Empty table name should fail")
12
13 _, err = NewMultiInserter("myTable", nil, "")
14 test.AssertError(t, err, "Empty fields list should fail")
15
16 mi, err := NewMultiInserter("myTable", []string{"colA"}, "")
17 test.AssertNotError(t, err, "Single-column construction should not fail")
18 test.AssertEquals(t, len(mi.fields), 1)
19
20 mi, err = NewMultiInserter("myTable", []string{"colA", "colB", "colC"}, "")
21 test.AssertNotError(t, err, "Multi-column construction should not fail")
22 test.AssertEquals(t, len(mi.fields), 3)
23
24 _, err = NewMultiInserter("", []string{"colA"}, "colB")
25 test.AssertError(t, err, "expected error for empty table name")
26 _, err = NewMultiInserter("foo\"bar", []string{"colA"}, "colB")
27 test.AssertError(t, err, "expected error for invalid table name")
28
29 _, err = NewMultiInserter("myTable", []string{"colA", "foo\"bar"}, "colB")
30 test.AssertError(t, err, "expected error for invalid column name")
31
32 _, err = NewMultiInserter("myTable", []string{"colA"}, "foo\"bar")
33 test.AssertError(t, err, "expected error for invalid returning column name")
34 }
35
36 func TestMultiAdd(t *testing.T) {
37 mi, err := NewMultiInserter("table", []string{"a", "b", "c"}, "")
38 test.AssertNotError(t, err, "Failed to create test MultiInserter")
39
40 err = mi.Add([]interface{}{})
41 test.AssertError(t, err, "Adding empty row should fail")
42
43 err = mi.Add([]interface{}{"foo"})
44 test.AssertError(t, err, "Adding short row should fail")
45
46 err = mi.Add([]interface{}{"foo", "bar", "baz", "bing", "boom"})
47 test.AssertError(t, err, "Adding long row should fail")
48
49 err = mi.Add([]interface{}{"one", "two", "three"})
50 test.AssertNotError(t, err, "Adding correct-length row shouldn't fail")
51 test.AssertEquals(t, len(mi.values), 1)
52
53 err = mi.Add([]interface{}{1, "two", map[string]int{"three": 3}})
54 test.AssertNotError(t, err, "Adding heterogeneous row shouldn't fail")
55 test.AssertEquals(t, len(mi.values), 2)
56
57 }
58
59 func TestMultiQuery(t *testing.T) {
60 mi, err := NewMultiInserter("table", []string{"a", "b", "c"}, "")
61 test.AssertNotError(t, err, "Failed to create test MultiInserter")
62 err = mi.Add([]interface{}{"one", "two", "three"})
63 test.AssertNotError(t, err, "Failed to insert test row")
64 err = mi.Add([]interface{}{"egy", "kettö", "három"})
65 test.AssertNotError(t, err, "Failed to insert test row")
66
67 query, queryArgs := mi.query()
68 test.AssertEquals(t, query, "INSERT INTO table (a,b,c) VALUES (?,?,?),(?,?,?)")
69 test.AssertDeepEquals(t, queryArgs, []interface{}{"one", "two", "three", "egy", "kettö", "három"})
70
71 mi, err = NewMultiInserter("table", []string{"a", "b", "c"}, "id")
72 test.AssertNotError(t, err, "Failed to create test MultiInserter")
73 err = mi.Add([]interface{}{"one", "two", "three"})
74 test.AssertNotError(t, err, "Failed to insert test row")
75 err = mi.Add([]interface{}{"egy", "kettö", "három"})
76 test.AssertNotError(t, err, "Failed to insert test row")
77
78 query, queryArgs = mi.query()
79 test.AssertEquals(t, query, "INSERT INTO table (a,b,c) VALUES (?,?,?),(?,?,?) RETURNING id")
80 test.AssertDeepEquals(t, queryArgs, []interface{}{"one", "two", "three", "egy", "kettö", "három"})
81 }
82
View as plain text