From d4003d0d3490e13774fa88677bde0f19a7beabb9 Mon Sep 17 00:00:00 2001 From: Jim Paris Date: Mon, 17 Aug 2020 23:26:34 -0400 Subject: [PATCH] tests: fill out coverage for new fsck features --- nilmdb/fsck/fsck.py | 16 ++++++++-------- tests/fsck-data/test2v/data.sql | Bin 0 -> 24576 bytes tests/fsck-data/test2v/data/a/b/0000/0000 | Bin 0 -> 2295 bytes tests/fsck-data/test2v/data/a/b/_format | 0 tests/fsck-data/test2v1/data.sql | Bin 0 -> 24576 bytes tests/fsck-data/test2v1/data/a/b/0000/0000 | Bin 0 -> 2295 bytes tests/fsck-data/test2v2/data.sql | Bin 0 -> 24576 bytes tests/fsck-data/test2v2/data/a/b/_format | 0 tests/test_fsck.py | 5 +++++ 9 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 tests/fsck-data/test2v/data.sql create mode 100644 tests/fsck-data/test2v/data/a/b/0000/0000 create mode 100644 tests/fsck-data/test2v/data/a/b/_format create mode 100644 tests/fsck-data/test2v1/data.sql create mode 100644 tests/fsck-data/test2v1/data/a/b/0000/0000 create mode 100644 tests/fsck-data/test2v2/data.sql create mode 100644 tests/fsck-data/test2v2/data/a/b/_format diff --git a/nilmdb/fsck/fsck.py b/nilmdb/fsck/fsck.py index 032c54e..b4bc0db 100644 --- a/nilmdb/fsck/fsck.py +++ b/nilmdb/fsck/fsck.py @@ -248,23 +248,22 @@ class Fsck(object): # Check that we can open bulkdata tab = nilmdb.server.bulkdata.Table(bulk) - except FsckFormatError: + except FsckFormatError as e: # If there are no files except _format, try deleting # the entire stream; this may remove metadata, but # it's probably unimportant. files = list(os.listdir(bulk)) if len(files) > 1: - raise - if len(files) == 1 and files[0] != b'_format': - raise + raise FsckFormatError(f"{path}: can't load _format, " + f"but data is also present") # Since the stream was empty, just remove it self.fix_remove_stream(sid, path, bulk, "empty, with corrupted format file") - - except FsckError: - raise - except Exception as e: + except FsckError as e: + raise e + except Exception as e: # pragma: no cover + # No coverage because this is an unknown/unexpected error raise FsckError("%s: can't open bulkdata: %s", path, str(e)) tab.close() @@ -278,6 +277,7 @@ class Fsck(object): fmt = pickle.load(f) except Exception as e: raise FsckFormatError(f"{path}: can't load _format file ({e})") + if fmt["version"] != 3: raise FsckFormatError("%s: bad or unsupported bulkdata version %d", path, fmt["version"]) diff --git a/tests/fsck-data/test2v/data.sql b/tests/fsck-data/test2v/data.sql new file mode 100644 index 0000000000000000000000000000000000000000..21c3f35df2b9ec4c90c4a4a076e920046432342e GIT binary patch literal 24576 zcmeI%&u-H&90zcx|1;>qWs0h5lBFHGN&Ta-%WhCugepqLN-J%r$Wy(oTAGyBW$YO3 z9e5d@fJfi~I5X`qaRQt;ZK;4toRHeDmBfzi{P}(COX4?2&7R=&%pdldpnK#INhHWq zN(mvEc$Zm}Qt}w?lcdQ)a&q#QJVUBaKIe^ZB%RNZ^)JS!{P+9^Sww;W1Rwwb2tWV= z5P$##An@M=f(PlWxw)wYJ;6?0-sggKnP8JV^Sou%+ZJutpEWHysoh?qaTxl}G;Y<&#K54HY(PmKGOMnUipfB*y_009U< z00Izz00bZafh82s)AAR99{vGP>;JdJxLv|95fTI-009U<00Izz00bZa0SG`~MFrNi Qlx~_A+;#mcf9Q690v7T6@Bjb+ literal 0 HcmV?d00001 diff --git a/tests/fsck-data/test2v/data/a/b/0000/0000 b/tests/fsck-data/test2v/data/a/b/0000/0000 new file mode 100644 index 0000000000000000000000000000000000000000..c0605f5fadd20232bdca3ce91ff753274991eff4 GIT binary patch literal 2295 zcmXBWd0Y<$7{~D^6iSY?T7(=Ciq&$q@;D<$h$cy{oH-hiFb{G>h~_>bM-nZOhPdPOP+!Zp0k+g75oo}R(t(C@ zAq!}v#`gd_>irUE%qu?vP2`$MB|}(Kt!V``qe1q7J;%5L%_X-x&_bNexTrofHNl*11|FR3-F`5m{vA~xl*VN z(2mm_fcEma1JFU;Jb{k%t1r-rH3;Y|l|lhG?GXX|M9X6Ucg~6fJj5&o=%W440Zh@^ zKv%x~1n4G~B|vxetpIw^7V|2Gu%7(D7U(4n905-abOU-*oEOlC3;X~tX+8<)s}sY3 zew4Tz=+AF90t2M&e!yEpQh|YV>>@CTKimNZOUHb`N5e~jA(UZcZ0H%v-)aNC($x<5 zS(mg0hEb*m;K$Vl0K>&A0PxqSU|V^bh6x}@mjOKb*fH5*6 z4;ZUE3xRR;>^%^~O^r@~kc)}`u(p3UT23)sS&8v8k{1a|Ym%|M*IjtBN=n>1iAg=7Nz_-HP$ zU)~o0@!FvbI6&c*O$}iQeA)syC>4!?L}h2-5G`TgFkkWplB8-N@VoYz1|(C|0^kVW zhyqfi_IBW?4o(D)(S~#&mGiQI<6?6UNK^lpzzN#<5je?DP0S2o>C(gsIHlw4fzuT4 z3S{uB?!Xyo?E{?Esbc`8Hu74^Nzp`@%996>N;N_n{tAHTWl2y+?HVxz#ZKh z1LV-7I3SlBr2v1*=yO1x?#Tx3QsEQe9y^o(_hoVg@IViln;XI&Qi(0_h@BmQ$1>9m zc%rFZz*G9<2R!4>lYr+kKMcs%Gs}SjGTH?E#ohM5lxBmdvAK@(k literal 0 HcmV?d00001 diff --git a/tests/fsck-data/test2v/data/a/b/_format b/tests/fsck-data/test2v/data/a/b/_format new file mode 100644 index 0000000..e69de29 diff --git a/tests/fsck-data/test2v1/data.sql b/tests/fsck-data/test2v1/data.sql new file mode 100644 index 0000000000000000000000000000000000000000..21c3f35df2b9ec4c90c4a4a076e920046432342e GIT binary patch literal 24576 zcmeI%&u-H&90zcx|1;>qWs0h5lBFHGN&Ta-%WhCugepqLN-J%r$Wy(oTAGyBW$YO3 z9e5d@fJfi~I5X`qaRQt;ZK;4toRHeDmBfzi{P}(COX4?2&7R=&%pdldpnK#INhHWq zN(mvEc$Zm}Qt}w?lcdQ)a&q#QJVUBaKIe^ZB%RNZ^)JS!{P+9^Sww;W1Rwwb2tWV= z5P$##An@M=f(PlWxw)wYJ;6?0-sggKnP8JV^Sou%+ZJutpEWHysoh?qaTxl}G;Y<&#K54HY(PmKGOMnUipfB*y_009U< z00Izz00bZafh82s)AAR99{vGP>;JdJxLv|95fTI-009U<00Izz00bZa0SG`~MFrNi Qlx~_A+;#mcf9Q690v7T6@Bjb+ literal 0 HcmV?d00001 diff --git a/tests/fsck-data/test2v1/data/a/b/0000/0000 b/tests/fsck-data/test2v1/data/a/b/0000/0000 new file mode 100644 index 0000000000000000000000000000000000000000..c0605f5fadd20232bdca3ce91ff753274991eff4 GIT binary patch literal 2295 zcmXBWd0Y<$7{~D^6iSY?T7(=Ciq&$q@;D<$h$cy{oH-hiFb{G>h~_>bM-nZOhPdPOP+!Zp0k+g75oo}R(t(C@ zAq!}v#`gd_>irUE%qu?vP2`$MB|}(Kt!V``qe1q7J;%5L%_X-x&_bNexTrofHNl*11|FR3-F`5m{vA~xl*VN z(2mm_fcEma1JFU;Jb{k%t1r-rH3;Y|l|lhG?GXX|M9X6Ucg~6fJj5&o=%W440Zh@^ zKv%x~1n4G~B|vxetpIw^7V|2Gu%7(D7U(4n905-abOU-*oEOlC3;X~tX+8<)s}sY3 zew4Tz=+AF90t2M&e!yEpQh|YV>>@CTKimNZOUHb`N5e~jA(UZcZ0H%v-)aNC($x<5 zS(mg0hEb*m;K$Vl0K>&A0PxqSU|V^bh6x}@mjOKb*fH5*6 z4;ZUE3xRR;>^%^~O^r@~kc)}`u(p3UT23)sS&8v8k{1a|Ym%|M*IjtBN=n>1iAg=7Nz_-HP$ zU)~o0@!FvbI6&c*O$}iQeA)syC>4!?L}h2-5G`TgFkkWplB8-N@VoYz1|(C|0^kVW zhyqfi_IBW?4o(D)(S~#&mGiQI<6?6UNK^lpzzN#<5je?DP0S2o>C(gsIHlw4fzuT4 z3S{uB?!Xyo?E{?Esbc`8Hu74^Nzp`@%996>N;N_n{tAHTWl2y+?HVxz#ZKh z1LV-7I3SlBr2v1*=yO1x?#Tx3QsEQe9y^o(_hoVg@IViln;XI&Qi(0_h@BmQ$1>9m zc%rFZz*G9<2R!4>lYr+kKMcs%Gs}SjGTH?E#ohM5lxBmdvAK@(k literal 0 HcmV?d00001 diff --git a/tests/fsck-data/test2v2/data.sql b/tests/fsck-data/test2v2/data.sql new file mode 100644 index 0000000000000000000000000000000000000000..21c3f35df2b9ec4c90c4a4a076e920046432342e GIT binary patch literal 24576 zcmeI%&u-H&90zcx|1;>qWs0h5lBFHGN&Ta-%WhCugepqLN-J%r$Wy(oTAGyBW$YO3 z9e5d@fJfi~I5X`qaRQt;ZK;4toRHeDmBfzi{P}(COX4?2&7R=&%pdldpnK#INhHWq zN(mvEc$Zm}Qt}w?lcdQ)a&q#QJVUBaKIe^ZB%RNZ^)JS!{P+9^Sww;W1Rwwb2tWV= z5P$##An@M=f(PlWxw)wYJ;6?0-sggKnP8JV^Sou%+ZJutpEWHysoh?qaTxl}G;Y<&#K54HY(PmKGOMnUipfB*y_009U< z00Izz00bZafh82s)AAR99{vGP>;JdJxLv|95fTI-009U<00Izz00bZa0SG`~MFrNi Qlx~_A+;#mcf9Q690v7T6@Bjb+ literal 0 HcmV?d00001 diff --git a/tests/fsck-data/test2v2/data/a/b/_format b/tests/fsck-data/test2v2/data/a/b/_format new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_fsck.py b/tests/test_fsck.py index 50d566f..83bc650 100644 --- a/tests/test_fsck.py +++ b/tests/test_fsck.py @@ -163,3 +163,8 @@ class TestFsck(object): raise Exception("hi") with assert_raises(Exception): foo() + + self.failmsg("test2v", "can't load _format, but data is also present") + self.failmsg("test2v1", "bad bulkdata table") + self.failmsg("test2v2", "empty, with corrupted format file", fix=False) + self.okmsg("test2v2", "empty, with corrupted format file")