| package testutils |
| |
| import ( |
| "context" |
| "strings" |
| "testing" |
| "time" |
| |
| "github.com/stretchr/testify/require" |
| |
| cipd_git "go.skia.org/infra/bazel/external/cipd/git" |
| "go.skia.org/infra/go/exec" |
| "go.skia.org/infra/go/git/git_common" |
| ) |
| |
| func TestGitSetup(t *testing.T) { |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| g := GitInit(t, ctx) |
| defer g.Cleanup() |
| |
| // Assert that the default branch has the expected name. |
| output, err := exec.RunCwd(ctx, g.Dir(), g.git, "symbolic-ref", "--short", "HEAD") |
| require.NoError(t, err) |
| require.Equal(t, git_common.MainBranch, strings.TrimSpace(output)) |
| |
| commits := GitSetup(ctx, g) |
| |
| output, err = exec.RunCwd(ctx, g.Dir(), g.git, "log", "-n", "6", "--format=format:%H:%P", "HEAD") |
| require.NoError(t, err) |
| t.Log(ctx, output) |
| lines := strings.Split(output, "\n") |
| require.Equal(t, 5, len(lines)) |
| |
| cmap := make(map[string][]string, 5) |
| for i, l := range lines { |
| split := strings.Split(l, ":") |
| require.Equal(t, 2, len(split)) |
| require.Equal(t, commits[len(commits)-1-i], split[0]) |
| if len(split[1]) == 0 { |
| cmap[split[0]] = []string{} |
| } else { |
| cmap[split[0]] = strings.Split(split[1], " ") |
| } |
| } |
| |
| c1, c2, c3, c4, c5 := commits[0], commits[1], commits[2], commits[3], commits[4] |
| require.Equal(t, 0, len(cmap[c1])) |
| require.Equal(t, 1, len(cmap[c2])) |
| require.Equal(t, []string{c1}, cmap[c2]) |
| require.Equal(t, 1, len(cmap[c3])) |
| require.Equal(t, []string{c2}, cmap[c3]) |
| require.Equal(t, 1, len(cmap[c4])) |
| require.Equal(t, []string{c2}, cmap[c4]) |
| require.Equal(t, 2, len(cmap[c5])) |
| require.Equal(t, []string{c4, c3}, cmap[c5]) |
| } |
| |
| func TestGitBuilderCommitTime(t *testing.T) { |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| g := GitInit(t, ctx) |
| defer g.Cleanup() |
| |
| g.AddGen(ctx, "a.txt") |
| c1 := g.CommitMsgAt(ctx, "Gonna party like it's", time.Date(1999, 12, 31, 23, 59, 59, 0, time.UTC)) |
| |
| // Commit timestamps are second resolution. |
| now := time.Now().Round(time.Second) |
| g.AddGen(ctx, "a.txt") |
| c2 := g.CommitMsgAt(ctx, "No time like the present", now) |
| |
| g.AddGen(ctx, "a.txt") |
| c3 := g.CommitMsgAt(ctx, "The last time this will work is", time.Date(2099, 12, 31, 23, 59, 59, 0, time.UTC)) |
| |
| output, err := exec.RunCwd(ctx, g.Dir(), g.git, "log", "-n", "3", "--format=format:%H %s %aD", "HEAD") |
| require.NoError(t, err) |
| |
| lines := strings.Split(output, "\n") |
| require.Equal(t, 3, len(lines)) |
| require.Equal(t, c3+" The last time this will work is Thu, 31 Dec 2099 23:59:59 +0000", lines[0]) |
| require.Equal(t, c2+" No time like the present "+now.UTC().Format("Mon, 2 Jan 2006 15:04:05 -0700"), lines[1]) |
| require.Equal(t, c1+" Gonna party like it's Fri, 31 Dec 1999 23:59:59 +0000", lines[2]) |
| } |