/ tests / lib / shlibs.c
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  }