...

Source file src/github.com/letsencrypt/boulder/db/multi_test.go

Documentation: github.com/letsencrypt/boulder/db

     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  	// Note that .Add does *not* enforce that each row is of the same types.
    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