// file: crates/ksp-worker-api/tests/public_api.rs // version: 1 //! External-consumer canaries for the Worker API crate-root facade. #[test] fn pre_002_identity_lifecycle_stop_and_snapshot_are_consumable_from_crate_root() { let id = ksp_worker_api::WorkerId::new("worker-public-001"); let kind = ksp_worker_api::WorkerKindCode::new("example_worker"); assert!(id.is_ok()); assert!(kind.is_ok()); let id = match id { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; let kind = match kind { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; let mut lifecycle = ksp_worker_api::WorkerLifecycle::new(id.clone(), kind.clone()); assert_eq!(lifecycle.state(), ksp_worker_api::WorkerState::Created); assert!(lifecycle.start().is_ok()); assert!(lifecycle.mark_running().is_ok()); let stop = ksp_worker_api::WorkerStopToken::new(); assert!(stop.request_stop()); assert!(lifecycle.mark_stopping().is_ok()); let snapshot = ksp_worker_api::WorkerSnapshot::new( id, kind, ksp_worker_api::WorkerSnapshotSequence::initial(), lifecycle.state(), ksp_worker_api::WorkerHealth::Healthy, ksp_worker_api::WorkerActivity::Idle, ); assert_eq!(snapshot.state(), ksp_worker_api::WorkerState::Stopping); assert_eq!(snapshot.health(), ksp_worker_api::WorkerHealth::Healthy); assert_eq!(snapshot.activity(), ksp_worker_api::WorkerActivity::Idle); return; } #[test] fn pre_002_public_bounds_and_error_codes_are_exact() { assert_eq!(ksp_worker_api::MAX_WORKER_ID_BYTES, 128); assert_eq!(ksp_worker_api::MAX_WORKER_KIND_CODE_BYTES, 128); assert_eq!(ksp_worker_api::ERROR_CODE_WORKER_ID_INVALID.domain(), "worker_api"); assert_eq!(ksp_worker_api::ERROR_CODE_WORKER_ID_INVALID.code(), "worker_id_invalid"); assert_eq!(ksp_worker_api::ERROR_CODE_WORKER_KIND_INVALID.domain(), "worker_api"); assert_eq!(ksp_worker_api::ERROR_CODE_WORKER_KIND_INVALID.code(), "worker_kind_invalid"); assert_eq!(ksp_worker_api::ERROR_CODE_WORKER_TRANSITION_INVALID.code(), "worker_transition_invalid"); assert_eq!(ksp_worker_api::ERROR_CODE_WORKER_SNAPSHOT_SEQUENCE_EXHAUSTED.code(), "worker_snapshot_sequence_exhausted"); return; }