Example #1
0
        public void QuartzJob_should_be_deserialized_from_new_wire_format()
        {
            var cmd = new ChangeSampleAggregateCommand(1, Guid.NewGuid());
            var evt = new SampleAggregateCreatedEvent("1", cmd.AggregateId);

            var scheduleKey = ScheduleKey.For(cmd);

            var oldSerializer = new Serializer(new SerializerOptions(true, true, null, null));

            var streamEvent = new MemoryStream();

            oldSerializer.Serialize(evt, streamEvent);
            var serializedEvent = streamEvent.ToArray();

            var streamKey = new MemoryStream();

            oldSerializer.Serialize(scheduleKey, streamKey);
            var serializedKey = streamKey.ToArray();

            var jobDataMap = new JobDataMap
            {
                { "EventKey", serializedEvent },
                { "ScheduleKey", serializedKey }
            };

            var job = QuartzJob.CreateJob(scheduleKey, jobDataMap);

            var trigger = TriggerBuilder.Create()
                          .WithIdentity(job.Key.Name, job.Key.Group)
                          .WithSimpleSchedule(x => x.WithMisfireHandlingInstructionFireNow()
                                              .WithRepeatCount(0))
                          .StartAt(BusinessDateTime.Now.AddSeconds(1))
                          .Build();

            var scheduler = GridNode.Container.Resolve <IScheduler>();

            scheduler.ScheduleJob(job, trigger);


            var waiter = GridNode.NewWaiter(Timeout)
                         .Expect <SampleAggregateCreatedEvent>(e => e.SourceId == evt.SourceId)
                         .Create();

            waiter.Wait();
        }
Example #2
0
        public void Given_save_on_each_message_policy_and_keep_2_snapshots()
        {
            _aggregateId = Guid.NewGuid();
            var cmd = new CreateSampleAggregateCommand(1, _aggregateId);

            GridNode.NewCommandWaiter()
            .Expect <SampleAggregateCreatedEvent>()
            .Create()
            .Execute(cmd)
            .Wait();

            var aggregateActorRef = LookupAggregateActor <SampleAggregate>(_aggregateId);

            aggregateActorRef.Tell(new NotifyOnPersistenceEvents(TestActor), TestActor);

            var commands = new List <ICommand>();

            var waiter = GridNode.NewCommandWaiter(TimeSpan.FromMinutes(5))
                         .Expect <object>();


            for (var cmdNum = 0; cmdNum < 5; cmdNum++)
            {
                var changeCmd = new ChangeSampleAggregateCommand(cmdNum, _aggregateId);
                waiter.And <SampleAggregateChangedEvent>(e => e.Value == changeCmd.Parameter.ToString());
                commands.Add(changeCmd);
                _parameters[cmdNum] = cmdNum;
            }

            waiter.Create()
            .Execute(commands.ToArray())
            .Wait();

            Watch(aggregateActorRef);
            aggregateActorRef.Tell(GracefullShutdownRequest.Instance, TestActor);

            FishForMessage <Terminated>(m => true, TimeSpan.FromMinutes(10));

            _snapshots = new AggregateSnapshotRepository(AkkaConf.Persistence.JournalConnectionString, GridNode.AggregateFromSnapshotsFactory).Load <SampleAggregate>(_aggregateId);
        }
Example #3
0
        public async Task When_async_method_is_called_other_commands_can_be_executed_before_async_results()
        {
            var aggregateId  = Guid.NewGuid();
            var asyncCommand = new AsyncMethodCommand(43, Guid.NewGuid(), Guid.NewGuid(), TimeSpan.FromSeconds(3));
            var syncCommand  = new ChangeSampleAggregateCommand(42, aggregateId);

            var asyncCommandTask = GridNode.PrepareCommand(asyncCommand)
                                   .Expect <SampleAggregateChangedEvent>()
                                   .Execute();

            await GridNode.Execute(CommandPlan.New(syncCommand,
                                                   TimeSpan.FromSeconds(1),
                                                   Expect.Message <SampleAggregateChangedEvent>(e => e.SourceId,
                                                                                                syncCommand.AggregateId)));

            var sampleAggregate = LoadAggregate <SampleAggregate>(syncCommand.AggregateId);

            Assert.AreEqual(syncCommand.Parameter.ToString(), sampleAggregate.Value);
            var waitResults = await asyncCommandTask;

            Assert.AreEqual(asyncCommand.Parameter.ToString(), waitResults.Message <SampleAggregateChangedEvent>().Value);
        }