packing.c
1 /* 2 * Copyright (c) 2021 Baptiste Daroussin <bapt@FreeBSD.org> 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer 9 * in this position and unchanged. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17 * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #include <atf-c.h> 27 #include <archive.h> 28 #include <pkg.h> 29 #include <private/pkg.h> 30 #include <private/packing.h> 31 #include <pkg_config.h> 32 33 ATF_TC_WITHOUT_HEAD(packing_format_from_string); 34 ATF_TC_WITHOUT_HEAD(packing_format_to_string); 35 ATF_TC_WITHOUT_HEAD(packing_format_is_valid); 36 ATF_TC_WITHOUT_HEAD(packing_set_format); 37 38 ATF_TC_BODY(packing_format_from_string, tc) 39 { 40 ATF_REQUIRE_EQ(packing_format_from_string(NULL), DEFAULT_COMPRESSION); 41 ATF_REQUIRE_EQ(packing_format_from_string("tzst"), TZS); 42 ATF_REQUIRE_EQ(packing_format_from_string("txz"), TXZ); 43 ATF_REQUIRE_EQ(packing_format_from_string("tbz"), TBZ); 44 ATF_REQUIRE_EQ(packing_format_from_string("tgz"), TGZ); 45 ATF_REQUIRE_EQ(packing_format_from_string("tar"), TAR); 46 ATF_REQUIRE_EQ(packing_format_from_string("plop"), TXZ); 47 } 48 49 ATF_TC_BODY(packing_format_to_string, tc) 50 { 51 ATF_REQUIRE_EQ(packing_format_to_string(27), NULL); 52 ATF_REQUIRE_STREQ(packing_format_to_string(TZS), "tzst"); 53 ATF_REQUIRE_STREQ(packing_format_to_string(TXZ), "txz"); 54 ATF_REQUIRE_STREQ(packing_format_to_string(TBZ), "tbz"); 55 ATF_REQUIRE_STREQ(packing_format_to_string(TGZ), "tgz"); 56 ATF_REQUIRE_STREQ(packing_format_to_string(TAR), "tar"); 57 } 58 59 ATF_TC_BODY(packing_format_is_valid, tc) 60 { 61 ATF_REQUIRE_EQ(packing_is_valid_format("pkg"), true); 62 ATF_REQUIRE_EQ(packing_is_valid_format("tzst"), true); 63 ATF_REQUIRE_EQ(packing_is_valid_format("txz"), true); 64 ATF_REQUIRE_EQ(packing_is_valid_format("tbz"), true); 65 ATF_REQUIRE_EQ(packing_is_valid_format("tgz"), true); 66 ATF_REQUIRE_EQ(packing_is_valid_format("tar"), true); 67 ATF_REQUIRE_EQ(packing_is_valid_format("deb"), false); 68 ATF_REQUIRE_EQ(packing_is_valid_format(NULL), false); 69 } 70 71 ATF_TC_BODY(packing_set_format, tc) 72 { 73 struct archive *a = archive_write_new(); 74 ATF_CHECK(a != NULL); 75 76 #if defined(HAVE_ARCHIVE_WRITE_ADD_FILTER_ZSTD) && __FreeBSD_version >= 1300000 77 ATF_REQUIRE_STREQ(packing_set_format(a, TZS, -1, -1), "tzst"); 78 #endif 79 ATF_REQUIRE_STREQ(packing_set_format(a, TXZ, -1, -1), "txz"); 80 ATF_REQUIRE_STREQ(packing_set_format(a, TBZ, -1, -1), "tbz"); 81 ATF_REQUIRE_STREQ(packing_set_format(a, TGZ, -1, -1), "tgz"); 82 ATF_REQUIRE_STREQ(packing_set_format(a, TAR, -1, -1), "tar"); 83 ATF_REQUIRE_EQ(packing_set_format(a, 28, -1, -1), NULL); 84 85 /* compression min */ 86 #if defined(HAVE_ARCHIVE_WRITE_ADD_FILTER_ZSTD) && __FreeBSD_version >= 1300000 87 ATF_REQUIRE_STREQ(packing_set_format(a, TZS, INT_MIN, -1), "tzst"); 88 #endif 89 ATF_REQUIRE_STREQ(packing_set_format(a, TXZ, INT_MIN, -1), "txz"); 90 ATF_REQUIRE_STREQ(packing_set_format(a, TBZ, INT_MIN, -1), "tbz"); 91 ATF_REQUIRE_STREQ(packing_set_format(a, TGZ, INT_MIN, -1), "tgz"); 92 ATF_REQUIRE_STREQ(packing_set_format(a, TAR, INT_MIN, -1), "tar"); 93 ATF_REQUIRE_EQ(packing_set_format(a, 28, INT_MIN, -1), NULL); 94 95 /* compression max */ 96 #if defined(HAVE_ARCHIVE_WRITE_ADD_FILTER_ZSTD) && __FreeBSD_version >= 1300000 97 ATF_REQUIRE_STREQ(packing_set_format(a, TZS, INT_MAX, -1), "tzst"); 98 #endif 99 ATF_REQUIRE_STREQ(packing_set_format(a, TXZ, INT_MAX, -1), "txz"); 100 ATF_REQUIRE_STREQ(packing_set_format(a, TBZ, INT_MAX, -1), "tbz"); 101 ATF_REQUIRE_STREQ(packing_set_format(a, TGZ, INT_MAX, -1), "tgz"); 102 ATF_REQUIRE_STREQ(packing_set_format(a, TAR, INT_MAX, -1), "tar"); 103 ATF_REQUIRE_EQ(packing_set_format(a, 28, INT_MAX, -1), NULL); 104 archive_write_free(a); 105 } 106 107 ATF_TP_ADD_TCS(tp) 108 { 109 ATF_TP_ADD_TC(tp, packing_format_from_string); 110 ATF_TP_ADD_TC(tp, packing_format_to_string); 111 ATF_TP_ADD_TC(tp, packing_format_is_valid); 112 ATF_TP_ADD_TC(tp, packing_set_format); 113 114 return (atf_no_error()); 115 }