コード例 #1
0
        public void GetDocumentsBatchFromShouldReturnUniqueResults2()
        {
            var prefetcher = CreatePrefetcher();

            AddDocumentsToTransactionalStorage(prefetcher.TransactionalStorage, 100);

            var documents = prefetcher.PrefetchingBehavior.GetDocumentsBatchFrom(Etag.Empty, 1);
            var document  = documents.Single();

            AddDocumentResult result = null;

            prefetcher.TransactionalStorage.Batch(accessor => result = accessor.Documents.AddDocument("keys/2", null, document.DataAsJson, document.Metadata));

            documents = prefetcher.PrefetchingBehavior.GetDocumentsBatchFrom(document.Etag, 200);
            Assert.Equal(99, documents.Count);

            var prevEtag = Etag.Empty;
            var keys     = new HashSet <string>(StringComparer.OrdinalIgnoreCase);

            foreach (var doc in documents)
            {
                Assert.True(EtagUtil.IsGreaterThan(document.Etag, prevEtag));
                Assert.True(keys.Add(doc.Key));
            }
        }
コード例 #2
0
        private void DocumentStorage_DocumentAdd_And_DocumentRead_Internal(string requestedStorage, string documentKey, OrderedPartCollection <AbstractDocumentCodec> documentCodecs = null)
        {
            using (var storage = NewTransactionalStorage(requestedStorage, dataDir: null, runInMemory: true, documentCodecs: documentCodecs))
            {
                AddDocumentResult addResult = null;
                storage.Batch(
                    mutator =>
                    addResult =
                        mutator.Documents.AddDocument(
                            documentKey, Etag.Empty, RavenJObject.FromObject(new { Name = "Bar", Foo = "AlsoBar" }), new RavenJObject()));

                RavenJObject document     = null;
                JsonDocument jsonDocument = null;
                storage.Batch(
                    viewer =>
                {
                    jsonDocument = viewer.Documents.DocumentByKey(documentKey, null);
                    document     = jsonDocument.DataAsJson;
                });

                Assert.NotNull(document);
                Assert.NotNull(jsonDocument);
                Assert.Equal("Bar", document.Value <string>("Name"));
                Assert.Equal("AlsoBar", document.Value <string>("Foo"));

                //verify correctness of LastModified return value
                Assert.True(jsonDocument.LastModified.HasValue);
                // ReSharper disable once PossibleInvalidOperationException (checked HasValue already)
                Assert.Equal(addResult.SavedAt, jsonDocument.LastModified.Value);
            }
        }
コード例 #3
0
        public void GetDocumentsBatchFromShouldNotFilterOutConflictsEvenIfAnotherDocumentWithSameKeyExists()
        {
            var prefetcher = CreatePrefetcher();

            AddDocumentsToTransactionalStorage(prefetcher.TransactionalStorage, 100);

            var documents = prefetcher.PrefetchingBehavior.GetDocumentsBatchFrom(Etag.Empty, 1);
            var document  = documents.Single();

            document.Metadata.Add(Constants.RavenReplicationConflict, true);

            AddDocumentResult result = null;

            prefetcher.TransactionalStorage.Batch(accessor => result = accessor.Documents.AddDocument("keys/2", null, document.DataAsJson, document.Metadata));

            documents = prefetcher.PrefetchingBehavior.GetDocumentsBatchFrom(document.Etag, 200);
            Assert.Equal(100, documents.Count);

            var keys = documents
                       .GroupBy(x => x.Key)
                       .Select(x => new KeyValuePair <string, int>(x.Key, x.Count()))
                       .ToList();

            Assert.True(keys.Single(x => x.Key == "keys/2").Value == 2);
            foreach (var k in keys.Where(x => x.Key != "keys/2"))
            {
                Assert.True(k.Value == 1);
            }
        }
