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  }