110 lines
3.8 KiB
Plaintext
110 lines
3.8 KiB
Plaintext
// 02_redis_operations.rhai
|
|
// Tests for advanced Redis operations
|
|
|
|
// Custom assert function
|
|
fn assert_true(condition, message) {
|
|
if !condition {
|
|
print(`ASSERTION FAILED: ${message}`);
|
|
throw message;
|
|
}
|
|
}
|
|
|
|
// Helper function to check if Redis is available
|
|
fn is_redis_available() {
|
|
try {
|
|
// Try to execute a simple PING command
|
|
let ping_result = redis_ping();
|
|
return ping_result == "PONG";
|
|
} catch(err) {
|
|
print(`Redis connection error: ${err}`);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
print("=== Testing Advanced Redis Operations ===");
|
|
|
|
// Check if Redis is available
|
|
let redis_available = is_redis_available();
|
|
if !redis_available {
|
|
print("Redis server is not available. Skipping Redis tests.");
|
|
// Exit gracefully without error
|
|
return;
|
|
}
|
|
|
|
print("✓ Redis server is available");
|
|
|
|
// Test prefix for all keys to avoid conflicts
|
|
let prefix = "rhai_test_";
|
|
|
|
// Test redis_hset and redis_hget functions
|
|
print("Testing redis_hset() and redis_hget()...");
|
|
let hash_key = prefix + "hash";
|
|
let field1 = "field1";
|
|
let value1 = "value1";
|
|
let field2 = "field2";
|
|
let value2 = "value2";
|
|
|
|
// Set hash fields
|
|
let hset_result1 = redis_hset(hash_key, field1, value1);
|
|
assert_true(hset_result1, "HSET operation should succeed for field1");
|
|
let hset_result2 = redis_hset(hash_key, field2, value2);
|
|
assert_true(hset_result2, "HSET operation should succeed for field2");
|
|
print(`✓ redis_hset(): Successfully set fields in hash ${hash_key}`);
|
|
|
|
// Get hash fields
|
|
let hget_result1 = redis_hget(hash_key, field1);
|
|
assert_true(hget_result1 == value1, "HGET should return the value we set for field1");
|
|
let hget_result2 = redis_hget(hash_key, field2);
|
|
assert_true(hget_result2 == value2, "HGET should return the value we set for field2");
|
|
print(`✓ redis_hget(): Successfully retrieved values from hash ${hash_key}`);
|
|
|
|
// Test redis_hgetall function
|
|
print("Testing redis_hgetall()...");
|
|
let hgetall_result = redis_hgetall(hash_key);
|
|
assert_true(hgetall_result.len() == 2, "HGETALL should return 2 fields");
|
|
assert_true(hgetall_result[field1] == value1, "HGETALL should include field1 with correct value");
|
|
assert_true(hgetall_result[field2] == value2, "HGETALL should include field2 with correct value");
|
|
print(`✓ redis_hgetall(): Successfully retrieved all fields from hash ${hash_key}`);
|
|
|
|
// Test redis_hdel function
|
|
print("Testing redis_hdel()...");
|
|
let hdel_result = redis_hdel(hash_key, field1);
|
|
assert_true(hdel_result, "HDEL operation should succeed");
|
|
print(`✓ redis_hdel(): Successfully deleted field from hash ${hash_key}`);
|
|
|
|
// Verify the field was deleted
|
|
let hget_after_del = redis_hget(hash_key, field1);
|
|
assert_true(hget_after_del == "", "Field should not exist after deletion");
|
|
print("✓ Field was successfully deleted from hash");
|
|
|
|
// Test redis_list operations
|
|
print("Testing redis list operations...");
|
|
let list_key = prefix + "list";
|
|
|
|
// Push items to list
|
|
let rpush_result = redis_rpush(list_key, "item1");
|
|
assert_true(rpush_result > 0, "RPUSH operation should succeed");
|
|
redis_rpush(list_key, "item2");
|
|
redis_rpush(list_key, "item3");
|
|
print(`✓ redis_rpush(): Successfully pushed items to list ${list_key}`);
|
|
|
|
// Get list length
|
|
let llen_result = redis_llen(list_key);
|
|
assert_true(llen_result == 3, "List should have 3 items");
|
|
print(`✓ redis_llen(): List has ${llen_result} items`);
|
|
|
|
// Get list range
|
|
let lrange_result = redis_lrange(list_key, 0, -1);
|
|
assert_true(lrange_result.len() == 3, "LRANGE should return 3 items");
|
|
assert_true(lrange_result[0] == "item1", "First item should be 'item1'");
|
|
assert_true(lrange_result[2] == "item3", "Last item should be 'item3'");
|
|
print(`✓ redis_lrange(): Successfully retrieved all items from list ${list_key}`);
|
|
|
|
// Clean up
|
|
print("Cleaning up...");
|
|
redis_del(hash_key);
|
|
redis_del(list_key);
|
|
print("✓ Cleanup: All test keys removed");
|
|
|
|
print("All Redis operations tests completed successfully!");
|