fleetmod 0.1.1

Kubernetes model for fleet
Documentation
/**

* Copyright(2024,)Institute of Software, Chinese Academy of Sciences
* author: jiangliuwei@iscas.ac.cn
* since: 0.1.0
*
**/
use std::collections::HashMap;
use chrono::{DateTime, Local};
use serde::{Deserialize, Serialize};


#[derive(Serialize, Deserialize, Debug, Clone, Default)]
#[serde(rename_all = "lowercase")]
pub struct Metadata {
    pub name: String,
    pub namespace: String,
    pub labels: Option<HashMap<String, String>>,
    pub annotations: Option<HashMap<String, String>>,
    pub uid: Option<String>,
    #[serde(rename = "resourceVersion")]
    pub resource_version: Option<String>,
    #[serde(rename = "creationTimestamp")]
    pub creation_timestamp: Option<DateTime<Local>>,
}

impl Metadata {
    pub fn fill_metadata_defaults(&mut self) {
        if self.labels.is_none() {
            self.labels = Some(HashMap::new());
        }
        if self.annotations.is_none() {
            self.annotations = Some(HashMap::new());
        }
        if self.uid.is_none() {
            self.uid = Some(crate::generate_uid());
        }
        if self.resource_version.is_none() {
            self.resource_version = Some(crate::generate_resource_version());
        }
        if self.creation_timestamp.is_none() {
            self.creation_timestamp = Some(Local::now());
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*; // 导入主模块中的定义
    use std::collections::HashMap;

    #[test]
    fn test_fill_metadata_defaults() {
        // 创建一个部分未初始化的 Metadata 对象
        let mut metadata = Metadata {
            name: "example-metadata".to_string(),
            namespace: "default".to_string(),
            labels: None,
            annotations: None,
            uid: None,
            resource_version: None,
            creation_timestamp: None,
        };

        // 调用 fill_metadata_defaults 方法
        metadata.fill_metadata_defaults();

        // 验证填充后的字段
        assert_eq!(metadata.name, "example-metadata");
        assert_eq!(metadata.namespace, "default");

        // 检查 labels 默认值
        assert!(metadata.labels.is_some());
        assert_eq!(metadata.labels.unwrap(), HashMap::new());

        // 检查 annotations 默认值
        assert!(metadata.annotations.is_some());
        assert_eq!(metadata.annotations.unwrap(), HashMap::new());

        // 检查 uid 默认值是否生成
        assert!(metadata.uid.is_some());
        assert!(!metadata.uid.as_ref().unwrap().is_empty());

        // 检查 resource_version 默认值是否生成
        assert!(metadata.resource_version.is_some());
        assert!(!metadata.resource_version.as_ref().unwrap().is_empty());

        // 检查 creation_timestamp 默认值是否生成
        assert!(metadata.creation_timestamp.is_some());
    }
}