blob: b8332d6e79f187b5d851a8bbe12af8caf52402fb [file] [log] [blame]
package status
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/require"
"go.skia.org/infra/autoroll/go/modes"
"go.skia.org/infra/autoroll/go/revision"
"go.skia.org/infra/autoroll/go/strategy"
"go.skia.org/infra/go/autoroll"
"go.skia.org/infra/go/deepequal"
"go.skia.org/infra/go/ds"
"go.skia.org/infra/go/ds/testutil"
"go.skia.org/infra/go/testutils/unittest"
)
func TestCopyStatus(t *testing.T) {
unittest.SmallTest(t)
recent := []*autoroll.AutoRollIssue{
{
RollingTo: "abc123",
},
{
RollingTo: "def456",
},
}
v := &AutoRollStatus{
AutoRollMiniStatus: AutoRollMiniStatus{
CurrentRollRev: recent[0].RollingTo,
LastRollRev: recent[1].RollingTo,
NumFailedRolls: 3,
NumNotRolledCommits: 6,
},
ChildHead: "abc123",
ChildName: "child-repo",
CurrentRoll: recent[0],
Error: "some error!",
FullHistoryUrl: "http://history",
IssueUrlBase: "http://issue.url/",
LastRoll: recent[1],
NotRolledRevisions: []*revision.Revision{
{
Id: "a",
},
{
Id: "b",
},
},
ParentName: "parent-repo",
Recent: recent,
Status: "some-status",
ThrottledUntil: time.Now().Unix(),
ValidModes: modes.VALID_MODES,
ValidStrategies: []string{strategy.ROLL_STRATEGY_SINGLE, strategy.ROLL_STRATEGY_BATCH},
}
deepequal.AssertCopy(t, v, v.Copy())
}
func TestStatus(t *testing.T) {
unittest.LargeTest(t)
ctx := context.Background()
testutil.InitDatastore(t, ds.KIND_AUTOROLL_STATUS)
// No data in the datastore, but we shouldn't return an error.
rollerName := "test-roller"
c, err := NewCache(ctx, rollerName)
require.NoError(t, err)
// We should return empty until there's actually some data.
deepequal.AssertDeepEqual(t, &AutoRollStatus{}, c.Get())
deepequal.AssertDeepEqual(t, &AutoRollMiniStatus{}, c.GetMini())
// Insert a status.
recent := []*autoroll.AutoRollIssue{
{
RollingTo: "abc123",
},
{
RollingTo: "def456",
},
}
s := &AutoRollStatus{
AutoRollMiniStatus: AutoRollMiniStatus{
CurrentRollRev: recent[0].RollingTo,
LastRollRev: recent[1].RollingTo,
NumFailedRolls: 3,
NumNotRolledCommits: 6,
},
CurrentRoll: recent[0],
Error: "some error!",
FullHistoryUrl: "http://history",
IssueUrlBase: "http://issue.url/",
LastRoll: recent[1],
Recent: recent,
Status: "some-status",
ThrottledUntil: time.Now().Unix(),
ValidModes: modes.VALID_MODES,
ValidStrategies: []string{strategy.ROLL_STRATEGY_SINGLE, strategy.ROLL_STRATEGY_BATCH},
}
require.NoError(t, Set(ctx, rollerName, s))
actual, err := Get(ctx, rollerName)
require.NoError(t, err)
deepequal.AssertDeepEqual(t, s, actual)
// Cache should return empty until we Update(), at which point we should
// get back the same status.
require.Equal(t, &AutoRollStatus{}, c.Get())
require.NoError(t, c.Update(ctx))
deepequal.AssertDeepEqual(t, s, c.Get())
// Ensure that we don't confuse multiple rollers.
c2, err := NewCache(ctx, "roller2")
require.NoError(t, err)
require.Equal(t, &AutoRollStatus{}, c2.Get())
require.Equal(t, &AutoRollMiniStatus{}, c2.GetMini())
}