github.com/zppinho/prow@v0.0.0-20240510014325-1738badeb017/pkg/plugins/testfreeze/checker/checker_test.go (about) 1 /* 2 Copyright 2022 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package checker 18 19 import ( 20 "errors" 21 "testing" 22 "time" 23 24 "github.com/go-git/go-git/v5/plumbing" 25 "github.com/sirupsen/logrus" 26 "github.com/stretchr/testify/assert" 27 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 28 29 v1 "sigs.k8s.io/prow/pkg/apis/prowjobs/v1" 30 "sigs.k8s.io/prow/pkg/plugins/testfreeze/checker/checkerfakes" 31 ) 32 33 func TestInTestFreeze(t *testing.T) { 34 t.Parallel() 35 36 errTest := errors.New("") 37 38 releaseBranch := func(v string) *plumbing.Reference { 39 return plumbing.NewReferenceFromStrings("refs/heads/release-"+v, "") 40 } 41 42 tag := func(v string) *plumbing.Reference { 43 return plumbing.NewReferenceFromStrings("refs/tags/"+v, "") 44 } 45 46 testTime := metav1.Now() 47 48 for _, tc := range []struct { 49 name string 50 prepare func(*checkerfakes.FakeChecker) 51 assert func(*Result, error) 52 }{ 53 { 54 name: "success no test freez", 55 prepare: func(mock *checkerfakes.FakeChecker) { 56 mock.ListRefsReturns([]*plumbing.Reference{ 57 tag("wrong"), // unable to parse this tag, but don't error 58 releaseBranch("1"), // unable to parse this branch, but don't error 59 releaseBranch("1.18"), 60 tag("1.18.0"), 61 releaseBranch("1.23"), 62 tag("1.23.0"), 63 releaseBranch("1.22"), 64 tag("1.22.0"), 65 }, nil) 66 }, 67 assert: func(res *Result, err error) { 68 assert.False(t, res.InTestFreeze) 69 assert.Equal(t, "release-1.23", res.Branch) 70 assert.Equal(t, "v1.23.0", res.Tag) 71 assert.Empty(t, res.LastFastForward) 72 assert.Nil(t, err) 73 }, 74 }, 75 { 76 name: "success in test freeze", 77 prepare: func(mock *checkerfakes.FakeChecker) { 78 mock.ListRefsReturns([]*plumbing.Reference{ 79 releaseBranch("1.18"), 80 releaseBranch("1.24"), 81 releaseBranch("1.22"), 82 tag("1.18.0"), 83 tag("1.22.0"), 84 }, nil) 85 mock.UnmarshalProwJobsReturns(&v1.ProwJobList{ 86 Items: []v1.ProwJob{ 87 { 88 Spec: v1.ProwJobSpec{Job: jobName}, 89 Status: v1.ProwJobStatus{ 90 State: v1.SuccessState, 91 CompletionTime: &testTime, 92 }, 93 }, 94 }, 95 }, nil) 96 }, 97 assert: func(res *Result, err error) { 98 assert.True(t, res.InTestFreeze) 99 assert.Equal(t, "release-1.24", res.Branch) 100 assert.Equal(t, "v1.24.0", res.Tag) 101 assert.Equal(t, "v1.24.0", res.Tag) 102 assert.Equal(t, testTime.Format(time.UnixDate), res.LastFastForward) 103 assert.Nil(t, err) 104 }, 105 }, 106 { 107 name: "error no latest releae branch found", 108 prepare: func(mock *checkerfakes.FakeChecker) { 109 mock.ListRefsReturns([]*plumbing.Reference{ 110 tag("1.22.0"), 111 }, nil) 112 }, 113 assert: func(res *Result, err error) { 114 assert.Nil(t, res) 115 assert.NotNil(t, err) 116 }, 117 }, 118 { 119 name: "error on list refs", 120 prepare: func(mock *checkerfakes.FakeChecker) { 121 mock.ListRefsReturns(nil, errTest) 122 }, 123 assert: func(res *Result, err error) { 124 assert.Nil(t, res) 125 assert.NotNil(t, err) 126 }, 127 }, 128 { 129 name: "error on HttpGet", 130 prepare: func(mock *checkerfakes.FakeChecker) { 131 mock.ListRefsReturns([]*plumbing.Reference{ 132 releaseBranch("1.18"), 133 releaseBranch("1.24"), 134 releaseBranch("1.22"), 135 tag("1.18.0"), 136 tag("1.22.0"), 137 }, nil) 138 mock.HttpGetReturns(nil, errTest) 139 }, 140 assert: func(res *Result, err error) { 141 assert.True(t, res.InTestFreeze) 142 assert.Equal(t, "release-1.24", res.Branch) 143 assert.Equal(t, "v1.24.0", res.Tag) 144 assert.Equal(t, "v1.24.0", res.Tag) 145 assert.Equal(t, unknownTime, res.LastFastForward) 146 assert.Nil(t, err) 147 }, 148 }, 149 } { 150 t.Run(tc.name, func(t *testing.T) { 151 mock := &checkerfakes.FakeChecker{} 152 tc.prepare(mock) 153 154 sut := New(logrus.NewEntry(logrus.StandardLogger())) 155 sut.checker = mock 156 157 res, err := sut.InTestFreeze() 158 159 tc.assert(res, err) 160 }) 161 } 162 }