Ejemplo n.º 1
0
        public async void CanMergeWithoutNewStreams()
        {
            var container = CreateContainer(new List <Action <Container> >()
            {
                Config.RegisterSagas
            });
            var bus     = container.GetInstance <IBus>();
            var manager = container.GetInstance <IBranchManager>();

            var command = new CreateRoot("Root");
            await await bus.CommandAsync(command);

            await manager.Branch("test");

            await await bus.CommandAsync(new UpdateRoot("Root"));

            var infoQuery = new RootInfoQuery("Root");
            await bus.IsTrue(infoQuery, r => r.CreatedAt < r.UpdatedAt);

            await await bus.CommandAsync(new CreateRoot("BranchRoot"));

            manager.Reset();

            await bus.IsTrue(infoQuery, r => r.CreatedAt == r.UpdatedAt);

            await manager.Merge("test", false);

            await bus.IsTrue(infoQuery, r => r.CreatedAt < r.UpdatedAt);

            await bus.Equal(new StatsQuery(), s => s.NumberOfRoots, 2);
        }
Ejemplo n.º 2
0
        public async void CanCreateEmpty()
        {
            var container  = CreateContainer();
            var bus        = container.GetInstance <IBus>();
            var repository = container.GetInstance <IEsRepository <IAggregate> >();

            var command = new CreateRoot("Root");
            await await bus.CommandAsync(command);

            await repository.Find <Root>("Root");

            var timeline = container.GetInstance <ITimeline>();

            Assert.Equal("master", timeline.Id);

            var timeTraveller = container.GetInstance <IBranchManager>();
            await timeTraveller.Branch("test", Time.MinValue);

            Assert.Equal("test", timeline.Id);

            await bus.IsTrue(new StatsQuery(), s => s.NumberOfRoots == 0);

            timeTraveller.Reset();

            Assert.Equal("master", timeline.Id);
            await repository.FindUntil <Root>("Root");

            await bus.IsTrue(new StatsQuery(), s => s.NumberOfRoots == 1);
        }
Ejemplo n.º 3
0
        public async void CanPushSnapshot()
        {
            var container = CreateContainer(new List <Action <Container> > {
                c => c.UseLocalStore()
            });
            var bus        = container.GetInstance <IBus>();
            var manager    = container.GetInstance <IBranchManager>();
            var remote     = container.GetInstance <IRemote>();
            var repository = container.GetInstance <IEsRepository <IAggregate> >();

            var id      = "Root";
            var command = new CreateRoot(id);
            await await bus.CommandAsync(command);

            await await bus.CommandAsync(new UpdateRoot(id));

            await await bus.CommandAsync(new CreateSnapshot <Root>(id));

            var result = await remote.Push(BranchManager.Master);

            Assert.Equal(Status.Success, result.ResultStatus);

            await manager.Branch("test");

            await await bus.CommandAsync(new UpdateRoot(id));

            result = await remote.Push("test");

            Assert.Equal(Status.Success, result.ResultStatus);

            var root = await repository.Find <Root>(id);

            Assert.Equal(3, root.Version);
            Assert.Equal(2, root.SnapshotVersion);
        }
