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