public PartitionControllerTests()
        {
            this.lease = Mock.Of <DocumentServiceLease>();
            Mock.Get(this.lease)
            .Setup(l => l.CurrentLeaseToken)
            .Returns("partitionId");

            this.partitionProcessor         = MockPartitionProcessor();
            this.leaseRenewer               = MockRenewer();
            this.observer                   = Mock.Of <ChangeFeedObserver>();
            this.partitionSupervisorFactory = Mock.Of <PartitionSupervisorFactory>(f => f.Create(this.lease) == new PartitionSupervisorCore(this.lease, this.observer, this.partitionProcessor, this.leaseRenewer));

            this.leaseManager = Mock.Of <DocumentServiceLeaseManager>();
            Mock.Get(this.leaseManager).Reset(); // Reset implicit/by default setup of properties.
            Mock.Get(this.leaseManager)
            .Setup(manager => manager.AcquireAsync(this.lease))
            .ReturnsAsync(this.lease);
            Mock.Get(this.leaseManager)
            .Setup(manager => manager.ReleaseAsync(this.lease))
            .Returns(Task.CompletedTask);
            DocumentServiceLeaseContainer leaseContainer = Mock.Of <DocumentServiceLeaseContainer>();

            this.synchronizer = Mock.Of <PartitionSynchronizer>();
            this.sut          = new PartitionControllerCore(leaseContainer, this.leaseManager, this.partitionSupervisorFactory, this.synchronizer);
        }
Exemple #2
0
 public PartitionSupervisorCore(DocumentServiceLease lease, ChangeFeedObserver <T> observer, FeedProcessor processor, LeaseRenewer renewer)
 {
     this.lease     = lease;
     this.observer  = observer;
     this.processor = processor;
     this.renewer   = renewer;
 }
        public async Task WhenDelegateIsTyped_Manual()
        {
            bool executed = false;

            Task changesHandler(ChangeFeedProcessorContext context, IReadOnlyCollection <dynamic> docs, Func <Task> checkpointAsync, CancellationToken token)
            {
                Assert.AreEqual(1, docs.Count);
                Assert.AreEqual("Test", docs.First().id.ToString());
                executed = true;
                return(Task.CompletedTask);
            }

            ChangeFeedObserverFactoryCore <dynamic> changeFeedObserverFactoryCore = new ChangeFeedObserverFactoryCore <dynamic>(changesHandler, this.cosmosSerializerCore);

            ChangeFeedObserver changeFeedObserver = changeFeedObserverFactoryCore.CreateObserver();

            Assert.IsNotNull(changeFeedObserver);

            ResponseMessage responseMessage       = this.BuildResponseMessage();
            ChangeFeedObserverContextCore context = new ChangeFeedObserverContextCore(this.leaseToken, responseMessage, Mock.Of <PartitionCheckpointer>());

            await changeFeedObserver.ProcessChangesAsync(context, responseMessage.Content, CancellationToken.None);

            Assert.IsTrue(executed);
        }
        public async Task WhenDelegateIsStream_Automatic()
        {
            ResponseMessage responseMessage = this.BuildResponseMessage();
            bool            executed        = false;

            Task changesHandler(ChangeFeedProcessorContext context, Stream stream, CancellationToken token)
            {
                Assert.ReferenceEquals(responseMessage.Content, stream);
                executed = true;
                return(Task.CompletedTask);
            }

            ChangeFeedObserverFactoryCore changeFeedObserverFactoryCore = new ChangeFeedObserverFactoryCore(changesHandler);

            ChangeFeedObserver changeFeedObserver = changeFeedObserverFactoryCore.CreateObserver();

            Assert.IsNotNull(changeFeedObserver);


            ChangeFeedObserverContextCore context = new ChangeFeedObserverContextCore(this.leaseToken, responseMessage, Mock.Of <PartitionCheckpointer>());

            await changeFeedObserver.ProcessChangesAsync(context, responseMessage.Content, CancellationToken.None);

            Assert.IsTrue(executed);
        }
Exemple #5
0
        public void WhenUsingManualCheckpoint()
        {
            Mock <ChangeFeedObserverFactory> mockedFactory = new Mock <ChangeFeedObserverFactory>();

            mockedFactory.Setup(f => f.CreateObserver()).Returns(Mock.Of <ChangeFeedObserver>());
            CheckpointerObserverFactory factory = new CheckpointerObserverFactory(mockedFactory.Object, withManualCheckpointing: true);

            ChangeFeedObserver observer = factory.CreateObserver();

            Assert.IsInstanceOfType(observer, typeof(ObserverExceptionWrappingChangeFeedObserverDecorator));
        }
