- 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.
		
			
				
	
	
		
			162 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // 02_keyspace_operations.rhai
 | |
| // Tests for key space operations in the Keypair module
 | |
| 
 | |
| // Custom assert function
 | |
| fn assert_true(condition, message) {
 | |
|     if !condition {
 | |
|         print(`ASSERTION FAILED: ${message}`);
 | |
|         throw message;
 | |
|     }
 | |
| }
 | |
| 
 | |
| print("=== Testing Key Space Operations ===");
 | |
| 
 | |
| // Test creating a new key space
 | |
| print("Testing key space creation...");
 | |
| let space_name = "test_keyspace";
 | |
| let password = "secure_password";
 | |
| 
 | |
| if create_key_space(space_name, password) {
 | |
|     print(`✓ Key space "${space_name}" created successfully`);
 | |
|     
 | |
|     // Test adding keypairs to a key space
 | |
|     print("Testing adding keypairs to key space...");
 | |
|     let keypair1_name = "keypair1";
 | |
|     let keypair2_name = "keypair2";
 | |
|     
 | |
|     if create_keypair(keypair1_name, password) {
 | |
|         print(`✓ Keypair "${keypair1_name}" created successfully`);
 | |
|     } else {
 | |
|         print(`✗ Failed to create keypair "${keypair1_name}"`);
 | |
|         throw `Failed to create keypair "${keypair1_name}"`;
 | |
|     }
 | |
|     
 | |
|     if create_keypair(keypair2_name, password) {
 | |
|         print(`✓ Keypair "${keypair2_name}" created successfully`);
 | |
|     } else {
 | |
|         print(`✗ Failed to create keypair "${keypair2_name}"`);
 | |
|         throw `Failed to create keypair "${keypair2_name}"`;
 | |
|     }
 | |
|     
 | |
|     // Test listing keypairs in a key space
 | |
|     print("Testing listing keypairs in key space...");
 | |
|     let keypairs = list_keypairs();
 | |
|     assert_true(keypairs.len() == 2, `Expected 2 keypairs, got ${keypairs.len()}`);
 | |
|     assert_true(keypairs.contains(keypair1_name), `Keypair list should contain "${keypair1_name}"`);
 | |
|     assert_true(keypairs.contains(keypair2_name), `Keypair list should contain "${keypair2_name}"`);
 | |
|     print(`✓ Listed keypairs successfully: ${keypairs}`);
 | |
|     
 | |
|     // Test getting a keypair by name
 | |
|     print("Testing getting a keypair by name...");
 | |
|     if select_keypair(keypair1_name) {
 | |
|         print(`✓ Selected keypair "${keypair1_name}" successfully`);
 | |
|         let pub_key = keypair_pub_key();
 | |
|         assert_true(pub_key.len() > 0, "Public key should not be empty");
 | |
|         print(`✓ Retrieved public key for "${keypair1_name}": ${pub_key.len()} bytes`);
 | |
|     } else {
 | |
|         print(`✗ Failed to select keypair "${keypair1_name}"`);
 | |
|         throw `Failed to select keypair "${keypair1_name}"`;
 | |
|     }
 | |
|     
 | |
|     // Edge case: Attempt to add a keypair with a duplicate name
 | |
|     print("Testing adding a keypair with a duplicate name...");
 | |
|     let duplicate_success = false;
 | |
|     try {
 | |
|         duplicate_success = create_keypair(keypair1_name, password);
 | |
|     } catch(err) {
 | |
|         print(`✓ Caught expected error for duplicate keypair: ${err}`);
 | |
|     }
 | |
|     assert_true(!duplicate_success, "Creating a duplicate keypair should fail");
 | |
|     
 | |
|     // Edge case: Attempt to get a non-existent keypair
 | |
|     print("Testing getting a non-existent keypair...");
 | |
|     let nonexistent_success = false;
 | |
|     try {
 | |
|         nonexistent_success = select_keypair("nonexistent_keypair");
 | |
|     } catch(err) {
 | |
|         print(`✓ Caught expected error for non-existent keypair: ${err}`);
 | |
|     }
 | |
|     assert_true(!nonexistent_success, "Selecting a non-existent keypair should fail");
 | |
|     
 | |
|     // Edge case: Test with special characters in keypair names
 | |
|     print("Testing with special characters in keypair name...");
 | |
|     let special_name = "special!@#$%^&*()_+";
 | |
|     if create_keypair(special_name, password) {
 | |
|         print(`✓ Created keypair with special characters: "${special_name}"`);
 | |
|         
 | |
|         // Verify we can select and use it
 | |
|         if select_keypair(special_name) {
 | |
|             print(`✓ Selected keypair with special characters`);
 | |
|             let pub_key = keypair_pub_key();
 | |
|             assert_true(pub_key.len() > 0, "Public key should not be empty");
 | |
|         } else {
 | |
|             print(`✗ Failed to select keypair with special characters`);
 | |
|             throw `Failed to select keypair with special characters`;
 | |
|         }
 | |
|     } else {
 | |
|         print(`✗ Failed to create keypair with special characters`);
 | |
|         throw `Failed to create keypair with special characters`;
 | |
|     }
 | |
|     
 | |
|     // Edge case: Test with very long keypair name
 | |
|     print("Testing with very long keypair name...");
 | |
|     let long_name = "a" * 100; // 100 character name
 | |
|     if create_keypair(long_name, password) {
 | |
|         print(`✓ Created keypair with long name (${long_name.len()} characters)`);
 | |
|         
 | |
|         // Verify we can select and use it
 | |
|         if select_keypair(long_name) {
 | |
|             print(`✓ Selected keypair with long name`);
 | |
|             let pub_key = keypair_pub_key();
 | |
|             assert_true(pub_key.len() > 0, "Public key should not be empty");
 | |
|         } else {
 | |
|             print(`✗ Failed to select keypair with long name`);
 | |
|             throw `Failed to select keypair with long name`;
 | |
|         }
 | |
|     } else {
 | |
|         print(`✗ Failed to create keypair with long name`);
 | |
|         throw `Failed to create keypair with long name`;
 | |
|     }
 | |
|     
 | |
|     // Edge case: Test with empty keypair name (should fail)
 | |
|     print("Testing with empty keypair name...");
 | |
|     let empty_name = "";
 | |
|     let empty_name_success = false;
 | |
|     try {
 | |
|         empty_name_success = create_keypair(empty_name, password);
 | |
|     } catch(err) {
 | |
|         print(`✓ Caught expected error for empty keypair name: ${err}`);
 | |
|     }
 | |
|     assert_true(!empty_name_success, "Creating a keypair with empty name should fail");
 | |
|     
 | |
|     // Stress test: Add multiple keypairs
 | |
|     print("Stress testing: Adding multiple keypairs...");
 | |
|     let num_keypairs = 10; // Add 10 more keypairs
 | |
|     let stress_keypairs = [];
 | |
|     
 | |
|     for i in 0..num_keypairs {
 | |
|         let name = `stress_keypair_${i}`;
 | |
|         stress_keypairs.push(name);
 | |
|         
 | |
|         if create_keypair(name, password) {
 | |
|             print(`✓ Created stress test keypair ${i+1}/${num_keypairs}`);
 | |
|         } else {
 | |
|             print(`✗ Failed to create stress test keypair ${i+1}/${num_keypairs}`);
 | |
|             throw `Failed to create stress test keypair ${i+1}/${num_keypairs}`;
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     // Verify all keypairs were created
 | |
|     print("Verifying all stress test keypairs...");
 | |
|     let all_keypairs = list_keypairs();
 | |
|     for name in stress_keypairs {
 | |
|         assert_true(all_keypairs.contains(name), `Keypair list should contain "${name}"`);
 | |
|     }
 | |
|     print(`✓ All ${num_keypairs} stress test keypairs verified`);
 | |
|     
 | |
| } else {
 | |
|     print(`✗ Failed to create key space "${space_name}"`);
 | |
|     throw `Failed to create key space "${space_name}"`;
 | |
| }
 | |
| 
 | |
| print("All key space operations tests completed successfully!"); |