socsvn commit: r257040 - soc2013/mattbw/backend/jobs
mattbw at FreeBSD.org
mattbw at FreeBSD.org
Fri Sep 6 21:29:36 UTC 2013
Author: mattbw
Date: Fri Sep 6 21:29:35 2013
New Revision: 257040
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257040
Log:
Add some tests for job/check.c.
Trying to get as close to full coverage of the backend's non-database
and non-backend code as possible in the time remaining.
Added:
soc2013/mattbw/backend/jobs/Atffile
soc2013/mattbw/backend/jobs/check_test.c
Modified:
soc2013/mattbw/backend/jobs/check.c
soc2013/mattbw/backend/jobs/check.h
Added: soc2013/mattbw/backend/jobs/Atffile
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2013/mattbw/backend/jobs/Atffile Fri Sep 6 21:29:35 2013 (r257040)
@@ -0,0 +1,5 @@
+Content-Type: application/X-atf-atffile; version="1"
+
+prop: test-suite = "main"
+
+tp: check_test
Modified: soc2013/mattbw/backend/jobs/check.c
==============================================================================
--- soc2013/mattbw/backend/jobs/check.c Fri Sep 6 20:51:15 2013 (r257039)
+++ soc2013/mattbw/backend/jobs/check.c Fri Sep 6 21:29:35 2013 (r257040)
@@ -34,20 +34,20 @@
#include "check.h" /* jobs_check_... */
static bool check_package(struct pkg *pkg, struct query_id *query_ids, guint count, bool reject_non_updates);
-static bool jobs_check_id_on_package(struct pkg *pkg, struct query_id *query_id, const char *namever);
static struct pkg *jobs_check_query_ids(struct pkg_jobs *jobs, struct query_id *query_ids, guint count, bool reject_non_updates);
-/* Checks a solved job against a string vector of PackageIDs to ensure any
+/*
+ * Checks a solved job against a string vector of PackageIDs to ensure any
* packages that match the PackageIDs match them fully.
- *
- * Returns NULL if the check succeeded, and a struct pkg if that package
- * failed the check.
+ *
+ * Returns NULL if the check succeeded, and a struct pkg if that package failed
+ * the check.
*/
-struct pkg *
+struct pkg *
jobs_check_package_ids(struct pkg_jobs *jobs, gchar **package_ids,
guint count, bool reject_non_updates)
{
- struct pkg *package;
+ struct pkg *package;
struct query_id *query_ids;
assert(jobs != NULL);
@@ -63,11 +63,17 @@
package = jobs_check_query_ids(jobs, query_ids, count,
reject_non_updates);
}
-
return package;
}
-static bool
+/*
+ * Checks a package and its pre-computed namever against a Query ID to ensure
+ * that if the ID refers to the same package name and version, the
+ * architecture and repository also match.
+ *
+ * Exposed publicly to allow for unit testing.
+ */
+bool
jobs_check_id_on_package(struct pkg *pkg, struct query_id *query_id,
const char *namever)
{
@@ -85,11 +91,9 @@
/* Does the rest of the PackageID match up? */
success = query_check_package(pkg, query_id);
}
-
return success;
}
-
static struct pkg *
jobs_check_query_ids(struct pkg_jobs *jobs, struct query_id *query_ids,
guint count, bool reject_non_updates)
@@ -111,9 +115,9 @@
count, reject_non_updates);
} else if (err == EPKG_END) {
/*
- * Only return a package if it failed to match.
- * If we've reached this far all of them have
- * matched, so don't return one!
+ * Only return a package if it failed to match. If
+ * we've reached this far all of them have matched,
+ * so don't return one!
*/
package = NULL;
break;
@@ -127,17 +131,17 @@
}
/*
- * Checks a single job target package against a set of candidate
- * query IDs to make sure that the originally requested packages in
- * the job have been resolved properly.
- */
+ * Checks a single job target package against a set of candidate query IDs to
+ * make sure that the originally requested packages in the job have been
+ * resolved properly.
+ */
static bool
check_package(struct pkg *package, struct query_id *query_ids,
guint count, bool reject_non_updates)
{
bool success;
guint i;
- char *namever;
+ char *namever;
assert(package != NULL);
@@ -147,12 +151,10 @@
if (namever == NULL) {
success = false;
}
-
for (i = 0; i < count; i++) {
if (!success) {
break;
}
-
assert(success);
success = jobs_check_id_on_package(package,
query_ids + i,
Modified: soc2013/mattbw/backend/jobs/check.h
==============================================================================
--- soc2013/mattbw/backend/jobs/check.h Fri Sep 6 20:51:15 2013 (r257039)
+++ soc2013/mattbw/backend/jobs/check.h Fri Sep 6 21:29:35 2013 (r257040)
@@ -25,6 +25,9 @@
#include <stdbool.h> /* bool */
#include "../pkg.h" /* pkg_... */
+#include "../query/id.h" /* struct query_id */
+
+bool jobs_check_id_on_package(struct pkg *pkg, struct query_id *query_id, const char *namever);
struct pkg *jobs_check_package_ids(struct pkg_jobs *jobs, gchar **package_ids, guint count, bool reject_non_updates);
#endif /* !_PKGNG_BACKEND_JOBS_CHECK_H_ */
Added: soc2013/mattbw/backend/jobs/check_test.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2013/mattbw/backend/jobs/check_test.c Fri Sep 6 21:29:35 2013 (r257040)
@@ -0,0 +1,131 @@
+/*-
+ * Copyright (C) 2013 Matt Windsor <mattbw at FreeBSD.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <atf-c.h>
+#include <stdlib.h> /* free */
+#include <string.h> /* strcmp */
+#include "pkg.h" /* pkg... */
+
+#include "check.h" /* job_check... */
+#include "../testutils.h" /* gen_pkg */
+
+/* ATF/kyua tests for 'check.c'. */
+
+ATF_TC(check_id_on_package_no_match);
+ATF_TC_HEAD(check_id_on_package_no_match, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Ensure package/ID check succeeds if package and ID don't match.");
+}
+ATF_TC_BODY(check_id_on_package_no_match, tc)
+{
+ struct pkg *package;
+ struct query_id id;
+
+ package = gen_pkg(PKG_REMOTE);
+ ATF_REQUIRE(package != NULL);
+
+ id.namever = strdup("nonsuch-1.2.3");
+ id.arch = strdup("freebsd:10:x86:32");
+ id.repo = strdup("packagesite");
+
+ ATF_CHECK(jobs_check_id_on_package(package, &id, "pkg-1.1.4"));
+
+ pkg_free(package);
+ free(id.namever);
+ free(id.arch);
+ free(id.repo);
+}
+
+ATF_TC(check_id_on_package_partial_match);
+ATF_TC_HEAD(check_id_on_package_partial_match, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Ensure package/ID check fails if only the namever matches.");
+}
+ATF_TC_BODY(check_id_on_package_partial_match, tc)
+{
+ struct pkg *package;
+ struct query_id id;
+
+ package = gen_pkg(PKG_REMOTE);
+ ATF_REQUIRE(package != NULL);
+
+ id.namever = strdup("pkg-1.1.4");
+ id.arch = strdup("freebsd:10:x86:32");
+ id.repo = strdup("nope");
+
+ ATF_CHECK(!jobs_check_id_on_package(package, &id, "pkg-1.1.4"));
+
+ free(id.arch);
+ free(id.repo);
+
+ id.arch = strdup("nope");
+ id.repo = strdup("packagesite");
+
+ ATF_CHECK(!jobs_check_id_on_package(package, &id, "pkg-1.1.4"));
+
+ pkg_free(package);
+ free(id.namever);
+ free(id.arch);
+ free(id.repo);
+}
+
+ATF_TC(check_id_on_package_full_match);
+ATF_TC_HEAD(check_id_on_package_full_match, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Ensure package/ID check succeeds if everything matches.");
+}
+ATF_TC_BODY(check_id_on_package_full_match, tc)
+{
+ struct pkg *package;
+ struct query_id id;
+
+ package = gen_pkg(PKG_REMOTE);
+ ATF_REQUIRE(package != NULL);
+
+ id.namever = strdup("pkg-1.1.4");
+ id.arch = strdup("freebsd:10:x86:32");
+ id.repo = strdup("packagesite");
+
+ ATF_CHECK(jobs_check_id_on_package(package, &id, "pkg-1.1.4"));
+
+ pkg_free(package);
+ free(id.namever);
+ free(id.arch);
+ free(id.repo);
+}
+
+/*
+ * TEST PACK
+ */
+
+ATF_TP_ADD_TCS(tp)
+{
+ ATF_TP_ADD_TC(tp, check_id_on_package_no_match);
+ ATF_TP_ADD_TC(tp, check_id_on_package_partial_match);
+ ATF_TP_ADD_TC(tp, check_id_on_package_full_match);
+
+ return atf_no_error();
+}
More information about the svn-soc-all
mailing list