sigs.k8s.io/prow@v0.0.0-20240503223140-c5e374dc7eb1/pkg/plugins/testfreeze/testfreeze_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 testfreeze 18 19 import ( 20 "errors" 21 "testing" 22 23 "github.com/sirupsen/logrus" 24 "github.com/stretchr/testify/assert" 25 26 "sigs.k8s.io/prow/pkg/github" 27 "sigs.k8s.io/prow/pkg/plugins/testfreeze/checker" 28 "sigs.k8s.io/prow/pkg/plugins/testfreeze/testfreezefakes" 29 ) 30 31 var errTest = errors.New("") 32 33 func TestHandle(t *testing.T) { 34 t.Parallel() 35 36 for _, tc := range []struct { 37 name string 38 action github.PullRequestEventAction 39 org, repo, branch string 40 prepare func(*testfreezefakes.FakeVerifier) 41 assert func(*testfreezefakes.FakeVerifier, error) 42 }{ 43 { 44 name: "success in test freeze", 45 action: github.PullRequestActionOpened, 46 org: defaultKubernetesRepoAndOrg, 47 repo: defaultKubernetesRepoAndOrg, 48 branch: defaultKubernetesBranch, 49 prepare: func(mock *testfreezefakes.FakeVerifier) { 50 mock.CheckInTestFreezeReturns(&checker.Result{ 51 InTestFreeze: true, 52 Tag: "v1.23.0", 53 Branch: "release-1.23", 54 LastFastForward: "Wed May 4 16:15:37 CEST 2022", 55 }, nil) 56 }, 57 assert: func(mock *testfreezefakes.FakeVerifier, err error) { 58 assert.Nil(t, err) 59 assert.Equal(t, 1, mock.CreateCommentCallCount()) 60 _, _, _, _, comment := mock.CreateCommentArgsForCall(0) 61 assert.Contains(t, comment, "Please note that we're already") 62 assert.Contains(t, comment, "for the `release-1.23` branch") 63 assert.Contains(t, comment, "Fast forwards are scheduled to happen every 6 hours, whereas the most recent run was: Wed May 4 16:15:37 CEST 2022") 64 }, 65 }, 66 { 67 name: "success not in test freeze", 68 action: github.PullRequestActionOpened, 69 org: defaultKubernetesRepoAndOrg, 70 repo: defaultKubernetesRepoAndOrg, 71 branch: defaultKubernetesBranch, 72 prepare: func(mock *testfreezefakes.FakeVerifier) { 73 mock.CheckInTestFreezeReturns(&checker.Result{}, nil) 74 }, 75 assert: func(mock *testfreezefakes.FakeVerifier, err error) { 76 assert.Nil(t, err) 77 assert.Equal(t, 0, mock.CreateCommentCallCount()) 78 }, 79 }, 80 { 81 name: "success filtered action", 82 action: github.PullRequestActionClosed, 83 org: defaultKubernetesRepoAndOrg, 84 repo: defaultKubernetesRepoAndOrg, 85 branch: defaultKubernetesBranch, 86 prepare: func(mock *testfreezefakes.FakeVerifier) {}, 87 assert: func(mock *testfreezefakes.FakeVerifier, err error) { 88 assert.Zero(t, mock.CreateCommentCallCount()) 89 assert.Nil(t, err) 90 }, 91 }, 92 { 93 name: "success filtered org", 94 action: github.PullRequestActionOpened, 95 org: "invalid", 96 repo: defaultKubernetesRepoAndOrg, 97 branch: defaultKubernetesBranch, 98 prepare: func(mock *testfreezefakes.FakeVerifier) {}, 99 assert: func(mock *testfreezefakes.FakeVerifier, err error) { 100 assert.Zero(t, mock.CreateCommentCallCount()) 101 assert.Nil(t, err) 102 }, 103 }, 104 { 105 name: "success filtered repo", 106 action: github.PullRequestActionOpened, 107 org: defaultKubernetesRepoAndOrg, 108 repo: "invalid", 109 branch: defaultKubernetesBranch, 110 prepare: func(mock *testfreezefakes.FakeVerifier) {}, 111 assert: func(mock *testfreezefakes.FakeVerifier, err error) { 112 assert.Zero(t, mock.CreateCommentCallCount()) 113 assert.Nil(t, err) 114 }, 115 }, 116 { 117 name: "success filtered branch", 118 action: github.PullRequestActionOpened, 119 org: defaultKubernetesRepoAndOrg, 120 repo: defaultKubernetesRepoAndOrg, 121 branch: "invalid", 122 prepare: func(mock *testfreezefakes.FakeVerifier) {}, 123 assert: func(mock *testfreezefakes.FakeVerifier, err error) { 124 assert.Zero(t, mock.CreateCommentCallCount()) 125 assert.Nil(t, err) 126 }, 127 }, 128 { 129 name: "error CheckInTestFreeze", 130 action: github.PullRequestActionOpened, 131 org: defaultKubernetesRepoAndOrg, 132 repo: defaultKubernetesRepoAndOrg, 133 branch: defaultKubernetesBranch, 134 prepare: func(mock *testfreezefakes.FakeVerifier) { 135 mock.CheckInTestFreezeReturns(nil, errTest) 136 }, 137 assert: func(mock *testfreezefakes.FakeVerifier, err error) { 138 assert.NotNil(t, err) 139 }, 140 }, 141 { 142 name: "error CreateComment", 143 action: github.PullRequestActionOpened, 144 org: defaultKubernetesRepoAndOrg, 145 repo: defaultKubernetesRepoAndOrg, 146 branch: defaultKubernetesBranch, 147 prepare: func(mock *testfreezefakes.FakeVerifier) { 148 mock.CheckInTestFreezeReturns(&checker.Result{ 149 InTestFreeze: true, 150 }, nil) 151 mock.CreateCommentReturns(errTest) 152 }, 153 assert: func(mock *testfreezefakes.FakeVerifier, err error) { 154 assert.NotNil(t, err) 155 }, 156 }, 157 } { 158 t.Run(tc.name, func(t *testing.T) { 159 mock := &testfreezefakes.FakeVerifier{} 160 tc.prepare(mock) 161 162 sut := newHandler() 163 sut.verifier = mock 164 165 entry := logrus.NewEntry(logrus.StandardLogger()) 166 err := sut.handle(entry, nil, tc.action, 0, tc.org, tc.repo, tc.branch) 167 tc.assert(mock, err) 168 }) 169 } 170 }