|
| 1 | +use crate::integ_tests::activity_functions::echo; |
1 | 2 | use std::time::Duration; |
2 | | -use temporal_client::{NamespacedClient, WorkflowService}; |
| 3 | +use temporal_client::{NamespacedClient, WorkflowOptions, WorkflowService}; |
| 4 | +use temporal_sdk::{ActivityOptions, WfContext}; |
3 | 5 | use temporal_sdk_core_api::worker::{ |
4 | 6 | WorkerDeploymentOptions, WorkerDeploymentVersion, WorkerVersioningStrategy, |
5 | 7 | }; |
6 | 8 | use temporal_sdk_core_protos::{ |
7 | 9 | coresdk::{ |
8 | | - workflow_commands::CompleteWorkflowExecution, workflow_completion, |
| 10 | + AsJsonPayloadExt, workflow_commands::CompleteWorkflowExecution, workflow_completion, |
9 | 11 | workflow_completion::WorkflowActivationCompletion, |
10 | 12 | }, |
11 | 13 | temporal::api::{ |
@@ -129,3 +131,101 @@ async fn sets_deployment_info_on_task_responses(#[values(true, false)] use_defau |
129 | 131 | format!("{}.1.0", deploy_name) |
130 | 132 | ); |
131 | 133 | } |
| 134 | + |
| 135 | +#[tokio::test] |
| 136 | +async fn activity_has_deployment_stamp() { |
| 137 | + let wf_name = "activity_has_deployment_stamp"; |
| 138 | + let mut starter = CoreWfStarter::new(wf_name); |
| 139 | + let deploy_name = format!("deployment-{}", starter.get_task_queue()); |
| 140 | + starter |
| 141 | + .worker_config |
| 142 | + .versioning_strategy(WorkerVersioningStrategy::WorkerDeploymentBased( |
| 143 | + WorkerDeploymentOptions { |
| 144 | + version: WorkerDeploymentVersion { |
| 145 | + deployment_name: deploy_name.clone(), |
| 146 | + build_id: "1.0".to_string(), |
| 147 | + }, |
| 148 | + use_worker_versioning: true, |
| 149 | + default_versioning_behavior: VersioningBehavior::AutoUpgrade.into(), |
| 150 | + }, |
| 151 | + )); |
| 152 | + let mut worker = starter.worker().await; |
| 153 | + let client = starter.get_client().await; |
| 154 | + worker.register_wf(wf_name.to_owned(), |ctx: WfContext| async move { |
| 155 | + ctx.activity(ActivityOptions { |
| 156 | + activity_type: "echo_activity".to_string(), |
| 157 | + start_to_close_timeout: Some(Duration::from_secs(5)), |
| 158 | + input: "hi!".as_json_payload().expect("serializes fine"), |
| 159 | + ..Default::default() |
| 160 | + }) |
| 161 | + .await; |
| 162 | + Ok(().into()) |
| 163 | + }); |
| 164 | + worker.register_activity("echo_activity", echo); |
| 165 | + let submitter = worker.get_submitter_handle(); |
| 166 | + let shutdown_handle = worker.inner_mut().shutdown_handle(); |
| 167 | + |
| 168 | + let client_task = async { |
| 169 | + let desc_resp = eventually( |
| 170 | + async || { |
| 171 | + client |
| 172 | + .get_client() |
| 173 | + .clone() |
| 174 | + .describe_worker_deployment(DescribeWorkerDeploymentRequest { |
| 175 | + namespace: client.namespace().to_string(), |
| 176 | + deployment_name: deploy_name.clone(), |
| 177 | + }) |
| 178 | + .await |
| 179 | + }, |
| 180 | + Duration::from_secs(50), |
| 181 | + ) |
| 182 | + .await |
| 183 | + .unwrap() |
| 184 | + .into_inner(); |
| 185 | + |
| 186 | + client |
| 187 | + .get_client() |
| 188 | + .clone() |
| 189 | + .set_worker_deployment_current_version(SetWorkerDeploymentCurrentVersionRequest { |
| 190 | + namespace: client.namespace().to_owned(), |
| 191 | + deployment_name: deploy_name.clone(), |
| 192 | + version: format!("{}.1.0", deploy_name), |
| 193 | + conflict_token: desc_resp.conflict_token, |
| 194 | + ..Default::default() |
| 195 | + }) |
| 196 | + .await |
| 197 | + .unwrap(); |
| 198 | + |
| 199 | + submitter |
| 200 | + .submit_wf( |
| 201 | + starter.get_wf_id(), |
| 202 | + wf_name.to_owned(), |
| 203 | + vec![], |
| 204 | + WorkflowOptions::default(), |
| 205 | + ) |
| 206 | + .await |
| 207 | + .unwrap(); |
| 208 | + starter.wait_for_default_wf_finish().await.unwrap(); |
| 209 | + shutdown_handle(); |
| 210 | + }; |
| 211 | + join!( |
| 212 | + async { |
| 213 | + worker.inner_mut().run().await.unwrap(); |
| 214 | + }, |
| 215 | + client_task |
| 216 | + ); |
| 217 | + let hist = starter.get_history().await; |
| 218 | + let _activity_completed = hist |
| 219 | + .events |
| 220 | + .into_iter() |
| 221 | + .find_map(|e| { |
| 222 | + if let Attributes::ActivityTaskCompletedEventAttributes(a) = e.attributes.unwrap() { |
| 223 | + Some(a) |
| 224 | + } else { |
| 225 | + None |
| 226 | + } |
| 227 | + }) |
| 228 | + .unwrap(); |
| 229 | + // TODO: Can't actually verify this at the moment as the deployment options are not transferred |
| 230 | + // to the event. |
| 231 | +} |
0 commit comments