go.fuchsia.dev/infra@v0.0.0-20240507153436-9b593402251b/cmd/lkg/buildbucket_test.go (about) 1 // Copyright 2020 The Fuchsia Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package main 6 7 import ( 8 "testing" 9 10 buildbucketpb "go.chromium.org/luci/buildbucket/proto" 11 ) 12 13 func mockBuild(revision string) *buildbucketpb.Build { 14 return &buildbucketpb.Build{ 15 Input: &buildbucketpb.Build_Input{ 16 GitilesCommit: &buildbucketpb.GitilesCommit{ 17 Id: revision, 18 }, 19 }, 20 } 21 } 22 23 func revisionAccessor(build *buildbucketpb.Build) any { 24 return build.Input.GitilesCommit.Id 25 } 26 27 func TestGetLastKnownGoodRevision(t *testing.T) { 28 t.Parallel() 29 tests := []struct { 30 builds [][]*buildbucketpb.Build 31 gitilesRef string 32 f accessorFunc 33 expected any 34 expectedErr bool 35 }{ 36 { 37 builds: [][]*buildbucketpb.Build{}, 38 gitilesRef: "", 39 f: revisionAccessor, 40 expected: nil, 41 expectedErr: true, 42 }, 43 { 44 builds: [][]*buildbucketpb.Build{ 45 { 46 mockBuild("b"), 47 mockBuild("c"), 48 mockBuild("d"), 49 mockBuild("e"), 50 }, 51 }, 52 gitilesRef: "", 53 f: revisionAccessor, 54 expected: "b", 55 expectedErr: false, 56 }, 57 { 58 builds: [][]*buildbucketpb.Build{ 59 { 60 mockBuild("b"), 61 mockBuild("c"), 62 mockBuild("d"), 63 mockBuild("e"), 64 mockBuild("f"), 65 mockBuild("h"), 66 }, 67 { 68 mockBuild("a"), 69 mockBuild("b"), 70 mockBuild("c"), 71 mockBuild("e"), 72 mockBuild("f"), 73 }, 74 { 75 mockBuild("c"), 76 mockBuild("e"), 77 mockBuild("f"), 78 mockBuild("i"), 79 }, 80 { 81 mockBuild("b"), 82 mockBuild("e"), 83 mockBuild("f"), 84 mockBuild("g"), 85 mockBuild("i"), 86 }, 87 }, 88 gitilesRef: "", 89 f: revisionAccessor, 90 expected: "e", 91 expectedErr: false, 92 }, 93 { 94 builds: [][]*buildbucketpb.Build{ 95 { 96 mockBuild("b"), 97 mockBuild("c"), 98 mockBuild("d"), 99 }, 100 { 101 mockBuild("a"), 102 mockBuild("b"), 103 mockBuild("c"), 104 }, 105 { 106 mockBuild("c"), 107 mockBuild("i"), 108 }, 109 { 110 mockBuild("e"), 111 mockBuild("f"), 112 mockBuild("h"), 113 }, 114 }, 115 gitilesRef: "", 116 f: revisionAccessor, 117 expected: nil, 118 expectedErr: true, 119 }, 120 } 121 for _, test := range tests { 122 resp, err := getLastKnownGood(test.builds, test.gitilesRef, test.f) 123 if err == nil { 124 if test.expectedErr { 125 t.Errorf("expected error, got nil") 126 } 127 } else if !test.expectedErr { 128 t.Errorf("got unexpected error: %s", err) 129 } 130 if resp != test.expected { 131 t.Fatalf("got %s, expected %s", resp, test.expected) 132 } 133 } 134 }