func TestNewConnPool(t *testing.T) { t.Parallel() var numCallbacks int afterConnect := func(c *pgx.Conn) error { numCallbacks++ return nil } config := pgx.ConnPoolConfig{ConnConfig: *defaultConnConfig, MaxConnections: 2, AfterConnect: afterConnect} pool, err := pgx.NewConnPool(config) if err != nil { t.Fatal("Unable to establish connection pool") } defer pool.Close() // It initially connects once stat := pool.Stat() if stat.CurrentConnections != 1 { t.Errorf("Expected 1 connection to be established immediately, but %v were", numCallbacks) } // Pool creation returns an error if any AfterConnect callback does errAfterConnect := errors.New("Some error") afterConnect = func(c *pgx.Conn) error { return errAfterConnect } config = pgx.ConnPoolConfig{ConnConfig: *defaultConnConfig, MaxConnections: 2, AfterConnect: afterConnect} pool, err = pgx.NewConnPool(config) if err != errAfterConnect { t.Errorf("Expected errAfterConnect but received unexpected: %v", err) } }
func main() { var err error connPoolConfig := pgx.ConnPoolConfig{ ConnConfig: pgx.ConnConfig{ Host: "127.0.0.1", User: "******", Password: "******", Database: "url_shortener", Logger: log.New("module", "pgx"), }, MaxConnections: 5, AfterConnect: afterConnect, } pool, err = pgx.NewConnPool(connPoolConfig) if err != nil { log.Crit("Unable to create connection pool", "error", err) os.Exit(1) } http.HandleFunc("/", urlHandler) log.Info("Starting URL shortener on localhost:8080") err = http.ListenAndServe("localhost:8080", nil) if err != nil { log.Crit("Unable to start web server", "error", err) os.Exit(1) } }
func createConnPool(t *testing.T, maxConnections int) *pgx.ConnPool { config := pgx.ConnPoolConfig{ConnConfig: *defaultConnConfig, MaxConnections: maxConnections} pool, err := pgx.NewConnPool(config) if err != nil { t.Fatalf("Unable to create connection pool: %v", err) } return pool }
func TestNewConnPoolMaxConnectionsCannotBeLessThan2(t *testing.T) { t.Parallel() config := pgx.ConnPoolConfig{ConnConfig: *defaultConnConfig, MaxConnections: 1} pool, err := pgx.NewConnPool(config) if err == nil { pool.Close() t.Fatal(`Expected NewConnPool to fail with "MaxConnections must be at least 2" error, but it succeeded`) } if err.Error() != "MaxConnections must be at least 2" { t.Fatalf(`Expected NewConnPool to fail with "MaxConnections must be at least 2" error, but it failed with %v`, err) } }
func TestNewConnPoolDefaultsTo5MaxConnections(t *testing.T) { t.Parallel() config := pgx.ConnPoolConfig{ConnConfig: *defaultConnConfig} pool, err := pgx.NewConnPool(config) if err != nil { t.Fatal("Unable to establish connection pool") } defer pool.Close() if n := pool.Stat().MaxConnections; n != 5 { t.Fatalf("Expected pool to default to 5 max connections, but it was %d", n) } }
func BenchmarkConnPool(b *testing.B) { config := pgx.ConnPoolConfig{ConnConfig: *defaultConnConfig, MaxConnections: 5} pool, err := pgx.NewConnPool(config) if err != nil { b.Fatalf("Unable to create connection pool: %v", err) } defer pool.Close() b.ResetTimer() for i := 0; i < b.N; i++ { var conn *pgx.Conn if conn, err = pool.Acquire(); err != nil { b.Fatalf("Unable to acquire connection: %v", err) } pool.Release(conn) } }
func main() { var keys []*tufdata.Key if err := json.Unmarshal([]byte(os.Getenv("ROOT_KEYS")), &keys); err != nil { log.Fatal("missing or invalid ROOT_KEYS:", err) } opts := &tuf.HTTPRemoteOptions{ UserAgent: "cli-redirect/v1", } remote, err := tuf.HTTPRemoteStore(os.Getenv("REPO_URL"), opts) if err != nil { log.Fatal("error initializing remote store:", err) } r := &redirector{ RepoURL: os.Getenv("REPO_URL"), Client: tuf.NewClient(tuf.MemoryLocalStore(), remote), refresh: make(chan struct{}, 1), notify: make(chan struct{}, 1), } if err := r.Client.Init(keys, len(keys)); err != nil { log.Fatal("error initializing client:", err) } if _, err := r.Client.Update(); err != nil { log.Fatal("error running first update:", err) } targets, err := r.Client.Targets() if err != nil { log.Fatal("error getting targets:", err) } r.Targets.Store(targets) pgConf, err := pgx.ParseURI(os.Getenv("DATABASE_URL")) if err != nil { log.Fatal("error parsing DATABASE_URL:", err) } r.DB, err = pgx.NewConnPool(pgx.ConnPoolConfig{ConnConfig: pgConf}) if err != nil { log.Fatal("error creating pgx pool:", err) } go r.pgListener() go r.pgNotifier() go r.tufLoader() log.Fatal(http.ListenAndServe(":"+os.Getenv("PORT"), r)) }
func main() { var err error pool, err = pgx.NewConnPool(extractConfig()) if err != nil { fmt.Fprintln(os.Stderr, "Unable to connect to database:", err) os.Exit(1) } go listen() fmt.Println(`Type a message and press enter. This message should appear in any other chat instances connected to the same database. Type "exit" to quit. `) scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { msg := scanner.Text() if msg == "exit" { os.Exit(0) } _, err = pool.Exec("select pg_notify('chat', $1)", msg) if err != nil { fmt.Fprintln(os.Stderr, "Error sending notification:", err) os.Exit(1) } } if err := scanner.Err(); err != nil { fmt.Fprintln(os.Stderr, "Error scanning from stdin:", err) os.Exit(1) } }