good morning!!!!

Skip to content
Snippets Groups Projects
query_test.go 1.34 KiB
Newer Older
Garet Halliday's avatar
Garet Halliday committed
package gsql
Garet Halliday's avatar
Garet Halliday committed

import (
Garet Halliday's avatar
Garet Halliday committed
	"log"
Garet Halliday's avatar
Garet Halliday committed
	"net"
	"net/http"
	_ "net/http/pprof"
Garet Halliday's avatar
Garet Halliday committed
	"testing"

Garet Halliday's avatar
Garet Halliday committed
	"gfx.cafe/gfx/pggat/lib/auth/credentials"
	"gfx.cafe/gfx/pggat/lib/bouncer/backends/v0"
	"gfx.cafe/gfx/pggat/lib/bouncer/bouncers/v2"
	"gfx.cafe/gfx/pggat/lib/fed"
	"gfx.cafe/gfx/pggat/lib/util/flip"
Garet Halliday's avatar
a  
Garet Halliday committed
type Result struct {
Garet Halliday's avatar
Garet Halliday committed
	Username string `sql:"0"`
	Password string `sql:"1"`
Garet Halliday's avatar
a  
Garet Halliday committed
}

Garet Halliday's avatar
Garet Halliday committed
func TestQuery(t *testing.T) {
	go func() {
		panic(http.ListenAndServe(":8080", nil))
	}()

Garet Halliday's avatar
Garet Halliday committed
	// open server
	s, err := net.Dial("tcp", "localhost:5432")
	if err != nil {
		t.Error(err)
		return
	}
	server := fed.NewConn(s)
Garet Halliday's avatar
Garet Halliday committed
	err = backends.Accept(
		server,
		"",
		nil,
		"postgres",
		credentials.Cleartext{
Garet Halliday's avatar
Garet Halliday committed
			Password: "password",
Garet Halliday's avatar
Garet Halliday committed
		},
Garet Halliday's avatar
Garet Halliday committed
		"postgres",
		nil,
	)
Garet Halliday's avatar
Garet Halliday committed
	if err != nil {
		t.Error(err)
		return
	}

	inward, outward := NewPair()

Garet Halliday's avatar
a  
Garet Halliday committed
	var res Result
	var b flip.Bank
	b.Queue(func() error {
		return ExtendedQuery(inward, &res, "SELECT usename, passwd FROM pg_shadow WHERE usename=$1", "postgres")
	})

	b.Queue(func() error {
		initial, err := outward.ReadPacket(true)
		if err != nil {
			return err
		}
		clientErr, serverErr := bouncers.Bounce(outward, server, initial)
		if clientErr != nil {
			return clientErr
		}
		if serverErr != nil {
			return serverErr
		}
		return outward.Close()
	})

	if err = b.Wait(); err != nil {
Garet Halliday's avatar
Garet Halliday committed
		t.Error(err)
	}
Garet Halliday's avatar
a  
Garet Halliday committed

	log.Printf("%#v", res)
Garet Halliday's avatar
Garet Halliday committed
}