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))); }
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()); }