go-vise

Constrained Size Output Virtual Machine
Info | Log | Files | Refs | README | LICENSE

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 }