|
25 | 25 | # |
26 | 26 | # ***************************************************************************** |
27 | 27 |
|
28 | | -from unittest import TestCase, main |
29 | 28 | import cstruct |
30 | 29 | from cstruct import sizeof, typedef |
31 | 30 | import io |
@@ -645,102 +644,106 @@ class PartitionNested(cstruct.CStruct): |
645 | 644 | """ |
646 | 645 |
|
647 | 646 |
|
648 | | -class TestCStruct(TestCase): |
649 | | - def test_len(self): |
650 | | - mbr = MBR() |
651 | | - self.assertEqual(len(mbr), 512) |
652 | | - self.assertEqual(mbr.size, 512) |
653 | | - |
654 | | - def test_sizeof(self): |
655 | | - self.assertEqual(sizeof("struct Partition"), sizeof("struct PartitionFlat")) |
656 | | - self.assertEqual(sizeof("struct Partition"), sizeof("struct PartitionNested")) |
657 | | - |
658 | | - def test_unpack(self): |
659 | | - mbr = MBR() |
660 | | - f = io.BytesIO(MBR_DATA) |
661 | | - mbr.unpack(f) |
662 | | - self.assertEqual(mbr.signature[0], 0x55) |
663 | | - self.assertEqual(mbr.signature[1], 0xAA) |
664 | | - self.assertEqual(mbr.partitions[0].start.head, 0) |
665 | | - self.assertEqual(mbr.partitions[0].end.head, 0xFE) |
666 | | - self.assertEqual(mbr.partitions[1].start_sect, 0x2117C7) |
667 | | - |
668 | | - def test_pack(self): |
669 | | - mbr = MBR(MBR_DATA) |
670 | | - d = mbr.pack() |
671 | | - self.assertEqual(MBR_DATA, d) |
672 | | - mbr.partitions[3].start.head = 123 |
673 | | - d1 = mbr.pack() |
674 | | - mbr1 = MBR(d1) |
675 | | - self.assertEqual(mbr1.partitions[3].start.head, 123) |
676 | | - |
677 | | - def test_init(self): |
678 | | - p = Position(head=254, sector=63, cyl=134) |
679 | | - mbr = MBR(MBR_DATA) |
680 | | - self.assertEqual(mbr.partitions[0].end.head, p.head) |
681 | | - self.assertEqual(mbr.partitions[0].end.sector, p.sector) |
682 | | - self.assertEqual(mbr.partitions[0].end.cyl, p.cyl) |
683 | | - |
684 | | - def test_none(self): |
685 | | - mbr = MBR() |
686 | | - self.assertEqual(mbr.partitions[0].end.sector, 0) |
687 | | - mbr.unpack(None) |
688 | | - self.assertEqual(mbr.partitions[0].end.head, 0) |
689 | | - |
690 | | - def test_clear(self): |
691 | | - mbr = MBR() |
692 | | - mbr.unpack(MBR_DATA) |
693 | | - self.assertEqual(mbr.partitions[0].end.head, 0xFE) |
694 | | - mbr.clear() |
695 | | - self.assertEqual(mbr.partitions[0].end.head, 0x00) |
696 | | - |
697 | | - def test_inline(self): |
698 | | - TestStruct = cstruct.parse( |
699 | | - 'struct TestStruct { unsigned char head; unsigned char sector; unsigned char cyl; }', |
700 | | - __byte_order__=cstruct.LITTLE_ENDIAN, |
701 | | - ) |
702 | | - s = TestStruct(head=254, sector=63, cyl=134) |
703 | | - p = Position(head=254, sector=63, cyl=134) |
704 | | - self.assertEqual(s.pack(), p.pack()) |
705 | | - |
706 | | - def test_dummy(self): |
707 | | - dummy = Dummy() |
708 | | - dummy.c = b'A' |
709 | | - dummy.vc = b'ABCDEFGHIJ' |
710 | | - dummy.i = 123456 |
711 | | - for i in range(0, 10): |
712 | | - dummy.vi[i] = i * 10 |
713 | | - dummy.f = 123.456 |
714 | | - for i in range(0, 10): |
715 | | - dummy.vf[i] = 10.0 / (i + 1) |
716 | | - dummy.vl = list(range(0, 10)) |
717 | | - data = dummy.pack() |
718 | | - dummy1 = Dummy(data) |
719 | | - for i in range(0, 10): |
720 | | - dummy1.vl[i] = dummy.vl[i] |
721 | | - self.assertEqual(dummy.pack(), dummy1.pack()) |
722 | | - dummy2 = Dummy(data) |
723 | | - dummy2.vf[2] = 79 |
724 | | - self.assertNotEqual(dummy.pack(), dummy2.pack()) |
725 | | - dummy3 = Dummy(data) |
726 | | - dummy3.vl = list(range(1, 11)) |
727 | | - self.assertNotEqual(dummy.pack(), dummy3.pack()) |
728 | | - |
729 | | - def test_nested(self): |
730 | | - data = os.urandom(sizeof("struct PartitionFlat")) |
731 | | - flat = PartitionFlat(data) |
732 | | - flat.unpack(data) |
733 | | - nested = PartitionNested(data) |
734 | | - nested.unpack(data) |
735 | | - self.assertEqual(flat.status, nested.status) |
736 | | - self.assertEqual(flat.startAddrHead, nested.start.addrHead) |
737 | | - self.assertEqual(flat.startAddrCylSec, nested.start.addrCylSec) |
738 | | - self.assertEqual(flat.partType, nested.partType) |
739 | | - self.assertEqual(flat.endAddrHead, nested.end.addrHead) |
740 | | - self.assertEqual(flat.endAddrCylSec, nested.end.addrCylSec) |
741 | | - self.assertEqual(flat.startLBA, nested.startLBA) |
742 | | - self.assertEqual(flat.endLBA, nested.endLBA) |
743 | | - |
744 | | - |
745 | | -if __name__ == '__main__': |
746 | | - main() |
| 647 | +def test_len(): |
| 648 | + mbr = MBR() |
| 649 | + assert len(mbr) == 512 |
| 650 | + assert mbr.size == 512 |
| 651 | + |
| 652 | + |
| 653 | +def test_sizeof(): |
| 654 | + assert sizeof("struct Partition") == sizeof("struct PartitionFlat") |
| 655 | + assert sizeof("struct Partition") == sizeof("struct PartitionNested") |
| 656 | + |
| 657 | + |
| 658 | +def test_unpack(): |
| 659 | + mbr = MBR() |
| 660 | + f = io.BytesIO(MBR_DATA) |
| 661 | + mbr.unpack(f) |
| 662 | + assert mbr.signature[0] == 0x55 |
| 663 | + assert mbr.signature[1] == 0xAA |
| 664 | + assert mbr.partitions[0].start.head == 0 |
| 665 | + assert mbr.partitions[0].end.head == 0xFE |
| 666 | + assert mbr.partitions[1].start_sect == 0x2117C7 |
| 667 | + |
| 668 | + |
| 669 | +def test_pack(): |
| 670 | + mbr = MBR(MBR_DATA) |
| 671 | + d = mbr.pack() |
| 672 | + assert MBR_DATA == d |
| 673 | + mbr.partitions[3].start.head = 123 |
| 674 | + d1 = mbr.pack() |
| 675 | + mbr1 = MBR(d1) |
| 676 | + assert mbr1.partitions[3].start.head == 123 |
| 677 | + |
| 678 | + |
| 679 | +def test_init(): |
| 680 | + p = Position(head=254, sector=63, cyl=134) |
| 681 | + mbr = MBR(MBR_DATA) |
| 682 | + assert mbr.partitions[0].end.head == p.head |
| 683 | + assert mbr.partitions[0].end.sector == p.sector |
| 684 | + assert mbr.partitions[0].end.cyl == p.cyl |
| 685 | + |
| 686 | + |
| 687 | +def test_none(): |
| 688 | + mbr = MBR() |
| 689 | + assert mbr.partitions[0].end.sector == 0 |
| 690 | + mbr.unpack(None) |
| 691 | + assert mbr.partitions[0].end.head == 0 |
| 692 | + |
| 693 | + |
| 694 | +def test_clear(): |
| 695 | + mbr = MBR() |
| 696 | + mbr.unpack(MBR_DATA) |
| 697 | + assert mbr.partitions[0].end.head == 0xFE |
| 698 | + mbr.clear() |
| 699 | + assert mbr.partitions[0].end.head == 0x00 |
| 700 | + |
| 701 | + |
| 702 | +def test_inline(): |
| 703 | + StructT1 = cstruct.parse( |
| 704 | + 'struct StructT1 { unsigned char head; unsigned char sector; unsigned char cyl; }', |
| 705 | + __byte_order__=cstruct.LITTLE_ENDIAN, |
| 706 | + ) |
| 707 | + s = StructT1(head=254, sector=63, cyl=134) |
| 708 | + p = Position(head=254, sector=63, cyl=134) |
| 709 | + assert s.pack() == p.pack() |
| 710 | + |
| 711 | + |
| 712 | +def test_dummy(): |
| 713 | + dummy = Dummy() |
| 714 | + dummy.c = b'A' |
| 715 | + dummy.vc = b'ABCDEFGHIJ' |
| 716 | + dummy.i = 123456 |
| 717 | + for i in range(0, 10): |
| 718 | + dummy.vi[i] = i * 10 |
| 719 | + dummy.f = 123.456 |
| 720 | + for i in range(0, 10): |
| 721 | + dummy.vf[i] = 10.0 / (i + 1) |
| 722 | + dummy.vl = list(range(0, 10)) |
| 723 | + data = dummy.pack() |
| 724 | + dummy1 = Dummy(data) |
| 725 | + for i in range(0, 10): |
| 726 | + dummy1.vl[i] = dummy.vl[i] |
| 727 | + assert dummy.pack() == dummy1.pack() |
| 728 | + dummy2 = Dummy(data) |
| 729 | + dummy2.vf[2] = 79 |
| 730 | + assert dummy.pack() != dummy2.pack() |
| 731 | + dummy3 = Dummy(data) |
| 732 | + dummy3.vl = list(range(1, 11)) |
| 733 | + assert dummy.pack() != dummy3.pack() |
| 734 | + |
| 735 | + |
| 736 | +def test_nested(): |
| 737 | + data = os.urandom(sizeof("struct PartitionFlat")) |
| 738 | + flat = PartitionFlat(data) |
| 739 | + flat.unpack(data) |
| 740 | + nested = PartitionNested(data) |
| 741 | + nested.unpack(data) |
| 742 | + assert flat.status == nested.status |
| 743 | + assert flat.startAddrHead == nested.start.addrHead |
| 744 | + assert flat.startAddrCylSec == nested.start.addrCylSec |
| 745 | + assert flat.partType == nested.partType |
| 746 | + assert flat.endAddrHead == nested.end.addrHead |
| 747 | + assert flat.endAddrCylSec == nested.end.addrCylSec |
| 748 | + assert flat.startLBA == nested.startLBA |
| 749 | + assert flat.endLBA == nested.endLBA |
0 commit comments