Skip to content

Commit 7cb4a33

Browse files
authored
Merge pull request #19 from cuteolaf/test/rpc
test(rpc): add comprehensive test suite for platform-rpc module
2 parents ceb4984 + 55fc570 commit 7cb4a33

File tree

5 files changed

+1733
-0
lines changed

5 files changed

+1733
-0
lines changed

crates/rpc-server/src/auth.rs

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,80 @@ mod tests {
9696
assert!(result.is_ok());
9797
assert!(result.unwrap());
9898
}
99+
100+
#[test]
101+
fn test_signature_verification_invalid_hotkey() {
102+
let result = verify_validator_signature("invalid_hotkey", "message", "signature");
103+
assert!(result.is_err());
104+
}
105+
106+
#[test]
107+
fn test_signature_verification_invalid_signature_hex() {
108+
let kp = Keypair::generate();
109+
let result = verify_validator_signature(&kp.hotkey().to_hex(), "message", "not_hex");
110+
assert!(result.is_err());
111+
}
112+
113+
#[test]
114+
fn test_signature_verification_wrong_signature() {
115+
let kp1 = Keypair::generate();
116+
let kp2 = Keypair::generate();
117+
let message = "test:1234567890:nonce";
118+
let signed = kp1.sign(message.as_bytes());
119+
120+
// Use kp2's hotkey but kp1's signature - should fail
121+
let hotkey_hex = kp2.hotkey().to_hex();
122+
let sig_hex = hex::encode(&signed.signature);
123+
124+
let result = verify_validator_signature(&hotkey_hex, message, &sig_hex);
125+
assert!(result.is_ok());
126+
assert!(!result.unwrap()); // Signature doesn't match
127+
}
128+
129+
#[test]
130+
fn test_signature_verification_wrong_message() {
131+
let kp = Keypair::generate();
132+
let message1 = "test:1234567890:nonce1";
133+
let message2 = "test:1234567890:nonce2";
134+
let signed = kp.sign(message1.as_bytes());
135+
136+
let hotkey_hex = kp.hotkey().to_hex();
137+
let sig_hex = hex::encode(&signed.signature);
138+
139+
// Try to verify with different message - should fail
140+
let result = verify_validator_signature(&hotkey_hex, message2, &sig_hex);
141+
assert!(result.is_ok());
142+
assert!(!result.unwrap());
143+
}
144+
145+
#[test]
146+
fn test_verify_timestamp_edge_case() {
147+
let now = chrono::Utc::now().timestamp();
148+
// Test exactly at 5 minute boundary
149+
assert!(!verify_timestamp(now - 301)); // 5 minutes 1 second ago
150+
assert!(verify_timestamp(now - 299)); // 4 minutes 59 seconds ago
151+
}
152+
153+
#[test]
154+
fn test_verify_timestamp_future() {
155+
let now = chrono::Utc::now().timestamp();
156+
assert!(verify_timestamp(now + 10)); // Future timestamp within 5 min should be valid
157+
assert!(verify_timestamp(now + 299)); // Just under 5 minutes in future
158+
}
159+
160+
#[test]
161+
fn test_signature_verification_invalid_length() {
162+
let kp = Keypair::generate();
163+
let message = "test:1234567890:nonce";
164+
165+
// Test with signature that's too short (not 64 bytes)
166+
let short_sig = hex::encode(&[0u8; 32]); // Only 32 bytes
167+
let result = verify_validator_signature(&kp.hotkey().to_hex(), message, &short_sig);
168+
assert!(result.is_err());
169+
170+
// Test with signature that's too long
171+
let long_sig = hex::encode(&[0u8; 128]); // 128 bytes
172+
let result = verify_validator_signature(&kp.hotkey().to_hex(), message, &long_sig);
173+
assert!(result.is_err());
174+
}
99175
}

0 commit comments

Comments
 (0)