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}'");
        }
Exemple #5
0
 public void StopFire()
 {
     _action_framecount = 0;
     _state             = DummyState.Idle;
     _entity.OnSkill(false);
     trigger = AnimTriger.EndSkill;
     if (_attribute != null)
     {
         _attribute.Clear();
     }
 }
Exemple #6
0
 private void State_OnFunctionSend(object sender, FunctionSendArgs e)
 {
     if (DummyState == null)
     {
         DummyState = new State();
     }
     DummyState.Configure(IP, Port);
     if (Enabled)
     {
         DummyState.SendFunction(e.Function);
     }
 }
Exemple #7
0
        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();
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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");
        }
Exemple #11
0
    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);
        }
Exemple #13
0
 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) },
     };
 }
Exemple #14
0
    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();
    }
Exemple #15
0
        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);
        }
Exemple #16
0
        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();
        }
Exemple #17
0
        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();
        }
Exemple #18
0
        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);
        }
Exemple #19
0
        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);
        }
Exemple #20
0
    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);
    }
Exemple #21
0
    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;
        }
    }
Exemple #22
0
        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");
        }
Exemple #24
0
 public void Setup()
 {
     m_State  = new DummyState();
     m_Helper = new TestHierarchyHelper(m_State);
 }
Exemple #25
0
 public DummyState(DummyState state)
     : base(state)
 {
 }
Exemple #26
0
 public DummyState(DummyState state)
     : base(state)
 {
 }