fleetmod/metadata/
medadata.rs

1/**
2* Copyright(2024,)Institute of Software, Chinese Academy of Sciences
3* author: jiangliuwei@iscas.ac.cn
4* since: 0.1.0
5*
6**/
7use std::collections::HashMap;
8use chrono::{DateTime, Local};
9use serde::{Deserialize, Serialize};
10
11
12#[derive(Serialize, Deserialize, Debug, Clone, Default)]
13#[serde(rename_all = "lowercase")]
14pub struct Metadata {
15    pub name: String,
16    pub namespace: String,
17    pub labels: Option<HashMap<String, String>>,
18    pub annotations: Option<HashMap<String, String>>,
19    pub uid: Option<String>,
20    #[serde(rename = "resourceVersion")]
21    pub resource_version: Option<String>,
22    #[serde(rename = "creationTimestamp")]
23    pub creation_timestamp: Option<DateTime<Local>>,
24}
25
26impl Metadata {
27    pub fn fill_metadata_defaults(&mut self) {
28        if self.labels.is_none() {
29            self.labels = Some(HashMap::new());
30        }
31        if self.annotations.is_none() {
32            self.annotations = Some(HashMap::new());
33        }
34        if self.uid.is_none() {
35            self.uid = Some(crate::generate_uid());
36        }
37        if self.resource_version.is_none() {
38            self.resource_version = Some(crate::generate_resource_version());
39        }
40        if self.creation_timestamp.is_none() {
41            self.creation_timestamp = Some(Local::now());
42        }
43    }
44}
45
46#[cfg(test)]
47mod tests {
48    use super::*; // 导入主模块中的定义
49    use std::collections::HashMap;
50
51    #[test]
52    fn test_fill_metadata_defaults() {
53        // 创建一个部分未初始化的 Metadata 对象
54        let mut metadata = Metadata {
55            name: "example-metadata".to_string(),
56            namespace: "default".to_string(),
57            labels: None,
58            annotations: None,
59            uid: None,
60            resource_version: None,
61            creation_timestamp: None,
62        };
63
64        // 调用 fill_metadata_defaults 方法
65        metadata.fill_metadata_defaults();
66
67        // 验证填充后的字段
68        assert_eq!(metadata.name, "example-metadata");
69        assert_eq!(metadata.namespace, "default");
70
71        // 检查 labels 默认值
72        assert!(metadata.labels.is_some());
73        assert_eq!(metadata.labels.unwrap(), HashMap::new());
74
75        // 检查 annotations 默认值
76        assert!(metadata.annotations.is_some());
77        assert_eq!(metadata.annotations.unwrap(), HashMap::new());
78
79        // 检查 uid 默认值是否生成
80        assert!(metadata.uid.is_some());
81        assert!(!metadata.uid.as_ref().unwrap().is_empty());
82
83        // 检查 resource_version 默认值是否生成
84        assert!(metadata.resource_version.is_some());
85        assert!(!metadata.resource_version.as_ref().unwrap().is_empty());
86
87        // 检查 creation_timestamp 默认值是否生成
88        assert!(metadata.creation_timestamp.is_some());
89    }
90}
91
92
93