dump_test.go (2393B)
1 package postgres 2 3 import ( 4 "bytes" 5 "context" 6 "testing" 7 8 "github.com/jackc/pgx/v5/pgconn" 9 "github.com/jackc/pgx/v5/pgtype" 10 pgxmock "github.com/pashagolub/pgxmock/v4" 11 12 "git.defalsify.org/vise.git/db" 13 ) 14 15 func TestDumpPg(t *testing.T) { 16 ses := "xyzzy" 17 18 mock, err := pgxmock.NewPool() 19 if err != nil { 20 t.Fatal(err) 21 } 22 defer mock.Close() 23 24 store := NewPgDb().WithConnection(mock).WithSchema("vvise") 25 store.SetPrefix(db.DATATYPE_USERDATA) 26 store.SetSession(ses) 27 ctx := context.Background() 28 29 // store.SetPrefix(db.DATATYPE_USERDATA) 30 // err = store.Put(ctx, []byte("bar"), []byte("inky")) 31 // if err != nil { 32 // t.Fatal(err) 33 // } 34 // err = store.Put(ctx, []byte("foobar"), []byte("pinky")) 35 // if err != nil { 36 // t.Fatal(err) 37 // } 38 // err = store.Put(ctx, []byte("foobarbaz"), []byte("blinky")) 39 // if err != nil { 40 // t.Fatal(err) 41 // } 42 // err = store.Put(ctx, []byte("xyzzy"), []byte("clyde")) 43 // if err != nil { 44 // t.Fatal(err) 45 // } 46 47 typMap := pgtype.NewMap() 48 k := []byte("xyzzy.foo") 49 mockVfd := pgconn.FieldDescription{ 50 Name: "value", 51 DataTypeOID: pgtype.ByteaOID, 52 Format: typMap.FormatCodeForOID(pgtype.ByteaOID), 53 } 54 mockKfd := pgconn.FieldDescription{ 55 Name: "key", 56 DataTypeOID: pgtype.ByteaOID, 57 Format: typMap.FormatCodeForOID(pgtype.ByteaOID), 58 } 59 rows := pgxmock.NewRowsWithColumnDefinition(mockKfd, mockVfd) 60 //rows = rows.AddRow([]byte("bar"), []byte("inky")) 61 rows = rows.AddRow(append([]byte{db.DATATYPE_USERDATA}, []byte("xyzzy.foobar")...), []byte("pinky")) 62 rows = rows.AddRow(append([]byte{db.DATATYPE_USERDATA}, []byte("xyzzy.foobarbaz")...), []byte("blinky")) 63 //rows = rows.AddRow([]byte("xyzzy"), []byte("clyde")) 64 65 mock.ExpectBegin() 66 mock.ExpectQuery("SELECT key, value FROM vvise.kv_vise").WithArgs(append([]byte{db.DATATYPE_USERDATA}, k...)).WillReturnRows(rows) 67 mock.ExpectCommit() 68 69 o, err := store.Dump(ctx, []byte("foo")) 70 if err != nil { 71 t.Fatal(err) 72 } 73 k, _ = o.Next(ctx) 74 //br, err := base64.StdEncoding.DecodeString(strings.Trim(string(k), "\"")) 75 if !bytes.Equal(k, []byte("foobar")) { 76 t.Fatalf("expected key 'foobar', got %x", k) 77 } 78 79 k, _ = o.Next(ctx) 80 //br, err = base64.StdEncoding.DecodeString(strings.Trim(string(k), "\"")) 81 if !bytes.Equal(k, []byte("foobarbaz")) { 82 t.Fatalf("expected key 'foobarbaz', got %x", k) 83 } 84 85 k, _ = o.Next(ctx) 86 if k != nil { 87 t.Fatalf("expected nil") 88 } 89 }