blob: 3980ccde86274925345d6264dcfdc4426494aa48 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package main
import (
"testing"
buildbucketpb "go.chromium.org/luci/buildbucket/proto"
)
func mockBuild(revision string) *buildbucketpb.Build {
return &buildbucketpb.Build{
Input: &buildbucketpb.Build_Input{
GitilesCommit: &buildbucketpb.GitilesCommit{
Id: revision,
},
},
}
}
func revisionAccessor(build *buildbucketpb.Build) interface{} {
return build.Input.GitilesCommit.Id
}
func TestGetLastKnownGoodRevision(t *testing.T) {
t.Parallel()
var tests = []struct {
builds [][]*buildbucketpb.Build
gitilesRef string
f accessorFunc
expected interface{}
expectedErr bool
}{
{
builds: [][]*buildbucketpb.Build{},
gitilesRef: "",
f: revisionAccessor,
expected: nil,
expectedErr: true,
},
{
builds: [][]*buildbucketpb.Build{
{
mockBuild("b"),
mockBuild("c"),
mockBuild("d"),
mockBuild("e"),
},
},
gitilesRef: "",
f: revisionAccessor,
expected: "b",
expectedErr: false,
},
{
builds: [][]*buildbucketpb.Build{
{
mockBuild("b"),
mockBuild("c"),
mockBuild("d"),
mockBuild("e"),
mockBuild("f"),
mockBuild("h"),
},
{
mockBuild("a"),
mockBuild("b"),
mockBuild("c"),
mockBuild("e"),
mockBuild("f"),
},
{
mockBuild("c"),
mockBuild("e"),
mockBuild("f"),
mockBuild("i"),
},
{
mockBuild("b"),
mockBuild("e"),
mockBuild("f"),
mockBuild("g"),
mockBuild("i"),
},
},
gitilesRef: "",
f: revisionAccessor,
expected: "e",
expectedErr: false,
},
{
builds: [][]*buildbucketpb.Build{
{
mockBuild("b"),
mockBuild("c"),
mockBuild("d"),
},
{
mockBuild("a"),
mockBuild("b"),
mockBuild("c"),
},
{
mockBuild("c"),
mockBuild("i"),
},
{
mockBuild("e"),
mockBuild("f"),
mockBuild("h"),
},
},
gitilesRef: "",
f: revisionAccessor,
expected: nil,
expectedErr: true,
},
}
for _, test := range tests {
resp, err := getLastKnownGood(test.builds, test.gitilesRef, test.f)
if err == nil {
if test.expectedErr {
t.Errorf("expected error, got nil")
}
} else if !test.expectedErr {
t.Errorf("got unexpected err %v", err)
}
if resp != test.expected {
t.Fatalf("got %s, expected %s", resp, test.expected)
}
}
}