commit
						f9ba4b9394
					
				|  | @ -878,16 +878,29 @@ You need to regenerate the generated code as instructed in the sections above. | |||
| Part of our testing regimen for APIs is to "fuzz" (fill with random values) API | ||||
| objects and then convert them to and from the different API versions. This is | ||||
| a great way of exposing places where you lost information or made bad | ||||
| assumptions. If you have added any fields which need very careful formatting | ||||
| (the test does not run validation) or if you have made assumptions such as | ||||
| "this slice will always have at least 1 element", you may get an error or even | ||||
| a panic from the `serialization_test`. If so, look at the diff it produces (or | ||||
| the backtrace in case of a panic) and figure out what you forgot. Encode that | ||||
| into the fuzzer's custom fuzz functions. Hint: if you added defaults for a | ||||
| field, that field will need to have a custom fuzz function that ensures that the | ||||
| field is fuzzed to a non-empty value. | ||||
| assumptions.  | ||||
| 
 | ||||
| The fuzzer can be found in `pkg/api/testing/fuzzer.go`. | ||||
| The fuzzer works by creating a random API object and calling the custom fuzzer | ||||
| function in `pkg/apis/$GROUP/fuzzer/fuzzer.go`. The resulting object is then | ||||
| round-tripped from one api version to another, and verified to be the same as | ||||
| what was started with. Validation is not run during this process, but defaulting | ||||
| is.   | ||||
| 
 | ||||
| If you have added any fields which need very careful formatting (the test does | ||||
| not run validation) or if you have made assumptions during defaulting such as | ||||
| "this slice will always have at least 1 element", you may get an error or even a | ||||
| panic from the `k8s.io/kubernetes/pkg/api/testing.TestRoundTripTypes` in | ||||
| `./pkg/api/testing/serialization_test.go`. | ||||
| 
 | ||||
| If you default any fields, you must check that in the custom fuzzer function, | ||||
| because the fuzzer may leave some fields empty. If your object has a structure | ||||
| reference, the fuzzer may leave that nil, or it may create a random object. Your | ||||
| custom fuzzer function must ensure that defaulting does not further change the | ||||
| object, as that will show up as a diff in the round trip test. | ||||
| 
 | ||||
| Finally, the fuzz test runs without any feature gate configuration. If | ||||
| defaulting or other behavior is behind a feature gate, beware that the fuzz | ||||
| behavior will change when the feature gate becomes default on. | ||||
| 
 | ||||
| ## Update the semantic comparisons | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue