Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/tests/lib/shlibs.c
2065 views
1
/*-
2
* Copyright(c) 2024 Baptiste Daroussin <[email protected]>
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
}
86
87