Exemple #6
0
        public void WhenNotUsingManualCheckpoint()
        {
            Mock <ChangeFeedObserverFactory> mockedFactory = new Mock <ChangeFeedObserverFactory>();

            mockedFactory.Setup(f => f.CreateObserver()).Returns(Mock.Of <ChangeFeedObserver>());
            CheckpointerObserverFactory factory = new CheckpointerObserverFactory(mockedFactory.Object, withManualCheckpointing: false);

            ChangeFeedObserver observer = factory.CreateObserver();

            Assert.IsInstanceOfType(observer, typeof(AutoCheckpointer));
        }
        public PartitionSupervisorTests()
        {
            this.lease = Mock.Of <DocumentServiceLease>();
            Mock.Get(this.lease)
            .Setup(l => l.CurrentLeaseToken)
            .Returns("partitionId");

            this.leaseRenewer       = Mock.Of <LeaseRenewer>();
            this.partitionProcessor = Mock.Of <FeedProcessor>();
            this.observer           = Mock.Of <ChangeFeedObserver>();

            this.sut = new PartitionSupervisorCore(this.lease, this.observer, this.partitionProcessor, this.leaseRenewer);
        }
        public override PartitionSupervisor Create(DocumentServiceLease lease)
        {
            if (lease == null)
            {
                throw new ArgumentNullException(nameof(lease));
            }

            ChangeFeedObserver changeFeedObserver = this.observerFactory.CreateObserver();
            FeedProcessor      processor          = this.partitionProcessorFactory.Create(lease, changeFeedObserver);
            LeaseRenewerCore   renewer            = new LeaseRenewerCore(lease, this.leaseManager, this.changeFeedLeaseOptions.LeaseRenewInterval);

            return(new PartitionSupervisorCore(lease, changeFeedObserver, processor, renewer));
        }
        public PartitionSupervisorTests()
        {
            lease = Mock.Of <DocumentServiceLease>();
            Mock.Get(lease)
            .Setup(l => l.CurrentLeaseToken)
            .Returns("partitionId");

            leaseRenewer       = Mock.Of <LeaseRenewer>();
            partitionProcessor = Mock.Of <FeedProcessor>();
            observer           = Mock.Of <ChangeFeedObserver <dynamic> >();

            sut = new PartitionSupervisorCore <dynamic>(lease, observer, partitionProcessor, leaseRenewer);
        }
        public AutoCheckPointTests()
        {
            this.changeFeedObserver    = Mock.Of <ChangeFeedObserver>();
            this.partitionCheckpointer = new Mock <PartitionCheckpointer>();
            this.partitionCheckpointer
            .Setup(checkPointer => checkPointer.CheckpointPartitionAsync(It.IsAny <string>()))
            .Returns(Task.CompletedTask);

            this.sut = new AutoCheckpointer(this.changeFeedObserver);

            this.stream = Mock.Of <Stream>();

            ResponseMessage responseMessage = new ResponseMessage();

            responseMessage.Headers.ContinuationToken = Guid.NewGuid().ToString();
            this.observerContext = new ChangeFeedObserverContextCore(Guid.NewGuid().ToString(), feedResponse: responseMessage, this.partitionCheckpointer.Object);
        }
        public AutoCheckPointTests()
        {
            changeFeedObserver    = Mock.Of <ChangeFeedObserver <dynamic> >();
            partitionCheckpointer = Mock.Of <PartitionCheckpointer>();
            Mock.Get(partitionCheckpointer)
            .Setup(checkPointer => checkPointer.CheckpointPartitionAsync(It.IsAny <string>()))
            .Returns(Task.CompletedTask);

            checkpointFrequency = new CheckpointFrequency();
            sut = new AutoCheckpointer <dynamic>(checkpointFrequency, changeFeedObserver);

            documents = Mock.Of <IReadOnlyList <dynamic> >();

            observerContext = Mock.Of <ChangeFeedObserverContext>();
            Mock.Get(observerContext)
            .Setup(context => context.CheckpointAsync())
            .Returns(partitionCheckpointer.CheckpointPartitionAsync("token"));
        }