Ejemplo n.º 1
0
        public void Test_Write_Delete_CorrectState(string key)
        {
            var route   = DocumentRoute.Create(TestContext.CurrentContext.Test.Name);
            var address = DocumentAddress.Create(route, key);
            var data    = new byte[] { 1, 2, 3 };

            // act1
            using (var writeStream = store.GetWriteStream(address))
            {
                writeStream.Write(data);
            }

            var keys1 = store.GetAddresses(
                route: route,
                options: DocumentSearchOption.TopLevelOnly
                );
            var contains1 = store.ContainsAddress(address);

            // assert1
            Assert.IsTrue(contains1);
            Assert.IsTrue(keys1.Contains(address));

            // act2
            store.Clear();

            var keys2 = store.GetAddresses(
                route: route,
                options: DocumentSearchOption.TopLevelOnly
                );
            var contains2 = store.ContainsAddress(address);

            // assert2
            Assert.IsFalse(contains2);
            Assert.IsFalse(keys2.Contains(address));
        }
Ejemplo n.º 2
0
        public IEnumerable <DocumentAddress> GetAddresses(
            DocumentRoute route,
            DocumentSearchOption options)
        {
            var directory = GetDirectoryPath(route);

            if (!Directory.Exists(directory))
            {
                return(Enumerable.Empty <DocumentAddress>());
            }

            SearchOption searchOption = options switch
            {
                DocumentSearchOption.TopLevelOnly => SearchOption.TopDirectoryOnly,
                DocumentSearchOption.AllLevels => SearchOption.AllDirectories,
                _ => throw new ArgumentException($"Invalid {nameof(options)}: {options}")
            };

            return(Directory
                   .EnumerateFiles(
                       path: directory,
                       searchPattern: "*" + fileExtension,
                       searchOption: searchOption
                       )
                   .Select(path => // abs -> rel
                           path.Replace(directory, String.Empty))
                   .Select(GetAddress)
                   .Select(relAddress => // rel -> abs
                           relAddress.MapRoute(relRoute =>
                                               relRoute.Prepend(route))));
        }
Ejemplo n.º 3
0
        public DocumentTopic(IDocumentStore source, DocumentRoute route)
        {
            this.store = source ?? throw new ArgumentNullException(nameof(source));
            this.route = route;
            var subject = new TaskPoolBehaviorSubject <IEnumerable <DocumentKey> >(initial: GetKeysInternalAsync().Result);

            observer      = subject;
            observable    = subject;
            disposeHandle = subject;
        }
Ejemplo n.º 4
0
        private string GetDirectoryPath(DocumentRoute route)
        {
            var relativePath = string.Join(
                Path.DirectorySeparatorChar.ToString(System.Globalization.CultureInfo.InvariantCulture),
                route.Encode().Segments.Append(string.Empty).ToArray()
                );

            return(Path.Combine(
                       GetRootDirectory(),
                       relativePath));
        }
Ejemplo n.º 5
0
        public void InvalidPathCharRoutes_Encode_Decode_IsEqual()
        {
            var values = Path.GetInvalidFileNameChars().Select(c => c.ToString());

            var routes             = values.Select(c => DocumentRoute.Create(c)).ToArray();
            var roundTrippedRoutes = routes
                                     .Select(k => k.Encode())
                                     .Select(k => k.Decode())
                                     .ToArray();

            Assert.AreEqual(routes, roundTrippedRoutes);
        }
Ejemplo n.º 6
0
        public void Equals_Correct()
        {
            const string SEG_1 = "S1";
            const string SEG_2 = "S2";

            var route1 = DocumentRoute.Create(SEG_1);
            var route2 = DocumentRoute.Create(SEG_1);
            var route3 = DocumentRoute.Create(SEG_2);

            Assert.AreEqual(route1, route2);
            Assert.AreNotEqual(route1, route3);
        }
Ejemplo n.º 7
0
        public void Equals_Correct()
        {
            DocumentRoute route = DocumentRoute.Create("S1");
            const string  KEY_1 = "K1";
            const string  KEY_2 = "K2";

            var address1 = DocumentAddress.Create(route, KEY_1);
            var address2 = DocumentAddress.Create(route, KEY_2);

            Assert.AreEqual(address1, address1);
            Assert.AreNotEqual(address1, address2);
        }
