MCPcopy Create free account
hub / github.com/PostHog/duckgres / startLocalDuckgres

Function startLocalDuckgres

tests/perf/harness_test.go:288–371  ·  view source on GitHub ↗
(t *testing.T, username, password string, logOutput *bytes.Buffer)

Source from the content-addressed store, hash-verified

286 if err := server.EnsureCertificates(certPath, keyPath); err != nil {
287 return nil, fmt.Errorf("generate tls certs: %w", err)
288 }
289
290 port, err := freePort()
291 if err != nil {
292 return nil, fmt.Errorf("allocate pgwire port: %w", err)
293 }
294 dataDir := filepath.Join(tmpDir, "data")
295 if err := os.MkdirAll(dataDir, 0o755); err != nil {
296 return nil, fmt.Errorf("create data dir: %w", err)
297 }
298 socketDir, err := os.MkdirTemp("/tmp", "perf-cp-")
299 if err != nil {
300 return nil, fmt.Errorf("create socket dir: %w", err)
301 }
302
303 cfgPath := filepath.Join(tmpDir, "duckgres.yaml")
304 cfg := fmt.Sprintf(`host: 127.0.0.1
305port: %d
306data_dir: %s
307tls:
308 cert: %s
309 key: %s
310users:
311 %s: %s
312`, port, dataDir, certPath, keyPath, username, password)
313 if err := os.WriteFile(cfgPath, []byte(cfg), 0o644); err != nil {
314 return nil, fmt.Errorf("write config: %w", err)
315 }
316
317 cmd := exec.Command(binaryPath, "--config", cfgPath, "--mode", "control-plane", "--socket-dir", socketDir)
318 cmd.Stdout = logOutput
319 cmd.Stderr = logOutput
320 cmd.Env = []string{
321 "HOME=" + os.Getenv("HOME"),
322 "PATH=" + os.Getenv("PATH"),
323 }
324 if err := cmd.Start(); err != nil {
325 return nil, fmt.Errorf("start duckgres: %w", err)
326 }
327
328 dsn := fmt.Sprintf(
329 "host=127.0.0.1 port=%d user=%s password=%s sslmode=require connect_timeout=5",
330 port,
331 username,
332 password,
333 )
334 if err := waitForPGWireReady(dsn, 30*time.Second); err != nil {
335 _ = cmd.Process.Kill()
336 _, _ = cmd.Process.Wait()
337 return nil, fmt.Errorf("duckgres did not become ready: %w\nlogs:\n%s", err, logOutput.String())
338 }
339
340 return &localDuckgres{
341 cmd: cmd,
342 pgwireDSN: dsn,
343 socketDir: socketDir,
344 }, nil
345}

Callers 1

Calls 5

waitForPGWireReadyFunction · 0.85
findProjectRootFunction · 0.70
freePortFunction · 0.70
StartMethod · 0.45
StringMethod · 0.45

Tested by

no test coverage detected