k8s.io/kubernetes@v1.29.3/test/e2e/framework/internal/unittests/bugs/bugs.go (about) 1 /* 2 Copyright 2023 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 bugs 18 19 import ( 20 "bytes" 21 "testing" 22 23 "github.com/onsi/ginkgo/v2" 24 "k8s.io/kubernetes/test/e2e/framework" 25 "k8s.io/kubernetes/test/e2e/framework/internal/unittests/bugs/features" 26 ) 27 28 // The line number of the following code is checked in BugOutput below. 29 // Be careful when moving it around or changing the import statements above. 30 // Here are some intentionally blank lines that can be removed to compensate 31 // for future additional import statements. 32 // 33 // 34 // 35 // 36 // 37 // 38 // 39 // 40 // 41 // 42 // 43 // 44 // 45 // 46 // 47 // 48 // 49 // 50 // This must be line #50. 51 52 func helper() { 53 framework.RecordBug(framework.NewBug("new bug", 0)) 54 framework.RecordBug(framework.NewBug("parent", 1)) 55 } 56 57 func RecordBugs() { 58 helper() 59 framework.RecordBug(framework.Bug{FileName: "buggy/buggy.go", LineNumber: 100, Message: "hello world"}) 60 framework.RecordBug(framework.Bug{FileName: "some/relative/path/buggy.go", LineNumber: 200, Message: " with spaces \n"}) 61 } 62 63 var ( 64 validFeature = framework.ValidFeatures.Add("feature-foo") 65 validEnvironment = framework.ValidEnvironments.Add("Linux") 66 validNodeFeature = framework.ValidNodeFeatures.Add("node-feature-foo") 67 ) 68 69 func Describe() { 70 // Normally a single line would be better, but this is an extreme example and 71 // thus uses multiple. 72 framework.SIGDescribe("testing")("abc", 73 // Bugs in parameters will be attributed to the Describe call, not the line of the parameter. 74 "", // buggy: not needed 75 " space1", // buggy: leading white space 76 "space2 ", // buggy: trailing white space 77 framework.WithFeature("no-such-feature"), 78 framework.WithFeature(validFeature), 79 framework.WithEnvironment("no-such-env"), 80 framework.WithEnvironment(validEnvironment), 81 framework.WithNodeFeature("no-such-node-env"), 82 framework.WithNodeFeature(validNodeFeature), 83 framework.WithFeatureGate("no-such-feature-gate"), 84 framework.WithFeatureGate(features.Alpha), 85 framework.WithFeatureGate(features.Beta), 86 framework.WithFeatureGate(features.GA), 87 framework.WithConformance(), 88 framework.WithNodeConformance(), 89 framework.WithSlow(), 90 framework.WithSerial(), 91 framework.WithDisruptive(), 92 framework.WithLabel("custom-label"), 93 "xyz", // okay, becomes part of the final text 94 func() { 95 f := framework.NewDefaultFramework("abc") 96 97 framework.Context("y", framework.WithLabel("foo"), func() { 98 framework.It("should", f.WithLabel("bar"), func() { 99 }) 100 }) 101 102 f.Context("x", f.WithLabel("foo"), func() { 103 f.It("should", f.WithLabel("bar"), func() { 104 }) 105 }) 106 }, 107 ) 108 109 framework.SIGDescribe("123") 110 } 111 112 const ( 113 numBugs = 3 114 bugOutput = `ERROR: bugs.go:53: new bug 115 ERROR: bugs.go:58: parent 116 ERROR: bugs.go:72: empty strings as separators are unnecessary and need to be removed 117 ERROR: bugs.go:72: trailing or leading spaces are unnecessary and need to be removed: " space1" 118 ERROR: bugs.go:72: trailing or leading spaces are unnecessary and need to be removed: "space2 " 119 ERROR: bugs.go:77: WithFeature: unknown feature "no-such-feature" 120 ERROR: bugs.go:79: WithEnvironment: unknown environment "no-such-env" 121 ERROR: bugs.go:81: WithNodeFeature: unknown environment "no-such-node-env" 122 ERROR: bugs.go:83: WithFeatureGate: the feature gate "no-such-feature-gate" is unknown 123 ERROR: bugs.go:109: SIG label must be lowercase, no spaces and no sig- prefix, got instead: "123" 124 ERROR: buggy/buggy.go:100: hello world 125 ERROR: some/relative/path/buggy.go:200: with spaces 126 ` 127 // Used by unittests/list-tests. It's sorted by test name, not source code location. 128 ListTestsOutput = `The following spec names can be used with 'ginkgo run --focus/skip': 129 ../bugs/bugs.go:103: [sig-testing] abc space1 space2 [Feature:no-such-feature] [Feature:feature-foo] [Environment:no-such-env] [Environment:Linux] [NodeFeature:no-such-node-env] [NodeFeature:node-feature-foo] [FeatureGate:no-such-feature-gate] [FeatureGate:TestAlphaFeature] [Alpha] [FeatureGate:TestBetaFeature] [Beta] [FeatureGate:TestGAFeature] [Conformance] [NodeConformance] [Slow] [Serial] [Disruptive] [custom-label] xyz x [foo] should [bar] 130 ../bugs/bugs.go:98: [sig-testing] abc space1 space2 [Feature:no-such-feature] [Feature:feature-foo] [Environment:no-such-env] [Environment:Linux] [NodeFeature:no-such-node-env] [NodeFeature:node-feature-foo] [FeatureGate:no-such-feature-gate] [FeatureGate:TestAlphaFeature] [Alpha] [FeatureGate:TestBetaFeature] [Beta] [FeatureGate:TestGAFeature] [Conformance] [NodeConformance] [Slow] [Serial] [Disruptive] [custom-label] xyz y [foo] should [bar] 131 132 ` 133 134 // Used by unittests/list-labels. 135 ListLabelsOutput = `The following labels can be used with 'gingko run --label-filter': 136 Alpha 137 Beta 138 Conformance 139 Disruptive 140 Environment:Linux 141 Environment:no-such-env 142 Feature:feature-foo 143 Feature:no-such-feature 144 FeatureGate:TestAlphaFeature 145 FeatureGate:TestBetaFeature 146 FeatureGate:TestGAFeature 147 FeatureGate:no-such-feature-gate 148 NodeConformance 149 NodeFeature:no-such-node-env 150 NodeFeature:node-feature-foo 151 Serial 152 Slow 153 bar 154 custom-label 155 foo 156 sig-testing 157 158 ` 159 ) 160 161 func GetGinkgoOutput(t *testing.T) string { 162 var buffer bytes.Buffer 163 ginkgo.GinkgoWriter.TeeTo(&buffer) 164 t.Cleanup(ginkgo.GinkgoWriter.ClearTeeWriters) 165 166 suiteConfig, reporterConfig := framework.CreateGinkgoConfig() 167 fakeT := &testing.T{} 168 ginkgo.RunSpecs(fakeT, "Buggy Suite", suiteConfig, reporterConfig) 169 170 return buffer.String() 171 }