131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu/* 2b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * Author: Karl MacMillan <kmacmillan@tresys.com> 3b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * 4b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * Copyright (C) 2006 Tresys Technology, LLC 5b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * 6b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * This library is free software; you can redistribute it and/or 7b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * modify it under the terms of the GNU Lesser General Public 8b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * License as published by the Free Software Foundation; either 9b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * version 2.1 of the License, or (at your option) any later version. 10b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * 11b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * This library is distributed in the hope that it will be useful, 12b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * but WITHOUT ANY WARRANTY; without even the implied warranty of 13b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * Lesser General Public License for more details. 15b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne * 1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * You should have received a copy of the GNU Lesser General Public 17d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth * License along with this library; if not, write to the Free Software 18d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 19d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth */ 20b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 21d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "test-cond.h" 22d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "test-linker.h" 23b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#include "test-expander.h" 24b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#include "test-deps.h" 25b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#include "test-downgrade.h" 260b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth 270b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include <CUnit/Basic.h> 28b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#include <CUnit/Console.h> 29804e0fea4033e3b91dbc8198cef30de30f141bb5Torok Edwin#include <CUnit/TestDB.h> 3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 31804e0fea4033e3b91dbc8198cef30de30f141bb5Torok Edwin#include <stdio.h> 32d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include <getopt.h> 33d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include <stdlib.h> 34d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth 3573f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Chengint mls; 36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define DECLARE_SUITE(name) \ 38dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines suite = CU_add_suite(#name, name##_test_init, name##_test_cleanup); \ 39dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines if (NULL == suite) { \ 4073f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng CU_cleanup_registry(); \ 41a347f85dbeee37a7f2bb68df1a7d4cdfbb7b576dEvan Cheng return CU_get_error(); } \ 4273f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng if (name##_add_tests(suite)) { \ 43e488b4ecdc6bf9a4a2d53f9311827f92c9044db1Bill Wendling CU_cleanup_registry(); \ 44e488b4ecdc6bf9a4a2d53f9311827f92c9044db1Bill Wendling return CU_get_error(); } 45b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 46b25baef26f03b9909b65dd5f762b38f93000445dRichard Osbornestatic void usage(char *progname) 47b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne{ 48b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne printf("usage: %s [options]\n", progname); 49b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne printf("options:\n"); 50b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne printf("\t-v, --verbose\t\t\tverbose output\n"); 51b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne printf("\t-i, --interactive\t\tinteractive console\n"); 52b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne} 53b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 54b25baef26f03b9909b65dd5f762b38f93000445dRichard Osbornestatic int do_tests(int interactive, int verbose) 55b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne{ 56b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne CU_pSuite suite = NULL; 57b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 58b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne if (CUE_SUCCESS != CU_initialize_registry()) 59b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne return CU_get_error(); 6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DECLARE_SUITE(cond); 6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DECLARE_SUITE(linker); 6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DECLARE_SUITE(expander); 6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DECLARE_SUITE(deps); 6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DECLARE_SUITE(downgrade); 6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (verbose) 6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines CU_basic_set_mode(CU_BRM_VERBOSE); 6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines else 7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines CU_basic_set_mode(CU_BRM_NORMAL); 7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (interactive) 7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines CU_console_run_tests(); 7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines else 7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines CU_basic_run_tests(); 7636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines CU_cleanup_registry(); 7736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return CU_get_error(); 7836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} 8036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesint main(int argc, char **argv) 8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines{ 8336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines int i, verbose = 1, interactive = 0; 8436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines struct option opts[] = { 8636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines {"verbose", 0, NULL, 'v'}, 8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines {"interactive", 0, NULL, 'i'}, 8836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines {NULL, 0, NULL, 0} 8936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines }; 9036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines while ((i = getopt_long(argc, argv, "vi", opts, NULL)) != -1) { 9236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines switch (i) { 9336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case 'v': 9436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines verbose = 1; 9536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines break; 9636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case 'i': 9736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines interactive = 1; 9836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines break; 9936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case 'h': 10036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines default:{ 10136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines usage(argv[0]); 10236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines exit(1); 10336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 10436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 10536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 10636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 10736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /* first do the non-mls tests */ 10836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines mls = 0; 10936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (do_tests(interactive, verbose)) 11036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return -1; 11136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 11236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /* then with mls */ 11336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines mls = 1; 11436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (do_tests(interactive, verbose)) 11536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return -1; 11636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 11736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return 0; 11836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} 11936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines