| // 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) |
| } |
| } |
| } |