Ejemplo n.º 1
0
        public void CreateBlock_FileHeader()
        {
            var blocktype = DragonTapeBlockType.Header;
            var payload   = new byte[] { 66, 65, 82, 66, 65, 82, 32, 32, 2, 0, 0, 195, 80, 39, 16 };
            var checksum  = 0x45;

            var block = DragonTapeBlock.CreateBlock(blocktype, payload, 0, payload.Length, checksum);

            Assert.Equal(blocktype, block.BlockType);
            Assert.Equal(checksum, block.Checksum);
            Assert.Equal(payload.Length, block.Length);
            var data = block.Data;

            for (int i = 0; i < payload.Length; i++)
            {
                Assert.Equal(payload[i], data[i]);
            }
            Assert.True(block is DragonTapeHeaderBlock);
            var header = (DragonTapeHeaderBlock)block;

            Assert.Equal("BARBAR", header.Filename);
            Assert.Equal(DragonFileType.MachineCode, header.FileType);
            Assert.False(header.IsAscii);
            Assert.False(header.IsGapped);
            Assert.Equal(10000, header.LoadAddress);
            Assert.Equal(50000, header.StartAddress);

            block.Validate();
        }
Ejemplo n.º 2
0
        public void CreateBlock_InvalidChecksum()
        {
            var blocktype = DragonTapeBlockType.Header;
            var payload   = new byte[] { 66, 65, 82, 66, 65, 82, 32, 32, 2, 0, 0, 195, 80, 39, 16 };
            var checksum  = 0;

            var block = DragonTapeBlock.CreateBlock(blocktype, payload, 0, payload.Length, checksum);

            Assert.Equal(blocktype, block.BlockType);
            Assert.Equal(checksum, block.Checksum);
            Assert.Equal(payload.Length, block.Length);
            var data = block.Data;

            for (int i = 0; i < data.Length; i++)
            {
                Assert.Equal(payload[i], data[i]);
            }

            try
            {
                block.Validate();
                Assert.True(false, "This block has an invalid checksum and should not pass validation.");
            }
            catch (InvalidBlockChecksumException) {}
        }
Ejemplo n.º 3
0
        public void CreateDragonTapeDataBlock_PayloadTooLarge_ThrowsException()
        {
            var             payload = new byte[256];
            DragonTapeBlock block   = null;

            try
            {
                block = new DragonTapeDataBlock(payload);
                Assert.True(false, "Block with too large payload incorrectly created.");
            }
            catch (ArgumentOutOfRangeException) {}
        }
Ejemplo n.º 4
0
 private void DumpBlocks(string tapefile)
 {
     //TODO Print more information about each tape block
     using (var tape = new CasTape(new FileStream(tapefile, FileMode.Open, FileAccess.Read)))
     {
         try
         {
             while (true)
             {
                 var block = DragonTapeBlock.ReadBlock(tape, 1);
                 Console.WriteLine(block.ToString());
             }
         }
         catch (EndOfTapeException)
         {
             return;
         }
     }
 }
Ejemplo n.º 5
0
        public void ReadBlock_NotSynchronized()
        {
            var tapedata = new byte[] { 0xbc, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3c, 0x00, 0x0f, 0x46, 0x4f, 0x4f, 0x42, 0x41, 0x52, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x55, 0x00 };
            var tapefile = new MemoryStream(tapedata, false);
            var tape     = new CasTape(tapefile);

            var block = DragonTapeBlock.ReadBlock(tape, 5);

            Assert.Equal(DragonTapeBlockType.Header, block.BlockType);
            Assert.Equal(15, block.Length);
            Assert.Equal(0x08, block.Checksum);

            var headerblock = (DragonTapeHeaderBlock)block;

            Assert.Equal("FOOBAR", headerblock.Filename);
            Assert.Equal(DragonFileType.Basic, headerblock.FileType);
            Assert.False(headerblock.IsAscii);
            Assert.False(headerblock.IsGapped);

            block.Validate();
        }