37 lines · 944 B · Go
RawDownload
//go:build !windows package cli import (	"context"	"os"	"path/filepath"	"strings"	"testing"	"time") func TestRunGitKillsChildProcessGroupOnContextCancel(t *testing.T) {	dir := t.TempDir()	gitPath := filepath.Join(dir, "git")	script := "#!/bin/sh\n(sleep 30) &\nwait\n"	if err := os.WriteFile(gitPath, []byte(script), 0o755); err != nil {		t.Fatalf("write fake git: %v", err)	}	t.Setenv("PATH", dir+string(os.PathListSeparator)+os.Getenv("PATH")) 	ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond)	defer cancel()	start := time.Now()	err := runGit(ctx, "", "fetch")	elapsed := time.Since(start)	if err == nil {		t.Fatal("expected context cancellation error")	}	if !strings.Contains(err.Error(), "context deadline exceeded") {		t.Fatalf("error = %v, want context deadline exceeded", err)	}	if elapsed > 2*time.Second {		t.Fatalf("runGit took %s after context cancellation", elapsed)	}}