public void If_KeepAliveMode_TokenAvailableAndIsNotFirstInQueueButFirstHasCompleted_ThenRemoveBothFromQueueAndGrant() { // ARRANGE var executionHelper = new ExecutionsHelper(); var taskDefinitionId = executionHelper.InsertTask(TestConstants.ApplicationName, TestConstants.TaskName); executionHelper.InsertUnlimitedExecutionToken(taskDefinitionId); // Create execution 1 and add it to the queue var taskExecutionId1 = executionHelper.InsertKeepAliveTaskExecution(taskDefinitionId); executionHelper.SetKeepAlive(taskExecutionId1); executionHelper.InsertIntoCriticalSectionQueue(taskDefinitionId, 1, taskExecutionId1); executionHelper.SetTaskExecutionAsCompleted(taskExecutionId1); // Create execution 2 and add it to the queue var taskExecutionId2 = executionHelper.InsertKeepAliveTaskExecution(taskDefinitionId); executionHelper.SetKeepAlive(taskExecutionId2); executionHelper.InsertIntoCriticalSectionQueue(taskDefinitionId, 2, taskExecutionId2); // Create an available critical section token executionHelper.InsertAvailableCriticalSectionToken(taskDefinitionId, "0"); var request = new StartCriticalSectionRequest(new TaskId(TestConstants.ApplicationName, TestConstants.TaskName), taskExecutionId2, TaskDeathMode.KeepAlive, CriticalSectionType.User); request.KeepAliveDeathThreshold = new TimeSpan(0, 30, 0); // ACT var sut = CreateSut(); var response = sut.Start(request); // ASSERT var numberOfQueueRecordsForExecution1 = executionHelper.GetQueueCount(taskExecutionId1); var numberOfQueueRecordsForExecution2 = executionHelper.GetQueueCount(taskExecutionId2); Assert.AreEqual(0, numberOfQueueRecordsForExecution1); Assert.AreEqual(0, numberOfQueueRecordsForExecution2); Assert.AreEqual(GrantStatus.Granted, response.GrantStatus); }
private void RequestAndReturnTokenWithKeepAliveMode(object state) { var tuple = (Tuple<int, TaskExecutionRepository>)state; var sut = tuple.Item2; for (int i = 0; i < 100; i++) { var firstStartRequest = CreateKeepAliveStartRequest(); var firstStartResponse = sut.Start(firstStartRequest); var executionHelper = new ExecutionsHelper(); executionHelper.SetKeepAlive(firstStartResponse.TaskExecutionId); if (firstStartResponse.GrantStatus == GrantStatus.Granted) { var firstCompleteRequest = new TaskExecutionCompleteRequest(new TaskId(TestConstants.ApplicationName, TestConstants.TaskName), firstStartResponse.TaskExecutionId, firstStartResponse.ExecutionTokenId); var firstCompleteResponse = sut.Complete(firstCompleteRequest); } } }
public void If_KeepAliveMode_OneTaskAndOneTokenAndIsUnavailableAndKeepAliveHasNotPassedElapsedTime_ThenIsDenied() { // ARRANGE var executionHelper = new ExecutionsHelper(); var taskDefinitionId = executionHelper.InsertTask(TestConstants.ApplicationName, TestConstants.TaskName); executionHelper.InsertAvailableExecutionToken(taskDefinitionId); var startRequest = CreateKeepAliveStartRequest(); startRequest.KeepAliveDeathThreshold = new TimeSpan(1, 0, 0); var secondRequest = CreateKeepAliveStartRequest(); secondRequest.KeepAliveDeathThreshold = new TimeSpan(1, 0, 0); // ACT var sut = CreateSut(); var firstResponse = sut.Start(startRequest); executionHelper.SetKeepAlive(firstResponse.TaskExecutionId); Thread.Sleep(5000); var secondResponse = sut.Start(secondRequest); // ASSERT Assert.AreEqual(GrantStatus.Granted, firstResponse.GrantStatus); Assert.AreNotEqual("0", firstResponse.ExecutionTokenId); Assert.AreEqual(GrantStatus.Denied, secondResponse.GrantStatus); Assert.AreEqual("0", secondResponse.ExecutionTokenId); }
public void If_KeepAliveMode_FiveConcurrentTasksAndFourTokensAndAllAreAvailable_ThenIsGrantFirstFourTasksAndDenyTheOther() { // ARRANGE int concurrencyLimit = 4; var executionHelper = new ExecutionsHelper(); var taskDefinitionId = executionHelper.InsertTask(TestConstants.ApplicationName, TestConstants.TaskName); executionHelper.InsertAvailableExecutionToken(taskDefinitionId, concurrencyLimit); var firstStartRequest = CreateKeepAliveStartRequest(concurrencyLimit); var secondStartRequest = CreateKeepAliveStartRequest(concurrencyLimit); var thirdStartRequest = CreateKeepAliveStartRequest(concurrencyLimit); var fourthStartRequest = CreateKeepAliveStartRequest(concurrencyLimit); var fifthStartRequest = CreateKeepAliveStartRequest(concurrencyLimit); // ACT var sut = CreateSut(); var firstResponse = sut.Start(firstStartRequest); executionHelper.SetKeepAlive(firstResponse.TaskExecutionId); var secondResponse = sut.Start(secondStartRequest); executionHelper.SetKeepAlive(secondResponse.TaskExecutionId); var thirdResponse = sut.Start(thirdStartRequest); executionHelper.SetKeepAlive(thirdResponse.TaskExecutionId); var fourthResponse = sut.Start(fourthStartRequest); executionHelper.SetKeepAlive(fourthResponse.TaskExecutionId); var fifthResponse = sut.Start(fifthStartRequest); // ASSERT Assert.AreEqual(GrantStatus.Granted, firstResponse.GrantStatus); Assert.AreEqual(GrantStatus.Granted, secondResponse.GrantStatus); Assert.AreEqual(GrantStatus.Granted, thirdResponse.GrantStatus); Assert.AreEqual(GrantStatus.Granted, fourthResponse.GrantStatus); Assert.AreEqual(GrantStatus.Denied, fifthResponse.GrantStatus); }