public async Task ReleaseLockAsync_should_release_lock_and_update_state() { var sut = CreateSut(); var correlationId = Guid.NewGuid(); var newState = new DummyState(correlationId, "lorem", 42); var(state, lockId) = await sut.LockAsync(correlationId, newState, CancellationToken.None); var updatedState = new DummyState(correlationId, "ipsum", 71); await sut.ReleaseLockAsync(updatedState, lockId); var unLockedState = await _fixture.DbContext.SagaStates.FirstOrDefaultAsync(e => e.CorrelationId == newState.Id); unLockedState.Should().NotBeNull(); unLockedState.LockId.Should().BeNull(); unLockedState.LockTime.Should().BeNull(); unLockedState.Data.Should().NotBeNull(); var serializer = new JsonSerializer(); var deserializedState = await serializer.DeserializeAsync <DummyState>(unLockedState.Data); deserializedState.Id.Should().Be(updatedState.Id); deserializedState.Bar.Should().Be(updatedState.Bar); deserializedState.Foo.Should().Be(updatedState.Foo); }
public async Task ReleaseLockAsync_should_use_not_transaction_when_not_available() { var state = DummyState.New(); var lockId = Guid.NewGuid(); var updateResult = NSubstitute.Substitute.ForPartsOf <UpdateResult>(); updateResult.MatchedCount.ReturnsForAnyArgs(1); var repo = NSubstitute.Substitute.For <IMongoCollection <Entities.SagaState> >(); repo.UpdateOneAsync((FilterDefinition <Entities.SagaState>)null, (UpdateDefinition <Entities.SagaState>)null, (UpdateOptions)null, CancellationToken.None) .ReturnsForAnyArgs(updateResult); var dbContext = NSubstitute.Substitute.For <IDbContext>(); dbContext.SagaStates.Returns(repo); dbContext.Transaction.ReturnsNull(); var serializer = NSubstitute.Substitute.For <ISerializer>(); var sut = new CosmosSagaStateRepository(dbContext, serializer, CosmosSagaStateRepositoryOptions.Default); await sut.ReleaseLockAsync <DummyState>(state, lockId); await repo.Received(1) .UpdateOneAsync(Arg.Any <FilterDefinition <Entities.SagaState> >(), Arg.Any <UpdateDefinition <Entities.SagaState> >(), Arg.Any <UpdateOptions>(), Arg.Any <CancellationToken>()); }
public async Task ReleaseLockAsync_should_throw_when_update_fails() { var state = DummyState.New(); var lockId = Guid.NewGuid(); var updateResult = NSubstitute.Substitute.ForPartsOf <UpdateResult>(); updateResult.MatchedCount.ReturnsForAnyArgs(0); var repo = NSubstitute.Substitute.For <IMongoCollection <Entities.SagaState> >(); repo.UpdateOneAsync((FilterDefinition <Entities.SagaState>)null, (UpdateDefinition <Entities.SagaState>)null, (UpdateOptions)null, CancellationToken.None) .ReturnsForAnyArgs(updateResult); var dbContext = NSubstitute.Substitute.For <IDbContext>(); dbContext.SagaStates.Returns(repo); var serializer = NSubstitute.Substitute.For <ISerializer>(); var sut = new CosmosSagaStateRepository(dbContext, serializer, CosmosSagaStateRepositoryOptions.Default); await Assert.ThrowsAsync <LockException>(async() => await sut.ReleaseLockAsync <DummyState>(state, lockId)); }
public async Task ReleaseLockAsync_should_throw_when_state_not_found() { var sut = CreateSut(); var correlationId = Guid.NewGuid(); var state = new DummyState(correlationId, "lorem", 42); var ex = await Assert.ThrowsAsync <LockException>(async() => await sut.ReleaseLockAsync(state, Guid.NewGuid())); ex.Message.Should().Contain($"unable to find Saga State '{state.Id}'"); }
public void StopFire() { _action_framecount = 0; _state = DummyState.Idle; _entity.OnSkill(false); trigger = AnimTriger.EndSkill; if (_attribute != null) { _attribute.Clear(); } }
private void State_OnFunctionSend(object sender, FunctionSendArgs e) { if (DummyState == null) { DummyState = new State(); } DummyState.Configure(IP, Port); if (Enabled) { DummyState.SendFunction(e.Function); } }
public async Task LockAsync_should_throw_if_item_locked() { var sut = CreateSut(); var newState = DummyState.New(); await sut.LockAsync(newState.Id, newState, CancellationToken.None); var ex = await Assert.ThrowsAsync <LockException>(async() => await sut.LockAsync(newState.Id, newState, CancellationToken.None)); ex.Message.Should().Contain($"saga state '{newState.Id}' is already locked"); }
public async Task LockAsync_should_lock_item() { var sut = CreateSut(); var newState = DummyState.New(); var(_, lockId) = await sut.LockAsync(newState.Id, newState, CancellationToken.None); var lockedState = await _fixture.DbContext.SagaStates.FirstOrDefaultAsync(e => e.LockId == lockId && e.CorrelationId == newState.Id); lockedState.Should().NotBeNull(); }
public async Task LockAsync_should_create_and_return_locked_item_if_not_existing() { var sut = CreateSut(); var newState = DummyState.New(); var(state, lockId) = await sut.LockAsync(newState.Id, newState, CancellationToken.None); state.Should().NotBeNull(); state.Id.Should().Be(newState.Id); state.Bar.Should().Be(newState.Bar); state.Foo.Should().Be(newState.Foo); }
public async Task LockAsync_should_throw_if_item_locked() { var serializer = new JsonSerializer(); var options = new MongoSagaStateRepositoryOptions(TimeSpan.FromMinutes(1)); var sut = new MongoSagaStateRepository(_fixture.DbContext, serializer, options); var newState = DummyState.New(); var(state, lockId) = await sut.LockAsync(newState.Id, newState, CancellationToken.None); var ex = await Assert.ThrowsAsync <LockException>(async() => await sut.LockAsync(newState.Id, newState, CancellationToken.None)); ex.Message.Should().Contain($"saga state '{state.Id}' is already locked"); }
public void Fire() { _state = DummyState.Fire; if (_current.TypeToken == 0) { trigger = XSkillData.JA_Command[_current.SkillPosition]; } else if (_current.TypeToken == 1) { trigger = AnimTriger.ToArtSkill; } FocusTarget(); }
public async Task SerializeAsync_should_serialize_object() { var state = new DummyState(Guid.NewGuid(), "foo", 42); var sut = new JsonSerializer(); var serialized = await sut.SerializeAsync(state); serialized.Should().NotBeNull(); var deserializedState = System.Text.Json.JsonSerializer.Deserialize <DummyState>(serialized); deserializedState.Should().NotBeNull(); deserializedState.Id.Should().Be(state.Id); deserializedState.Bar.Should().Be(state.Bar); deserializedState.Foo.Should().Be(state.Foo); }
public SimulationStatesFactory(IStateController <SimulationState> controller, TestUnitFactory unitFactory, SimulationOnGui simulationOnGui, Player player, WorldData worldData, BaseWorld gameWorld) { _unitFactory = unitFactory; _dummyState = new DummyState(); _stateBehaviours = new Dictionary <SimulationState, IStateBehaviour>() { { SimulationState.Idle, new SimulationIdleState(gameWorld) }, { SimulationState.Initialize, new SimulationInitializeState(controller, unitFactory, player, simulationOnGui, gameWorld, worldData) }, }; }
public void Fire() { _action_framecount = 0; _state = DummyState.Fire; _entity.OnSkill(true); if (_current.TypeToken == 0) { trigger = XSkillData.JA_Command[_current.SkillPosition]; } else if (_current.TypeToken == 1) { trigger = AnimTriger.ToArtSkill; } FocusTarget(); }
public async Task LockAsync_should_create_and_return_locked_item_if_not_existing() { var serializer = new JsonSerializer(); var options = new MongoSagaStateRepositoryOptions(TimeSpan.FromMinutes(1)); var sut = new MongoSagaStateRepository(_fixture.DbContext, serializer, options); var newState = DummyState.New(); var(state, lockId) = await sut.LockAsync(newState.Id, newState, CancellationToken.None); state.Should().NotBeNull(); state.Id.Should().Be(newState.Id); state.Bar.Should().Be(newState.Bar); state.Foo.Should().Be(newState.Foo); }
public async Task LockAsync_should_lock_item() { var sut = CreateSut(); var newState = DummyState.New(); var(state, lockId) = await sut.LockAsync(newState.Id, newState, CancellationToken.None); var filter = Builders <Entities.SagaState> .Filter.Eq(e => e.LockId, lockId); var cursor = await _fixture.DbContext.SagaStates.FindAsync(filter); var lockedState = await cursor.FirstOrDefaultAsync(); lockedState.Should().NotBeNull(); }
public async Task LockAsync_should_return_state_if_lock_expired() { var options = new CosmosSagaStateRepositoryOptions(TimeSpan.Zero); var sut = CreateSut(options); var newState = DummyState.New(); var(firstState, firstLockId) = await sut.LockAsync(newState.Id, newState, CancellationToken.None); await Task.Delay(500); var(secondState, secondLockId) = await sut.LockAsync(newState.Id, newState, CancellationToken.None); secondLockId.Should().NotBe(firstLockId); secondState.Should().NotBeNull(); }
public async Task LockAsync_should_allow_different_saga_state_types_to_share_the_correlation_id() { var sut = CreateSut(); var correlationId = Guid.NewGuid(); var newState = new DummyState(correlationId, "lorem", 42); var(state, lockId) = await sut.LockAsync(correlationId, newState, CancellationToken.None); var newState2 = new DummyState2(state.Id); newState2.Id.Should().Be(newState.Id); var(state2, lockId2) = await sut.LockAsync(correlationId, newState2, CancellationToken.None); state2.Should().NotBeNull(); state2.Id.Should().Be(correlationId); }
public async Task LockAsync_should_allow_different_saga_state_types_to_share_the_correlation_id() { var serializer = new JsonSerializer(); var options = new MongoSagaStateRepositoryOptions(TimeSpan.FromMinutes(1)); var sut = new MongoSagaStateRepository(_fixture.DbContext, serializer, options); var newState = DummyState.New(); var(state, lockId) = await sut.LockAsync(newState.Id, newState, CancellationToken.None); var newState2 = new DummyState2(state.Id); newState2.Id.Should().Be(newState.Id); var(state2, lockId2) = await sut.LockAsync(newState2.Id, newState2, CancellationToken.None); state2.Should().NotBeNull(); state2.Id.Should().Be(newState.Id); }
IEnumerator Start() { yield return(new WaitForSeconds(0.4f)); _state = DummyState.Idle; if (oVerrideController == null) { BuildOverride(); } _camera = new XSkillCamera(gameObject); _camera.Initialize(); _camera.UnityCamera.fieldOfView = defaultFov; Light light = _camera.UnityCamera.gameObject.AddComponent <Light>() as Light; light.type = LightType.Directional; light.intensity = 0.5f; RebuildSkillAniamtion(); Application.targetFrameRate = 30; _attribute = new XSkillAttributes(this, transform); }
public void StopFire() { if (_state != DummyState.Fire) { return; } _state = DummyState.Idle; trigger = AnimTriger.EndSkill; if (_attribute != null) { _attribute.Clear(); } _action_framecount = 0; _camera.EndEffect(null); nResultForward = Vector3.zero; Time.timeScale = 1; if (ator != null) { ator.speed = 1; } }
public async Task SerializeAsync_should_serialize_object() { var state = new DummyState(Guid.Parse("e846ad99-ddb5-4ed1-b92e-3da6e2bf78fa"), "foo", 42); var sut = new JsonSerializer(); var serialized = await sut.SerializeAsync(state); serialized.Should().NotBeNull(); var jsonString = Encoding.UTF8.GetString(serialized); jsonString.Should() .Be( "{\"$type\":\"OpenSleigh.Core.Tests.Sagas.DummyState, OpenSleigh.Core.Tests\",\"_processedMessages\":{\"$type\":\"System.Collections.Generic.Dictionary`2[[System.Guid, System.Private.CoreLib],[OpenSleigh.Core.Messaging.IMessage, OpenSleigh.Core]], System.Private.CoreLib\"},\"_isComplete\":false,\"Foo\":\"foo\",\"Bar\":42,\"Id\":\"e846ad99-ddb5-4ed1-b92e-3da6e2bf78fa\"}"); var deserializedState = System.Text.Json.JsonSerializer.Deserialize <DummyState>(serialized); deserializedState.Should().NotBeNull(); deserializedState.Id.Should().Be(state.Id); deserializedState.Bar.Should().Be(state.Bar); deserializedState.Foo.Should().Be(state.Foo); }
public async Task ReleaseLockAsync_should_throw_when_release_lock_fails() { var newState = DummyState.New(); var coll = NSubstitute.Substitute.For <IMongoCollection <Entities.SagaState> >(); coll.UpdateOneAsync(Arg.Any <FilterDefinition <Entities.SagaState> >(), Arg.Any <UpdateDefinition <Entities.SagaState> >(), Arg.Any <UpdateOptions>(), Arg.Any <CancellationToken>()) .ReturnsForAnyArgs((UpdateResult)null); var dbContext = NSubstitute.Substitute.For <IDbContext>(); dbContext.SagaStates.Returns(coll); var serializer = NSubstitute.Substitute.For <ISerializer>(); var options = new CosmosSagaStateRepositoryOptions(TimeSpan.FromMinutes(1)); var sut = new CosmosSagaStateRepository(dbContext, serializer, options); var ex = await Assert.ThrowsAsync <LockException>(async() => await sut.ReleaseLockAsync(newState, Guid.NewGuid(), CancellationToken.None)); ex.Message.Should().Contain("unable to release lock on saga state"); }
public void Setup() { m_State = new DummyState(); m_Helper = new TestHierarchyHelper(m_State); }
public DummyState(DummyState state) : base(state) { }