// Tests the processor in conjunction with the vcs. func TestGoldProcessor(t *testing.T) { // Set up mock VCS and run a servcer with the given data directory. vcs := ingestion.MockVCS(TEST_COMMITS) server, serverAddr := ingestion.StartTraceDBTestServer(t, TRACE_DB_FILENAME) defer server.Stop() defer testutils.Remove(t, TRACE_DB_FILENAME) ingesterConf := &sharedconfig.IngesterConfig{ ExtraParams: map[string]string{ CONFIG_TRACESERVICE: serverAddr, }, } // Set up the processor. processor, err := newGoldProcessor(vcs, ingesterConf, nil) assert.Nil(t, err) // Load the example file and process it. fsResult, err := ingestion.FileSystemResult(TEST_INGESTION_FILE, "./") assert.Nil(t, err) err = processor.Process(fsResult) assert.Nil(t, err) // Steal the traceDB used by the processor to verify the results. traceDB := processor.(*goldProcessor).traceDB startTime := time.Now().Add(-time.Hour * 24 * 10) commitIDs, err := traceDB.List(startTime, time.Now()) assert.Nil(t, err) assert.Equal(t, 1, len(FilterCommitIDs(commitIDs, "master"))) assert.Equal(t, 0, len(FilterCommitIDs(commitIDs, TEST_CODE_REVIEW_URL))) assert.Equal(t, 1, len(commitIDs)) assert.Equal(t, &tracedb.CommitID{ Timestamp: TEST_COMMITS[0].Timestamp.Unix(), ID: TEST_COMMITS[0].Hash, Source: "master", }, commitIDs[0]) // Get a tile and make sure we have the right number of traces. tile, _, err := traceDB.TileFromCommits(commitIDs) assert.Nil(t, err) traces := tile.Traces assert.Equal(t, len(TEST_ENTRIES), len(traces)) for _, testEntry := range TEST_ENTRIES { found, ok := traces[testEntry.key] assert.True(t, ok) goldTrace, ok := found.(*types.GoldenTrace) assert.True(t, ok) assert.Equal(t, 1, len(goldTrace.Values)) assert.Equal(t, testEntry.value, goldTrace.Values[0]) } assert.Equal(t, "master", commitIDs[0].Source) assert.Nil(t, traceDB.Close()) }
func TestPertTrace(t *testing.T) { b, err := ioutil.ReadFile(filepath.Join("testdata", "rietveld_response.txt")) assert.Nil(t, err) m := mockhttpclient.NewURLMock() // Mock this only once to confirm that caching works. m.MockOnce("https://codereview.chromium.org/api/1490543002", b) review := rietveld.New(rietveld.RIETVELD_SKIA_URL, util.NewTimeoutClient()) vcsCommits := []*vcsinfo.LongCommit{ &vcsinfo.LongCommit{ ShortCommit: &vcsinfo.ShortCommit{ Hash: "foofoofoo", Author: "*****@*****.**", Subject: "some commit", }, }, } vcs := ingestion.MockVCS(vcsCommits) builder := &Builder{ Builder: nil, vcs: vcs, review: review, cache: map[string]*rietveld.Issue{}, } commits := []*db.CommitID{ &db.CommitID{ Timestamp: time.Now(), ID: "1", Source: "https://codereview.chromium.org/1490543002", }, &db.CommitID{ Timestamp: time.Now(), ID: "foofoofoo", Source: "master", }, } long := builder.convertToLongCommits(commits, "master") assert.Equal(t, 1, len(long), "Only one commit should match master.") assert.Equal(t, "foofoofoo", long[0].ID) assert.Equal(t, "some commit", long[0].Desc) assert.Equal(t, "*****@*****.**", long[0].Author) long = builder.convertToLongCommits(commits, "https://codereview.chromium.org/1490543002") assert.Equal(t, 1, len(long), "Only one commit should match the trybot.") assert.Equal(t, "1", long[0].ID) assert.Equal(t, "no merge conflicts here.", long[0].Desc) assert.Equal(t, "jcgregorio", long[0].Author) long = builder.convertToLongCommits(commits, "") assert.Equal(t, 2, len(long), "Both commits should now appear.") assert.Equal(t, "1", long[0].ID) assert.Equal(t, "no merge conflicts here.", long[0].Desc) assert.Equal(t, "jcgregorio", long[0].Author) assert.Equal(t, "foofoofoo", long[1].ID) assert.Equal(t, "some commit", long[1].Desc) assert.Equal(t, "*****@*****.**", long[1].Author) badCommits := []*db.CommitID{ &db.CommitID{ Timestamp: time.Now(), ID: "2", Source: "https://codereview.chromium.org/99999999", }, &db.CommitID{ Timestamp: time.Now(), ID: "barbarbar", Source: "master", }, } long = builder.convertToLongCommits(badCommits, "") assert.Equal(t, 2, len(long), "Both commits should now appear.") assert.Equal(t, "2", long[0].ID) assert.Equal(t, "", long[0].Desc) assert.Equal(t, "", long[0].Author) assert.Equal(t, "barbarbar", long[1].ID) assert.Equal(t, "", long[1].Desc) assert.Equal(t, "", long[1].Author) }
// Tests the processor in conjunction with the vcs. func TestTrybotGoldProcessor(t *testing.T) { // Set up mock VCS and run a servcer with the given data directory. vcs := ingestion.MockVCS(TEST_COMMITS) server, serverAddr := ingestion.StartTraceDBTestServer(t, TRYBOT_TRACE_DB_FILE) defer server.Stop() defer testutils.Remove(t, TRYBOT_TRACE_DB_FILE) ingesterConf := &sharedconfig.IngesterConfig{ ExtraParams: map[string]string{ CONFIG_TRACESERVICE: serverAddr, CONFIG_CODE_REVIEW_URL: TEST_CODE_REVIEW_URL, }, } // Set up the processor. processor, err := newGoldTrybotProcessor(vcs, ingesterConf) assert.Nil(t, err) // Load the example file and process it. fsResult, err := ingestion.FileSystemResult(TRYBOT_INGESTION_FILE) assert.Nil(t, err) err = processor.Process(fsResult) assert.Nil(t, err) // Steal the traceDB used by the processor to verify the results. traceDB := processor.(*goldTrybotProcessor).traceDB // The timestamp for the issue/patchset in the testfile is 1443718869. startTime := time.Unix(1443718868, 0) commitIDs, err := traceDB.List(startTime, time.Now()) assert.Nil(t, err) assert.Equal(t, 1, len(FilterCommitIDs(commitIDs, TRYBOT_SRC))) assert.Equal(t, 0, len(FilterCommitIDs(commitIDs, VCS_SRC))) assert.Equal(t, 1, len(commitIDs)) assert.Equal(t, &tracedb.CommitID{ Timestamp: time.Unix(1443718869, 0), ID: "1", Source: string(TRYBOT_SRC) + TEST_CODE_REVIEW_URL + "/1381483003", }, commitIDs[0]) // Get a tile and make sure we have the right number of traces. tile, err := traceDB.TileFromCommits(commitIDs) assert.Nil(t, err) traces := tile.Traces assert.Equal(t, len(TEST_ENTRIES), len(traces)) for _, testEntry := range TEST_ENTRIES { found, ok := traces[testEntry.key] assert.True(t, ok) goldTrace, ok := found.(*types.GoldenTrace) assert.True(t, ok) assert.Equal(t, 1, len(goldTrace.Values)) assert.Equal(t, testEntry.value, goldTrace.Values[0]) } // Make sure the prefix is stripped correctly. StripSourcePrefix(commitIDs) assert.Equal(t, TEST_CODE_REVIEW_URL+"/1381483003", commitIDs[0].Source) assert.Nil(t, traceDB.Close()) }
func TestTileFromCommits(t *testing.T) { ts, cleanup := setupClientServerForTesting(t.Fatalf) defer cleanup() now := time.Unix(100, 0) commitIDs := []*CommitID{ &CommitID{ Timestamp: now.Unix(), ID: "foofoofoo", Source: "master", }, } vcsCommits := []*vcsinfo.LongCommit{ &vcsinfo.LongCommit{ ShortCommit: &vcsinfo.ShortCommit{ Hash: "foofoofoo", Author: "*****@*****.**", Subject: "some commit", }, }, } vcs := ingestion.MockVCS(vcsCommits) entries := map[string]*Entry{ "key:8888:android": &Entry{ Params: map[string]string{ "config": "8888", "platform": "android", "type": "skp", }, Value: types.BytesFromFloat64(0.01), }, "key:gpu:win8": &Entry{ Params: map[string]string{ "config": "gpu", "platform": "win8", "type": "skp", }, Value: types.BytesFromFloat64(1.234), }, } // Populate the tile with some data. err := ts.Add(commitIDs[0], entries) assert.NoError(t, err) // Now test tileBuilder. builder := &tileBuilder{ db: ts, vcs: vcs, tcache: lru.New(2), cache: lru.New(2), } tile, err := builder.CachedTileFromCommits(commitIDs) assert.NoError(t, err) assert.Equal(t, 1, len(tile.Commits)) assert.Equal(t, 2, len(tile.Traces)) assert.Equal(t, 1, builder.tcache.Len(), "The tile should have been added to the cache.") entries = map[string]*Entry{ "key:565:linux": &Entry{ Params: map[string]string{ "config": "565", "platform": "linux", "type": "skp", }, Value: types.BytesFromFloat64(0.05), }, } // Add more data and be sure that the new data is returned when we // call CachedTileFromCommits again. err = ts.Add(commitIDs[0], entries) assert.NoError(t, err) tile, err = builder.CachedTileFromCommits(commitIDs) assert.NoError(t, err) assert.Equal(t, 1, len(tile.Commits)) assert.Equal(t, 3, len(tile.Traces), "The new data should appear in the tile.") assert.Equal(t, 1, builder.tcache.Len(), "The new tile should have replaced the old tile in the cache.") }