public void create_assembly_info_replaces_tokens(IAssemblyInfoWriter assemblyInfoWriter, MockFileManager fileManager)
        {
            "Given I have a file manager"
            ._(() => fileManager = new MockFileManager());

            "And I have an assembly info writer"
            ._(() => assemblyInfoWriter = new AssemblyInfoWriter(fileManager));

            "When I call create"
            ._(() => assemblyInfoWriter.Create(@"c:/dev/sallyfx/properties/AssemblyInfo.cs", "SallyFx", "SallyFx is a new generation web server", "0.0.2", "0.0.2/f1214 x64", "0.0.2.1"));

            "It should replace the title token"
            ._(() => fileManager.Output.Should().Contain("[assembly: AssemblyTitleAttribute(\"SallyFx\")]"));

            "It should replace the description token"
            ._(() => fileManager.Output.Should().Contain("[assembly: AssemblyDescriptionAttribute(\"SallyFx is a new generation web server\")]"));

            "It should replace the version token"
            ._(() => fileManager.Output.Should().Contain("[assembly: AssemblyVersionAttribute(\"0.0.2\")]"));

            "It should replace the informational version token"
            ._(() => fileManager.Output.Should().Contain("[assembly: AssemblyInformationalVersionAttribute(\"0.0.2/f1214 x64\")]"));

            "It should replace the file version token"
            ._(() => fileManager.Output.Should().Contain("[assembly: AssemblyFileVersionAttribute(\"0.0.2.1\")]"));
        }
        public async Task TestApplyDelete()
        {
            var setting = new Setting()
            {
                Name = "configuration",
                HandlerDescription = new FilesSettingHandlerDescription(@"C:\test\settings", new string[] {
                    @"test1.ini",
                    @"test2.ini",
                    @"subfolder\test1.ini"
                })
            };
            var logging     = new LoggerFactory();
            var logger      = logging.CreateLogger <FilesSettingHandler>();
            var fileManager = new MockFileManager();

            fileManager.CreateDirectory(@"C:\test\settings");
            fileManager.CreateDirectory(@"C:\test\settings\subfolder");
            await fileManager.WriteAllBytes(@"C:\test\settings\test1.ini", new byte[] { 0x00, 0x01, 0x02, 0x03 });

            await fileManager.WriteAllBytes(@"C:\test\settings\test2.ini", new byte[] { 0x01, 0x01, 0x01, 0x01 });

            await fileManager.WriteAllBytes(@"C:\test\settings\subfolder\test1.ini", new byte[] { 0x10, 0x11, 0x12, 0x13 });

            var handler = new FilesSettingHandler(setting, fileManager, logger);

            var value = new FilesValue()
            {
                Files = new FileValue[]
                {
                    new FileValue
                    {
                        RelativePath = @"test2.ini",
                        Contents     = new byte[] { 0x02, 0x02, 0x02 }
                    }
                }
            }.ToDictionary();

            var exists = fileManager.Exists(@"C:\test\settings\test1.ini");

            Assert.True(exists);
            exists = fileManager.Exists(@"C:\test\settings\subfolder\test1.ini");
            Assert.True(exists);
            var success = await handler.Apply(value);

            Assert.True(success);
            exists = fileManager.Exists(@"C:\test\settings\test1.ini");
            Assert.False(exists);
            var contents = await fileManager.ReadAllBytes(@"C:\test\settings\test2.ini");

            Assert.Equal(3, contents.Length);
            Assert.Equal(0x02, contents[0]);
            Assert.Equal(0x02, contents[1]);
            Assert.Equal(0x02, contents[2]);
            exists = fileManager.Exists(@"C:\test\settings\subfolder\test1.ini");
            Assert.False(exists);
        }
