Introduce QList unit-tests
This suite contains tests to assure that QList API works as expected. To execute it you should have check installed and build QEMU with check support enabled (--enable-check-utests) and then run: $ ./check-qlist Patchworks-ID: 35333 Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									a6fd08eb62
								
							
						
					
					
						commit
						3aa3dcfff6
					
				
							
								
								
									
										1
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Makefile
									
									
									
									
									
								
							| @ -211,6 +211,7 @@ qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx | ||||
| check-qint: check-qint.o qint.o qemu-malloc.o | ||||
| check-qstring: check-qstring.o qstring.o qemu-malloc.o | ||||
| check-qdict: check-qdict.o qdict.o qint.o qstring.o qemu-malloc.o | ||||
| check-qlist: check-qlist.o qlist.o qint.o qemu-malloc.o | ||||
| 
 | ||||
| clean: | ||||
| # avoid old build problems by removing potentially incorrect old files
 | ||||
|  | ||||
							
								
								
									
										153
									
								
								check-qlist.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								check-qlist.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,153 @@ | ||||
| /*
 | ||||
|  * QList unit-tests. | ||||
|  * | ||||
|  * Copyright (C) 2009 Red Hat Inc. | ||||
|  * | ||||
|  * Authors: | ||||
|  *  Luiz Capitulino <lcapitulino@redhat.com> | ||||
|  * | ||||
|  * This work is licensed under the terms of the GNU GPL, version 2. See | ||||
|  * the COPYING file in the top-level directory. | ||||
|  */ | ||||
| #include <check.h> | ||||
| 
 | ||||
| #include "qint.h" | ||||
| #include "qlist.h" | ||||
| 
 | ||||
| /*
 | ||||
|  * Public Interface test-cases | ||||
|  * | ||||
|  * (with some violations to access 'private' data) | ||||
|  */ | ||||
| 
 | ||||
| START_TEST(qlist_new_test) | ||||
| { | ||||
|     QList *qlist; | ||||
| 
 | ||||
|     qlist = qlist_new(); | ||||
|     fail_unless(qlist != NULL); | ||||
|     fail_unless(qlist->base.refcnt == 1); | ||||
|     fail_unless(qobject_type(QOBJECT(qlist)) == QTYPE_QLIST); | ||||
| 
 | ||||
|     // destroy doesn't exist yet
 | ||||
|     qemu_free(qlist); | ||||
| } | ||||
| END_TEST | ||||
| 
 | ||||
| START_TEST(qlist_append_test) | ||||
| { | ||||
|     QInt *qi; | ||||
|     QList *qlist; | ||||
|     QListEntry *entry; | ||||
| 
 | ||||
|     qi = qint_from_int(42); | ||||
| 
 | ||||
|     qlist = qlist_new(); | ||||
|     qlist_append(qlist, qi); | ||||
| 
 | ||||
|     entry = QTAILQ_FIRST(&qlist->head); | ||||
|     fail_unless(entry != NULL); | ||||
|     fail_unless(entry->value == QOBJECT(qi)); | ||||
| 
 | ||||
|     // destroy doesn't exist yet
 | ||||
|     QDECREF(qi); | ||||
|     qemu_free(entry); | ||||
|     qemu_free(qlist); | ||||
| } | ||||
| END_TEST | ||||
| 
 | ||||
| START_TEST(qobject_to_qlist_test) | ||||
| { | ||||
|     QList *qlist; | ||||
| 
 | ||||
|     qlist = qlist_new(); | ||||
| 
 | ||||
|     fail_unless(qobject_to_qlist(QOBJECT(qlist)) == qlist); | ||||
| 
 | ||||
|     // destroy doesn't exist yet
 | ||||
|     qemu_free(qlist); | ||||
| } | ||||
| END_TEST | ||||
| 
 | ||||
