sk-core 2.3.0

SimKube core libraries
Documentation
use std::collections::HashMap;

use serde_json::json;

use super::*;

#[rstest(tokio::test)]
async fn test_compute_owner_chain_cached(mut test_pod: corev1::Pod) {
    let rsref = metav1::OwnerReference {
        api_version: "apps/v1".into(),
        kind: "replicaset".into(),
        name: "test-rs".into(),
        uid: "asdfasdf".into(),
        ..Default::default()
    };
    let deplref = metav1::OwnerReference {
        api_version: "apps/v1".into(),
        kind: "deployment".into(),
        name: "test-depl".into(),
        uid: "yuioyoiuy".into(),
        ..Default::default()
    };

    test_pod.owner_references_mut().push(rsref.clone());
    let expected_owners = vec![rsref, deplref];

    let (_, client) = make_fake_apiserver();
    let owners = HashMap::from([(test_pod.namespaced_name(), expected_owners.clone())]);
    let mut cache = OwnersCache::new_from_parts(DynamicApiSet::new(client), owners);

    let res = cache.compute_owner_chain(&test_pod).await.unwrap();
    assert_eq!(res, expected_owners);
}

#[rstest(tokio::test)]
async fn test_compute_owner_chain(mut test_pod: corev1::Pod) {
    let rsref = metav1::OwnerReference {
        api_version: "apps/v1".into(),
        kind: "ReplicaSet".into(),
        name: "test-rs".into(),
        uid: "asdfasdf".into(),
        ..Default::default()
    };
    let deplref = metav1::OwnerReference {
        api_version: "apps/v1".into(),
        kind: "Deployment".into(),
        name: "test-depl".into(),
        uid: "yuioyoiuy".into(),
        ..Default::default()
    };

    let (mut fake_apiserver, client) = make_fake_apiserver();
    fake_apiserver.handle(|when, then| {
        when.path("/apis/apps/v1");
        then.json_body(apps_v1_discovery());
    });

    let rs_owner = deplref.clone();
    fake_apiserver.handle(move |when, then| {
        when.path("/apis/apps/v1/replicasets");
        then.json_body(json!({
            "metadata": {},
            "items": [
                {
                    "metadata": {
                        "namespace": TEST_NAMESPACE,
                        "name": "test-rs",
                        "ownerReferences": [rs_owner],
                    }
                },
            ],
        }));
    });

    fake_apiserver.handle(move |when, then| {
        when.path("/apis/apps/v1/deployments");
        then.json_body(json!({
            "metadata": {},
            "items": [
                {
                    "metadata": {
                        "namespace": TEST_NAMESPACE,
                        "name": "test-depl",
                    }
                },
            ],
        }));
    });

    let mut cache = OwnersCache::new(DynamicApiSet::new(client));

    test_pod.owner_references_mut().push(rsref.clone());
    let res = cache.compute_owner_chain(&test_pod).await.unwrap();

    assert_eq!(res, vec![rsref, deplref]);
}