sal/rhai_tests/kubernetes/02_pod_management.rhai
Mahmoud-Emad e01b83f12a
Some checks are pending
Test Publishing Setup / Test Publishing Setup (pull_request) Waiting to run
feat: Add CI/CD workflows for testing and publishing SAL crates
- Add a workflow for testing the publishing setup
- Add a workflow for publishing SAL crates to crates.io
- Improve crate metadata and version management
- Add optional dependencies for modularity
- Improve documentation for publishing and usage
2025-07-01 08:34:20 +03:00

218 lines
5.6 KiB
Plaintext

#!/usr/bin/env rhai
// Test 2: Pod Management Operations
// This test covers pod creation, listing, retrieval, and deletion
// Helper function to generate timestamp for unique names
fn timestamp() {
let now = 1640995200; // Base timestamp
let random = (now % 1000000).to_string();
random
}
print("=== Kubernetes Pod Management Test ===");
print("");
// Setup test namespace
let test_namespace = "sal-test-pods-" + timestamp();
print("Setting up test namespace: " + test_namespace);
try {
let setup_km = kubernetes_manager_new("default");
setup_km.create_namespace(test_namespace);
print("✅ Test namespace created");
} catch (error) {
print("❌ Failed to create test namespace: " + error);
throw error;
}
// Create manager for test namespace
let km = kubernetes_manager_new(test_namespace);
print("");
// Test pod listing (should be empty initially)
print("Test 1: Initial Pod Listing");
print("---------------------------");
try {
let initial_pods = km.pods_list();
print("Initial pod count: " + initial_pods.len());
if initial_pods.len() == 0 {
print("✅ Namespace is empty as expected");
} else {
print("⚠️ Found " + initial_pods.len() + " existing pods in test namespace");
}
} catch (error) {
print("❌ Initial pod listing failed: " + error);
throw error;
}
print("");
// Test pod creation
print("Test 2: Pod Creation");
print("-------------------");
let test_pod_name = "test-pod-" + timestamp();
let test_image = "nginx:alpine";
let test_labels = #{
"app": "test",
"environment": "testing",
"created-by": "sal-integration-test"
};
try {
print("Creating pod: " + test_pod_name);
print("Image: " + test_image);
print("Labels: " + test_labels);
let created_pod = km.create_pod(test_pod_name, test_image, test_labels);
print("✅ Pod created successfully");
// Verify pod name
if created_pod.name == test_pod_name {
print("✅ Pod name matches expected: " + created_pod.name);
} else {
print("❌ Pod name mismatch. Expected: " + test_pod_name + ", Got: " + created_pod.name);
throw "Pod name verification failed";
}
} catch (error) {
print("❌ Pod creation failed: " + error);
throw error;
}
print("");
// Test pod listing after creation
print("Test 3: Pod Listing After Creation");
print("----------------------------------");
try {
let pods_after_creation = km.pods_list();
print("Pod count after creation: " + pods_after_creation.len());
if pods_after_creation.len() > 0 {
print("✅ Pods found after creation");
// Find our test pod
let found_test_pod = false;
for pod in pods_after_creation {
if pod.name == test_pod_name {
found_test_pod = true;
print("✅ Test pod found in list: " + pod.name);
print(" Status: " + pod.status);
break;
}
}
if !found_test_pod {
print("❌ Test pod not found in pod list");
throw "Test pod not found in listing";
}
} else {
print("❌ No pods found after creation");
throw "Pod listing verification failed";
}
} catch (error) {
print("❌ Pod listing after creation failed: " + error);
throw error;
}
print("");
// Test pod retrieval
print("Test 4: Individual Pod Retrieval");
print("--------------------------------");
try {
let retrieved_pod = km.get_pod(test_pod_name);
print("✅ Pod retrieved successfully");
print("Pod name: " + retrieved_pod.name);
print("Pod status: " + retrieved_pod.status);
if retrieved_pod.name == test_pod_name {
print("✅ Retrieved pod name matches expected");
} else {
print("❌ Retrieved pod name mismatch");
throw "Pod retrieval verification failed";
}
} catch (error) {
print("❌ Pod retrieval failed: " + error);
throw error;
}
print("");
// Test resource counts
print("Test 5: Resource Counts");
print("-----------------------");
try {
let counts = km.resource_counts();
print("Resource counts: " + counts);
if counts.pods >= 1 {
print("✅ Pod count reflects created pod: " + counts.pods);
} else {
print("⚠️ Pod count doesn't reflect created pod: " + counts.pods);
}
} catch (error) {
print("❌ Resource counts failed: " + error);
throw error;
}
print("");
// Test pod deletion
print("Test 6: Pod Deletion");
print("--------------------");
try {
print("Deleting pod: " + test_pod_name);
km.delete_pod(test_pod_name);
print("✅ Pod deletion initiated");
// Wait a moment for deletion to propagate
print("Waiting for deletion to propagate...");
// Check if pod is gone (may take time)
try {
let deleted_pod = km.get_pod(test_pod_name);
print("⚠️ Pod still exists after deletion (may be terminating): " + deleted_pod.status);
} catch (get_error) {
print("✅ Pod no longer retrievable (deletion successful)");
}
} catch (error) {
print("❌ Pod deletion failed: " + error);
throw error;
}
print("");
// Cleanup
print("Test 7: Cleanup");
print("---------------");
try {
let cleanup_km = kubernetes_manager_new("default");
cleanup_km.delete_namespace(test_namespace);
print("✅ Test namespace cleanup initiated");
} catch (error) {
print("❌ Cleanup failed: " + error);
// Don't throw here as this is cleanup
}
print("");
print("=== Pod Management Test Complete ===");
print("✅ All pod management tests passed");