Some checks are pending
Test Publishing Setup / Test Publishing Setup (pull_request) Waiting to run
- 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
218 lines
5.6 KiB
Plaintext
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");
|