public void TestETagViolation409()
        {
            var doc1 = TestHelpers.CreateStarDocument();
            var doc2 = TestHelpers.CreateStarDocument();

            doc2.Version++;
            doc2.Name = "Document Version 2 name";

            XCollectionResult result;
            TargetCollection  tcol = new TargetCollection(_client, _collection);
            int retryAttempt       = 0;

            result = tcol.Write(doc1,
                                () =>
            {
                if (retryAttempt++ == 0)
                {
                    result = tcol.Write(doc2);
                    Assert.IsFalse(result.Discarded);
                }
            }
                                );
            Assert.IsTrue(result.Discarded);

            var rdoc = tcol.ReadDocument <StarDocument>(doc1.Id);

            TestHelpers.AssertEqualStars(doc2, rdoc);
        }
        public void TestETagViolation412WithSuccessfulRetry()
        {
            var doc1 = TestHelpers.CreateStarDocument();
            var doc2 = TestHelpers.CreateStarDocument();

            doc2.Version = 2;
            doc2.Name    = "Document Version 2 name";
            var doc3 = TestHelpers.CreateStarDocument();

            doc3.Version = 3;
            doc3.Name    = "Document Version 3 name";

            TargetCollection  tcol = new TargetCollection(_client, _collection);
            XCollectionResult result;
            StarDocument      rdoc;

            result = tcol.Write(doc1);
            Assert.IsFalse(result.Discarded);

            // Test ETag violation as HTTP code 412
            int retryAttempt = 0;

            result = tcol.Write(doc3,
                                () =>
            {
                if (retryAttempt++ == 0)
                {
                    result = tcol.Write(doc2);
                    Assert.IsFalse(result.Discarded);

                    rdoc = tcol.ReadDocument <StarDocument>(doc2.Id);
                    TestHelpers.AssertEqualStars(doc2, rdoc);
                }
            }
                                );
            Assert.IsFalse(result.Discarded);

            rdoc = tcol.ReadDocument <StarDocument>(doc3.Id);
            TestHelpers.AssertEqualStars(doc3, rdoc);
        }
Example #3
0
        public void DocumentConsistent()
        {
            const string gatewayKey = "Stars";

            // create gateway blob storage
            var gateBlob = new InMemoryGatewayBlobStore();

            // create a gateway queue
            var gateQueue       = new QueueWrapper(TestHelpers.GenUnique("gateq"), TestConfig.GatewayStorageAccount);
            var gateQueueWriter = new GatewayQueueWriter(gateQueue, gateBlob);

            var doc = TestHelpers.CreateStarDocument();

            SourceCollection           scol = new SourceCollection(_primaryClient, _primaryCollection, gateQueueWriter, gatewayKey);
            DocdbGatewayQueueProcessor gateQueueProcessor = new DocdbGatewayQueueProcessor(
                new GatewayQueueReader(gateQueue, gateBlob),
                new FixedTargetCollectionResolver(_secondaryClient, _secondaryCollection)
                );
            var tcol = new TargetCollection(_secondaryClient, _secondaryCollection);

            scol.Write(doc);
            Assert.IsTrue(gateQueueProcessor.ProcessNext());

            var tdoc = tcol.ReadDocument <StarDocument>(doc.Id);

            TestHelpers.AssertEqualStars(doc, tdoc);
            Assert.AreEqual(1, tdoc.Version);

            // same Id but different data in the object
            doc = TestHelpers.CreateStarDocument();
            scol.Write(doc);
            Assert.AreEqual(2, doc.Version); // verify the side effect of setting Version
            Assert.IsTrue(gateQueueProcessor.ProcessNext());
            tdoc = tcol.ReadDocument <StarDocument>(doc.Id);
            TestHelpers.AssertEqualStars(doc, tdoc);
            Assert.AreEqual(2, tdoc.Version);
        }