shlibs.c
1 /*- 2 * Copyright(c) 2024 Baptiste Daroussin <bapt@FreeBSD.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7 #include <atf-c.h> 8 #include <private/pkg.h> 9 10 ATF_TC_WITHOUT_HEAD(cleanup_shlibs_required); 11 ATF_TC_WITHOUT_HEAD(cleanup_shlibs_required_multiple_provided); 12 ATF_TC_WITHOUT_HEAD(cleanup_shlibs_required_consecutive_provided); 13 14 ATF_TC_BODY(cleanup_shlibs_required, tc) 15 { 16 struct pkg *p; 17 charv_t internal_provided = vec_init(); 18 19 ATF_REQUIRE_EQ(pkg_new(&p, PKG_FILE), EPKG_OK); 20 ATF_REQUIRE(p != NULL); 21 vec_push(&p->shlibs_required, xstrdup("lib1.so:32")); 22 vec_push(&p->shlibs_required, xstrdup("lib1.so")); 23 vec_push(&p->shlibs_required, xstrdup("libA.so")); 24 vec_push(&p->shlibs_required, xstrdup("libA.so:32")); 25 pkg_cleanup_shlibs_required(p, &internal_provided); 26 ATF_REQUIRE_EQ(vec_len(&p->shlibs_required), 4); 27 vec_push(&p->shlibs_provided, "lib1.so"); 28 pkg_cleanup_shlibs_required(p, &internal_provided); 29 ATF_REQUIRE_EQ(vec_len(&p->shlibs_required), 3); 30 vec_push(&internal_provided, "lib1.so:32"); 31 pkg_cleanup_shlibs_required(p, &internal_provided); 32 ATF_REQUIRE_EQ_MSG(vec_len(&p->shlibs_required), 2, "expecint 2 got %zu", vec_len(&p->shlibs_required)); 33 } 34 35 ATF_TC_BODY(cleanup_shlibs_required_multiple_provided, tc) 36 { 37 struct pkg *p; 38 charv_t internal_provided = vec_init(); 39 40 ATF_REQUIRE_EQ(pkg_new(&p, PKG_FILE), EPKG_OK); 41 ATF_REQUIRE(p != NULL); 42 vec_push(&p->shlibs_required, xstrdup("lib1.so.1")); 43 vec_push(&p->shlibs_required, xstrdup("libA.so.2")); 44 vec_push(&p->shlibs_required, xstrdup("libB.so.2")); 45 vec_push(&p->shlibs_required, xstrdup("libC.so.2")); 46 vec_push(&p->shlibs_provided, xstrdup("libA.so.2")); 47 vec_push(&p->shlibs_provided, xstrdup("libC.so.3")); 48 vec_push(&p->shlibs_provided, xstrdup("libZ.so.3")); 49 ATF_REQUIRE_EQ(vec_len(&p->shlibs_required), 4); 50 pkg_cleanup_shlibs_required(p, &internal_provided); 51 ATF_REQUIRE_EQ(vec_len(&p->shlibs_required), 3); 52 ATF_REQUIRE_STREQ(p->shlibs_required.d[0], "lib1.so.1"); 53 ATF_REQUIRE_STREQ(p->shlibs_required.d[1], "libB.so.2"); 54 ATF_REQUIRE_STREQ(p->shlibs_required.d[2], "libC.so.2"); 55 } 56 57 ATF_TC_BODY(cleanup_shlibs_required_consecutive_provided, tc) 58 { 59 struct pkg *p; 60 charv_t internal_provided = vec_init(); 61 62 ATF_REQUIRE_EQ(pkg_new(&p, PKG_FILE), EPKG_OK); 63 ATF_REQUIRE(p != NULL); 64 vec_push(&p->shlibs_required, xstrdup("lib1.so.1")); 65 vec_push(&p->shlibs_required, xstrdup("libA.so.2")); 66 vec_push(&p->shlibs_required, xstrdup("libB.so.2")); 67 vec_push(&p->shlibs_required, xstrdup("libC.so.2")); 68 vec_push(&p->shlibs_provided, xstrdup("libA.so.2")); 69 vec_push(&p->shlibs_provided, xstrdup("libB.so.2")); 70 vec_push(&p->shlibs_provided, xstrdup("libZ.so.3")); 71 ATF_REQUIRE_EQ(vec_len(&p->shlibs_required), 4); 72 pkg_cleanup_shlibs_required(p, &internal_provided); 73 ATF_REQUIRE_EQ(vec_len(&p->shlibs_required), 2); 74 ATF_REQUIRE_STREQ(p->shlibs_required.d[0], "lib1.so.1"); 75 ATF_REQUIRE_STREQ(p->shlibs_required.d[2], "libC.so.2"); 76 } 77 78 ATF_TP_ADD_TCS(tp) 79 { 80 ATF_TP_ADD_TC(tp, cleanup_shlibs_required); 81 ATF_TP_ADD_TC(tp, cleanup_shlibs_required_multiple_provided); 82 ATF_TP_ADD_TC(tp, cleanup_shlibs_required_consecutive_provided); 83 84 return (atf_no_error()); 85 }