Branch data Line data Source code
1 : : /*-
2 : : * Copyright (c) 2013 Baptiste Daroussin <bapt@FreeBSD.org>
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(valid_installed);
46 : :
47 : 52 : ATF_TC_HEAD(valid_installed, tc)
48 : : {
49 : 52 : atf_tc_set_md_var(tc, "descr",
50 : : "pkg_valid() tests installed packages");
51 : 52 : }
52 : :
53 : : int
54 : 312 : event_callback(void *data __unused, struct pkg_event *ev)
55 : : {
56 [ + - ]: 312 : switch (ev->type) {
57 : : case PKG_EVENT_ERROR:
58 : 312 : xstring_reset(msg);
59 : 312 : fprintf(msg->fp, "%s", ev->e_pkg_error.msg);
60 : 312 : break;
61 : : default:
62 : : /* IGNORE */
63 : 0 : break;
64 : : }
65 : :
66 : 312 : return (0);
67 : : }
68 : :
69 : : void
70 : 39 : check_valid(struct pkg *p)
71 : : {
72 : 39 : msg = xstring_new();
73 : :
74 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
75 : 39 : fflush(msg->fp);
76 [ + - ]: 39 : ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property origin");
77 : :
78 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_ORIGIN, "test/bla"));
79 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
80 : 39 : fflush(msg->fp);
81 [ + - ]: 39 : ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property name");
82 : :
83 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_NAME, "test"));
84 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
85 : 39 : fflush(msg->fp);
86 [ + - ]: 39 : ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property comment");
87 : :
88 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_COMMENT, "test comment"));
89 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
90 : 39 : fflush(msg->fp);
91 [ + - ]: 39 : ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property version");
92 : :
93 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_VERSION, "1.1.0"));
94 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
95 : 39 : fflush(msg->fp);
96 [ + - ]: 39 : ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property desc");
97 : :
98 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_DESC, "test description"));
99 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
100 : 39 : fflush(msg->fp);
101 [ + - ]: 39 : ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property maintainer");
102 : :
103 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_MAINTAINER, "tester"));
104 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
105 : 39 : fflush(msg->fp);
106 [ + - ]: 39 : ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property www");
107 : :
108 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_WWW, "test website"));
109 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_FATAL, pkg_is_valid(p));
110 : 39 : fflush(msg->fp);
111 [ + - ]: 39 : ATF_REQUIRE_STREQ(msg->buf, "Invalid package: object has missing property prefix");
112 : :
113 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_OK, pkg_set(p, PKG_PREFIX, "/usr/local"));
114 [ + - ]: 39 : ATF_REQUIRE_EQ(EPKG_OK, pkg_is_valid(p));
115 : :
116 : 39 : xstring_free(msg);
117 : 39 : }
118 : :
119 : 13 : ATF_TC_BODY(valid_installed, tc)
120 : : {
121 : 13 : struct pkg *p = NULL;
122 : :
123 : 13 : pkg_event_register(event_callback, NULL);
124 : :
125 [ + - ]: 13 : ATF_REQUIRE_EQ(EPKG_OK, pkg_new(&p, PKG_INSTALLED));
126 [ - + ]: 13 : ATF_REQUIRE(p != NULL);
127 : :
128 : 13 : check_valid(p);
129 : 13 : }
130 : :
131 : : ATF_TC(valid_file);
132 : :
133 : 52 : ATF_TC_HEAD(valid_file, tc)
134 : : {
135 : 52 : atf_tc_set_md_var(tc, "descr",
136 : : "pkg_valid() tests file packages");
137 : 52 : }
138 : :
139 : 13 : ATF_TC_BODY(valid_file, tc)
140 : : {
141 : 13 : struct pkg *p = NULL;
142 : :
143 : 13 : pkg_event_register(event_callback, NULL);
144 : :
145 [ + - ]: 13 : ATF_REQUIRE_EQ(EPKG_OK, pkg_new(&p, PKG_FILE));
146 [ - + ]: 13 : ATF_REQUIRE(p != NULL);
147 : :
148 : 13 : check_valid(p);
149 : 13 : }
150 : :
151 : : ATF_TC(valid_remote);
152 : :
153 : 52 : ATF_TC_HEAD(valid_remote, tc)
154 : : {
155 : 52 : atf_tc_set_md_var(tc, "descr",
156 : : "pkg_valid() tests remote packages");
157 : 52 : }
158 : :
159 : 13 : ATF_TC_BODY(valid_remote, tc)
160 : : {
161 : 13 : struct pkg *p = NULL;
162 : :
163 : 13 : pkg_event_register(event_callback, NULL);
164 : :
165 [ + - ]: 13 : ATF_REQUIRE_EQ(EPKG_OK, pkg_new(&p, PKG_REMOTE));
166 [ - + ]: 13 : ATF_REQUIRE(p != NULL);
167 : :
168 : 13 : check_valid(p);
169 : 13 : }
170 : :
171 : 104 : ATF_TP_ADD_TCS(tp)
172 : : {
173 [ + - - + : 52 : ATF_TP_ADD_TC(tp, valid_installed);
- + ]
174 [ + - - + : 52 : ATF_TP_ADD_TC(tp, valid_file);
- + ]
175 [ + - - + : 52 : ATF_TP_ADD_TC(tp, valid_remote);
- + ]
176 : :
177 : 52 : return (atf_no_error());
178 : 52 : }
|