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  }