From c983b151e294851c3f68b91b0937e3ba9fa2af0a Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Fri, 4 Sep 2026 09:50:48 -0400 Subject: [PATCH] test(rust): add activity/basic_no_workflow_timeout --- .../basic_no_workflow_timeout/feature.rs | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 features/activity/basic_no_workflow_timeout/feature.rs diff --git a/features/activity/basic_no_workflow_timeout/feature.rs b/features/activity/basic_no_workflow_timeout/feature.rs new file mode 100644 index 00000000..825a6d44 --- /dev/null +++ b/features/activity/basic_no_workflow_timeout/feature.rs @@ -0,0 +1,77 @@ +use anyhow::{Result, ensure}; +use std::time::Duration; +use temporalio_client::WorkflowGetResultOptions; +use temporalio_features_harness::{Feature, FeatureContext, async_trait}; +use temporalio_macros::{activities, workflow, workflow_methods}; +use temporalio_sdk::{ + ActivityOptions, WorkerOptions, WorkflowContext, WorkflowResult, + activities::{ActivityContext, ActivityError}, +}; + +#[workflow] +#[derive(Default)] +pub struct BasicActivityWorkflow; + +#[workflow_methods] +impl BasicActivityWorkflow { + #[run] + pub async fn run(ctx: &mut WorkflowContext) -> WorkflowResult { + #[allow(deprecated)] + ctx.start_activity( + BasicActivityActivities::echo, + (), + ActivityOptions::with_start_to_close_timeout(Duration::from_secs(60)).build(), + ) + .await?; + + #[allow(deprecated)] + let result = ctx + .start_activity( + BasicActivityActivities::echo, + (), + ActivityOptions::with_schedule_to_close_timeout(Duration::from_secs(60)).build(), + ) + .await?; + Ok(result) + } +} + +pub struct BasicActivityActivities; + +#[activities] +impl BasicActivityActivities { + #[activity] + pub async fn echo(_ctx: ActivityContext) -> Result { + Ok("echo".to_owned()) + } +} + +struct BasicActivityFeature; + +#[async_trait] +impl Feature for BasicActivityFeature { + fn worker_options(&self, mut worker_options: WorkerOptions) -> Result { + worker_options + .register_workflow::()? + .register_activities(BasicActivityActivities); + Ok(worker_options) + } + + async fn execute(&self, context: FeatureContext) -> Result<()> { + let mut start_options = context.workflow_start_options(); + start_options.execution_timeout = None; + let handle = context + .client + .start_workflow(BasicActivityWorkflow::run, (), start_options) + .await?; + let result = handle + .get_result(WorkflowGetResultOptions::default()) + .await?; + ensure!(result == "echo", "unexpected workflow result: {result}"); + Ok(()) + } +} + +pub fn feature() -> impl Feature { + BasicActivityFeature +}