示例#3
0
        private static Autarkysoft.Bitcoin.Blockchain.Blockchain GetChain()
        {
            var c    = new Consensus();
            var fman = new MockFileManager()
            {
                expReadFN      = "Headers",
                returnReadData = BlockHeaderTests.GetSampleBlockHeaderBytes(),
                blockInfo      = new byte[32 + 4 + 4]
            };

            return(GetChain(fman, new BlockVerifier(null, c), c));
        }
        public void patch_updates_assembly_info(IAssemblyInfoWriter assemblyInfoWriter, AssemblyInfo assemblyInfo, MockFileManager fileManager)
        {
            string path = Path.Combine("c:" + System.IO.Path.DirectorySeparatorChar, "dev", "sallyfx", "properties", "AssemblyInfo.cs");

            "Given I have a file manager"
            ._(() => fileManager = new MockFileManager());

            "And I have an assembly info writer"
            ._(() => assemblyInfoWriter = new AssemblyInfoWriter(fileManager));

            "And I have an assembly info on disk"
            ._(() => A.CallTo(() => fileManager.UnderlyingFake.ReadAllText(path)).Returns(Crane.Core.Properties.Resources.AssemblyInfoTemplate));

            "And I have a data to patch the assembly info file with"
            ._(() => assemblyInfo = new AssemblyInfo()
            {
                Title                = "Norman.Chat",
                Description          = "Norman is a chat bot",
                FileVersion          = new Version(0, 0, 3, 1),
                Version              = new Version(0, 0, 3, 0),
                InformationalVersion = "RELEASE",
                RootDirectory        = Path.Combine("c:" + System.IO.Path.DirectorySeparatorChar, "dev", "sallyfx"),
                Include              = Path.Combine("properties", "AssemblyInfo.cs")
            });

            "When I patch the assembly"
            ._(() => assemblyInfoWriter.Patch(assemblyInfo));

            "It should replace the title token"
            ._(() => fileManager.Output.Should().Contain("[assembly: AssemblyTitleAttribute(\"Norman.Chat\")]"));

            "It should replace the description token"
            ._(() => fileManager.Output.Should().Contain("[assembly: AssemblyDescriptionAttribute(\"Norman is a chat bot\")]"));

            "It should replace the version token"
            ._(() => fileManager.Output.Should().Contain("[assembly: AssemblyVersionAttribute(\"0.0.3.0\")]"));

            "It should replace the informational version token"
            ._(() => fileManager.Output.Should().Contain("[assembly: AssemblyInformationalVersionAttribute(\"RELEASE\")]"));

            "It should replace the file version token"
            ._(() => fileManager.Output.Should().Contain("[assembly: AssemblyFileVersionAttribute(\"0.0.3.1\")]"));
        }
        public async Task TestCaptureMissingFolder()
        {
            var setting = new Setting()
            {
                Name = "configuration",
                HandlerDescription = new FilesSettingHandlerDescription(@"C:\test\settings", new string[] {
                    @"test1.ini",
                    @"test2.ini",
                    @"subfolder\test1.ini"
                })
            };
            var logging     = new LoggerFactory();
            var logger      = logging.CreateLogger <FilesSettingHandler>();
            var fileManager = new MockFileManager();
            var handler     = new FilesSettingHandler(setting, fileManager, logger);

            var result = await handler.Capture();

            Assert.False(result.Success);
        }
        public async Task TestCaptureWildcards()
        {
            var setting = new Setting()
            {
                Name = "configuration",
                HandlerDescription = new FilesSettingHandlerDescription(@"C:\test\settings", new string[] {
                    @"*",
                })
            };
            var logging     = new LoggerFactory();
            var logger      = logging.CreateLogger <FilesSettingHandler>();
            var fileManager = new MockFileManager();

            fileManager.CreateDirectory(@"C:\test\settings");
            fileManager.CreateDirectory(@"C:\test\settings\subfolder");
            await fileManager.WriteAllBytes(@"C:\test\settings\test1.ini", new byte[] { 0x00, 0x01, 0x02, 0x03 });

            await fileManager.WriteAllBytes(@"C:\test\settings\test2.ini", new byte[] { 0x01, 0x01, 0x01, 0x01 });

            await fileManager.WriteAllBytes(@"C:\test\settings\subfolder\test1.ini", new byte[] { 0x10, 0x11, 0x12, 0x13 });

            var handler = new FilesSettingHandler(setting, fileManager, logger);

            var result = await handler.Capture();

            Assert.True(result.Success);
            Assert.IsType <Dictionary <string, object> >(result.Value);
            var dictionaryValue = (Dictionary <string, object>)result.Value;

            Assert.True(dictionaryValue.TryGetValue("files", out var filesObject));
            Assert.IsType <Dictionary <string, object>[]>(filesObject);
            var filesArray = (Dictionary <string, object>[])filesObject;

            Assert.Equal(2, filesArray.Length);
            Assert.IsType <Dictionary <string, object> >(filesArray[0]);
            var fileDictionary = (Dictionary <string, object>)filesArray[0];

            Assert.True(fileDictionary.TryGetValue("relative_path", out var relativePathObject));
            Assert.IsType <string>(relativePathObject);
            Assert.Equal(@"test1.ini", (string)relativePathObject);
            Assert.True(fileDictionary.TryGetValue("b64gzip", out var b64gzip));
            Assert.IsType <string>(b64gzip);
            var contents = Decode((string)b64gzip);

            Assert.Equal(4, contents.Length);
            Assert.Equal(0x00, contents[0]);
            Assert.Equal(0x01, contents[1]);
            Assert.Equal(0x02, contents[2]);
            Assert.Equal(0x03, contents[3]);
            Assert.IsType <Dictionary <string, object> >(filesArray[1]);
            fileDictionary = (Dictionary <string, object>)filesArray[1];
            Assert.True(fileDictionary.TryGetValue("relative_path", out relativePathObject));
            Assert.IsType <string>(relativePathObject);
            Assert.Equal(@"test2.ini", (string)relativePathObject);
            Assert.True(fileDictionary.TryGetValue("b64gzip", out b64gzip));
            Assert.IsType <string>(b64gzip);
            contents = Decode((string)b64gzip);
            Assert.Equal(4, contents.Length);
            Assert.Equal(0x01, contents[0]);
            Assert.Equal(0x01, contents[1]);
            Assert.Equal(0x01, contents[2]);
            Assert.Equal(0x01, contents[3]);


            setting = new Setting()
            {
                Name = "configuration",
                HandlerDescription = new FilesSettingHandlerDescription(@"C:\test\settings", new string[] {
                    @"*.ini",
                    @"subfolder\test*"
                })
            };
            logging     = new LoggerFactory();
            logger      = logging.CreateLogger <FilesSettingHandler>();
            fileManager = new MockFileManager();
            fileManager.CreateDirectory(@"C:\test\settings");
            fileManager.CreateDirectory(@"C:\test\settings\subfolder");
            await fileManager.WriteAllBytes(@"C:\test\settings\test1.ini", new byte[] { 0x00, 0x01, 0x02, 0x03 });

            await fileManager.WriteAllBytes(@"C:\test\settings\test2.ini", new byte[] { 0x01, 0x01, 0x01, 0x01 });

            await fileManager.WriteAllBytes(@"C:\test\settings\test.xyz", new byte[] { 0x01, 0x01, 0x01, 0x01 });

            await fileManager.WriteAllBytes(@"C:\test\settings\subfolder\test1.ini", new byte[] { 0x10, 0x11, 0x12, 0x13 });

            await fileManager.WriteAllBytes(@"C:\test\settings\nottest.xyz", new byte[] { 0x01, 0x01, 0x01, 0x01 });

            handler = new FilesSettingHandler(setting, fileManager, logger);

            result = await handler.Capture();

            Assert.True(result.Success);
            Assert.IsType <Dictionary <string, object> >(result.Value);
            dictionaryValue = (Dictionary <string, object>)result.Value;
            Assert.True(dictionaryValue.TryGetValue("files", out filesObject));
            Assert.IsType <Dictionary <string, object>[]>(filesObject);
            filesArray = (Dictionary <string, object>[])filesObject;
            Assert.Equal(3, filesArray.Length);
            Assert.IsType <Dictionary <string, object> >(filesArray[0]);
            fileDictionary = (Dictionary <string, object>)filesArray[0];
            Assert.True(fileDictionary.TryGetValue("relative_path", out relativePathObject));
            Assert.IsType <string>(relativePathObject);
            Assert.Equal(@"test1.ini", (string)relativePathObject);
            Assert.True(fileDictionary.TryGetValue("b64gzip", out b64gzip));
            Assert.IsType <string>(b64gzip);
            contents = Decode((string)b64gzip);
            Assert.Equal(4, contents.Length);
            Assert.Equal(0x00, contents[0]);
            Assert.Equal(0x01, contents[1]);
            Assert.Equal(0x02, contents[2]);
            Assert.Equal(0x03, contents[3]);
            Assert.IsType <Dictionary <string, object> >(filesArray[1]);
            fileDictionary = (Dictionary <string, object>)filesArray[1];
            Assert.True(fileDictionary.TryGetValue("relative_path", out relativePathObject));
            Assert.IsType <string>(relativePathObject);
            Assert.Equal(@"test2.ini", (string)relativePathObject);
            Assert.True(fileDictionary.TryGetValue("b64gzip", out b64gzip));
            Assert.IsType <string>(b64gzip);
            contents = Decode((string)b64gzip);
            Assert.Equal(4, contents.Length);
            Assert.Equal(0x01, contents[0]);
            Assert.Equal(0x01, contents[1]);
            Assert.Equal(0x01, contents[2]);
            Assert.Equal(0x01, contents[3]);
            Assert.IsType <Dictionary <string, object> >(filesArray[2]);
            fileDictionary = (Dictionary <string, object>)filesArray[2];
            Assert.True(fileDictionary.TryGetValue("relative_path", out relativePathObject));
            Assert.IsType <string>(relativePathObject);
            Assert.Equal(@"subfolder\test1.ini", (string)relativePathObject);
            Assert.True(fileDictionary.TryGetValue("b64gzip", out b64gzip));
            Assert.IsType <string>(b64gzip);
            contents = Decode((string)b64gzip);
            Assert.Equal(4, contents.Length);
            Assert.Equal(0x10, contents[0]);
            Assert.Equal(0x11, contents[1]);
            Assert.Equal(0x12, contents[2]);
            Assert.Equal(0x13, contents[3]);
        }
