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  }