@@ -17,9 +17,13 @@ limitations under the License.
17
17
package e2e
18
18
19
19
import (
20
+ "bytes"
20
21
"fmt"
22
+ "os"
21
23
"path/filepath"
22
24
25
+ log "github.com/sirupsen/logrus"
26
+
23
27
"sigs.k8s.io/kubebuilder/v4/pkg/machinery"
24
28
)
25
29
@@ -77,41 +81,58 @@ func (f *WebhookTestUpdater) GetMarkers() []machinery.Marker {
77
81
78
82
// GetCodeFragments implements file.Inserter
79
83
func (f * WebhookTestUpdater ) GetCodeFragments () machinery.CodeFragmentsMap {
80
- codeFragments := machinery.CodeFragmentsMap {}
81
84
if ! f .WireWebhook {
82
85
return nil
83
86
}
84
- codeFragments [machinery .NewMarkerFor (f .GetPath (), webhookChecksMarker )] = append (
85
- codeFragments [machinery .NewMarkerFor (f .GetPath (), webhookChecksMarker )],
86
- webhookChecksFragment ,
87
- )
88
-
89
- if f .Resource != nil && f .Resource .HasDefaultingWebhook () {
90
- mutatingWebhookCode := fmt .Sprintf (mutatingWebhookChecksFragment , f .ProjectName )
91
- codeFragments [machinery .NewMarkerFor (f .GetPath (), webhookChecksMarker )] = append (
92
- codeFragments [machinery .NewMarkerFor (f .GetPath (), webhookChecksMarker )],
93
- mutatingWebhookCode ,
94
- )
87
+
88
+ filePath := f .GetPath ()
89
+
90
+ content , err := os .ReadFile (filePath )
91
+ if err != nil {
92
+ log .Warnf ("Unable to read %q: %v" , filePath , err )
93
+ log .Warnf ("Webhook test code injection will be skipped for this file." )
94
+ log .Warnf ("This typically occurs when the file was removed and is missing." )
95
+ log .Warnf ("If you intend to scaffold webhook tests, ensure the file and its markers exist." )
96
+ return nil
95
97
}
96
98
97
- if f .Resource .HasValidationWebhook () {
98
- validatingWebhookCode := fmt .Sprintf (validatingWebhookChecksFragment , f .ProjectName )
99
- codeFragments [machinery .NewMarkerFor (f .GetPath (), webhookChecksMarker )] = append (
100
- codeFragments [machinery .NewMarkerFor (f .GetPath (), webhookChecksMarker )],
101
- validatingWebhookCode ,
102
- )
99
+ codeFragments := machinery.CodeFragmentsMap {}
100
+ markers := f .GetMarkers ()
101
+
102
+ for _ , marker := range markers {
103
+ if ! bytes .Contains (content , []byte (marker .String ())) {
104
+ log .Warnf ("Marker %q not found in %s; skipping injection of webhook test code" ,
105
+ marker .String (), filePath )
106
+ continue // skip this marker
107
+ }
108
+
109
+ var fragments []string
110
+ fragments = append (fragments , webhookChecksFragment )
111
+
112
+ if f .Resource != nil && f .Resource .HasDefaultingWebhook () {
113
+ mutatingWebhookCode := fmt .Sprintf (mutatingWebhookChecksFragment , f .ProjectName )
114
+ fragments = append (fragments , mutatingWebhookCode )
115
+ }
116
+
117
+ if f .Resource != nil && f .Resource .HasValidationWebhook () {
118
+ validatingWebhookCode := fmt .Sprintf (validatingWebhookChecksFragment , f .ProjectName )
119
+ fragments = append (fragments , validatingWebhookCode )
120
+ }
121
+
122
+ if f .Resource != nil && f .Resource .HasConversionWebhook () {
123
+ conversionWebhookCode := fmt .Sprintf (
124
+ conversionWebhookChecksFragment ,
125
+ f .Resource .Kind ,
126
+ f .Resource .Plural + "." + f .Resource .Group + "." + f .Resource .Domain ,
127
+ )
128
+ fragments = append (fragments , conversionWebhookCode )
129
+ }
130
+
131
+ codeFragments [marker ] = fragments
103
132
}
104
133
105
- if f .Resource .HasConversionWebhook () {
106
- conversionWebhookCode := fmt .Sprintf (
107
- conversionWebhookChecksFragment ,
108
- f .Resource .Kind ,
109
- f .Resource .Plural + "." + f .Resource .Group + "." + f .Resource .Domain ,
110
- )
111
- codeFragments [machinery .NewMarkerFor (f .GetPath (), webhookChecksMarker )] = append (
112
- codeFragments [machinery .NewMarkerFor (f .GetPath (), webhookChecksMarker )],
113
- conversionWebhookCode ,
114
- )
134
+ if len (codeFragments ) == 0 {
135
+ return nil
115
136
}
116
137
117
138
return codeFragments
0 commit comments