func()

in internal/webserver_test_helper/webserver_test_helper.go [117:165]


func (h *WebserverHelper) Start() (func(), error) {
	// First, try to find the binary in the project's bin directory
	projectDir := findProjectDir()
	binaryPath := BinaryName

	if projectDir != "" {
		candidatePath := fmt.Sprintf("%s/bin/%s", projectDir, BinaryName)
		if _, err := os.Stat(candidatePath); err == nil {
			binaryPath = candidatePath
		}
	}

	// If not found in project bin, check PATH
	if binaryPath == BinaryName {
		path, err := exec.LookPath(BinaryName)
		if err != nil {
			return func() {}, fmt.Errorf("binary %s not found in <PROJECT_DIR>/bin or PATH: %w", BinaryName, err)
		}
		binaryPath = path
	}

	cmd := exec.Command(binaryPath, "webserver", "-index_dir", h.indexDir, "-rpc", "-listen", h.listen()) //nolint:gosec
	cmd.Stdout = os.Stdout

	if err := cmd.Start(); err != nil {
		return func() {}, err
	}

	for !h.isReady() {
	}

	cancelFunc := func() {
		proc, err := os.FindProcess(cmd.Process.Pid)

		if err != nil {
			slog.Error("find process error", "err", err)
		}

		if err := proc.Kill(); err != nil {
			slog.Error("kill error", "err", err)
		}

		if err := cmd.Wait(); err != nil {
			slog.Error("wait() error", "err", err)
		}
	}

	return cancelFunc, nil
}