|  | package util | 
|  |  | 
|  | import ( | 
|  | "context" | 
|  | "fmt" | 
|  | "os" | 
|  | "path/filepath" | 
|  | "strings" | 
|  | "testing" | 
|  |  | 
|  | "github.com/stretchr/testify/require" | 
|  | cipd_git "go.skia.org/infra/bazel/external/cipd/git" | 
|  | "go.skia.org/infra/go/git" | 
|  | git_testutils "go.skia.org/infra/go/git/testutils" | 
|  | "go.skia.org/infra/go/testutils" | 
|  | "go.skia.org/infra/go/util" | 
|  | ) | 
|  |  | 
|  | const ( | 
|  | TEST_GROUP_NAME = "test group name" | 
|  | TEST_UNIQUE_ID  = "test unique ID" | 
|  | TEST_HASH       = "abcde" | 
|  | ) | 
|  |  | 
|  | func TestCommitToSyntheticRepo(t *testing.T) { | 
|  | ctx := cipd_git.UseGitFinder(context.Background()) | 
|  |  | 
|  | // Create a test repo. | 
|  | gb := git_testutils.GitInitWithDefaultBranch(t, ctx, git.MainBranch) | 
|  | defer gb.Cleanup() | 
|  |  | 
|  | // Populate it with an initial whitespace file. Below CreateBranchTrackBranch | 
|  | // and CheckoutBranch steps do not seem to work without it. | 
|  | gb.Add(ctx, "whitespace.txt", " ") | 
|  | gb.CommitMsg(ctx, "Initial whitespace commit") | 
|  | // Create a branch and check it out, otherwise we can't push | 
|  | // to git.DefaultRemoteBranch on this repo. | 
|  | gb.CreateBranchTrackBranch(ctx, "somebranch", git.DefaultRemote+"/"+git.MainBranch) | 
|  | gb.CheckoutBranch(ctx, "somebranch") | 
|  |  | 
|  | // Create tmp dir that gets cleaned up. | 
|  | workdir, err := os.MkdirTemp("", "ct_perf_test_commit") | 
|  | require.NoError(t, err) | 
|  | defer util.RemoveAll(workdir) | 
|  |  | 
|  | // Create git.Checkout. | 
|  | checkout, err := git.NewCheckout(context.Background(), gb.Dir(), workdir) | 
|  | require.NoError(t, err) | 
|  | err = checkout.CleanupBranch(ctx, git.MainBranch) | 
|  | require.NoError(t, err) | 
|  |  | 
|  | // Make sure email and name are correctly set. | 
|  | _, err = checkout.Git(ctx, "config", "user.email", "tester@example.com") | 
|  | require.NoError(t, err) | 
|  | _, err = checkout.Git(ctx, "config", "user.name", "tester@example.com") | 
|  | require.NoError(t, err) | 
|  |  | 
|  | // Commit to the synthetic repo | 
|  | gitExec, err := git.Executable(ctx) | 
|  | require.NoError(t, err) | 
|  | hash, err := commitToSyntheticRepo(ctx, TEST_GROUP_NAME, TEST_UNIQUE_ID, gitExec, checkout) | 
|  | require.NoError(t, err) | 
|  |  | 
|  | // Confirm that the expected commit is there. | 
|  | log, err := checkout.Git(ctx, "log", "--pretty=oneline") | 
|  | require.NoError(t, err) | 
|  | loglines := strings.Split(log, "\n") | 
|  | require.Contains(t, loglines[0], hash) | 
|  | require.Contains(t, loglines[0], fmt.Sprintf("Commit for %s by %s", TEST_GROUP_NAME, TEST_UNIQUE_ID)) | 
|  | } | 
|  |  | 
|  | func TestConvertCSVToBenchData(t *testing.T) { | 
|  | testDataDir := testutils.TestDataDir(t) | 
|  | pathToTestCSV := filepath.Join(testDataDir, "test.csv") | 
|  |  | 
|  | perfData, err := convertCSVToBenchData(TEST_HASH, TEST_GROUP_NAME, TEST_UNIQUE_ID, pathToTestCSV) | 
|  | require.NoError(t, err) | 
|  | require.NotNil(t, perfData) | 
|  | require.Equal(t, perfData.Hash, TEST_HASH) | 
|  | require.Equal(t, perfData.RunID, TEST_UNIQUE_ID) | 
|  | require.Equal(t, perfData.Key["group_name"], TEST_GROUP_NAME) | 
|  | require.Len(t, perfData.Results, 2) | 
|  | require.Equal(t, perfData.Results["http://www.reuters.com"]["default"]["paint_op_count"], 805.0) | 
|  | require.Equal(t, perfData.Results["http://www.reuters.com"]["default"]["rasterize_time (ms)"], 2.449) | 
|  | require.Equal(t, perfData.Results["http://www.reuters.com"]["default"]["options"], map[string]int{"page_rank": 480}) | 
|  | require.Equal(t, perfData.Results["http://www.rediff.com"]["default"]["paint_op_count"], 643.0) | 
|  | require.Equal(t, perfData.Results["http://www.rediff.com"]["default"]["rasterize_time (ms)"], 2.894) | 
|  | require.Equal(t, perfData.Results["http://www.rediff.com"]["default"]["options"], map[string]int{"page_rank": 490}) | 
|  | } |