Example #1
0
        public void PageInfo_Walk(int count, int psz, bool remount, int strvar)
        {
            string makestr(int i)
            {
                return(strvar > 0 ? (new string(' ', i % strvar) + "text-string-" + i.ToString()) : ("text-string-" + i.ToString()));
            }

            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"));

            var volume = new DefaultVolume(CryptoMan, meta, ms, ownsStream: false);

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

            if (remount)
            {
                volume.Dispose();
                volume = new DefaultVolume(CryptoMan, ms, ownsStream: false);
            }

            var pis = volume.ReadPageInfos(0);

            "Page infos: {0}".SeeArgs(pis.Count());

            foreach (var pi in pis)
            {
                var one = volume.ReadPageInfo(pi.PageId);
                Aver.AreEqual(pi, one);
            }

            var total  = 0;
            var reader = new StringArchiveReader(volume);

            foreach (var pi in pis)
            {
                var page = reader.GetOnePageAt(pi.PageId, true);
                foreach (var entry in page.Entries)
                {
                    if (entry.State == Entry.Status.Valid)
                    {
                        Aver.AreEqual(makestr(total), reader.Materialize(entry));
                        total++;
                    }
                }
            }

            Aver.AreEqual(count, total);

            volume.Dispose();
        }