public void StreamReadByteShouldReadByte()
        {
            // Arrange
            var data = GetDummy();
            var stream = new FirmwareStream(data);

            // Act / Assert
            for (var i = 0; i < data.Length; i++)
            {
                Assert.AreEqual(stream.ReadByte(i), data[i]);
            }
        }
        public void StreamReadByteShouldReturnNullWhenTryingToReadOutOfBounds()
        {
            // Arrange
            var data   = GetDummy();
            var stream = new FirmwareStream(data);

            // Act
            var result = stream.ReadByte(data.Length);

            // Assert
            Assert.AreEqual(null, result);
        }
        public void StreamReadByteShouldReadByte()
        {
            // Arrange
            var data   = GetDummy();
            var stream = new FirmwareStream(data);

            // Act / Assert
            for (var i = 0; i < data.Length; i++)
            {
                Assert.AreEqual(stream.ReadByte(i), data[i]);
            }
        }
Пример #4
0
        public bool AddPacket(FwPacket firmwarePacket)
        {
            if (VendorId == firmwarePacket.VendorId && ModelId == firmwarePacket.ModelId &&
                firmwarePacket.hasPassedCRC && firmwarePacket.SectionType == 1 && !isComplete)
            {
                if (firmwarePacket.Data.Length != BlockSize)
                {
                    //Console.WriteLine("Blocksize differs! At offset: 0x{0:X2}", firmwarePacket.FileOffset);
                }

                if (!CompletedOffsets.Contains(firmwarePacket.FileOffset))
                {
                    FirmwareStream.Seek(firmwarePacket.FileOffset, SeekOrigin.Begin);
                    FirmwareStream.Write(firmwarePacket.Data, 0, firmwarePacket.Data.Length);
                    BytesCompleted += (uint)firmwarePacket.Data.Length;

                    CompletedOffsets.Add(firmwarePacket.FileOffset);

                    if (BytesCompleted >= FileSize)
                    {
                        FirmwareStream.Close();
                        DirectoryInfo fwDir = Directory.CreateDirectory(Path.Combine(SaveDirectory, BaseName));

                        File.Move(Path.Combine(SaveDirectory, string.Format("{0}.tmp", BaseName)), Path.Combine(fwDir.FullName, FileName));
                        isComplete = true;

                        FwCreateDate = DateTime.Now;
                        File.WriteAllText(Path.Combine(fwDir.FullName, "date_stamp.txt"), FwCreateDate.Ticks.ToString());


                        Extractors.IFirmwareExtractor currentExtractor;
                        if ((currentExtractor = Extractor) != null)
                        {
                            try
                            {
                                currentExtractor.ExtractParts(Path.Combine(fwDir.FullName, FileName));
                                GetVersion();
                            }
                            catch (Exception ex)
                            {
                                Logger.AddLogItem("Error extracting firmware!", "FirmwareFile", LogLevels.Warning, ex);
                            }
                        }
                    }
                }
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public void StreamCanShrinkWhenWritingData()
        {
            // Arrange
            var data   = GetDummy();
            var offset = data.Length / 2;
            var stream = new FirmwareStream(data);

            // Act
            stream.WriteByte(offset, null);
            var result = stream.ToArray();

            // Assert
            Assert.AreEqual(offset, result.Length);
        }
        public void StreamCanShrinkWhenWritingData()
        {
            // Arrange
            var data = GetDummy();
            var offset = data.Length / 2;
            var stream = new FirmwareStream(data);

            // Act
            stream.WriteByte(offset, null);
            var result = stream.ToArray();

            // Assert
            Assert.AreEqual(offset, result.Length);
        }
        public void StreamCanExpandWhenWritingData()
        {
            // Arrange
            var data = GetDummy();
            var offset = data.Length;
            var stream = new FirmwareStream(data);

            // Act
            stream.WriteByte(offset, 0xFF);
            var result = stream.ToArray();

            // Assert
            Assert.AreEqual(offset + 1, result.Length);
            Assert.AreEqual(0xFF, result[offset]);
        }
        public void StreamCanExpandWhenWritingData()
        {
            // Arrange
            var data   = GetDummy();
            var offset = data.Length;
            var stream = new FirmwareStream(data);

            // Act
            stream.WriteByte(offset, 0xFF);
            var result = stream.ToArray();

            // Assert
            Assert.AreEqual(offset + 1, result.Length);
            Assert.AreEqual(0xFF, result[offset]);
        }
        public void StreamReadBytesShouldReadBytes()
        {
            // Arrange
            var data   = GetDummy();
            var stream = new FirmwareStream(data);
            var offset = 2;
            var count  = 5;

            // Act
            var result = stream.ReadBytes(offset, count);

            // Assert
            Assert.AreEqual(count, result.Length);
            Assert.IsTrue(result.SequenceEqual(data.Skip(offset).Take(count)));
        }
        public void StreamDoesNotExpandWhenShrinkingMultipleTimesAtDifferentOffsets()
        {
            // Arrange
            var data   = GetDummy();
            var stream = new FirmwareStream(data);

            // Act
            for (var i = 0; i < data.Length; i++)
            {
                stream.WriteByte(i, null);
            }
            var result = stream.ToArray();

            // Assert
            Assert.AreEqual(0, result.Length);
        }
        public void StreamDoesNotExpandWhenShrinkingMultipleTimesAtDifferentOffsets()
        {
            // Arrange
            var data = GetDummy();
            var stream = new FirmwareStream(data);

            // Act
            for (var i = 0; i < data.Length; i++)
            {
                stream.WriteByte(i, null);
            }
            var result = stream.ToArray();

            // Assert
            Assert.AreEqual(0, result.Length);
        }
        public void StreamCanExpandAfterShrink()
        {
            // Arrange
            var data = GetDummy();
            var originalLength = data.Length;
            var shrinkedLength = data.Length / 2;
            var stream = new FirmwareStream(data);

            // Act
            stream.WriteByte(shrinkedLength, null);
            stream.WriteByte(originalLength - 1, 1);
            var result = stream.ToArray();

            // Assert
            Assert.AreEqual(originalLength, result.Length);
        }
        public void StreamCanExpandAfterShrink()
        {
            // Arrange
            var data           = GetDummy();
            var originalLength = data.Length;
            var shrinkedLength = data.Length / 2;
            var stream         = new FirmwareStream(data);

            // Act
            stream.WriteByte(shrinkedLength, null);
            stream.WriteByte(originalLength - 1, 1);
            var result = stream.ToArray();

            // Assert
            Assert.AreEqual(originalLength, result.Length);
        }
        public void StreamReadBytesShouldDesiredBytesCountEvenIfOutOfBounds()
        {
            // Arrange
            var data   = GetDummy();
            var stream = new FirmwareStream(data);
            var offset = data.Length - 2;
            var count  = 5;

            // Act
            var result = stream.ReadBytes(offset, count);

            // Assert
            Assert.AreEqual(count, result.Length);
            Assert.AreEqual(data[data.Length - 2], result[0]);
            Assert.AreEqual(data[data.Length - 1], result[1]);
            Assert.IsTrue(result.Skip(2).SequenceEqual(new byte[3]));
        }
        public void StreamReadingDoesNotAffectFirmwareSize()
        {
            // Arrange
            var data   = GetDummy();
            var stream = new FirmwareStream(data);

            // Act
            for (var i = 0; i < data.Length + 10; i++)
            {
                stream.ReadByte(i);
            }
            stream.ReadBytes(0, 250);
            var result = stream.ToArray();

            // Assert
            Assert.AreEqual(data.Length, result.Length);
            Assert.IsTrue(result.SequenceEqual(data));
        }
        public void StreamReadByteShouldReturnNullWhenTryingToReadOutOfBounds()
        {
            // Arrange
            var data = GetDummy();
            var stream = new FirmwareStream(data);

            // Act
            var result = stream.ReadByte(data.Length);

            // Assert
            Assert.AreEqual(null, result);
        }
        public void StreamReadingDoesNotAffectFirmwareSize()
        {
            // Arrange
            var data = GetDummy();
            var stream = new FirmwareStream(data);

            // Act
            for (var i = 0; i < data.Length + 10; i++)
            {
                stream.ReadByte(i);
            }
            stream.ReadBytes(0, 250);
            var result = stream.ToArray();

            // Assert
            Assert.AreEqual(data.Length, result.Length);
            Assert.IsTrue(result.SequenceEqual(data));
        }
        public void StreamReadBytesShouldReadBytes()
        {
            // Arrange
            var data = GetDummy();
            var stream = new FirmwareStream(data);
            var offset = 2;
            var count = 5;

            // Act
            var result = stream.ReadBytes(offset, count);

            // Assert
            Assert.AreEqual(count, result.Length);
            Assert.IsTrue(result.SequenceEqual(data.Skip(offset).Take(count)));
        }
        public void StreamReadBytesShouldDesiredBytesCountEvenIfOutOfBounds()
        {
            // Arrange
            var data = GetDummy();
            var stream = new FirmwareStream(data);
            var offset = data.Length - 2;
            var count = 5;

            // Act
            var result = stream.ReadBytes(offset, count);

            // Assert
            Assert.AreEqual(count, result.Length);
            Assert.AreEqual(data[data.Length - 2], result[0]);
            Assert.AreEqual(data[data.Length - 1], result[1]);
            Assert.IsTrue(result.Skip(2).SequenceEqual(new byte[3]));
        }