blob: 826143b4a821b49147cde19f75ec5e812a2ae4b4 [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) any {
return build.Input.GitilesCommit.Id
}
func TestGetLastKnownGoodRevision(t *testing.T) {
t.Parallel()
tests := []struct {
builds [][]*buildbucketpb.Build
gitilesRef string
f accessorFunc
expected any
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 error: %s", err)
}
if resp != test.expected {
t.Fatalf("got %s, expected %s", resp, test.expected)
}
}
}