示例#7
0
        public static IEnumerable <object[]> GetLocatorCases()
        {
            var fman = new MockFileManager()
            {
                expReadFN      = "Headers",
                returnReadData = BlockHeaderTests.GetSampleBlockHeaderBytes(),
                blockInfo      = new byte[32 + 4 + 4]
            };
            var consensus = new MockConsensus();
            var bver      = new BlockVerifier(null, consensus);

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                GetHeaders(1),
                GetHeaders(1)
            });

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                GetHeaders(2),
                GetHeaders(2).Reverse()
            });

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                GetHeaders(10),
                GetHeaders(10).Reverse()
            });

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                GetHeaders(11),
                GetHeaders(11).Reverse()
            });

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                GetHeaders(12),
                GetHeaders(12).Reverse()
            });

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                GetHeaders(13),
                new BlockHeader[12]
                {
                    new BlockHeader(12, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(11, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(10, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(9, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(8, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(7, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(6, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(5, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(4, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(3, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(2, new byte[32], new byte[32], 0, 0, 0),

                    new BlockHeader(0, new byte[32], new byte[32], 0, 0, 0),
                }
            });

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                GetHeaders(14),
                new BlockHeader[13]
                {
                    new BlockHeader(13, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(12, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(11, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(10, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(9, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(8, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(7, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(6, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(5, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(4, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(3, new byte[32], new byte[32], 0, 0, 0),

                    new BlockHeader(1, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(0, new byte[32], new byte[32], 0, 0, 0),
                }
            });

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                GetHeaders(15),
                new BlockHeader[13]
                {
                    new BlockHeader(14, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(13, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(12, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(11, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(10, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(9, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(8, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(7, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(6, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(5, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(4, new byte[32], new byte[32], 0, 0, 0),

                    new BlockHeader(2, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(0, new byte[32], new byte[32], 0, 0, 0),
                }
            });

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                GetHeaders(16),
                new BlockHeader[13]
                {
                    new BlockHeader(15, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(14, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(13, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(12, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(11, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(10, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(9, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(8, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(7, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(6, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(5, new byte[32], new byte[32], 0, 0, 0),

                    new BlockHeader(3, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(0, new byte[32], new byte[32], 0, 0, 0),
                }
            });

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                GetHeaders(17),
                new BlockHeader[13]
                {
                    new BlockHeader(16, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(15, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(14, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(13, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(12, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(11, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(10, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(9, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(8, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(7, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(6, new byte[32], new byte[32], 0, 0, 0),

                    new BlockHeader(4, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(0, new byte[32], new byte[32], 0, 0, 0),
                }
            });

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                GetHeaders(18),
                new BlockHeader[14]
                {
                    new BlockHeader(17, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(16, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(15, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(14, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(13, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(12, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(11, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(10, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(9, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(8, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(7, new byte[32], new byte[32], 0, 0, 0),

                    new BlockHeader(5, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(1, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(0, new byte[32], new byte[32], 0, 0, 0),
                }
            });

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                GetHeaders(19),
                new BlockHeader[14]
                {
                    new BlockHeader(18, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(17, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(16, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(15, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(14, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(13, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(12, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(11, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(10, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(9, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(8, new byte[32], new byte[32], 0, 0, 0),

                    new BlockHeader(6, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(2, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(0, new byte[32], new byte[32], 0, 0, 0),
                }
            });

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                new BlockHeader[19]
                {
                    new BlockHeader(0, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(1, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(2, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(3, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(4, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(5, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(6, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(7, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(8, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(9, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(10, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(11, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(12, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(13, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(14, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(15, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(16, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(17, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(18, new byte[32], new byte[32], (uint)UnixTimeStamp.TimeToEpoch(DateTime.Now.Subtract(TimeSpan.FromHours(1))), 0, 0),
                },
                new BlockHeader[14]
                {
                    // Last block (18) is not included
                    new BlockHeader(17, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(16, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(15, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(14, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(13, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(12, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(11, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(10, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(9, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(8, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(7, new byte[32], new byte[32], 0, 0, 0),

                    new BlockHeader(5, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(1, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(0, new byte[32], new byte[32], 0, 0, 0),
                }
            });

            uint yesterday = (uint)UnixTimeStamp.TimeToEpoch(DateTime.UtcNow.Subtract(TimeSpan.FromHours(25)));

            yield return(new object[]
            {
                GetChain(fman, bver, consensus),
                new BlockHeader[19]
                {
                    new BlockHeader(0, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(1, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(2, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(3, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(4, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(5, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(6, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(7, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(8, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(9, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(10, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(11, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(12, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(13, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(14, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(15, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(16, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(17, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(18, new byte[32], new byte[32], yesterday, 0, 0),
                },
                new BlockHeader[14]
                {
                    new BlockHeader(18, new byte[32], new byte[32], yesterday, 0, 0),
                    new BlockHeader(17, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(16, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(15, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(14, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(13, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(12, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(11, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(10, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(9, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(8, new byte[32], new byte[32], 0, 0, 0),

                    new BlockHeader(6, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(2, new byte[32], new byte[32], 0, 0, 0),
                    new BlockHeader(0, new byte[32], new byte[32], 0, 0, 0),
                }
            });
        }