Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/tests/lib/pkg_validation.c
2065 views
1
/*-
2
* Copyright (c) 2013 Baptiste Daroussin <[email protected]>
3
* All rights reserved.
4
*~
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer
10
* in this position and unchanged.
11
* 2. Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
*~
15
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
16
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18
* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
19
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
*/
26
27
#include <sys/types.h>
28
29
#include <string.h>
30
31
#include <atf-c.h>
32
#include <xstring.h>
33
#include <pkg.h>
34
35
#ifndef __unused
36
# ifdef __GNUC__
37
# define __unused __attribute__ ((__unused__))
38
# else
39
# define __unused
40
# endif
41
#endif
42
43
xstring *msg;
44
45
ATF_TC_WITHOUT_HEAD(valid_installed);
46
47
int
48
event_callback(void *data __unused, struct pkg_event *ev)
49
{
50
switch (ev->type) {
51
case PKG_EVENT_ERROR:
52
xstring_reset(msg);
53
fprintf(msg->fp, "%s", ev->e_pkg_error.msg);
54
break;
55
default:
56
/* IGNORE */
57
break;
58
}
59
60
return (0);
61
}
62
63
void
64
check_valid(struct pkg *p)
65
{
66
msg = xstring_new();
67
68
ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
69
fflush(msg->fp);
70
ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property origin");
71
72
ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_ATTR_ORIGIN, "test/bla"));
73
ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
74
fflush(msg->fp);
75
ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property name");
76
77
ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_ATTR_NAME, "test"));
78
ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
79
fflush(msg->fp);
80
ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property comment");
81
82
ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_ATTR_COMMENT, "test comment"));
83
ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
84
fflush(msg->fp);
85
ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property version");
86
87
ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_ATTR_VERSION, "1.1.0"));
88
ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
89
fflush(msg->fp);
90
ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property desc");
91
92
ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_ATTR_DESC, "test description"));
93
ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
94
fflush(msg->fp);
95
ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property maintainer");
96
97
ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_ATTR_MAINTAINER, "tester"));
98
ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
99
fflush(msg->fp);
100
ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property www");
101
102
ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_ATTR_WWW, "test website"));
103
ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
104
fflush(msg->fp);
105
ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property prefix");
106
107
ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_ATTR_PREFIX, "/usr/local"));
108
ATF_REQUIRE_EQ(EPKG_OK, pkg_is_valid(p));
109
110
xstring_free(msg);
111
}
112
113
ATF_TC_BODY(valid_installed, tc)
114
{
115
struct pkg *p = NULL;
116
117
pkg_event_register(event_callback, NULL);
118
119
ATF_REQUIRE_EQ(EPKG_OK, pkg_new(&p, PKG_INSTALLED));
120
ATF_REQUIRE(p != NULL);
121
122
check_valid(p);
123
}
124
125
ATF_TC(valid_file);
126
127
ATF_TC_HEAD(valid_file, tc)
128
{
129
atf_tc_set_md_var(tc, "descr",
130
"pkg_valid() tests file packages");
131
}
132
133
ATF_TC_BODY(valid_file, tc)
134
{
135
struct pkg *p = NULL;
136
137
pkg_event_register(event_callback, NULL);
138
139
ATF_REQUIRE_EQ(EPKG_OK, pkg_new(&p, PKG_FILE));
140
ATF_REQUIRE(p != NULL);
141
142
check_valid(p);
143
}
144
145
ATF_TC(valid_remote);
146
147
ATF_TC_HEAD(valid_remote, tc)
148
{
149
atf_tc_set_md_var(tc, "descr",
150
"pkg_valid() tests remote packages");
151
}
152
153
ATF_TC_BODY(valid_remote, tc)
154
{
155
struct pkg *p = NULL;
156
157
pkg_event_register(event_callback, NULL);
158
159
ATF_REQUIRE_EQ(EPKG_OK, pkg_new(&p, PKG_REMOTE));
160
ATF_REQUIRE(p != NULL);
161
162
check_valid(p);
163
}
164
165
ATF_TP_ADD_TCS(tp)
166
{
167
ATF_TP_ADD_TC(tp, valid_installed);
168
ATF_TP_ADD_TC(tp, valid_file);
169
ATF_TP_ADD_TC(tp, valid_remote);
170
171
return (atf_no_error());
172
}
173
174