Exemplo n.º 1
0
        public async Task StopAsync()
        {
            Mock <DocumentServiceLeaseStore> leaseStore = new Mock <DocumentServiceLeaseStore>();

            leaseStore.Setup(l => l.IsInitializedAsync()).ReturnsAsync(true);

            Mock <DocumentServiceLeaseContainer> leaseContainer = new Mock <DocumentServiceLeaseContainer>();

            leaseContainer.Setup(l => l.GetOwnedLeasesAsync()).Returns(Task.FromResult(Enumerable.Empty <DocumentServiceLease>()));
            leaseContainer.Setup(l => l.GetAllLeasesAsync()).Returns(Task.FromResult((IReadOnlyList <DocumentServiceLease>)Enumerable.Empty <DocumentServiceLease>()));

            Mock <DocumentServiceLeaseStoreManager> leaseStoreManager = new Mock <DocumentServiceLeaseStoreManager>();

            leaseStoreManager.Setup(l => l.LeaseContainer).Returns(leaseContainer.Object);
            leaseStoreManager.Setup(l => l.LeaseManager).Returns(Mock.Of <DocumentServiceLeaseManager>);
            leaseStoreManager.Setup(l => l.LeaseStore).Returns(leaseStore.Object);
            leaseStoreManager.Setup(l => l.LeaseCheckpointer).Returns(Mock.Of <DocumentServiceLeaseCheckpointer>);
            ChangeFeedProcessorCore <MyDocument> processor = ChangeFeedProcessorCoreTests.CreateProcessor(out Mock <ChangeFeedObserverFactory <MyDocument> > factory, out Mock <ChangeFeedObserver <MyDocument> > observer);

            processor.ApplyBuildConfiguration(
                leaseStoreManager.Object,
                null,
                "something",
                "instanceName",
                new ChangeFeedLeaseOptions(),
                new ChangeFeedProcessorOptions(),
                ChangeFeedProcessorCoreTests.GetMockedContainer("monitored"));

            await processor.StartAsync();

            await processor.StopAsync();

            Mock.Get(leaseContainer.Object)
            .Verify(store => store.GetAllLeasesAsync(), Times.Once);
        }
Exemplo n.º 2
0
        public async Task ObserverIsCreated()
        {
            IEnumerable <DocumentServiceLease> ownedLeases = new List <DocumentServiceLease>()
            {
                new DocumentServiceLeaseCore()
                {
                    LeaseId    = "0",
                    LeaseToken = "0"
                }
            };

            Mock <DocumentServiceLeaseStore> leaseStore = new Mock <DocumentServiceLeaseStore>();

            leaseStore.Setup(l => l.IsInitializedAsync()).ReturnsAsync(true);

            Mock <DocumentServiceLeaseContainer> leaseContainer = new Mock <DocumentServiceLeaseContainer>();

            leaseContainer.Setup(l => l.GetOwnedLeasesAsync()).Returns(Task.FromResult(ownedLeases));

            Mock <DocumentServiceLeaseStoreManager> leaseStoreManager = new Mock <DocumentServiceLeaseStoreManager>();

            leaseStoreManager.Setup(l => l.LeaseContainer).Returns(leaseContainer.Object);
            leaseStoreManager.Setup(l => l.LeaseManager).Returns(Mock.Of <DocumentServiceLeaseManager>);
            leaseStoreManager.Setup(l => l.LeaseStore).Returns(leaseStore.Object);
            leaseStoreManager.Setup(l => l.LeaseCheckpointer).Returns(Mock.Of <DocumentServiceLeaseCheckpointer>);
            ChangeFeedProcessorCore processor = null;

            try
            {
                processor = ChangeFeedProcessorCoreTests.CreateProcessor(out Mock <ChangeFeedObserverFactory> factory, out Mock <ChangeFeedObserver> observer);
                processor.ApplyBuildConfiguration(
                    leaseStoreManager.Object,
                    null,
                    "instanceName",
                    new ChangeFeedLeaseOptions(),
                    new ChangeFeedProcessorOptions(),
                    ChangeFeedProcessorCoreTests.GetMockedContainer("monitored"));

                await processor.StartAsync();

                Mock.Get(factory.Object)
                .Verify(mock => mock.CreateObserver(), Times.Once);

                Mock.Get(observer.Object)
                .Verify(mock => mock.OpenAsync(It.Is <string>((lt) => lt == ownedLeases.First().CurrentLeaseToken)), Times.Once);
            }
            finally
            {
                if (processor != null)
                {
                    await processor.StopAsync();
                }
            }
        }
Exemplo n.º 3
0
        public void ApplyBuildConfiguration_ValidContainerStore()
        {
            ChangeFeedProcessorCore processor = ChangeFeedProcessorCoreTests.CreateProcessor(out _, out _);

            processor.ApplyBuildConfiguration(
                null,
                ChangeFeedProcessorCoreTests.GetMockedContainer("leases"),
                "instanceName",
                new ChangeFeedLeaseOptions(),
                new ChangeFeedProcessorOptions(),
                ChangeFeedProcessorCoreTests.GetMockedContainer("monitored"));
        }