Ejemplo n.º 4
0
        public async void CanCreateClone()
        {
            var container = CreateContainer(new List <Action <Container> >()
            {
                Config.RegisterSagas
            });
            var bus        = container.GetInstance <IBus>();
            var repository = container.GetInstance <IEsRepository <IAggregate> >();
            var manager    = container.GetInstance <IBranchManager>();
            var locator    = container.GetInstance <IStreamLocator>();
            var queue      = container.GetInstance <IMessageQueue>();

            var command = new CreateRoot("Root");
            await await bus.CommandAsync(command);

            var timeline = container.GetInstance <ITimeline>();

            Assert.Equal("master", timeline.Id);

            await manager.Branch("test");

            Assert.Equal("test", manager.ActiveBranch);
            manager.Reset();
            Assert.Equal(BranchManager.Master, manager.ActiveBranch);

            await await bus.CommandAsync(new UpdateRoot("Root"));

            await manager.Branch("test");

            Assert.Equal("test", timeline.Id);
            var root = await repository.Find <Root>("Root");

            Assert.Equal("Root", root.Id);

            await bus.IsTrue(new RootInfoQuery("Root"), r => r.CreatedAt != default && r.CreatedAt == r.UpdatedAt);

            await await bus.CommandAsync(new CreateRoot("TestRoot"));

            await bus.IsTrue(new RootInfoQuery("TestRoot"), r => r.CreatedAt != default);

            Assert.NotNull(locator.Find <TestSaga>("Root"));

            manager.Reset();
            await bus.IsTrue(new RootInfoQuery("Root"), r => r.CreatedAt != r.UpdatedAt);

            await bus.IsTrue(new RootInfoQuery("TestRoot"), r => r.CreatedAt == r.UpdatedAt);

            await manager.Branch("test");

            queue.Alert(new InvalidateProjections());
            await bus.IsTrue(new RootInfoQuery("TestRoot"), r => r.CreatedAt != default);

            await bus.IsTrue(new RootInfoQuery("Root"), r => r.CreatedAt != default && r.CreatedAt == r.UpdatedAt);

            var graph = container.GetInstance <IGraph>();
            await graph.Serialise();
        }
Ejemplo n.º 5
0
        public async void CanSaveRoot()
        {
            var container  = CreateContainer();
            var bus        = container.GetInstance <IBus>();
            var repository = container.GetInstance <IEsRepository <IAggregate> >();

            var command = new CreateRoot("Root");
            await await bus.CommandAsync(command);

            var root = await repository.Find <Root>("Root");

            Assert.Equal("Root", root.Id);
        }
Ejemplo n.º 6
0
        public async void CanCreateGraph()
        {
            var container = CreateContainer();
            var bus       = container.GetInstance <IBus>();
            var graph     = container.GetInstance <IGraph>();
            var manager   = container.GetInstance <IBranchManager>();

            var command = new CreateRoot("Root");
            await await bus.CommandAsync(command);

            await manager.Branch("test");

            await await bus.CommandAsync(new UpdateRoot("Root"));

            await graph.Populate();
        }
Ejemplo n.º 7
0
        public async void CanMergeGrandTimeline()
        {
            var container     = CreateContainer();
            var bus           = container.GetInstance <IBus>();
            var timeTraveller = container.GetInstance <IBranchManager>();
            var queue         = container.GetInstance <IMessageQueue>();

            var command = new CreateRoot("Root");
            await await bus.CommandAsync(command);

            var timeline = container.GetInstance <ITimeline>();

            Assert.Equal("master", timeline.Id);

            await timeTraveller.Branch("test");

            await await bus.CommandAsync(new CreateRoot("testRoot"));

            await timeTraveller.Branch("grandTest");

            queue.Alert(new InvalidateProjections());

            await await bus.CommandAsync(new CreateRoot("testRoot2"));

            await bus.IsTrue(new StatsQuery(), s => s.NumberOfRoots == 3);

            await timeTraveller.Branch("test");

            queue.Alert(new InvalidateProjections());
            await bus.IsTrue(new StatsQuery(), s => s.NumberOfRoots == 2);

            await timeTraveller.Merge("grandTest");

            await bus.IsTrue(new StatsQuery(), s => s.NumberOfRoots == 3);

            timeTraveller.Reset();
            await bus.IsTrue(new StatsQuery(), s => s.NumberOfRoots == 1);

            await timeTraveller.Merge("test");

            await bus.IsTrue(new StatsQuery(), s => s.NumberOfRoots == 3);

            var graph = container.GetInstance <IGraph>();
            await graph.Populate();

            await graph.Serialise();
        }
