#[cfg(test)]
mod tests {
use crate::{
messages::{
get_signatures_for_address::{
GetSignaturesForAddressConfig, GetSignaturesForAddressRequest,
},
get_workflow_lineage::GetWorkflowLineageRequest,
request_airdrop::RequestAirdropRequest,
},
validation::{validate_request, ValidationError},
};
#[test]
fn test_complete_validation_pipeline_request_airdrop() {
let valid_request = RequestAirdropRequest {
pubkey: "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string(),
lamports: 1000000000, };
let result = validate_request(valid_request);
assert!(result.is_ok());
let invalid_pubkey_request = RequestAirdropRequest {
pubkey: "invalid_pubkey".to_string(),
lamports: 1000000000,
};
let result = validate_request(invalid_pubkey_request);
assert!(result.is_err());
let zero_lamports_request = RequestAirdropRequest {
pubkey: "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string(),
lamports: 0,
};
let result = validate_request(zero_lamports_request);
assert!(result.is_err());
let excessive_lamports_request = RequestAirdropRequest {
pubkey: "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string(),
lamports: 2_000_000_000_000_000_000, };
let result = validate_request(excessive_lamports_request);
assert!(result.is_err());
}
#[test]
fn test_complete_validation_pipeline_get_signatures_for_address() {
let valid_request = GetSignaturesForAddressRequest {
address: "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string(),
config: Some(GetSignaturesForAddressConfig {
limit: Some(100),
before: None,
until: None,
}),
};
let result = validate_request(valid_request);
assert!(result.is_ok());
let invalid_address_request = GetSignaturesForAddressRequest {
address: "invalid_address".to_string(),
config: None,
};
let result = validate_request(invalid_address_request);
assert!(result.is_err());
let invalid_limit_request = GetSignaturesForAddressRequest {
address: "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string(),
config: Some(GetSignaturesForAddressConfig {
limit: Some(1001), before: None,
until: None,
}),
};
let result = validate_request(invalid_limit_request);
assert!(result.is_err());
let zero_limit_request = GetSignaturesForAddressRequest {
address: "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string(),
config: Some(GetSignaturesForAddressConfig {
limit: Some(0), before: None,
until: None,
}),
};
let result = validate_request(zero_limit_request);
assert!(result.is_err());
}
#[test]
fn test_complete_validation_pipeline_get_workflow_lineage() {
let valid_request = GetWorkflowLineageRequest {
signature: "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW".to_string(),
max_depth: Some(10),
include_events: Some(true),
};
let result = validate_request(valid_request);
assert!(result.is_ok());
let empty_signature_request = GetWorkflowLineageRequest {
signature: "".to_string(),
max_depth: Some(10),
include_events: Some(true),
};
let result = validate_request(empty_signature_request);
assert!(result.is_err());
let invalid_signature_request = GetWorkflowLineageRequest {
signature: "invalid_signature".to_string(),
max_depth: Some(10),
include_events: Some(true),
};
let result = validate_request(invalid_signature_request);
assert!(result.is_err());
let excessive_depth_request = GetWorkflowLineageRequest {
signature: "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW".to_string(),
max_depth: Some(200), include_events: Some(true),
};
let result = validate_request(excessive_depth_request);
assert!(result.is_err());
let zero_depth_request = GetWorkflowLineageRequest {
signature: "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW".to_string(),
max_depth: Some(0), include_events: Some(true),
};
let result = validate_request(zero_depth_request);
assert!(result.is_err());
}
#[test]
fn test_validation_error_messages() {
let invalid_request = RequestAirdropRequest {
pubkey: "invalid".to_string(),
lamports: 0,
};
match validate_request(invalid_request) {
Err(ValidationError::InvalidFormat(msg)) | Err(ValidationError::Multiple(msg)) => {
assert!(!msg.is_empty());
}
Err(e) => {
assert!(!e.to_string().is_empty());
}
Ok(_) => {
panic!("Expected validation error but got success");
}
}
}
#[test]
fn test_validation_preserves_valid_data() {
let original_request = RequestAirdropRequest {
pubkey: "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string(),
lamports: 1000000000,
};
let original_pubkey = original_request.pubkey.clone();
let original_lamports = original_request.lamports;
let validated_request = validate_request(original_request).unwrap();
assert_eq!(validated_request.pubkey, original_pubkey);
assert_eq!(validated_request.lamports, original_lamports);
}
}