go-micro.dev/v5@v5.12.0/store/postgres/pgx/pgx_test.go (about) 1 //go:build integration 2 // +build integration 3 4 package pgx 5 6 import ( 7 "encoding/json" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 12 "go-micro.dev/v5/store" 13 ) 14 15 type testObj struct { 16 One string 17 Two int64 18 } 19 20 func TestPostgres(t *testing.T) { 21 t.Run("ReadWrite", func(t *testing.T) { 22 s := NewStore(store.Nodes("postgresql://postgres@localhost:5432/?sslmode=disable")) 23 b, _ := json.Marshal(testObj{ 24 One: "1", 25 Two: 2, 26 }) 27 err := s.Write(&store.Record{ 28 Key: "foobar/baz", 29 Value: b, 30 Metadata: map[string]interface{}{ 31 "meta1": "val1", 32 }, 33 }) 34 assert.NoError(t, err) 35 recs, err := s.Read("foobar/baz") 36 assert.NoError(t, err) 37 assert.Len(t, recs, 1) 38 assert.Equal(t, "foobar/baz", recs[0].Key) 39 assert.Len(t, recs[0].Metadata, 1) 40 assert.Equal(t, "val1", recs[0].Metadata["meta1"]) 41 42 var tobj testObj 43 assert.NoError(t, json.Unmarshal(recs[0].Value, &tobj)) 44 assert.Equal(t, "1", tobj.One) 45 assert.Equal(t, int64(2), tobj.Two) 46 }) 47 t.Run("Prefix", func(t *testing.T) { 48 s := NewStore(store.Nodes("postgresql://postgres@localhost:5432/?sslmode=disable")) 49 b, _ := json.Marshal(testObj{ 50 One: "1", 51 Two: 2, 52 }) 53 err := s.Write(&store.Record{ 54 Key: "foo/bar", 55 Value: b, 56 Metadata: map[string]interface{}{ 57 "meta1": "val1", 58 }, 59 }) 60 assert.NoError(t, err) 61 err = s.Write(&store.Record{ 62 Key: "foo/baz", 63 Value: b, 64 Metadata: map[string]interface{}{ 65 "meta1": "val1", 66 }, 67 }) 68 assert.NoError(t, err) 69 recs, err := s.Read("foo/", store.ReadPrefix()) 70 assert.NoError(t, err) 71 assert.Len(t, recs, 2) 72 assert.Equal(t, "foo/bar", recs[0].Key) 73 assert.Equal(t, "foo/baz", recs[1].Key) 74 }) 75 76 t.Run("MultipleTables", func(t *testing.T) { 77 s1 := NewStore(store.Nodes("postgresql://postgres@localhost:5432/?sslmode=disable"), store.Table("t1")) 78 s2 := NewStore(store.Nodes("postgresql://postgres@localhost:5432/?sslmode=disable"), store.Table("t2")) 79 b1, _ := json.Marshal(testObj{ 80 One: "1", 81 Two: 2, 82 }) 83 err := s1.Write(&store.Record{ 84 Key: "foo/bar", 85 Value: b1, 86 }) 87 assert.NoError(t, err) 88 b2, _ := json.Marshal(testObj{ 89 One: "1", 90 Two: 2, 91 }) 92 err = s2.Write(&store.Record{ 93 Key: "foo/baz", 94 Value: b2, 95 }) 96 assert.NoError(t, err) 97 recs1, err := s1.List() 98 assert.NoError(t, err) 99 assert.Len(t, recs1, 1) 100 assert.Equal(t, "foo/bar", recs1[0]) 101 102 recs2, err := s2.List() 103 assert.NoError(t, err) 104 assert.Len(t, recs2, 1) 105 assert.Equal(t, "foo/baz", recs2[0]) 106 }) 107 108 t.Run("MultipleDBs", func(t *testing.T) { 109 s1 := NewStore(store.Nodes("postgresql://postgres@localhost:5432/?sslmode=disable"), store.Database("d1")) 110 s2 := NewStore(store.Nodes("postgresql://postgres@localhost:5432/?sslmode=disable"), store.Database("d2")) 111 b1, _ := json.Marshal(testObj{ 112 One: "1", 113 Two: 2, 114 }) 115 err := s1.Write(&store.Record{ 116 Key: "foo/bar", 117 Value: b1, 118 }) 119 assert.NoError(t, err) 120 b2, _ := json.Marshal(testObj{ 121 One: "1", 122 Two: 2, 123 }) 124 err = s2.Write(&store.Record{ 125 Key: "foo/baz", 126 Value: b2, 127 }) 128 assert.NoError(t, err) 129 recs1, err := s1.List() 130 assert.NoError(t, err) 131 assert.Len(t, recs1, 1) 132 assert.Equal(t, "foo/bar", recs1[0]) 133 134 recs2, err := s2.List() 135 assert.NoError(t, err) 136 assert.Len(t, recs2, 1) 137 assert.Equal(t, "foo/baz", recs2[0]) 138 }) 139 }