blob: 27b3afefab3be39c5ae27c860b18a13528749545 [file] [log] [blame]
package autoroll
import (
"context"
"testing"
"time"
assert "github.com/stretchr/testify/require"
"go.skia.org/infra/go/buildbucket"
"go.skia.org/infra/go/jsonutils"
"go.skia.org/infra/go/testutils"
)
func TestTrybotResults(t *testing.T) {
testutils.SmallTest(t)
// Create a fake roll with one in-progress trybot.
roll := &AutoRollIssue{
Closed: false,
Committed: false,
CommitQueue: true,
CommitQueueDryRun: true,
Created: time.Now(),
Issue: 123,
Modified: time.Now(),
Patchsets: []int64{1},
Subject: "Roll src/third_party/skia abc123..def456 (3 commits).",
}
roll.Result = rollResult(roll)
from, to, err := RollRev(context.Background(), roll.Subject, func(ctx context.Context, h string) (string, error) {
return h, nil
})
assert.NoError(t, err)
roll.RollingFrom = from
roll.RollingTo = to
trybot := &buildbucket.Build{
Created: jsonutils.Time(time.Now().UTC()),
Status: TRYBOT_STATUS_STARTED,
ParametersJson: "{\"builder_name\":\"fake-builder\",\"properties\":{\"category\":\"cq\"}}",
}
tryResult, err := TryResultFromBuildbucket(trybot)
assert.NoError(t, err)
roll.TryResults = []*TryResult{tryResult}
assert.False(t, roll.AllTrybotsFinished())
assert.False(t, roll.AllTrybotsSucceeded())
// Trybot failed.
tryResult.Status = TRYBOT_STATUS_COMPLETED
tryResult.Result = TRYBOT_RESULT_FAILURE
assert.True(t, roll.AllTrybotsFinished())
assert.False(t, roll.AllTrybotsSucceeded())
retry := &buildbucket.Build{
Created: jsonutils.Time(time.Now().UTC()),
Status: TRYBOT_STATUS_STARTED,
ParametersJson: "{\"builder_name\":\"fake-builder\",\"properties\":{\"category\":\"cq\"}}",
}
tryResult, err = TryResultFromBuildbucket(retry)
assert.NoError(t, err)
roll.TryResults = append(roll.TryResults, tryResult)
assert.False(t, roll.AllTrybotsFinished())
assert.False(t, roll.AllTrybotsSucceeded())
// The second try result, a retry of the first, succeeded.
tryResult.Status = TRYBOT_STATUS_COMPLETED
tryResult.Result = TRYBOT_RESULT_SUCCESS
assert.True(t, roll.AllTrybotsFinished())
assert.True(t, roll.AllTrybotsSucceeded())
// Verify that the ordering of try results does not matter.
roll.TryResults[0], roll.TryResults[1] = roll.TryResults[1], roll.TryResults[0]
assert.True(t, roll.AllTrybotsFinished())
assert.True(t, roll.AllTrybotsSucceeded())
// Verify that an "experimental" trybot doesn't count against us.
exp := &buildbucket.Build{
Created: jsonutils.Time(time.Now().UTC()),
Result: TRYBOT_RESULT_SUCCESS,
Status: TRYBOT_STATUS_COMPLETED,
ParametersJson: "{\"builder_name\":\"fake-builder\",\"properties\":{\"category\":\"cq-experimental\"}}",
}
tryResult, err = TryResultFromBuildbucket(exp)
assert.NoError(t, err)
roll.TryResults = append(roll.TryResults, tryResult)
assert.True(t, roll.AllTrybotsFinished())
assert.True(t, roll.AllTrybotsSucceeded())
}
func TestRollRev(t *testing.T) {
testutils.SmallTest(t)
test := func(msg, from, to string) {
assert.True(t, ROLL_REV_REGEX.MatchString(msg))
a, b, err := RollRev(context.Background(), msg, nil)
assert.NoError(t, err)
assert.Equal(t, from, a)
assert.Equal(t, to, b)
}
test("Roll skia/third_party/externals/skcms/ 839318c8b..0e960c612 (1 commit)", "839318c8b", "0e960c612")
test("Roll src/third_party/skia/ 2a223358e..ace53c313 (6 commits)", "2a223358e", "ace53c313")
test("Roll src/third_party/skia/ 2a223358e..ace53c313 (6 commits).", "2a223358e", "ace53c313")
test("Roll src/third_party/skia/ 2a223358e..ace53c313", "2a223358e", "ace53c313")
test("Roll AFDO from 66.0.3336.3_rc-r1 to 66.0.3337.3_rc-r1", "66.0.3336.3_rc-r1", "66.0.3337.3_rc-r1")
test("[manifest] Roll skia 1f1bb9c0b..4150eea6c (1 commits)", "1f1bb9c0b", "4150eea6c")
test("Roll Fuchsia SDK from abc123 to def456", "abc123", "def456")
}