private static async Task RunPruning(PruningTestBlockchain chain, int time, bool onlyFirstRuns)
        {
            chain.FullPruner.WaitHandle.Reset();
            chain.PruningTrigger.Prune += Raise.Event <EventHandler <PruningTriggerEventArgs> >();
            for (int i = 0; i < Reorganization.MaxDepth + 2; i++)
            {
                await chain.AddBlock(true);
            }

            HashSet <byte[]> allItems        = chain.DbProvider.StateDb.GetAllValues().ToHashSet(Bytes.EqualityComparer);
            bool             pruningFinished = chain.FullPruner.WaitHandle.WaitOne(TimeSpan.FromSeconds(1));

            await chain.AddBlock(true);

            if (!onlyFirstRuns || time == 0)
            {
                pruningFinished.Should().BeTrue();

                await WriteFileStructure(chain);

                chain.PruningDb.InnerDbName.Should().Be($"State{time + 1}");

                HashSet <byte[]> currentItems = chain.DbProvider.StateDb.GetAllValues().ToHashSet(Bytes.EqualityComparer);
                currentItems.IsSubsetOf(allItems).Should().BeTrue();
                currentItems.Count.Should().BeGreaterThan(0);
            }
        }
        public async Task prune_on_disk_only_once()
        {
            using PruningTestBlockchain chain = await PruningTestBlockchain.Create(new PruningConfig { FullPruningMinimumDelayHours = 10 });

            for (int i = 0; i < 3; i++)
            {
                await RunPruning(chain, i, true);
            }
        }
        public async Task prune_on_disk_multiple_times()
        {
            using PruningTestBlockchain chain = await PruningTestBlockchain.Create(new PruningConfig { FullPruningMinimumDelayHours = 0 });

            for (int i = 0; i < 3; i++)
            {
                await RunPruning(chain, i, false);
            }
        }
        private static async Task WriteFileStructure(PruningTestBlockchain chain)
        {
            string stateDbPath = Path.Combine(chain.TempDirectory.Path, "state");

            foreach (string directory in Directory.EnumerateDirectories(stateDbPath))
            {
                await TestContext.Out.WriteLineAsync(directory);
            }

            foreach (string file in Directory.EnumerateFiles(stateDbPath))
            {
                await TestContext.Out.WriteLineAsync(file);
            }
        }