Ejemplo n.º 8
0
        public async void CanPushGrandBranch()
        {
            var container = CreateContainer(new List <Action <Container> > {
                c => c.UseLocalStore()
            });
            var bus           = container.GetInstance <IBus>();
            var timeTraveller = container.GetInstance <IBranchManager>();
            var remote        = container.GetInstance <IRemote>();

            var command = new CreateRoot("Root");
            await await bus.CommandAsync(command);

            var result = await remote.Push(BranchManager.Master);

            Assert.Equal(Status.Success, result.ResultStatus);

            var timeline = container.GetInstance <ITimeline>();

            Assert.Equal("master", timeline.Id);

            await timeTraveller.Branch("test");

            await await bus.CommandAsync(new CreateRoot("testRoot"));

            await timeTraveller.Branch("grandTest");

            await await bus.CommandAsync(new CreateRoot("testRoot2"));

            await bus.IsTrue(new StatsQuery(), s => s.NumberOfRoots == 3);

            result = await remote.Push("grandTest");

            Assert.Equal(Status.Failed, result.ResultStatus);

            result = await remote.Push("test");

            Assert.Equal(Status.Success, result.ResultStatus);

            result = await remote.Push("grandTest");

            Assert.Equal(Status.Success, result.ResultStatus);

            result = await remote.Pull("grandTest");

            Assert.Equal(Status.Success, result.ResultStatus);
        }
Ejemplo n.º 9
0
        public async void CannotSaveTwice()
        {
            var container  = CreateContainer();
            var bus        = container.GetInstance <IBus>();
            var errorLog   = container.GetInstance <IErrorLog>();
            var commandLog = container.GetInstance <ICommandLog>();

            IError error = null;

            errorLog.Observable.Subscribe(e => error = e);

            var command = new CreateRoot("Root");
            await await bus.CommandAsync(command);

            await bus.Command(command, 2);

            Assert.Equal(nameof(InvalidOperationException), error.ErrorType);
            Assert.Contains("ahead", error.Message);
            Assert.NotEqual(default, error.Timestamp);
Ejemplo n.º 10
0
        public async void CanMergeTimeline()
        {
            var container = CreateContainer(new List <Action <Container> >()
            {
                Config.RegisterSagas
            });
            var bus  = container.GetInstance <IBus>();
            var time = container.GetInstance <IBranchManager>();

            var command = new CreateRoot("Root");
            await await bus.CommandAsync(command);

            await time.Branch("test");

            await await bus.CommandAsync(new UpdateRoot("Root"));

            var infoQuery = new RootInfoQuery("Root");
            await bus.IsTrue(infoQuery, r => r.CreatedAt < r.UpdatedAt);

            await await bus.CommandAsync(new CreateRoot("TestRoot"));

            time.Reset();

            await bus.IsTrue(infoQuery, r => r.CreatedAt == r.UpdatedAt);

            await time.Merge("test");

            await bus.IsTrue(infoQuery, r => r.CreatedAt < r.UpdatedAt);

            await bus.Equal(new StatsQuery(), s => s.NumberOfRoots, 4);

            await time.Merge("test");

            await bus.Equal(new StatsQuery(), s => s.NumberOfRoots, 4);

            var graph = container.GetInstance <IGraph>();
            await graph.Serialise(nameof(CanMergeTimeline));
        }
Ejemplo n.º 11
0
        public async void CanExecuteQuery()
        {
            var container = CreateContainer();
            var bus       = container.GetInstance <IBus>();
            var log       = container.GetInstance <ILog>();
            var generator = container.GetInstance <IGraphQlGenerator>();

            var command = new CreateRoot("Root");
            await await bus.CommandAsync(command);

            var schemaProvider = container.GetInstance <ISchemaProvider>();

            var executor       = schemaProvider.Build();
            var query          = generator.Query(new RootInfoQuery("Root"));
            var rootInfoResult = await executor.ExecuteAsync(query) as IReadOnlyQueryResult;

            dynamic rootInfoDict = rootInfoResult?.Data.SingleOrDefault().Value;

            log.Info(rootInfoDict);
            Assert.NotNull(rootInfoDict);
            var time = rootInfoDict["createdAt"] as Time;

            Assert.NotNull(time);
            Assert.NotEqual(default, time.ToInstant());
Ejemplo n.º 12
0
Archivo: Config.cs Proyecto: zedr0n/ZES
 public bool CreateRootEx(CreateRoot command) => Resolve(command);