| START_TEST(qlist_destroy_test) | ||||
| { | ||||
|     int i; | ||||
|     QList *qlist; | ||||
| 
 | ||||
|     qlist = qlist_new(); | ||||
| 
 | ||||
|     for (i = 0; i < 42; i++) | ||||
|         qlist_append(qlist, qint_from_int(i)); | ||||
| 
 | ||||
|     QDECREF(qlist); | ||||
| } | ||||
| END_TEST | ||||
| 
 | ||||
| static int iter_called; | ||||
| static const int iter_max = 42; | ||||
| 
 | ||||
| static void iter_func(QObject *obj, void *opaque) | ||||
| { | ||||
|     QInt *qi; | ||||
| 
 | ||||
|     fail_unless(opaque == NULL); | ||||
| 
 | ||||
|     qi = qobject_to_qint(obj); | ||||
|     fail_unless(qi != NULL); | ||||
|     fail_unless((qint_get_int(qi) >= 0) && (qint_get_int(qi) <= iter_max)); | ||||
| 
 | ||||
|     iter_called++; | ||||
| } | ||||
| 
 | ||||
| START_TEST(qlist_iter_test) | ||||
| { | ||||
|     int i; | ||||
|     QList *qlist; | ||||
| 
 | ||||
|     qlist = qlist_new(); | ||||
| 
 | ||||
|     for (i = 0; i < iter_max; i++) | ||||
|         qlist_append(qlist, qint_from_int(i)); | ||||
| 
 | ||||
|     iter_called = 0; | ||||
|     qlist_iter(qlist, iter_func, NULL); | ||||
| 
 | ||||
|     fail_unless(iter_called == iter_max); | ||||
| 
 | ||||
|     QDECREF(qlist); | ||||
| } | ||||
| END_TEST | ||||
| 
 | ||||
| static Suite *QList_suite(void) | ||||
| { | ||||
|     Suite *s; | ||||
|     TCase *qlist_public_tcase; | ||||
| 
 | ||||
|     s = suite_create("QList suite"); | ||||
| 
 | ||||
|     qlist_public_tcase = tcase_create("Public Interface"); | ||||
|     suite_add_tcase(s, qlist_public_tcase); | ||||
|     tcase_add_test(qlist_public_tcase, qlist_new_test); | ||||
|     tcase_add_test(qlist_public_tcase, qlist_append_test); | ||||
|     tcase_add_test(qlist_public_tcase, qobject_to_qlist_test); | ||||
|     tcase_add_test(qlist_public_tcase, qlist_destroy_test); | ||||
|     tcase_add_test(qlist_public_tcase, qlist_iter_test); | ||||
| 
 | ||||
|     return s; | ||||
| } | ||||
| 
 | ||||
| int main(void) | ||||
| { | ||||
| 	int nf; | ||||
| 	Suite *s; | ||||
| 	SRunner *sr; | ||||
| 
 | ||||
| 	s = QList_suite(); | ||||
| 	sr = srunner_create(s); | ||||
| 
 | ||||
| 	srunner_run_all(sr, CK_NORMAL); | ||||
| 	nf = srunner_ntests_failed(sr); | ||||
| 	srunner_free(sr); | ||||
| 
 | ||||
| 	return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; | ||||
| } | ||||
							
								
								
									
										2
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @ -2012,7 +2012,7 @@ if test `expr "$target_list" : ".*softmmu.*"` != 0 ; then | ||||
|   if [ "$linux" = "yes" ] ; then | ||||
|       tools="qemu-nbd\$(EXESUF) qemu-io\$(EXESUF) $tools" | ||||
|     if [ "$check_utests" = "yes" ]; then | ||||
|       tools="check-qint check-qstring check-qdict $tools" | ||||
|       tools="check-qint check-qstring check-qdict check-qlist $tools" | ||||
|     fi | ||||
|   elif test "$mingw32" = "yes" ; then | ||||
|       tools="qemu-io\$(EXESUF) $tools" | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Luiz Capitulino
						Luiz Capitulino