s4-torture: Add LZX compressed cabinet test
authorGünther Deschner <gd@samba.org>
Fri, 23 Sep 2016 15:19:59 +0000 (17:19 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Thu, 24 Nov 2016 23:17:02 +0000 (00:17 +0100)
Guenther

Signed-off-by: Guenther Deschner <gd@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Fri Nov 25 00:17:02 CET 2016 on sn-devel-144

source4/torture/ndr/cabinet.c

index e4829f7340ec9398f2373e4fd4fe3d10e3c1feea..25fe373c842e667c7910c9c560dcc4516805d3c8 100644 (file)
@@ -4240,12 +4240,82 @@ static bool cab_file_MSZIP_check(struct torture_context *tctx,
        return true;
 }
 
+static const uint8_t cab_file_LZX_data[] = {
+       0x4d, 0x53, 0x43, 0x46, 0x00, 0x00, 0x00, 0x00,
+       0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x03, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00,
+       0x01, 0x00, 0x03, 0x12, 0x00, 0x80, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x49,
+       0x09, 0x21, 0x20, 0x00, 0x62, 0x6c, 0x6f, 0x62,
+       0x2d, 0x41, 0x2d, 0x33, 0x32, 0x37, 0x36, 0x38,
+       0x00, 0xa2, 0x60, 0x8d, 0x04, 0x58, 0x00, 0x00,
+       0x80, 0x5b, 0x80, 0x80, 0x8d, 0x08, 0x10, 0x02,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+       0x00, 0x07, 0x31, 0xd9, 0xfc, 0xdf, 0xf7, 0x20,
+       0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33,
+       0x00, 0xe5, 0x10, 0xdf, 0x67, 0xf7, 0x7d, 0x88,
+       0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
+       0x00, 0x1f, 0xc4, 0xdd, 0x7f, 0x7c, 0x9f, 0x3f,
+       0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+       0xff
+};
+
+static bool cab_file_LZX_check(struct torture_context *tctx,
+                              struct cab_file *r)
+{
+       DATA_BLOB blob;
+
+       torture_assert_str_equal(tctx, r->cfheader.signature, "MSCF", "signature");
+       torture_assert_int_equal(tctx, r->cfheader.reserved1, 0, "reserved1");
+       torture_assert_int_equal(tctx, r->cfheader.cbCabinet, 0xA9, "cbCabinet");
+       torture_assert_int_equal(tctx, r->cfheader.reserved2, 0, "reserved2");
+       torture_assert_int_equal(tctx, r->cfheader.coffFiles, 44, "coffFiles");
+       torture_assert_int_equal(tctx, r->cfheader.reserved3, 0, "reserved3");
+       torture_assert_int_equal(tctx, r->cfheader.versionMinor, 3, "versionMinor");
+       torture_assert_int_equal(tctx, r->cfheader.versionMajor, 1, "versionMajor");
+       torture_assert_int_equal(tctx, r->cfheader.cFolders, 1, "cFolders");
+       torture_assert_int_equal(tctx, r->cfheader.cFiles, 1, "cFiles");
+       torture_assert_int_equal(tctx, r->cfheader.flags, 0, "flags");
+       torture_assert_int_equal(tctx, r->cfheader.setID, 0, "setID");
+       torture_assert_int_equal(tctx, r->cfheader.iCabinet, 0, "iCabinet");
+
+       torture_assert_int_equal(tctx, r->cffolders[0].coffCabStart, 0x49, "coffCabStart");
+       torture_assert_int_equal(tctx, r->cffolders[0].cCFData, 1, "cCFData");
+       torture_assert_int_equal(tctx, r->cffolders[0].typeCompress, 4611, "typeCompress");
+
+       torture_assert_int_equal(tctx, r->cffiles[0].cbFile, 0x8000, "cbFile");
+       torture_assert_int_equal(tctx, r->cffiles[0].uoffFolderStart, 0, "uoffFolderStart");
+       torture_assert_int_equal(tctx, r->cffiles[0].iFolder, 0, "iFolder");
+       torture_assert_int_equal(tctx, r->cffiles[0].date.date, 0x4936, "date");
+       torture_assert_int_equal(tctx, r->cffiles[0].time.time, 0x2109, "time");
+       torture_assert_int_equal(tctx, r->cffiles[0].attribs, 0x0020, "attribs");
+       torture_assert_str_equal(tctx, r->cffiles[0].szName, "blob-A-32768", "szName");
+
+       torture_assert_int_equal(tctx, r->cfdata[0].csum, 0x48D60A2, "csum");
+       torture_assert_int_equal(tctx, r->cfdata[0].cbData, 0x58, "cbData");
+       torture_assert_int_equal(tctx, r->cfdata[0].cbUncomp, 0x8000, "cbUncomp");
+
+       blob = data_blob(NULL, r->cfdata[0].cbUncomp);
+       memset(blob.data, 'A', blob.length);
+#if 0
+       /* once we have LZX compression support we can enable this test */
+       torture_assert_data_blob_equal(tctx, r->cfdata[0].mszip_data.ab, blob, "ab");
+#endif
+       return true;
+}
+
 struct torture_suite *ndr_cabinet_suite(TALLOC_CTX *ctx)
 {
        struct torture_suite *suite = torture_suite_create(ctx, "cabinet");
 
        torture_suite_add_ndr_pull_test(suite, cab_file, cab_file_plain_data, cab_file_plain_check);
        torture_suite_add_ndr_pull_test(suite, cab_file, cab_file_MSZIP_data, cab_file_MSZIP_check);
+       torture_suite_add_ndr_pull_test(suite, cab_file, cab_file_LZX_data, cab_file_LZX_check);
 
        torture_suite_add_ndr_pull_validate_test(suite, cab_file, cab_file_plain_data, cab_file_plain_check);