func NewTestKeeperWithID(t *testing.T, dir, id, clusterName, pgSUUsername, pgSUPassword, pgReplUsername, pgReplPassword string, storeBackend store.Backend, storeEndpoints string, a ...string) (*TestKeeper, error) { args := []string{} dataDir := filepath.Join(dir, fmt.Sprintf("st%s", id)) // Hack to find a free tcp port ln, err := net.Listen("tcp", "localhost:0") if err != nil { return nil, err } defer ln.Close() pgListenAddress := ln.Addr().(*net.TCPAddr).IP.String() pgPort := strconv.Itoa(ln.Addr().(*net.TCPAddr).Port) args = append(args, fmt.Sprintf("--id=%s", id)) args = append(args, fmt.Sprintf("--cluster-name=%s", clusterName)) args = append(args, fmt.Sprintf("--pg-port=%s", pgPort)) args = append(args, fmt.Sprintf("--data-dir=%s", dataDir)) args = append(args, fmt.Sprintf("--store-backend=%s", storeBackend)) args = append(args, fmt.Sprintf("--store-endpoints=%s", storeEndpoints)) args = append(args, fmt.Sprintf("--pg-su-username=%s", pgSUUsername)) if pgSUPassword != "" { args = append(args, fmt.Sprintf("--pg-su-password=%s", pgSUPassword)) } args = append(args, fmt.Sprintf("--pg-repl-username=%s", pgReplUsername)) args = append(args, fmt.Sprintf("--pg-repl-password=%s", pgReplPassword)) if os.Getenv("DEBUG") != "" { args = append(args, "--debug") } args = append(args, a...) connParams := pg.ConnParams{ "user": pgSUUsername, "password": pgSUPassword, "host": pgListenAddress, "port": pgPort, "dbname": "postgres", "sslmode": "disable", } connString := connParams.ConnString() db, err := sql.Open("postgres", connString) if err != nil { return nil, err } bin := os.Getenv("STKEEPER_BIN") if bin == "" { return nil, fmt.Errorf("missing STKEEPER_BIN env") } tk := &TestKeeper{ t: t, Process: Process{ t: t, id: id, name: "keeper", bin: bin, args: args, }, dataDir: dataDir, pgListenAddress: pgListenAddress, pgPort: pgPort, pgSUUsername: pgSUUsername, pgSUPassword: pgSUPassword, pgReplUsername: pgReplUsername, pgReplPassword: pgReplPassword, db: db, } return tk, nil }
func NewTestKeeperWithID(t *testing.T, dir, uid, clusterName, pgSUUsername, pgSUPassword, pgReplUsername, pgReplPassword string, storeBackend store.Backend, storeEndpoints string, a ...string) (*TestKeeper, error) { args := []string{} dataDir := filepath.Join(dir, fmt.Sprintf("st%s", uid)) pgListenAddress, pgPort, err := getFreePort(true, false) if err != nil { return nil, err } args = append(args, fmt.Sprintf("--uid=%s", uid)) args = append(args, fmt.Sprintf("--cluster-name=%s", clusterName)) args = append(args, fmt.Sprintf("--pg-listen-address=%s", pgListenAddress)) args = append(args, fmt.Sprintf("--pg-port=%s", pgPort)) args = append(args, fmt.Sprintf("--data-dir=%s", dataDir)) args = append(args, fmt.Sprintf("--store-backend=%s", storeBackend)) args = append(args, fmt.Sprintf("--store-endpoints=%s", storeEndpoints)) args = append(args, fmt.Sprintf("--pg-su-username=%s", pgSUUsername)) if pgSUPassword != "" { args = append(args, fmt.Sprintf("--pg-su-password=%s", pgSUPassword)) } args = append(args, fmt.Sprintf("--pg-repl-username=%s", pgReplUsername)) args = append(args, fmt.Sprintf("--pg-repl-password=%s", pgReplPassword)) if os.Getenv("DEBUG") != "" { args = append(args, "--debug") } args = append(args, a...) connParams := pg.ConnParams{ "user": pgSUUsername, "password": pgSUPassword, "host": pgListenAddress, "port": pgPort, "dbname": "postgres", "sslmode": "disable", } connString := connParams.ConnString() db, err := sql.Open("postgres", connString) if err != nil { return nil, err } bin := os.Getenv("STKEEPER_BIN") if bin == "" { return nil, fmt.Errorf("missing STKEEPER_BIN env") } tk := &TestKeeper{ t: t, Process: Process{ t: t, uid: uid, name: "keeper", bin: bin, args: args, }, dataDir: dataDir, pgListenAddress: pgListenAddress, pgPort: pgPort, pgSUUsername: pgSUUsername, pgSUPassword: pgSUPassword, pgReplUsername: pgReplUsername, pgReplPassword: pgReplPassword, db: db, } return tk, nil }