Documentation ¶
Index ¶
- Variables
- func CompatibilityTestObject(scheme *runtime.Scheme, gvk schema.GroupVersionKind, ...) (runtime.Object, error)
- func GlobalNonRoundTrippableTypes() sets.String
- func RoundTripExternalTypes(t *testing.T, scheme *runtime.Scheme, ...)
- func RoundTripExternalTypesWithoutProtobuf(t *testing.T, scheme *runtime.Scheme, ...)
- func RoundTripProtobufTestForAPIGroup(t *testing.T, installFn InstallFunc, fuzzingFuncs fuzzer.FuzzerFuncs)
- func RoundTripProtobufTestForScheme(t *testing.T, scheme *runtime.Scheme, fuzzingFuncs fuzzer.FuzzerFuncs)
- func RoundTripSpecificKind(t *testing.T, gvk schema.GroupVersionKind, scheme *runtime.Scheme, ...)
- func RoundTripSpecificKindWithoutProtobuf(t *testing.T, gvk schema.GroupVersionKind, scheme *runtime.Scheme, ...)
- func RoundTripTestForAPIGroup(t *testing.T, installFn InstallFunc, fuzzingFuncs fuzzer.FuzzerFuncs)
- func RoundTripTestForScheme(t *testing.T, scheme *runtime.Scheme, fuzzingFuncs fuzzer.FuzzerFuncs)
- func RoundTripTypes(t *testing.T, scheme *runtime.Scheme, ...)
- func RoundTripTypesWithoutProtobuf(t *testing.T, scheme *runtime.Scheme, ...)
- func RoundtripToUnstructured(t *testing.T, scheme *runtime.Scheme, funcs fuzzer.FuzzerFuncs, ...)
- type CompatibilityTestOptions
- type FillFunc
- type InstallFunc
Constants ¶
This section is empty.
Variables ¶
var FuzzIters = flag.Int("fuzz-iters", defaultFuzzIters, "How many fuzzing iterations to do.")
Functions ¶
func CompatibilityTestObject ¶
func CompatibilityTestObject(scheme *runtime.Scheme, gvk schema.GroupVersionKind, fillFuncs map[reflect.Type]FillFunc) (runtime.Object, error)
CompatibilityTestObject returns a deterministically filled object for the specified GVK
func GlobalNonRoundTrippableTypes ¶ added in v0.18.0
GlobalNonRoundTrippableTypes returns the kinds that are effectively reserved across all GroupVersions. They don't roundtrip and thus can be excluded in any custom/downstream roundtrip tests
kinds := scheme.AllKnownTypes() for gvk := range kinds { if roundtrip.GlobalNonRoundTrippableTypes().Has(gvk.Kind) { continue } t.Run(gvk.Group+"."+gvk.Version+"."+gvk.Kind, func(t *testing.T) { // roundtrip test }) }
func RoundTripExternalTypes ¶
func RoundTripExternalTypes(t *testing.T, scheme *runtime.Scheme, codecFactory runtimeserializer.CodecFactory, fuzzer *fuzz.Fuzzer, nonRoundTrippableTypes map[schema.GroupVersionKind]bool)
RoundTripExternalTypes applies the round-trip test to all external round-trippable Kinds in the scheme. It will skip all the GroupVersionKinds in the nonRoundTripExternalTypes list .
func RoundTripExternalTypesWithoutProtobuf ¶ added in v0.18.0
func RoundTripExternalTypesWithoutProtobuf(t *testing.T, scheme *runtime.Scheme, codecFactory runtimeserializer.CodecFactory, fuzzer *fuzz.Fuzzer, nonRoundTrippableTypes map[schema.GroupVersionKind]bool)
RoundTripExternalTypesWithoutProtobuf applies the round-trip test to all external round-trippable Kinds in the scheme. It will skip all the GroupVersionKinds in the nonRoundTripExternalTypes list.
func RoundTripProtobufTestForAPIGroup ¶
func RoundTripProtobufTestForAPIGroup(t *testing.T, installFn InstallFunc, fuzzingFuncs fuzzer.FuzzerFuncs)
RoundTripProtobufTestForAPIGroup is convenient to call from your install package to make sure that a "bare" install of your group provides enough information to round trip
func RoundTripProtobufTestForScheme ¶
func RoundTripProtobufTestForScheme(t *testing.T, scheme *runtime.Scheme, fuzzingFuncs fuzzer.FuzzerFuncs)
RoundTripProtobufTestForScheme is convenient to call if you already have a scheme and want to make sure that its well-formed
func RoundTripSpecificKind ¶
func RoundTripSpecificKind(t *testing.T, gvk schema.GroupVersionKind, scheme *runtime.Scheme, codecFactory runtimeserializer.CodecFactory, fuzzer *fuzz.Fuzzer, nonRoundTrippableTypes map[schema.GroupVersionKind]bool)
func RoundTripSpecificKindWithoutProtobuf ¶
func RoundTripSpecificKindWithoutProtobuf(t *testing.T, gvk schema.GroupVersionKind, scheme *runtime.Scheme, codecFactory runtimeserializer.CodecFactory, fuzzer *fuzz.Fuzzer, nonRoundTrippableTypes map[schema.GroupVersionKind]bool)
func RoundTripTestForAPIGroup ¶
func RoundTripTestForAPIGroup(t *testing.T, installFn InstallFunc, fuzzingFuncs fuzzer.FuzzerFuncs)
RoundTripTestForAPIGroup is convenient to call from your install package to make sure that a "bare" install of your group provides enough information to round trip
func RoundTripTestForScheme ¶
RoundTripTestForScheme is convenient to call if you already have a scheme and want to make sure that its well-formed
func RoundTripTypes ¶
func RoundTripTypes(t *testing.T, scheme *runtime.Scheme, codecFactory runtimeserializer.CodecFactory, fuzzer *fuzz.Fuzzer, nonRoundTrippableTypes map[schema.GroupVersionKind]bool)
func RoundTripTypesWithoutProtobuf ¶
func RoundTripTypesWithoutProtobuf(t *testing.T, scheme *runtime.Scheme, codecFactory runtimeserializer.CodecFactory, fuzzer *fuzz.Fuzzer, nonRoundTrippableTypes map[schema.GroupVersionKind]bool)
RoundTripTypesWithoutProtobuf applies the round-trip test to all round-trippable Kinds in the scheme. It will skip all the GroupVersionKinds in the skip list.
func RoundtripToUnstructured ¶ added in v0.31.0
func RoundtripToUnstructured(t *testing.T, scheme *runtime.Scheme, funcs fuzzer.FuzzerFuncs, skipped sets.Set[schema.GroupVersionKind])
RoundtripToUnstructured verifies the roundtrip faithfulness of all external types in a scheme from native to unstructured and back using both the JSON and CBOR serializers. The intermediate unstructured objects produced by both encodings must be identical and be themselves roundtrippable to JSON and CBOR.
Types ¶
type CompatibilityTestOptions ¶
type CompatibilityTestOptions struct { // Scheme is used to create new objects for filling, decoding, and for constructing serializers. // Required. Scheme *runtime.Scheme // TestDataDir points to a directory containing compatibility test data. // Complete() populates this with "testdata" if unset. TestDataDir string // TestDataDirCurrentVersion points to a directory containing compatibility test data for the current version. // Complete() populates this with "<TestDataDir>/HEAD" if unset. // Within this directory, `<group>.<version>.<kind>.[json|yaml|pb]` files are required to exist, and are: // * verified to match serialized FilledObjects[GVK] // * verified to decode without error // * verified to round-trip byte-for-byte when re-encoded // * verified to be semantically equal when decoded into memory TestDataDirCurrentVersion string // TestDataDirsPreviousVersions is a list of directories containing compatibility test data for previous versions. // Complete() populates this with "<TestDataDir>/v*" directories if nil. // Within these directories, `<group>.<version>.<kind>.[json|yaml|pb]` files are optional. If present, they are: // * verified to decode without error // * verified to round-trip byte-for-byte when re-encoded (or to match a `<group>.<version>.<kind>.[json|yaml|pb].after_roundtrip.[json|yaml|pb]` file if it exists) // * verified to be semantically equal when decoded into memory TestDataDirsPreviousVersions []string // Kinds is a list of fully qualified kinds to test. // Complete() populates this with Scheme.AllKnownTypes() if unset. Kinds []schema.GroupVersionKind // FilledObjects is an optional set of pre-filled objects to use for verifying HEAD fixtures. // Complete() populates this with the result of CompatibilityTestObject(Kinds[*], Scheme, FillFuncs) for any missing kinds. // Objects must deterministically populate every field and be identical on every invocation. FilledObjects map[schema.GroupVersionKind]runtime.Object // FillFuncs is an optional map of custom functions to use to fill instances of particular types. FillFuncs map[reflect.Type]FillFunc JSON runtime.Serializer YAML runtime.Serializer Proto runtime.Serializer }
CompatibilityTestOptions holds configuration for running a compatibility test using in-memory objects and serialized files on disk representing the current code and serialized data from previous versions.
Example use: `NewCompatibilityTestOptions(scheme).Complete(t).Run(t)`
func NewCompatibilityTestOptions ¶
func NewCompatibilityTestOptions(scheme *runtime.Scheme) *CompatibilityTestOptions
func (*CompatibilityTestOptions) Complete ¶
func (c *CompatibilityTestOptions) Complete(t *testing.T) *CompatibilityTestOptions
func (*CompatibilityTestOptions) Run ¶
func (c *CompatibilityTestOptions) Run(t *testing.T)
type FillFunc ¶ added in v0.24.0
FillFunc is a function that populates all serializable fields in obj. s and i are string and integer values relevant to the object being populated (for example, the json key or protobuf tag containing the object) that can be used when filling the object to make the object content identifiable