blob: 3cd85989dac2fd9d2dace4444aa0aa6ccd597ef1 [file] [log] [blame]
package regression
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"go.skia.org/infra/go/ds"
"go.skia.org/infra/go/ds/testutil"
"go.skia.org/infra/go/testutils"
"go.skia.org/infra/go/testutils/unittest"
"go.skia.org/infra/perf/go/cid"
"go.skia.org/infra/perf/go/clustering2"
"go.skia.org/infra/perf/go/dataframe"
)
// TestDS test storing regressions in the datastore.
func TestDS(t *testing.T) {
unittest.ManualTest(t)
cleanup := testutil.InitDatastore(t, ds.REGRESSION)
defer cleanup()
st := NewStore()
r := New()
c := &cid.CommitDetail{
CommitID: cid.CommitID{
Source: "master",
Offset: 1,
},
Timestamp: 1479235651,
}
// Test Regressions.
df := &dataframe.FrameResponse{}
cl := &clustering2.ClusterSummary{}
r.SetLow("foo", df, cl)
_, ok := r.ByAlertID["foo"]
assert.True(t, ok)
assert.False(t, r.Triaged())
// Test store.
now := time.Unix(c.Timestamp, 0)
begin := now.Add(-time.Hour).Unix()
end := now.Add(time.Hour).Unix()
// Create a new regression.
isNew, err := st.SetLow(c, "foo", df, cl)
assert.True(t, isNew)
assert.NoError(t, err)
// Overwrite a regression.
isNew, err = st.SetLow(c, "foo", df, cl)
assert.False(t, isNew)
assert.NoError(t, err)
// Confirm new regression is present.
ranges, err := st.Range(begin, end)
assert.NoError(t, err)
assert.Len(t, ranges, 1)
count, err := st.Untriaged()
assert.Equal(t, count, 1)
// Triage existing regression.
tr := TriageStatus{
Status: POSITIVE,
Message: "bad",
}
err = st.TriageLow(c, "foo", tr)
assert.NoError(t, err)
// Confirm regression is triaged.
err = testutils.EventuallyConsistent(time.Second, func() error {
ranges, err = st.Range(begin, end)
assert.NoError(t, err)
key := ""
for key = range ranges {
break
}
if ranges[key].ByAlertID["foo"].LowStatus.Status == POSITIVE {
return nil
}
return testutils.TryAgainErr
})
assert.NoError(t, err)
count, err = st.Untriaged()
assert.Equal(t, count, 0)
ranges, err = st.Range(begin, end)
assert.NoError(t, err)
assert.Len(t, ranges, 1)
// Try triaging a regression that doesn't exist.
err = st.TriageHigh(c, "bar", tr)
assert.Error(t, err)
ranges, err = st.Range(begin, end)
assert.NoError(t, err)
assert.Len(t, ranges, 1)
count, err = st.Untriaged()
assert.Equal(t, count, 0)
lookup := func(c *cid.CommitID) (*cid.CommitDetail, error) {
return &cid.CommitDetail{
CommitID: cid.CommitID{
Source: "master",
Offset: 2,
},
Timestamp: 1479235651 + 10,
}, nil
}
err = st.Write(map[string]*Regressions{"master-000002": ranges["master-000001"]}, lookup)
assert.NoError(t, err)
ranges, err = st.Range(begin, end)
assert.NoError(t, err)
assert.Len(t, ranges, 2)
_, ok = ranges["master-000002"]
assert.True(t, ok)
}