コード例 #4
0
        public void DocumentStorage_DocumentTouch_EtagUpdated(string requestedStorage)
        {
            const string TEST_DOCUMENT_KEY = "Foo";

            using (var storage = NewTransactionalStorage(requestedStorage))
            {
                AddDocumentResult initialAddResult = null;
                storage.Batch(mutator => initialAddResult = mutator.Documents.AddDocument(TEST_DOCUMENT_KEY, Etag.Empty, RavenJObject.FromObject(new { Name = "Bar" }), new RavenJObject()));

                Etag preTouchEtag   = null;
                Etag afterTouchEtag = null;
                storage.Batch(mutator => mutator.Documents.TouchDocument(TEST_DOCUMENT_KEY, out preTouchEtag, out afterTouchEtag));

                Assert.NotNull(preTouchEtag);
                Assert.NotNull(afterTouchEtag);

                Assert.Equal(initialAddResult.Etag, preTouchEtag);
                Assert.NotEqual(preTouchEtag, afterTouchEtag);
            }
        }
コード例 #5
0
        public void DocumentStorage_DocumentUpdate_WithSpecifiedEtag_And_DocumentRead(string requestedStorage)
        {
            using (var storage = NewTransactionalStorage(requestedStorage))
            {
                const string TEST_DOCUMENT_KEY           = "Foo";
                const string TEST_DOCUMENT_EXPECTED_NAME = "Bar2";

                //add document
                AddDocumentResult addResult = null;
                storage.Batch(mutator => addResult = mutator.Documents.AddDocument(TEST_DOCUMENT_KEY, Etag.Empty, RavenJObject.FromObject(new { Name = "Bar" }), new RavenJObject()));

                //then update document
                storage.Batch(mutator => mutator.Documents.AddDocument(TEST_DOCUMENT_KEY, addResult.Etag, RavenJObject.FromObject(new { Name = TEST_DOCUMENT_EXPECTED_NAME }), new RavenJObject()));

                RavenJObject document = null;
                storage.Batch(viewer => document = viewer.Documents.DocumentByKey(TEST_DOCUMENT_KEY, null).DataAsJson);

                Assert.NotNull(document);
                Assert.Equal(TEST_DOCUMENT_EXPECTED_NAME, document.Value <string>("Name"));
            }
        }
コード例 #6
0
        private void DocumentStorage_DocumentAdd_And_DocumentDeleted_Internal(string requestedStorage, string documentKey)
        {
            using (var storage = NewTransactionalStorage(requestedStorage))
            {
                AddDocumentResult addResult = null;
                storage.Batch(
                    mutator =>
                    addResult =
                        mutator.Documents.AddDocument(
                            documentKey,
                            Etag.Empty,
                            RavenJObject.FromObject(new { Name = "Bar" }),
                            RavenJObject.FromObject(new { Meta = "Data" })));

                JsonDocumentMetadata fetchedMetadata = null;
                storage.Batch(viewer => fetchedMetadata = viewer.Documents.DocumentMetadataByKey(documentKey, null));

                Etag         deletedEtag     = null;
                RavenJObject deletedMetadata = null;
                storage.Batch(
                    mutator => mutator.Documents.DeleteDocument(documentKey, null, out deletedMetadata, out deletedEtag));

                JsonDocument documentAfterDelete = null;
                storage.Batch(viewer => documentAfterDelete = viewer.Documents.DocumentByKey(documentKey, null));

                JsonDocumentMetadata metadataAfterDelete = null;
                storage.Batch(viewer => metadataAfterDelete = viewer.Documents.DocumentMetadataByKey(documentKey, null));

                //after delete --> DocumentByKey()/DocumentMetadataByKey() methods should return null
                Assert.Null(documentAfterDelete);
                Assert.Null(metadataAfterDelete);

                Assert.NotNull(deletedEtag);
                Assert.NotNull(deletedMetadata);

                Assert.Equal(addResult.Etag, deletedEtag);
                Assert.Equal(fetchedMetadata.Metadata, deletedMetadata);
            }
        }