public void GetChainReturnsConcurrentChainFromDisk()
        {
            string dir   = AssureEmptyDir("TestData/ChainRepository/GetChainReturnsConcurrentChainFromDisk");
            var    chain = new ConcurrentChain(Network.RegTest);
            var    tip   = AppendBlock(chain);

            using (var session = new DBreezeSingleThreadSession("session", dir))
            {
                session.Do(() =>
                {
                    var toSave = tip;
                    List <ChainedBlock> blocks = new List <ChainedBlock>();
                    while (toSave != null)
                    {
                        blocks.Insert(0, toSave);
                        toSave = toSave.Previous;
                    }
                    foreach (var block in blocks)
                    {
                        session.Transaction.Insert <int, BlockHeader>("Chain", block.Height, block.Header);
                    }

                    session.Transaction.Commit();
                }).Wait();
            }

            using (var repo = new ChainRepository(dir))
            {
                var testChain = new ConcurrentChain(Network.RegTest);
                repo.Load(testChain).GetAwaiter().GetResult();
                Assert.Equal(tip, testChain.Tip);
            }
        }
Beispiel #2
0
 public void DoStartsTransaction()
 {
     using (var session = new DBreezeSingleThreadSession("TestThread", AssureEmptyDir("TestData/DBreezeSingleThreadSession/DoStartsTransaction")))
     {
         session.Do(() =>
         {
             Assert.NotNull(session.Transaction);
         });
     }
 }
Beispiel #3
0
 public void DoRunsSameThreadAsSessionCreated()
 {
     using (var session = new DBreezeSingleThreadSession("TestThread", AssureEmptyDir("TestData/DBreezeSingleThreadSession/DoRunsSameThreadAsSessionCreated")))
     {
         session.Do(() =>
         {
             Assert.Equal("TestThread", Thread.CurrentThread.Name);
         });
     }
 }
Beispiel #4
0
        public Task Initialize(Block genesis)
        {
            var sync = _Session.Do(() =>
            {
                _Session.Transaction.SynchronizeTables("Coins", "BlockHash", "Rewind");
                _Session.Transaction.ValuesLazyLoadingIsOn = false;
            });

            var hash = _Session.Do(() =>
            {
                if (GetCurrentHash() == null)
                {
                    SetBlockHash(genesis.GetHash());
                    //Genesis coin is unspendable so do not add the coins
                    _Session.Transaction.Commit();
                }
            });

            return(Task.WhenAll(new[] { sync, hash }));
        }
Beispiel #5
0
        public void DoWithTypePerformsTask()
        {
            using (var session = new DBreezeSingleThreadSession("TestThread", AssureEmptyDir("TestData/DBreezeSingleThreadSession/DoWithTypePerformsTask")))
            {
                var task = session.Do <string>(() =>
                {
                    return("TaskResult");
                });
                task.Wait();

                Assert.Equal("TaskResult", task.Result);
            }
        }
Beispiel #6
0
        public void DoWithTypeRunsSameThreadAsSessionCreated()
        {
            using (var session = new DBreezeSingleThreadSession("TestThread", AssureEmptyDir("TestData/DBreezeSingleThreadSession/DoWithTypeRunsSameThreadAsSessionCreated")))
            {
                var thread = session.Do <string>(() =>
                {
                    return(Thread.CurrentThread.Name);
                });
                thread.Wait();

                Assert.Equal("TestThread", thread.Result);
            }
        }
Beispiel #7
0
        public void DoAbleToAccessExistingTransactionData()
        {
            var dir = AssureEmptyDir("TestData/DBreezeSingleThreadSession/DoAbleToAccessExistingTransactionData");

            uint256[] data = SetupTransactionData(dir);

            using (var session = new DBreezeSingleThreadSession("TestThread", dir))
            {
                session.Do(() =>
                {
                    var data2       = new uint256[data.Length];
                    var transaction = session.Transaction;
                    int i           = 0;
                    foreach (var row in transaction.SelectForward <byte[], byte[]>("Table"))
                    {
                        data2[i++] = new uint256(row.Key, false);
                    }

                    Assert.True(data.SequenceEqual(data2));
                });
            }
        }