feat: Add comprehensive test suite for Keypair module
- Added tests for keypair creation and operations. - Added tests for key space management. - Added tests for session management and error handling. - Added tests for asymmetric encryption and decryption. - Improved error handling and reporting in the module.
This commit is contained in:
167
rhai_tests/keypair/03_session_management.rhai
Normal file
167
rhai_tests/keypair/03_session_management.rhai
Normal file
@@ -0,0 +1,167 @@
|
||||
// 03_session_management.rhai
|
||||
// Tests for session management in the Keypair module
|
||||
|
||||
// Custom assert function
|
||||
fn assert_true(condition, message) {
|
||||
if !condition {
|
||||
print(`ASSERTION FAILED: ${message}`);
|
||||
throw message;
|
||||
}
|
||||
}
|
||||
|
||||
print("=== Testing Session Management ===");
|
||||
|
||||
// Test creating a key space and setting it as current
|
||||
print("Testing key space creation and activation...");
|
||||
let space_name1 = "session_test_space1";
|
||||
let space_name2 = "session_test_space2";
|
||||
let password = "secure_password";
|
||||
|
||||
// Create first key space
|
||||
if create_key_space(space_name1, password) {
|
||||
print(`✓ Key space "${space_name1}" created successfully`);
|
||||
|
||||
// Test creating keypairs in the current space
|
||||
print("Testing creating keypairs in current space...");
|
||||
let keypair1_name = "session_keypair1";
|
||||
|
||||
if create_keypair(keypair1_name, password) {
|
||||
print(`✓ Keypair "${keypair1_name}" created successfully in space "${space_name1}"`);
|
||||
} else {
|
||||
print(`✗ Failed to create keypair "${keypair1_name}" in space "${space_name1}"`);
|
||||
throw `Failed to create keypair "${keypair1_name}" in space "${space_name1}"`;
|
||||
}
|
||||
|
||||
// Test selecting a keypair
|
||||
print("Testing selecting a keypair...");
|
||||
if select_keypair(keypair1_name) {
|
||||
print(`✓ Selected keypair "${keypair1_name}" successfully`);
|
||||
} else {
|
||||
print(`✗ Failed to select keypair "${keypair1_name}"`);
|
||||
throw `Failed to select keypair "${keypair1_name}"`;
|
||||
}
|
||||
|
||||
// Test getting the selected keypair
|
||||
print("Testing getting the selected keypair...");
|
||||
let pub_key = keypair_pub_key();
|
||||
assert_true(pub_key.len() > 0, "Public key should not be empty");
|
||||
print(`✓ Retrieved public key for selected keypair: ${pub_key.len()} bytes`);
|
||||
|
||||
// Create second key space
|
||||
print("\nTesting creating and switching to a second key space...");
|
||||
if create_key_space(space_name2, password) {
|
||||
print(`✓ Key space "${space_name2}" created successfully`);
|
||||
|
||||
// Verify we're now in the second space
|
||||
print("Verifying current space changed...");
|
||||
let keypairs = list_keypairs();
|
||||
assert_true(keypairs.len() == 0, `Expected 0 keypairs in new space, got ${keypairs.len()}`);
|
||||
print("✓ Current space verified as the new space (empty keypair list)");
|
||||
|
||||
// Create a keypair in the second space
|
||||
let keypair2_name = "session_keypair2";
|
||||
if create_keypair(keypair2_name, password) {
|
||||
print(`✓ Keypair "${keypair2_name}" created successfully in space "${space_name2}"`);
|
||||
} else {
|
||||
print(`✗ Failed to create keypair "${keypair2_name}" in space "${space_name2}"`);
|
||||
throw `Failed to create keypair "${keypair2_name}" in space "${space_name2}"`;
|
||||
}
|
||||
|
||||
// Switch back to first space
|
||||
print("\nTesting switching back to first key space...");
|
||||
if load_key_space(space_name1, password) {
|
||||
print(`✓ Switched back to key space "${space_name1}" successfully`);
|
||||
|
||||
// Verify we're now in the first space
|
||||
print("Verifying current space changed back...");
|
||||
let keypairs = list_keypairs();
|
||||
assert_true(keypairs.len() == 1, `Expected 1 keypair in original space, got ${keypairs.len()}`);
|
||||
assert_true(keypairs.contains(keypair1_name), `Keypair list should contain "${keypair1_name}"`);
|
||||
print("✓ Current space verified as the original space");
|
||||
} else {
|
||||
print(`✗ Failed to switch back to key space "${space_name1}"`);
|
||||
throw `Failed to switch back to key space "${space_name1}"`;
|
||||
}
|
||||
} else {
|
||||
print(`✗ Failed to create second key space "${space_name2}"`);
|
||||
throw `Failed to create second key space "${space_name2}"`;
|
||||
}
|
||||
|
||||
// Test clearing the session
|
||||
print("\nTesting clearing the session...");
|
||||
clear_session();
|
||||
print("✓ Session cleared");
|
||||
|
||||
// Verify operations fail after clearing session
|
||||
print("Verifying operations fail after clearing session...");
|
||||
let list_success = false;
|
||||
try {
|
||||
list_keypairs();
|
||||
list_success = true;
|
||||
} catch(err) {
|
||||
print(`✓ Caught expected error after clearing session: ${err}`);
|
||||
}
|
||||
assert_true(!list_success, "Listing keypairs should fail after clearing session");
|
||||
|
||||
// Error case: Attempt operations without an active key space
|
||||
print("\nTesting operations without an active key space...");
|
||||
|
||||
// Attempt to create a keypair
|
||||
let create_success = false;
|
||||
try {
|
||||
create_success = create_keypair("no_space_keypair", password);
|
||||
} catch(err) {
|
||||
print(`✓ Caught expected error for creating keypair without active space: ${err}`);
|
||||
}
|
||||
assert_true(!create_success, "Creating a keypair without active space should fail");
|
||||
|
||||
// Attempt to select a keypair
|
||||
let select_success = false;
|
||||
try {
|
||||
select_success = select_keypair("no_space_keypair");
|
||||
} catch(err) {
|
||||
print(`✓ Caught expected error for selecting keypair without active space: ${err}`);
|
||||
}
|
||||
assert_true(!select_success, "Selecting a keypair without active space should fail");
|
||||
|
||||
// Reload a key space
|
||||
print("\nTesting reloading a key space after clearing session...");
|
||||
if load_key_space(space_name1, password) {
|
||||
print(`✓ Reloaded key space "${space_name1}" successfully`);
|
||||
|
||||
// Verify the keypair is still there
|
||||
let keypairs = list_keypairs();
|
||||
assert_true(keypairs.contains(keypair1_name), `Keypair list should contain "${keypair1_name}"`);
|
||||
print("✓ Keypair still exists in reloaded space");
|
||||
} else {
|
||||
print(`✗ Failed to reload key space "${space_name1}"`);
|
||||
throw `Failed to reload key space "${space_name1}"`;
|
||||
}
|
||||
|
||||
// Error case: Attempt to get selected keypair when none is selected
|
||||
print("\nTesting getting selected keypair when none is selected...");
|
||||
let get_selected_success = false;
|
||||
try {
|
||||
keypair_pub_key();
|
||||
get_selected_success = true;
|
||||
} catch(err) {
|
||||
print(`✓ Caught expected error for getting selected keypair when none selected: ${err}`);
|
||||
}
|
||||
assert_true(!get_selected_success, "Getting selected keypair when none is selected should fail");
|
||||
|
||||
// Error case: Attempt to select non-existent keypair
|
||||
print("\nTesting selecting a non-existent keypair...");
|
||||
let select_nonexistent_success = false;
|
||||
try {
|
||||
select_nonexistent_success = select_keypair("nonexistent_keypair");
|
||||
} catch(err) {
|
||||
print(`✓ Caught expected error for selecting non-existent keypair: ${err}`);
|
||||
}
|
||||
assert_true(!select_nonexistent_success, "Selecting a non-existent keypair should fail");
|
||||
|
||||
} else {
|
||||
print(`✗ Failed to create key space "${space_name1}"`);
|
||||
throw `Failed to create key space "${space_name1}"`;
|
||||
}
|
||||
|
||||
print("All session management tests completed successfully!");
|
Reference in New Issue
Block a user