Example #1
0
        public void Corrupt_Volume_Read(string compress, int pgsz, int cnt)
        {
            var ms   = new MemoryStream();
            var meta = VolumeMetadataBuilder.Make("String archive", StringArchiveAppender.CONTENT_TYPE_STRING)
                       .SetVersion(1, 0)
                       .SetDescription("Testing string messages")
                       .SetChannel(Atom.Encode("dvop"))
                       .SetCompressionScheme(compress);

            var volume = new DefaultVolume(NOPApplication.Instance.SecurityManager.Cryptography, meta, ms)
            {
                PageSizeBytes = pgsz
            };

            using (var appender = new StringArchiveAppender(volume, NOPApplication.Instance.TimeSource, new Atom(65), "*****@*****.**"))
            {
                for (var i = 0; i < cnt; i++)
                {
                    appender.Append("string-data--------------------------------------------------------" + i.ToString());
                }
            }

            "Volume size is {0:n0} bytes".SeeArgs(ms.Length);

            var reader = new StringArchiveReader(volume);

            var allCount = reader.All.Count();

            Aver.AreEqual(cnt, allCount);

            reader.All.ForEach((s, i) => Aver.IsTrue(s.EndsWith("---" + i.ToString())));

            var pageCount = reader.GetPagesStartingAt(0).Count();

            Aver.IsTrue(pageCount > 0);

            "Before corruption: there are {0:n0} total records in {1:n0} pages".SeeArgs(allCount, pageCount);

            var midPoint = ms.Length / 2;

            ms.Position = midPoint;
            for (var j = 0; j < pgsz * 2; j++)
            {
                ms.WriteByte(0x00);                  //corruption
            }
            "-------------- corrupted {0:n0} bytes of {1:n0} total at {2:n0} position -----------  ".SeeArgs(pgsz * 2, ms.Length, midPoint);

            var allCount2 = reader.GetEntriesStartingAt(new Bookmark(), skipCorruptPages: true).Count();

            Aver.IsTrue(allCount > allCount2);

            var pageCount2 = reader.GetPagesStartingAt(0, skipCorruptPages: true).Count();

            Aver.IsTrue(pageCount > pageCount2);

            "After corruption: there are {0:n0} total records in {1:n0} pages".SeeArgs(allCount2, pageCount2);

            volume.Dispose();
        }
Example #2
0
        public void Write_Read_Compare_Strings(bool ascii, int pgsize, string compress, int count, int min, int max)
        {
            var expected = ascii ? FakeLogMessage.BuildRandomASCIIStringArr(count, min, max) : FakeLogMessage.BuildRandomUnicodeStringArr(count, min, max);
            var ms       = new MemoryStream();

            var meta = VolumeMetadataBuilder.Make("String archive", StringArchiveAppender.CONTENT_TYPE_STRING)
                       .SetVersion(1, 0)
                       .SetDescription("Testing string messages")
                       .SetChannel(Atom.Encode("dvop"));

            if (compress.IsNotNullOrWhiteSpace())
            {
                meta.SetCompressionScheme(compress);
            }

            var volume = new DefaultVolume(NOPApplication.Instance.SecurityManager.Cryptography, meta, ms);

            volume.PageSizeBytes = pgsize;

            using (var appender = new StringArchiveAppender(volume,
                                                            NOPApplication.Instance.TimeSource,
                                                            NOPApplication.Instance.AppId, "dima@zhaba"))
            {
                for (var i = 0; i < count; i++)
                {
                    appender.Append(expected[i]);
                }
            }

            "Volume data stream is {0:n0} bytes".SeeArgs(ms.Length);

            var reader = new StringArchiveReader(volume);

            var got = reader.GetEntriesStartingAt(new Bookmark()).ToArray();

            Aver.AreEqual(expected.Length, got.Length);
            for (int i = 0; i < count; i++)
            {
                Aver.AreEqual(expected[i], got[i]);
            }

            volume.Dispose();
        }