...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package mysql
16
17 import (
18 "context"
19 "errors"
20 "regexp"
21 "testing"
22
23 "github.com/DATA-DOG/go-sqlmock"
24 "github.com/jmoiron/sqlx"
25
26 "go.uber.org/goleak"
27 )
28
29 func TestLookupIndices(t *testing.T) {
30 keys := []string{"87c1b129fbadd7b6e9abc0a9ef7695436d767aece042bec198a97e949fcbe14c"}
31 value := []string{"1e1f2c881ae0608ec77ebf88a75c66d3099113a7343238f2f7a0ebb91a4ed335"}
32 db, mock, err := sqlmock.New()
33 if err != nil {
34 t.Fatalf("unexpected error creating mock db: %v", err)
35 }
36
37 isp := IndexStorageProvider{sqlx.NewDb(db, "mysql")}
38 defer isp.Shutdown()
39
40 mock.ExpectQuery(lookupStmt).WithArgs(keys[0]).WillReturnRows(sqlmock.NewRows(value))
41
42 _, err = isp.LookupIndices(context.Background(), keys)
43 if err != nil {
44 t.Error(err)
45 }
46
47 if err := mock.ExpectationsWereMet(); err != nil {
48 t.Error(err)
49 }
50
51 expectedErr := errors.New("badness")
52 mock.ExpectQuery(lookupStmt).WillReturnError(expectedErr)
53 if _, err := isp.LookupIndices(context.Background(), keys); err == nil {
54 t.Error("unexpected success")
55 }
56 if err := mock.ExpectationsWereMet(); err != nil {
57 t.Error(err)
58 }
59 }
60
61 func TestWriteIndex(t *testing.T) {
62 keys := []string{"87c1b129fbadd7b6e9abc0a9ef7695436d767aece042bec198a97e949fcbe14c"}
63 value := "1e1f2c881ae0608ec77ebf88a75c66d3099113a7343238f2f7a0ebb91a4ed335"
64 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
65 if err != nil {
66 t.Fatalf("unexpected error creating mock db: %v", err)
67 }
68
69 re := regexp.MustCompile(`:[a-z]*`)
70 expectedStmt := string(re.ReplaceAll([]byte(writeStmt), []byte("?")))
71
72 isp := IndexStorageProvider{sqlx.NewDb(db, "mysql")}
73 defer isp.Shutdown()
74 if err := mock.ExpectationsWereMet(); err != nil {
75 t.Fatalf("expectations not met: %v", err)
76 }
77
78 mock.ExpectExec(expectedStmt).WithArgs(keys[0], value).WillReturnResult(sqlmock.NewResult(1, 1))
79 if err := isp.WriteIndex(context.Background(), keys, value); err != nil {
80 t.Errorf("%v, %v", expectedStmt, err)
81 }
82
83 if err := mock.ExpectationsWereMet(); err != nil {
84 t.Error(err)
85 }
86
87 expectedErr := errors.New("badness")
88 mock.ExpectExec(expectedStmt).WillReturnError(expectedErr)
89 if err := isp.WriteIndex(context.Background(), keys, value); err == nil {
90 t.Error("unexpected success")
91 }
92 if err := mock.ExpectationsWereMet(); err != nil {
93 t.Error(err)
94 }
95 }
96
97 func TestUninitializedClient(t *testing.T) {
98
99 isp := IndexStorageProvider{}
100 if _, err := isp.LookupIndices(context.Background(), []string{"key"}); err == nil {
101 t.Error("unexpected success")
102 }
103 if err := isp.WriteIndex(context.Background(), []string{"key"}, "value"); err == nil {
104 t.Error("unexpected success")
105 }
106 }
107
108 func TestMain(m *testing.M) {
109 goleak.VerifyTestMain(m)
110 }
111
View as plain text