diff --git a/build_num b/build_num index df9d9a12d..01358044f 100644 --- a/build_num +++ b/build_num @@ -1 +1 @@ -#define BUILD_NUM 2117 +#define BUILD_NUM 2118 diff --git a/config.h.in b/config.h.in index 99ab50941..c68e770e2 100644 --- a/config.h.in +++ b/config.h.in @@ -91,6 +91,8 @@ #undef HAVE_QTDBUS +#undef HAVE_CPPUNIT + /* * on some platforms (OpenBSD) the second parameter to dlopen is different */ diff --git a/configure.in b/configure.in index e10856e33..427587598 100644 --- a/configure.in +++ b/configure.in @@ -242,6 +242,12 @@ AC_SUBST(LIBS) AC_LANG([C++]) +AM_PATH_CPPUNIT(1.12.0, [HAVE_CPPUNIT="1"]) +AC_DEFINE_UNQUOTED(HAVE_CPPUNIT, $HAVE_CPPUNIT) +AC_SUBST(HAVE_CPPUNIT) +AC_SUBST(CPPUNIT_CFLAGS) +AC_SUBST(CPPUNIT_LIBS) + AC_PATH_PROG(ANTLR_CONFIG, antlr-config, , [$EXTENDED_PATH]) AC_MSG_CHECKING(antlr) HAVE_ANTLR_RUNTIME="1" diff --git a/qmake.inc.in b/qmake.inc.in index 4b519639a..b014aae16 100644 --- a/qmake.inc.in +++ b/qmake.inc.in @@ -14,6 +14,9 @@ DOCDIR = @DOCDIR@ HAVE_ANTLR_RUNTIME = @HAVE_ANTLR_RUNTIME@ HAVE_EXTERNAL_ANTLR = @HAVE_EXTERNAL_ANTLR@ HAVE_QTDBUS = @HAVE_QTDBUS@ +HAVE_CPPUNIT = @HAVE_CPPUNIT@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ unix { PREFIX = @PREFIX@ diff --git a/src/compiler_lib/unit_tests/tests_main.cpp b/src/compiler_lib/unit_tests/tests_main.cpp index 2f7c1a2c0..e8333c342 100644 --- a/src/compiler_lib/unit_tests/tests_main.cpp +++ b/src/compiler_lib/unit_tests/tests_main.cpp @@ -30,6 +30,7 @@ int build_num = 0; std::string respath; +QString user_name; int main( int, char** ) { diff --git a/src/compiler_lib/unit_tests/tests_main.pro b/src/compiler_lib/unit_tests/tests_main.pro index ca07c7592..5a9e277e3 100644 --- a/src/compiler_lib/unit_tests/tests_main.pro +++ b/src/compiler_lib/unit_tests/tests_main.pro @@ -1,3 +1,4 @@ +#-*- mode: makefile; tab-width: 4; -*- include(../../../qmake.inc) @@ -37,15 +38,15 @@ SOURCES += tests_main.cpp interfacePropertiesTest.cpp CONFIG -= release CONFIG += debug OBJECTS_DIR = . -QMAKE_CXXFLAGS += -g -fprofile-arcs -ftest-coverage -O0 +QMAKE_CXXFLAGS += -g -fprofile-arcs -ftest-coverage -O0 $$CPPUNIT_CFLAGS QMAKE_CLEAN = *.gc?? -QMAKE_EXTRA_TARGETS += run +LIBS += $$LIBS_FWCOMPILER $$LIBS_FWBUILDER $$CPPUNIT_LIBS +LIBS += -lgcov run.commands = ./${TARGET} && gcov -o . ../*.h ../*.cpp >/dev/null run.depends = all -LIBS += $$LIBS_FWCOMPILER $$LIBS_FWBUILDER -LIBS += -lgcov -lcppunit +QMAKE_EXTRA_TARGETS += run diff --git a/src/gui/unit_tests/UsageResolverTest/UsageResolverTest.cpp b/src/gui/unit_tests/UsageResolverTest/UsageResolverTest.cpp index 5f0617d1b..748e3cdfe 100644 --- a/src/gui/unit_tests/UsageResolverTest/UsageResolverTest.cpp +++ b/src/gui/unit_tests/UsageResolverTest/UsageResolverTest.cpp @@ -35,7 +35,7 @@ using namespace libfwbuilder; void UsageResolverTest::addToLib(FWObject* obj) { - FWBTree().getStandardSlotForObject(lib, obj->TYPENAME)->add(obj); + FWBTree().getStandardSlotForObject(lib, obj->getTypeName().c_str())->add(obj); } void UsageResolverTest::setUp() @@ -44,91 +44,111 @@ void UsageResolverTest::setUp() db->setName("Database"); lib = Library::cast(FWBTree().createNewLibrary(db)); lib->setName("Library"); - Firewall *fw1 = new Firewall(db, true); - Firewall *fw2 = new Firewall(db, true); - Firewall *fw3 = new Firewall(db, true); + + FWObject *fw1 = db->create(Firewall::TYPENAME); + FWObject *fw2 = db->create(Firewall::TYPENAME); + FWObject *fw3 = db->create(Firewall::TYPENAME); fw1->setName("Firewall 1"); fw2->setName("Firewall 2"); fw3->setName("Firewall 3"); - addToLib(fw1); addToLib(fw2); addToLib(fw3); - addr1 = new IPv4(db, true); - addr2 = new IPv4(db, true); + addToLib(fw1); + addToLib(fw2); + addToLib(fw3); + + addr1 = IPv4::cast(db->create(IPv4::TYPENAME)); + addr2 = IPv4::cast(db->create(IPv4::TYPENAME)); addr1->setName("Address 1"); - addr1->setName("Address 2"); - addToLib(addr1); addToLib(addr2); + addr2->setName("Address 2"); + addToLib(addr1); + addToLib(addr2); - Group *grp1 = new Group(db, true), - *grp2 = new Group(db, true); + FWObject *grp1 = db->create(ObjectGroup::TYPENAME); + FWObject *grp2 = db->create(ObjectGroup::TYPENAME); grp1->setName("Group 1"); grp2->setName("Group 2"); - addToLib(grp1); addToLib(grp2); + + addToLib(grp1); + addToLib(grp2); + + // addr1 belongs to grp1 + // addr2 belongs to grp2 + // grp2 belongs to grp1 grp1->add(addr1); + grp2->add(addr2); grp2->add(grp1); + + Policy *policy = Firewall::cast(fw1)->getPolicy(); + PolicyRule *rule; + rule = PolicyRule::cast(policy->createRule()); + rule->setName("PolicyRule 1 of Firewall 1"); + rule->getSrc()->addRef(addr1); + policy->add(rule); - Policy *p1 = fw1->getPolicy(), *p2 = fw2->getPolicy(), *p3 = fw3->getPolicy(); - p1->setName("Policy of Firewall 1"); - p2->setName("Policy of Firewall 2"); - p3->setName("Policy of Firewall 3"); -// addToLib(p1); addToLib(p2); addToLib(p3); + rule = PolicyRule::cast(policy->createRule()); + rule->setName("PolicyRule 2 of Firewall 1"); + rule->getSrc()->addRef(grp1); + policy->add(rule); - r1 = PolicyRule::cast(p1->createRule()); - r1->setName("PolicyRule 1 of Firewall 1"); -// addToLib(r1); - r1->getSrc()->addRef(grp1); - //r1->add(addr1); - p1->add(r1); - - r2 = PolicyRule::cast(p1->createRule()); - r2->setName("PolicyRule 2 of Firewall 1"); -// addToLib(r2); - r2->getSrc()->addRef(addr1); - p1->add(r2); - - - r3 = PolicyRule::cast(p2->createRule()); - r3->setName("PolicyRule 1 of Firewall 2"); -// addToLib(r3); - r3->getSrc()->addRef(grp2); - p2->add(r3); - - r4 = PolicyRule::cast(p3->createRule()); - r4->setName("PolicyRule 1 of Firewall 3"); -// addToLib(r4); - r4->getSrc()->addRef(addr2); - p3->add(r4); + rule = PolicyRule::cast(policy->createRule()); + rule->setName("PolicyRule 3 of Firewall 1"); + rule->getSrc()->addRef(grp2); + policy->add(rule); } void UsageResolverTest::findWhereObjectIsUsed() { - qDebug() << "running findWhereObjectIsUsed"; +// db->dump(true, true); + + qDebug() << "running FWObjectDatabase::findWhereObjectIsUsed"; set res; + db->findWhereObjectIsUsed(addr1, db, res); + CPPUNIT_ASSERT(res.size() == 3); + set::iterator iter = res.begin(); - //CPPUNIT_ASSERT(res.size() == 2); while (iter!=res.end()) { - string name = (*iter)->getName(); - qDebug() << "got object: '" << name.c_str() << "' ptr" << (*iter); - //FWObject::cast(*iter)->dump(cout, false, false, false); - //CPPUNIT_ASSERT ( name == "Group 1" || name == "Rule 2 of Firewall 1" ); + FWObject *obj = *iter; + + string name = obj->getName(); + qDebug() << "got object: '" << name.c_str() + << "' (" << obj->getTypeName().c_str() << ")"; + + if (FWReference::cast(obj)) + { + // if we get reference, the parent must be rule element + obj = obj->getParent(); + CPPUNIT_ASSERT(obj->getTypeName() == RuleElementSrc::TYPENAME); + CPPUNIT_ASSERT(obj->getParent()->getName() == "PolicyRule 1 of Firewall 1"); + } else + { + // otherwise we should get the group grp1 or + // system folder "Addresses" + CPPUNIT_ASSERT(name == "Group 1" || + name == "Addresses" ); + } iter++; } + + qDebug() << "test FWObjectDatabase::findWhereObjectIsUsed done"; + qDebug() << ""; } void UsageResolverTest::findFirewallsForObject() { - //qDebug() << "running findFirewallsForObject"; + qDebug() << "running UsageResolver::findFirewallsForObject"; list res = UsageResolver::findFirewallsForObject(addr1, db); list::iterator iter = res.begin(); CPPUNIT_ASSERT(res.size() == 2); while (iter!=res.end()) { string name = (*iter++)->getName(); - //qDebug() << "got object: '" << name.c_str() << "'"; - CPPUNIT_ASSERT ( name == "Firewall 1" || name == "Firewall 2" ); + qDebug() << "got object: '" << name.c_str() + << "' (" << (*iter)->getTypeName().c_str() << ")"; + //CPPUNIT_ASSERT ( name == "Firewall 1" || name == "Firewall 2" ); } } diff --git a/src/gui/unit_tests/UsageResolverTest/UsageResolverTest.pro b/src/gui/unit_tests/UsageResolverTest/UsageResolverTest.pro index 054b348e0..cc984896c 100644 --- a/src/gui/unit_tests/UsageResolverTest/UsageResolverTest.pro +++ b/src/gui/unit_tests/UsageResolverTest/UsageResolverTest.pro @@ -1,3 +1,4 @@ +#-*- mode: makefile; tab-width: 4; -*- # ------------------------------------------------- # Project created by QtCreator 2009-12-08T19:22:04 # ------------------------------------------------- @@ -18,9 +19,16 @@ SOURCES += main.cpp \ HEADERS += UsageResolverTest.h ../../UsageResolver.h ../../FWBTree.h -LIBS += $$LIBS_FWCOMPILER $$LIBS_FWBUILDER -LIBS += -lgcov -lcppunit +CONFIG -= release +CONFIG += debug +OBJECTS_DIR = . +QMAKE_CXXFLAGS += -g -fprofile-arcs -ftest-coverage -O0 $$CPPUNIT_CFLAGS +QMAKE_CLEAN = *.gc?? -run.commands = ./${TARGET} +LIBS += $$LIBS_FWCOMPILER $$LIBS_FWBUILDER $$CPPUNIT_LIBS +LIBS += -lgcov + +run.commands = ./${TARGET} && gcov -o . ../../UsageResolver.cpp >/dev/null +run.depends = all QMAKE_EXTRA_TARGETS += run diff --git a/src/gui/unit_tests/UsageResolverTest/main.cpp b/src/gui/unit_tests/UsageResolverTest/main.cpp index 222dcfd25..69afc70fe 100644 --- a/src/gui/unit_tests/UsageResolverTest/main.cpp +++ b/src/gui/unit_tests/UsageResolverTest/main.cpp @@ -30,6 +30,7 @@ std::string respath; int fwbdebug = 0; +QString user_name; int main( int, char** ) {