[pacman-dev] [PATCH] Add test directory for testing private libalpm functions.

Nathan Jones nathanj at insightbb.com
Fri Dec 7 16:56:25 EST 2007


I found this useful when testing the shortest_delta_path code. Recently,
I ran valgrind on the test which helped to discover the memory leak.

Not sure if you guys will want to apply this, but here it is.

Signed-off-by: Nathan Jones <nathanj at insightbb.com>
---
 Makefile.am                  |    2 +-
 configure.ac                 |    1 +
 lib/libalpm/test/.gitignore  |    3 +
 lib/libalpm/test/Makefile.am |   47 +++++++++++++++++
 lib/libalpm/test/deltatest.c |  112 ++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 164 insertions(+), 1 deletions(-)
 create mode 100644 lib/libalpm/test/.gitignore
 create mode 100644 lib/libalpm/test/Makefile.am
 create mode 100644 lib/libalpm/test/deltatest.c

diff --git a/Makefile.am b/Makefile.am
index e07321b..c68786a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = lib/libalpm src/util src/pacman scripts doc etc po pactest contrib
+SUBDIRS = lib/libalpm lib/libalpm/test src/util src/pacman scripts doc etc po pactest contrib
 
 # Some files automatically included, so they aren't specified below:
 #   AUTHORS, COPYING, NEWS, README
