tests_fuzz/utils/crd/
common.rs

1// Copyright 2023 Greptime Team
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use std::collections::BTreeMap;
16
17use derive_builder::Builder;
18use schemars::JsonSchema;
19use serde::{Deserialize, Serialize};
20
21#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, JsonSchema)]
22#[serde(rename_all = "kebab-case")]
23pub enum Mode {
24    One,
25    All,
26    Fixed,
27    FixedPercent,
28    RandomMaxPercent,
29}
30
31#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, Default, Builder, JsonSchema)]
32#[serde(default, rename_all = "camelCase")]
33#[builder(setter(into, strip_option), default)]
34pub struct Selector {
35    #[serde(skip_serializing_if = "Vec::is_empty")]
36    namespaces: Vec<String>,
37    #[serde(skip_serializing_if = "BTreeMap::is_empty")]
38    label_selectors: BTreeMap<String, String>,
39    #[serde(skip_serializing_if = "Vec::is_empty")]
40    expression_selectors: Vec<ExpressionSelector>,
41    #[serde(skip_serializing_if = "BTreeMap::is_empty")]
42    annotation_selectors: BTreeMap<String, String>,
43    #[serde(skip_serializing_if = "BTreeMap::is_empty")]
44    field_selectors: BTreeMap<String, String>,
45    #[serde(skip_serializing_if = "BTreeMap::is_empty")]
46    pod_phase_selectors: BTreeMap<String, String>,
47}
48
49#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, JsonSchema)]
50pub struct ExpressionSelector {
51    key: String,
52    operator: String,
53    values: Vec<String>,
54}
55
56#[cfg(test)]
57mod tests {
58    use std::collections::BTreeMap;
59
60    use super::SelectorBuilder;
61
62    #[test]
63    fn test_serde() {
64        let mut fs = BTreeMap::new();
65        fs.insert("app.kubernetes.io/component".into(), "tikv".into());
66        let selector = SelectorBuilder::default()
67            .field_selectors(fs)
68            .build()
69            .unwrap();
70        let ser = serde_yaml::to_string(&selector).unwrap();
71        assert_eq!(
72            r#"fieldSelectors:
73  app.kubernetes.io/component: tikv
74"#,
75            ser
76        );
77    }
78}