v0.3.7-pre.010

This commit is contained in:
2026-09-02 18:56:09 +02:00
parent 97f84e5c58
commit 313d2a1ea6
20 changed files with 533 additions and 40 deletions

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-app-backfill-desk/unit_tests/backfill_run.rs
// version: 1
// version: 2
#[test]
fn generated_run_ids_are_backend_owned_bounded_and_unique_in_session() {
@@ -22,3 +22,66 @@ fn generated_run_ids_are_backend_owned_bounded_and_unique_in_session() {
assert!(first.as_str().len() <= ksp_job_api::MAX_JOB_ID_BYTES);
assert!(second.as_str().len() <= ksp_job_api::MAX_JOB_ID_BYTES);
}
fn cancellable_runtime(job_id: &str) -> std::option::Option<(ksp_job_api::JobId, ksp_job_backfill_lib::BackfillJobRuntime)> {
let job_id = match ksp_job_api::JobId::new(job_id) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::option::Option::None,
};
let network = match ksp_store_lib::RawNetworkId::new("mainnet-beta") {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::option::Option::None,
};
let request = ksp_job_backfill_lib::BackfillRequest::new(
job_id.clone(),
network,
ksp_onchain_transport_lib::HttpRoleName::new("backfill_pool"),
ksp_job_backfill_lib::BackfillCommitment::Finalized,
ksp_job_backfill_lib::BackfillScope::latest_address(ksp_core_lib::Pubkey::new_from_array([1_u8; 32])),
1,
1,
1,
1,
std::option::Option::None,
);
let request = match request {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::option::Option::None,
};
let runtime = match ksp_job_backfill_lib::BackfillJobRuntime::new(request) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::option::Option::None,
};
return std::option::Option::Some((job_id, runtime));
}
#[test]
fn targeted_cancel_is_idempotent_and_rejects_stale_job_identity() {
let state = crate::BackfillRunState::new();
let runtime = cancellable_runtime("backfill-desk-41");
assert!(runtime.is_some());
let (job_id, runtime) = match runtime {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let installed = state.install(job_id.clone(), runtime.handle());
assert!(installed.is_ok());
let first = state.cancel(job_id.as_str());
assert!(first.is_ok());
if let std::result::Result::Ok(first) = first {
assert!(first.accepted);
assert_eq!(first.state, "cancelling");
}
let repeated = state.cancel(job_id.as_str());
assert!(repeated.is_ok());
if let std::result::Result::Ok(repeated) = repeated {
assert!(!repeated.accepted);
assert_eq!(repeated.state, "cancelling");
}
let stale = state.cancel("backfill-desk-40");
assert!(stale.is_err());
if let std::result::Result::Err(error) = stale {
assert_eq!(error.code().domain(), crate::ERROR_CODE_BACKFILL_RUN_MISMATCH.domain());
assert_eq!(error.code().code(), crate::ERROR_CODE_BACKFILL_RUN_MISMATCH.code());
}
}

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-app-backfill-desk/unit_tests/dto_backfill.rs
// version: 2
// version: 3
#[test]
fn request_limits_are_derived_from_job_owned_public_bounds() {
@@ -43,3 +43,18 @@ fn start_acknowledgement_contains_only_backend_job_identity_and_initial_state()
}
}
}
#[test]
fn cancel_acknowledgement_contains_only_backend_job_identity_acceptance_and_state() {
let response = crate::BackfillCancelResponseDto { accepted: true, job_id: "backfill-desk-1".to_owned(), state: "cancelling".to_owned() };
let serialized = serde_json::to_string(&response);
assert!(serialized.is_ok());
if let std::result::Result::Ok(serialized) = serialized {
assert!(serialized.contains("backfill-desk-1"));
assert!(serialized.contains("cancelling"));
assert!(serialized.contains("accepted"));
for forbidden in ["address", "signature", "provider", "endpoint", "credential", "token", "checkpoint", "payload"] {
assert!(!serialized.contains(forbidden));
}
}
}