Ejemplo n.º 8
0
        public void Test_Routing()
        {
            var          routeRoot = DocumentRoute.Create(TestContext.CurrentContext.Test.Name);
            const string A         = "<|.A.|>";
            var          routeA    = DocumentRoute.Create(A).Prepend(routeRoot);
            const string B         = "<|.B.|>";
            var          routeAB   = DocumentRoute.Create(A, B).Prepend(routeRoot);

            var addressA1  = DocumentAddress.Create(routeA, Guid.NewGuid().ToString());
            var addressAB2 = DocumentAddress.Create(routeAB, Guid.NewGuid().ToString());

            var data = new byte[] { 1, 2, 3 };

            using (var writeStream = store.GetWriteStream(addressA1))
            {
                writeStream.Write(data);
            }

            using (var writeStream = store.GetWriteStream(addressAB2))
            {
                writeStream.Write(data);
            }

            // A
            var addressesA = store.GetAddresses(routeA, DocumentSearchOption.TopLevelOnly);
            // A/*
            var addressesAPlus = store.GetAddresses(routeA, DocumentSearchOption.AllLevels);
            // A/B
            var addressesAB = store.GetAddresses(routeAB, DocumentSearchOption.TopLevelOnly);

            Assert.AreEqual(
                new DocumentAddress[] { addressA1 },
                addressesA.ToArray()
                );

            Assert.AreEqual(
                new DocumentAddress[] { addressA1, addressAB2 },
                addressesAPlus.ToArray()
                );

            Assert.AreEqual(
                new DocumentAddress[] { addressAB2 },
                addressesAB.ToArray()
                );
        }
Ejemplo n.º 9
0
        public void Test_RoundTripData_Equals()
        {
            var route   = DocumentRoute.Create(TestContext.CurrentContext.Test.Name);
            var address = DocumentAddress.Create(route, Guid.NewGuid().ToString());
            var data    = new byte[] { 1, 2, 3 };

            using (var writeStream = store.GetWriteStream(address))
            {
                writeStream.Write(data);
            }

            var buffer = new byte[data.Length];

            using (var readStream = store.GetReadStream(address))
            {
                readStream.Read(buffer, 0, (int)readStream.Length);
            }

            Assert.AreEqual(buffer, data);
        }
Ejemplo n.º 10
0
        public void StartsWith_Correct()
        {
            const string SEG_1 = "S1";
            const string SEG_2 = "S2";

            var route0 = DocumentRoute.Default;
            var route1 = DocumentRoute.Create(SEG_1);
            var route2 = DocumentRoute.Create(SEG_1, SEG_2);

            var expectedStartsWithTrueRelations =
                new List <(DocumentRoute, DocumentRoute)>()
            {
                (route0, route0),
                (route1, route0),
                (route1, route1),
                (route2, route0),
                (route2, route1)
            };

            var expectedStartsWithFalseRelations =
                new List <(DocumentRoute, DocumentRoute)>()
            {
                (route0, route1),
                (route0, route2),
                (route1, route2)
            };

            foreach (var rel in expectedStartsWithTrueRelations)
            {
                Assert.IsTrue(rel.Item1.StartsWith(rel.Item2));
            }

            foreach (var rel in expectedStartsWithFalseRelations)
            {
                Assert.IsFalse(rel.Item1.StartsWith(rel.Item2));
            }
        }

        [Test]
Ejemplo n.º 11
0
        private static DocumentAddress GetAddress(string path)
        {
            var fileName = Path
                           .GetFileName(path);

            var segments = path
                           .Split(Path.DirectorySeparatorChar)
                           .Except(new[] { string.Empty, fileName })
                           .ToArray();

            var route = DocumentRoute
                        .Create(segments)
                        .Decode();

            var fileNameTrimmed = Path
                                  .GetFileNameWithoutExtension(fileName);

            var key = DocumentKey
                      .Create(fileNameTrimmed)
                      .Decode();

            return(DocumentAddress
                   .Create(route, key));
        }
Ejemplo n.º 12
0
 public IEnumerable <DocumentAddress> GetAddresses(DocumentRoute route, DocumentSearchOption options) =>
 source.GetAddresses(translateIn(route), options).Select(TranslateOut);
Ejemplo n.º 13
0
 Task <IEnumerable <DocumentAddress> > IDocumentStore.GetAddressesAsync <TData>(
     DocumentRoute topicName,
     DocumentSearchOption options,
     CancellationToken ct) where TData : class =>
 store.GetAddressesAsync <TData>(topicName, options, ct);
Ejemplo n.º 14
0
 static DocumentRoute GetTypedRoute() =>
 DocumentRoute
 .Create(typeof(T)
         .ShortName(true)
         .Replace(">", "}")
         .Replace("<", "{"));
Ejemplo n.º 15
0
 private static DocumentAddress Combine(DocumentRoute route, DocumentKey key) =>
 DocumentAddress.Create(route, key);