private IEnumerable <MempoolPersistenceEntry> CreateTestEntries(int numTx)
        {
            var entries = new List <TxMempoolEntry>(numTx);

            for (int i = 0; i < numTx; i++)
            {
                var         amountSat = 10 * i;
                Transaction tx        = this.MakeRandomTx(amountSat);
                var         entry     = new TxMempoolEntry(tx, Money.FromUnit(0.1m, MoneyUnit.MilliBTC), DateTimeOffset.Now.ToUnixTimeSeconds(), i * 100, i, amountSat, i == 0, 10, null, new PowConsensusOptions());
                entry.UpdateFeeDelta(numTx - i);
                entries.Add(entry);
            }
            return(entries.Select(entry => MempoolPersistenceEntry.FromTxMempoolEntry(entry)));
        }
Exemple #2
0
        public void SaveStreamTest()
        {
            int numTx = 22;
            int expectedLinesPerTransaction = 3;
            int expectedHeaderLines         = 2;
            int expectedLines = numTx * expectedLinesPerTransaction + expectedHeaderLines;
            var settings      = new NodeSettings(this.network, args: new string[] { $"-datadir={ Path.Combine(this.dir, "SaveStreamTest") }" });
            var persistence   = new MempoolPersistence(settings, new LoggerFactory());
            IEnumerable <MempoolPersistenceEntry> toSave = this.CreateTestEntries(numTx);
            List <MempoolPersistenceEntry>        loaded;

            long  actualStreamLength = 0;
            ulong actualVersion      = 0;
            long  actualCount        = -1;

            using (var ms = new MemoryStream())
            {
                persistence.DumpToStream(settings.Network, toSave, ms);
                actualStreamLength = ms.Length;
                ms.Seek(0, SeekOrigin.Begin);
                var bitcoinReader = new BitcoinStream(ms, false)
                {
                    ConsensusFactory = settings.Network.Consensus.ConsensusFactory
                };

                bitcoinReader.ReadWrite(ref actualVersion);
                bitcoinReader.ReadWrite(ref actualCount);

                loaded = new List <MempoolPersistenceEntry>();
                for (int i = 0; i < actualCount; i++)
                {
                    MempoolPersistenceEntry entry = default(MempoolPersistenceEntry);
                    bitcoinReader.ReadWrite(ref entry);
                    loaded.Add(entry);
                }
            }

            Assert.True(actualStreamLength > 0);
            Assert.Equal(MempoolPersistence.MempoolDumpVersion, actualVersion);
            Assert.Equal(numTx, actualCount);
            Assert.Equal(loaded, toSave.ToArray());
        }
        public void SaveStreamTest()
        {
            int numTx = 22;
            int expectedLinesPerTransaction = 3;
            int expectedHeaderLines         = 2;
            int expectedLines = numTx * expectedLinesPerTransaction + expectedHeaderLines;
            var settings      = NodeSettings.Default();

            settings.DataDir = Path.Combine(this.dir, "SaveStreamTest");
            MempoolPersistence persistence = new MempoolPersistence(settings, new LoggerFactory());
            IEnumerable <MempoolPersistenceEntry> toSave = CreateTestEntries(numTx);
            List <MempoolPersistenceEntry>        loaded;

            long  actualStreamLength = 0;
            ulong actualVersion      = 0;
            long  actualCount        = -1;

            using (MemoryStream ms = new MemoryStream())
            {
                persistence.DumpToStream(toSave, ms);
                actualStreamLength = ms.Length;
                ms.Seek(0, SeekOrigin.Begin);
                var bitcoinReader = new BitcoinStream(ms, false);

                bitcoinReader.ReadWrite(ref actualVersion);
                bitcoinReader.ReadWrite(ref actualCount);

                loaded = new List <MempoolPersistenceEntry>();
                for (int i = 0; i < actualCount; i++)
                {
                    MempoolPersistenceEntry entry = default(MempoolPersistenceEntry);
                    bitcoinReader.ReadWrite(ref entry);
                    loaded.Add(entry);
                }
            }

            Assert.True(actualStreamLength > 0);
            Assert.Equal(MempoolPersistence.MEMPOOL_DUMP_VERSION, actualVersion);
            Assert.Equal(numTx, actualCount);
            Assert.Equal(loaded, toSave.ToArray());
        }