156 lines
4.8 KiB
Rust
156 lines
4.8 KiB
Rust
|
|
use kube_derive::CustomResource;
|
||
|
|
use schemars::JsonSchema;
|
||
|
|
use serde::{Deserialize, Serialize};
|
||
|
|
|
||
|
|
#[derive(CustomResource, Serialize, Deserialize, Debug, Clone, JsonSchema)]
|
||
|
|
#[kube(group = "clux.dev", version = "v1", kind = "FooEnum")]
|
||
|
|
#[serde(rename_all = "camelCase")]
|
||
|
|
#[allow(clippy::enum_variant_names)]
|
||
|
|
enum FooEnumSpec {
|
||
|
|
/// First variant with an int
|
||
|
|
VariantOne { int: i32 },
|
||
|
|
/// Second variant with an String
|
||
|
|
VariantTwo { str: String },
|
||
|
|
/// Third variant which doesn't has an attribute
|
||
|
|
VariantThree {},
|
||
|
|
}
|
||
|
|
|
||
|
|
#[test]
|
||
|
|
fn test_crd_name() {
|
||
|
|
use kube::core::CustomResourceExt;
|
||
|
|
assert_eq!("fooenums.clux.dev", FooEnum::crd_name());
|
||
|
|
}
|
||
|
|
|
||
|
|
#[test]
|
||
|
|
fn test_serialized_matches_expected() {
|
||
|
|
assert_eq!(
|
||
|
|
serde_json::to_value(FooEnum::new("bar", FooEnumSpec::VariantOne { int: 42 })).unwrap(),
|
||
|
|
serde_json::json!({
|
||
|
|
"apiVersion": "clux.dev/v1",
|
||
|
|
"kind": "FooEnum",
|
||
|
|
"metadata": {
|
||
|
|
"name": "bar",
|
||
|
|
},
|
||
|
|
"spec": {
|
||
|
|
"variantOne": {
|
||
|
|
"int": 42
|
||
|
|
}
|
||
|
|
}
|
||
|
|
})
|
||
|
|
);
|
||
|
|
assert_eq!(
|
||
|
|
serde_json::to_value(FooEnum::new("bar", FooEnumSpec::VariantThree {})).unwrap(),
|
||
|
|
serde_json::json!({
|
||
|
|
"apiVersion": "clux.dev/v1",
|
||
|
|
"kind": "FooEnum",
|
||
|
|
"metadata": {
|
||
|
|
"name": "bar",
|
||
|
|
},
|
||
|
|
"spec": {
|
||
|
|
"variantThree": {}
|
||
|
|
}
|
||
|
|
})
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
#[test]
|
||
|
|
fn test_crd_schema_matches_expected() {
|
||
|
|
use kube::core::CustomResourceExt;
|
||
|
|
|
||
|
|
assert_eq!(
|
||
|
|
FooEnum::crd(),
|
||
|
|
serde_json::from_value(serde_json::json!({
|
||
|
|
"apiVersion": "apiextensions.k8s.io/v1",
|
||
|
|
"kind": "CustomResourceDefinition",
|
||
|
|
"metadata": {
|
||
|
|
"name": "fooenums.clux.dev"
|
||
|
|
},
|
||
|
|
"spec": {
|
||
|
|
"group": "clux.dev",
|
||
|
|
"names": {
|
||
|
|
"categories": [],
|
||
|
|
"kind": "FooEnum",
|
||
|
|
"plural": "fooenums",
|
||
|
|
"shortNames": [],
|
||
|
|
"singular": "fooenum"
|
||
|
|
},
|
||
|
|
"scope": "Cluster",
|
||
|
|
"versions": [
|
||
|
|
{
|
||
|
|
"additionalPrinterColumns": [],
|
||
|
|
"name": "v1",
|
||
|
|
"schema": {
|
||
|
|
"openAPIV3Schema": {
|
||
|
|
"description": "Auto-generated derived type for FooEnumSpec via `CustomResource`",
|
||
|
|
"properties": {
|
||
|
|
"spec": {
|
||
|
|
"oneOf": [
|
||
|
|
{
|
||
|
|
"required": [
|
||
|
|
"variantOne"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"required": [
|
||
|
|
"variantTwo"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"required": [
|
||
|
|
"variantThree"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"properties": {
|
||
|
|
"variantOne": {
|
||
|
|
"description": "First variant with an int",
|
||
|
|
"properties": {
|
||
|
|
"int": {
|
||
|
|
"format": "int32",
|
||
|
|
"type": "integer"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"required": [
|
||
|
|
"int"
|
||
|
|
],
|
||
|
|
"type": "object"
|
||
|
|
},
|
||
|
|
"variantThree": {
|
||
|
|
"description": "Third variant which doesn't has an attribute",
|
||
|
|
"type": "object"
|
||
|
|
},
|
||
|
|
"variantTwo": {
|
||
|
|
"description": "Second variant with an String",
|
||
|
|
"properties": {
|
||
|
|
"str": {
|
||
|
|
"type": "string"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"required": [
|
||
|
|
"str"
|
||
|
|
],
|
||
|
|
"type": "object"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"type": "object"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"required": [
|
||
|
|
"spec"
|
||
|
|
],
|
||
|
|
"title": "FooEnum",
|
||
|
|
"type": "object"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"served": true,
|
||
|
|
"storage": true,
|
||
|
|
"subresources": {}
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
))
|
||
|
|
.unwrap()
|
||
|
|
);
|
||
|
|
}
|