mirror of
https://github.com/go-micro/go-micro.git
synced 2024-12-24 10:07:04 +02:00
1b4e881d74
* WIP store rewrite * Fix memory store tests * Store hard expiry times rather than duration! * Clarify memory test * Add limit to store interface * Implement suffix option * Don't return nils from noop store * Fix syncmap * Start fixing store service * wip service and cache * Use _ for special characters in cockroachdb namespace * Improve cockroach namespace comment * Use service name as default store namespace * Fixes * Implement Store Scope * Start fixing etcd * implement read and write with expiry and prefix * Fix etcd tests * Fix cockroach store * Fix cloudflare interface * Fix certmagic / cloudflare store * comment lint * cache isn't implemented yet * Only prepare DB staements once Co-authored-by: Ben Toogood <ben@micro.mu> Co-authored-by: ben-toogood <bentoogood@gmail.com>
103 lines
1.6 KiB
Go
103 lines
1.6 KiB
Go
package cockroach
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/kr/pretty"
|
|
"github.com/micro/go-micro/v2/store"
|
|
)
|
|
|
|
func TestSQL(t *testing.T) {
|
|
connection := fmt.Sprintf(
|
|
"host=%s port=%d user=%s sslmode=disable dbname=%s",
|
|
"localhost",
|
|
5432,
|
|
"jake",
|
|
"test",
|
|
)
|
|
db, err := sql.Open("postgres", connection)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := db.Ping(); err != nil {
|
|
t.Skip(err)
|
|
}
|
|
db.Close()
|
|
|
|
sqlStore := NewStore(
|
|
store.Namespace("testsql"),
|
|
store.Nodes(connection),
|
|
)
|
|
|
|
keys, err := sqlStore.List()
|
|
if err != nil {
|
|
t.Error(err)
|
|
} else {
|
|
t.Logf("%# v\n", pretty.Formatter(keys))
|
|
}
|
|
|
|
err = sqlStore.Write(
|
|
&store.Record{
|
|
Key: "test",
|
|
Value: []byte("foo"),
|
|
},
|
|
)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
err = sqlStore.Write(
|
|
&store.Record{
|
|
Key: "bar",
|
|
Value: []byte("baz"),
|
|
},
|
|
)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
err = sqlStore.Write(
|
|
&store.Record{
|
|
Key: "qux",
|
|
Value: []byte("aasad"),
|
|
},
|
|
)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
err = sqlStore.Delete("qux")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
err = sqlStore.Write(&store.Record{
|
|
Key: "test",
|
|
Value: []byte("bar"),
|
|
Expiry: time.Minute,
|
|
})
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
records, err := sqlStore.Read("test")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
t.Logf("%# v\n", pretty.Formatter(records))
|
|
if string(records[0].Value) != "bar" {
|
|
t.Error("Expected bar, got ", string(records[0].Value))
|
|
}
|
|
|
|
time.Sleep(61 * time.Second)
|
|
_, err = sqlStore.Read("test")
|
|
switch err {
|
|
case nil:
|
|
t.Error("Key test should have expired")
|
|
default:
|
|
t.Error(err)
|
|
case store.ErrNotFound:
|
|
break
|
|
}
|
|
}
|