Пример #1
0
        public void ClearByHeight()
        {
            var chainId        = 123;
            var initTarget     = 2;
            var blockInfoCache = new ChainCacheEntity(chainId, initTarget);
            int i = 0;

            while (i++ < initTarget + CrossChainConstants.DefaultBlockCacheEntityCount)
            {
                blockInfoCache.TryAdd(new SideChainBlockData
                {
                    Height  = i,
                    ChainId = chainId,
                    TransactionStatusMerkleTreeRoot = Hash.FromString(i.ToString())
                });
            }

            {
                blockInfoCache.ClearOutOfDateCacheByHeight(initTarget - 1);
                var res = blockInfoCache.TryTake(initTarget, out _, false);
                Assert.True(res);
            }

            {
                blockInfoCache.ClearOutOfDateCacheByHeight(initTarget);
                var res = blockInfoCache.TryTake(initTarget, out _, false);
                Assert.False(res);
            }

            {
                var targetHeight = blockInfoCache.TargetChainHeight();
                blockInfoCache.ClearOutOfDateCacheByHeight(targetHeight);
                Assert.True(targetHeight == blockInfoCache.TargetChainHeight());
                for (int j = 0; j < targetHeight; j++)
                {
                    var res = blockInfoCache.TryTake(j, out _, false);
                    Assert.False(res);
                }
            }
        }