github.com/annwntech/go-micro/v2@v2.9.5/store/cockroach/cockroach_test.go (about) 1 package cockroach 2 3 import ( 4 "database/sql" 5 "fmt" 6 "os" 7 "testing" 8 "time" 9 10 "github.com/kr/pretty" 11 "github.com/annwntech/go-micro/v2/store" 12 ) 13 14 func TestSQL(t *testing.T) { 15 if len(os.Getenv("IN_TRAVIS_CI")) != 0 { 16 t.Skip() 17 } 18 19 connection := fmt.Sprintf( 20 "host=%s port=%d user=%s sslmode=disable dbname=%s", 21 "localhost", 22 26257, 23 "root", 24 "test", 25 ) 26 db, err := sql.Open("postgres", connection) 27 if err != nil { 28 t.Fatal(err) 29 } 30 if err := db.Ping(); err != nil { 31 t.Skip("store/cockroach: can't connect to db") 32 } 33 db.Close() 34 35 sqlStore := NewStore( 36 store.Database("testsql"), 37 store.Nodes(connection), 38 ) 39 40 if err := sqlStore.Init(); err != nil { 41 t.Fatal(err) 42 } 43 44 keys, err := sqlStore.List() 45 if err != nil { 46 t.Error(err) 47 } else { 48 t.Logf("%# v\n", pretty.Formatter(keys)) 49 } 50 51 err = sqlStore.Write( 52 &store.Record{ 53 Key: "test", 54 Value: []byte("foo"), 55 }, 56 ) 57 if err != nil { 58 t.Error(err) 59 } 60 err = sqlStore.Write( 61 &store.Record{ 62 Key: "bar", 63 Value: []byte("baz"), 64 }, 65 ) 66 if err != nil { 67 t.Error(err) 68 } 69 err = sqlStore.Write( 70 &store.Record{ 71 Key: "qux", 72 Value: []byte("aasad"), 73 }, 74 ) 75 if err != nil { 76 t.Error(err) 77 } 78 err = sqlStore.Delete("qux") 79 if err != nil { 80 t.Error(err) 81 } 82 83 err = sqlStore.Write(&store.Record{ 84 Key: "test", 85 Value: []byte("bar"), 86 Expiry: time.Second * 10, 87 }) 88 if err != nil { 89 t.Error(err) 90 } 91 92 records, err := sqlStore.Read("test") 93 if err != nil { 94 t.Error(err) 95 } 96 t.Logf("%# v\n", pretty.Formatter(records)) 97 if string(records[0].Value) != "bar" { 98 t.Error("Expected bar, got ", string(records[0].Value)) 99 } 100 101 time.Sleep(11 * time.Second) 102 _, err = sqlStore.Read("test") 103 switch err { 104 case nil: 105 t.Error("Key test should have expired") 106 default: 107 t.Error(err) 108 case store.ErrNotFound: 109 break 110 } 111 sqlStore.Delete("bar") 112 sqlStore.Write(&store.Record{Key: "aaa", Value: []byte("bbb"), Expiry: 5 * time.Second}) 113 sqlStore.Write(&store.Record{Key: "aaaa", Value: []byte("bbb"), Expiry: 5 * time.Second}) 114 sqlStore.Write(&store.Record{Key: "aaaaa", Value: []byte("bbb"), Expiry: 5 * time.Second}) 115 results, err := sqlStore.Read("a", store.ReadPrefix()) 116 if err != nil { 117 t.Error(err) 118 } 119 if len(results) != 3 { 120 t.Fatal("Results should have returned 3 records") 121 } 122 time.Sleep(6 * time.Second) 123 results, err = sqlStore.Read("a", store.ReadPrefix()) 124 if err != nil { 125 t.Error(err) 126 } 127 if len(results) != 0 { 128 t.Fatal("Results should have returned 0 records") 129 } 130 }