| 
									
										
										
										
											2015-11-04 10:12:17 +01:00
										 |  |  | from freezegun import freeze_time | 
					
						
							| 
									
										
										
										
											2015-10-26 06:31:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-05 02:22:02 +01:00
										 |  |  | from moto.swf.models import DecisionTask, Timeout | 
					
						
							| 
									
										
										
										
											2016-01-17 18:00:57 -05:00
										 |  |  | from moto.swf.exceptions import SWFWorkflowExecutionClosedError | 
					
						
							| 
									
										
										
										
											2015-10-26 06:31:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-05 02:47:05 +01:00
										 |  |  | from ..utils import make_workflow_execution, process_first_timeout | 
					
						
							| 
									
										
										
										
											2015-10-26 06:31:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_decision_task_creation(): | 
					
						
							|  |  |  |     wfe = make_workflow_execution() | 
					
						
							|  |  |  |     dt = DecisionTask(wfe, 123) | 
					
						
							|  |  |  |     dt.workflow_execution.should.equal(wfe) | 
					
						
							|  |  |  |     dt.state.should.equal("SCHEDULED") | 
					
						
							|  |  |  |     dt.task_token.should_not.be.empty | 
					
						
							|  |  |  |     dt.started_event_id.should.be.none | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-02 14:02:37 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-26 06:31:00 +01:00
										 |  |  | def test_decision_task_full_dict_representation(): | 
					
						
							|  |  |  |     wfe = make_workflow_execution() | 
					
						
							|  |  |  |     wft = wfe.workflow_type | 
					
						
							|  |  |  |     dt = DecisionTask(wfe, 123) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     fd = dt.to_full_dict() | 
					
						
							|  |  |  |     fd["events"].should.be.a("list") | 
					
						
							| 
									
										
										
										
											2020-02-26 01:06:58 +10:00
										 |  |  |     fd.should_not.contain("previousStartedEventId") | 
					
						
							| 
									
										
										
										
											2015-10-26 06:31:00 +01:00
										 |  |  |     fd.should_not.contain("startedEventId") | 
					
						
							|  |  |  |     fd.should.contain("taskToken") | 
					
						
							|  |  |  |     fd["workflowExecution"].should.equal(wfe.to_short_dict()) | 
					
						
							|  |  |  |     fd["workflowType"].should.equal(wft.to_short_dict()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-26 01:08:03 +10:00
										 |  |  |     dt.start(1234, 1230) | 
					
						
							| 
									
										
										
										
											2015-10-26 06:31:00 +01:00
										 |  |  |     fd = dt.to_full_dict() | 
					
						
							|  |  |  |     fd["startedEventId"].should.equal(1234) | 
					
						
							| 
									
										
										
										
											2020-02-26 01:08:03 +10:00
										 |  |  |     fd["previousStartedEventId"].should.equal(1230) | 
					
						
							| 
									
										
										
										
											2015-11-04 10:12:17 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-02 14:02:37 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-05 02:22:02 +01:00
										 |  |  | def test_decision_task_first_timeout(): | 
					
						
							| 
									
										
										
										
											2015-11-04 10:12:17 +01:00
										 |  |  |     wfe = make_workflow_execution() | 
					
						
							|  |  |  |     dt = DecisionTask(wfe, 123) | 
					
						
							| 
									
										
										
										
											2015-11-05 02:22:02 +01:00
										 |  |  |     dt.first_timeout().should.be.none | 
					
						
							| 
									
										
										
										
											2015-11-04 10:12:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     with freeze_time("2015-01-01 12:00:00"): | 
					
						
							|  |  |  |         dt.start(1234) | 
					
						
							| 
									
										
										
										
											2015-11-05 02:22:02 +01:00
										 |  |  |         dt.first_timeout().should.be.none | 
					
						
							| 
									
										
										
										
											2015-11-04 10:12:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # activity task timeout is 300s == 5mins | 
					
						
							|  |  |  |     with freeze_time("2015-01-01 12:06:00"): | 
					
						
							| 
									
										
										
										
											2015-11-05 02:22:02 +01:00
										 |  |  |         dt.first_timeout().should.be.a(Timeout) | 
					
						
							| 
									
										
										
										
											2015-11-04 10:12:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     dt.complete() | 
					
						
							| 
									
										
										
										
											2015-11-05 02:22:02 +01:00
										 |  |  |     dt.first_timeout().should.be.none | 
					
						
							| 
									
										
										
										
											2015-11-04 22:35:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-02 14:02:37 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-04 22:35:45 +01:00
										 |  |  | def test_decision_task_cannot_timeout_on_closed_workflow_execution(): | 
					
						
							|  |  |  |     with freeze_time("2015-01-01 12:00:00"): | 
					
						
							|  |  |  |         wfe = make_workflow_execution() | 
					
						
							|  |  |  |         wfe.start() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with freeze_time("2015-01-01 13:55:00"): | 
					
						
							|  |  |  |         dt = DecisionTask(wfe, 123) | 
					
						
							|  |  |  |         dt.start(1234) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with freeze_time("2015-01-01 14:10:00"): | 
					
						
							| 
									
										
										
										
											2015-11-05 02:22:02 +01:00
										 |  |  |         dt.first_timeout().should.be.a(Timeout) | 
					
						
							|  |  |  |         wfe.first_timeout().should.be.a(Timeout) | 
					
						
							| 
									
										
										
										
											2015-11-05 02:47:05 +01:00
										 |  |  |         process_first_timeout(wfe) | 
					
						
							| 
									
										
										
										
											2015-11-05 02:22:02 +01:00
										 |  |  |         dt.first_timeout().should.be.none | 
					
						
							| 
									
										
										
										
											2015-11-05 01:12:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-02 14:02:37 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-05 01:12:51 +01:00
										 |  |  | def test_decision_task_cannot_change_state_on_closed_workflow_execution(): | 
					
						
							|  |  |  |     wfe = make_workflow_execution() | 
					
						
							|  |  |  |     wfe.start() | 
					
						
							|  |  |  |     task = DecisionTask(wfe, 123) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     wfe.complete(123) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     task.timeout.when.called_with(Timeout(task, 0, "foo")).should.throw( | 
					
						
							| 
									
										
										
										
											2019-10-31 08:44:26 -07:00
										 |  |  |         SWFWorkflowExecutionClosedError | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2015-11-05 01:12:51 +01:00
										 |  |  |     task.complete.when.called_with().should.throw(SWFWorkflowExecutionClosedError) |