diff --git a/configure.ac b/configure.ac
index 9a5f3b3..f9f27a7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -309,6 +309,7 @@ AC_DEFINE_UNQUOTED([DBEXT], "$DBEXT", [The file extension used by pacman databas
 AC_CONFIG_FILES([
 lib/libalpm/Makefile
 lib/libalpm/po/Makefile.in
+lib/libalpm/test/Makefile
 src/pacman/Makefile
 src/util/Makefile
 scripts/Makefile
diff --git a/lib/libalpm/test/.gitignore b/lib/libalpm/test/.gitignore
new file mode 100644
index 0000000..64ebea7
--- /dev/null
+++ b/lib/libalpm/test/.gitignore
@@ -0,0 +1,3 @@
+deltatest
+.deps
+.libs
diff --git a/lib/libalpm/test/Makefile.am b/lib/libalpm/test/Makefile.am
new file mode 100644
index 0000000..b033018
--- /dev/null
+++ b/lib/libalpm/test/Makefile.am
@@ -0,0 +1,47 @@
+AUTOMAKE_OPTIONS = gnu
+
+bin_PROGRAMS = deltatest
+
+DEFS = -DLOCALEDIR=\"@localedir@\" @DEFS@
+
+AM_CFLAGS = -pedantic -D_GNU_SOURCE -I.. -I../../..
+
+if ENABLE_VISIBILITY_CC
+AM_CFLAGS += -fvisibility=internal
+endif
+if ENABLE_GNU89_INLINE_CC
+AM_CFLAGS += -fgnu89-inline
+endif
+
+deltatest_SOURCES = deltatest.c
+deltatest_LDADD = ../.libs/libalpm.a
+
+libalpm_sources = \
+	../add.h ../add.c \
+	../alpm.h ../alpm.c \
+	../alpm_list.h ../alpm_list.c \
+	../backup.h ../backup.c \
+	../be_files.c ../\
+	../cache.h ../cache.c \
+	../conflict.h ../conflict.c \
+	../db.h ../db.c \
+	../delta.h ../delta.c \
+	../deps.h ../deps.c \
+	../error.h ../error.c \
+	../group.h ../group.c \
+	../handle.h ../handle.c \
+	../log.h ../log.c \
+	../md5.h ../md5.c \
+	../package.h ../package.c \
+	../remove.h ../remove.c \
+	../server.h ../server.c \
+	../sync.h ../sync.c \
+	../trans.h ../trans.c \
+	../util.h ../util.c
+
+all: ../.libs/libalpm.a
+
+../.libs/libalpm.a: $(libalpm_sources)
+	cd .. && make
+
+# vim:set ts=2 sw=2 noet:
diff --git a/lib/libalpm/test/deltatest.c b/lib/libalpm/test/deltatest.c
new file mode 100644
index 0000000..e2c3c2e
--- /dev/null
+++ b/lib/libalpm/test/deltatest.c
@@ -0,0 +1,112 @@
+/*
+ *  deltatest.c
+ * 
+ *  Copyright (c) 2007 by Judd Vinet <jvinet at zeroflux.org>
+ * 
+ *  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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 
+ *  USA.
+ */
+#include "string.h"
+#include "assert.h"
+
+#include "alpm.h"
+#include "alpm_list.h"
+#include "delta.h"
+
+int main()
+{
+	alpm_list_t *deltas = NULL, *path = NULL;
+	pmdelta_t d1, d2, d3, d4, d5;
+
+	strcpy(d1.from, "1.0-1");
+	strcpy(d1.to, "1.1-1");
+	d1.size = 10000;
+
+	strcpy(d2.from, "1.1-1");
+	strcpy(d2.to, "1.2-1");
+	d2.size = 12000;
+
+	strcpy(d3.from, "1.2-1");
+	strcpy(d3.to, "1.2-2");
+	d3.size = 8000;
+
+	strcpy(d4.from, "1.2-2");
+	strcpy(d4.to, "1.3-1");
+	d4.size = 15000;
+
+	strcpy(d5.from, "1.0-1");
+	strcpy(d5.to, "1.3-1");
+	d5.size = 20000;
+
+	deltas = alpm_list_add(deltas, &d1);
+	deltas = alpm_list_add(deltas, &d2);
+	deltas = alpm_list_add(deltas, &d3);
+	deltas = alpm_list_add(deltas, &d4);
+	deltas = alpm_list_add(deltas, &d5);
+
+	/* test standard path */
+	path = _alpm_shortest_delta_path(deltas, "1.0-1", "1.1-1");
+	assert(alpm_list_count(path) == 1);
+	assert(_alpm_delta_path_size(path) == 10000);
+	alpm_list_free(path);
+
+	path = _alpm_shortest_delta_path(deltas, "1.0-1", "1.2-1");
+	assert(alpm_list_count(path) == 2);
+	assert(_alpm_delta_path_size(path) == 22000);
+	alpm_list_free(path);
+
+	path = _alpm_shortest_delta_path(deltas, "1.0-1", "1.2-2");
+	assert(alpm_list_count(path) == 3);
+	assert(_alpm_delta_path_size(path) == 30000);
+	alpm_list_free(path);
+
+	path = _alpm_shortest_delta_path(deltas, "1.0-1", "1.3-1");
+	assert(alpm_list_count(path) == 1);
+	assert(_alpm_delta_path_size(path) == 20000);
+	alpm_list_free(path);
+
+	path = _alpm_shortest_delta_path(deltas, "1.2-2", "1.3-1");
+	assert(alpm_list_count(path) == 1);
+	assert(_alpm_delta_path_size(path) == 15000);
+	alpm_list_free(path);
+
+	path = _alpm_shortest_delta_path(deltas, "1.2-1", "1.3-1");
+	assert(alpm_list_count(path) == 2);
+	assert(_alpm_delta_path_size(path) == 23000);
+	alpm_list_free(path);
+
+	/* test no path */
+	path = _alpm_shortest_delta_path(deltas, "0.9-1", "1.3-1");
+	assert(alpm_list_count(path) == 0);
+	alpm_list_free(path);
+
+	path = _alpm_shortest_delta_path(deltas, "1.0-1", "1.4-1");
+	assert(alpm_list_count(path) == 0);
+	alpm_list_free(path);
+
+	path = _alpm_shortest_delta_path(deltas, "0.9-1", "1.4-1");
+	assert(alpm_list_count(path) == 0);
+	alpm_list_free(path);
+
+	/* test reverse direction */
+	path = _alpm_shortest_delta_path(deltas, "1.1-1", "1.0-1");
+	assert(alpm_list_count(path) == 0);
+	alpm_list_free(path);
+
+	alpm_list_free(deltas);
+
+	return 0;
+}
+
-- 
1.5.3.7




More information about the pacman-dev mailing list