Exemplo n.º 4
0
        public void ApplyBuildConfiguration_ValidCustomStore()
        {
            ChangeFeedProcessorCore processor = ChangeFeedProcessorCoreTests.CreateProcessor(out _, out _);

            processor.ApplyBuildConfiguration(
                Mock.Of <DocumentServiceLeaseStoreManager>(),
                null,
                "instanceName",
                new ChangeFeedLeaseOptions(),
                new ChangeFeedProcessorOptions(),
                ChangeFeedProcessorCoreTests.GetMockedContainer("monitored"));
        }
        public void ApplyBuildConfiguration_ValidatesNullMonitoredContainer()
        {
            ChangeFeedProcessorCore <MyDocument> processor = ChangeFeedProcessorCoreTests.CreateProcessor(out _, out _);

            processor.ApplyBuildConfiguration(
                Mock.Of <DocumentServiceLeaseStoreManager>(),
                null,
                "instanceName",
                new ChangeFeedLeaseOptions(),
                new ChangeFeedProcessorOptions(),
                null);
        }
Exemplo n.º 6
0
        public void ApplyBuildConfiguration_ValidContainerStore()
        {
            ChangeFeedProcessorCore <MyDocument> processor = ChangeFeedProcessorCoreTests.CreateProcessor(out Mock <ChangeFeedObserverFactory <MyDocument> > factory, out Mock <ChangeFeedObserver <MyDocument> > observer);

            processor.ApplyBuildConfiguration(
                null,
                ChangeFeedProcessorCoreTests.GetMockedContainer("leases"),
                "something",
                "instanceName",
                new ChangeFeedLeaseOptions(),
                new ChangeFeedProcessorOptions(),
                ChangeFeedProcessorCoreTests.GetMockedContainer("monitored"));
        }
Exemplo n.º 7
0
        public void ApplyBuildConfiguration_ValidatesNullInstance()
        {
            ChangeFeedProcessorCore <MyDocument> processor = ChangeFeedProcessorCoreTests.CreateProcessor(out Mock <ChangeFeedObserverFactory <MyDocument> > factory, out Mock <ChangeFeedObserver <MyDocument> > observer);

            processor.ApplyBuildConfiguration(
                Mock.Of <DocumentServiceLeaseStoreManager>(),
                null,
                "something",
                null,
                new ChangeFeedLeaseOptions(),
                new ChangeFeedProcessorOptions(),
                ChangeFeedProcessorCoreTests.GetMockedContainer("monitored"));
        }
        public void ApplyBuildConfiguration_ValidatesNullStore()
        {
            ChangeFeedProcessorCore <MyDocument> processor = ChangeFeedProcessorCoreTests.CreateProcessor(out _, out _);

            processor.ApplyBuildConfiguration(
                null,
                null,
                "something",
                "instanceName",
                new ChangeFeedLeaseOptions(),
                new ChangeFeedProcessorOptions(),
                ChangeFeedProcessorCoreTests.GetMockedContainer("monitored"));
        }
Exemplo n.º 9
0
        public override ChangeFeedProcessorBuilder CreateChangeFeedProcessorBuilder <T>(
            string workflowName,
            Func <IReadOnlyList <T>, CancellationToken, Task> onChangesDelegate)
        {
            if (workflowName == null)
            {
                throw new ArgumentNullException(nameof(workflowName));
            }
            if (onChangesDelegate == null)
            {
                throw new ArgumentNullException(nameof(onChangesDelegate));
            }

            ChangeFeedObserverFactoryCore <T> observerFactory     = new ChangeFeedObserverFactoryCore <T>(onChangesDelegate);
            ChangeFeedProcessorCore <T>       changeFeedProcessor = new ChangeFeedProcessorCore <T>(observerFactory);

            return(new ChangeFeedProcessorBuilder(workflowName, this.container, changeFeedProcessor, changeFeedProcessor.ApplyBuildConfiguration));
        }
        public override ChangeFeedProcessorBuilder GetChangeFeedProcessorBuilder <T>(
            string processorName,
            ChangesHandler <T> onChangesDelegate)
        {
            if (processorName == null)
            {
                throw new ArgumentNullException(nameof(processorName));
            }

            if (onChangesDelegate == null)
            {
                throw new ArgumentNullException(nameof(onChangesDelegate));
            }

            ChangeFeedObserverFactoryCore <T> observerFactory     = new ChangeFeedObserverFactoryCore <T>(onChangesDelegate);
            ChangeFeedProcessorCore <T>       changeFeedProcessor = new ChangeFeedProcessorCore <T>(observerFactory);

            return(new ChangeFeedProcessorBuilder(
                       processorName: processorName,
                       container: this,
                       changeFeedProcessor: changeFeedProcessor,
                       applyBuilderConfiguration: changeFeedProcessor.ApplyBuildConfiguration));
        }
Exemplo n.º 11
0
        public override ChangeFeedProcessorBuilder CreateChangeFeedProcessorBuilder <T>(
            string processorName,
            Func <IReadOnlyCollection <T>, CancellationToken, Task> onChangesDelegate)
        {
            if (processorName == null)
            {
                throw new ArgumentNullException(nameof(processorName));
            }

            if (onChangesDelegate == null)
            {
                throw new ArgumentNullException(nameof(onChangesDelegate));
            }

            ChangeFeedObserverFactoryCore <T> observerFactory     = new ChangeFeedObserverFactoryCore <T>(onChangesDelegate);
            ChangeFeedProcessorCore <T>       changeFeedProcessor = new ChangeFeedProcessorCore <T>(observerFactory);

            return(new ChangeFeedProcessorBuilder(
                       processorName: processorName,
                       cosmosContainer: this,
                       changeFeedProcessor: changeFeedProcessor,
                       applyBuilderConfiguration: changeFeedProcessor.ApplyBuildConfiguration));
        }