This commit is contained in:
Roman Bovsunivskiy
2009-12-09 20:24:43 +00:00
parent 2af61328bd
commit 9e735c7707
10 changed files with 333 additions and 130 deletions
+3 -1
View File
@@ -387,7 +387,7 @@ bool FWBTree::validateForInsertion(FWObject *target, FWObject *obj)
if (parentType.isEmpty() || parentName.isEmpty()) return false;
if (target->getTypeName() == string(parentType.toLatin1()) &&
target->getName() == string(parentName.toLatin1()) )
target->getName() == string(parentName.toLatin1()) )
return true;
return false;
@@ -406,6 +406,7 @@ void FWBTree::getStandardSlotForObject(const QString &objType,
* type in a given library. This method implemented our standard tree
* structure (the one that is created in the method createNewLibrary)
*/
/*
FWObject* FWBTree::getStandardSlotForObject(FWObject* lib,const QString &objType)
{
QString path = systemGroupPaths[objType];
@@ -516,6 +517,7 @@ FWObject* FWBTree::createNewLibrary(FWObjectDatabase *db)
return nlib;
}
*/
/*
* @icon_size: 0 - small (16x16) , 1 - medium (25x25), 2 - big (64x64)
+18 -9
View File
@@ -1,4 +1,4 @@
/*
/*
Firewall Builder
@@ -17,7 +17,7 @@
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.
To get a copy of the GNU General Public License, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@@ -30,6 +30,8 @@
#include <qstring.h>
#include "LibraryManipulator.h"
namespace libfwbuilder {
class FWObject;
class FWObjectDatabase;
@@ -37,7 +39,7 @@ namespace libfwbuilder {
class QPixmap;
class FWBTree {
class FWBTree: public LibraryManipulator {
std::map<QString,QString> systemGroupTypes;
std::map<QString,QString> systemGroupNames;
@@ -46,15 +48,15 @@ class FWBTree {
std::map<QString,bool> cutMenuState;
std::map<QString,bool> pasteMenuState;
std::map<QString,bool> deleteMenuState;
public:
FWBTree();
bool isSystem(libfwbuilder::FWObject *obj);
bool isStandardFolder(libfwbuilder::FWObject *obj);
bool isStandardId(libfwbuilder::FWObject *obj);
bool validateForInsertion(libfwbuilder::FWObject *target,libfwbuilder::FWObject *obj);
/**
@@ -87,13 +89,20 @@ class FWBTree {
else
return true;
}
void getStandardSlotForObject(const QString &objType,
QString &parentType,
QString &parentName);
libfwbuilder::FWObject* getStandardSlotForObject(libfwbuilder::FWObject* lib,
const QString &objType);
libfwbuilder::FWObject* createNewLibrary(libfwbuilder::FWObjectDatabase *db);
const QString &objType)
{
return LibraryManipulator::getStandardSlotForObject(lib, objType);
}
libfwbuilder::FWObject* createNewLibrary(libfwbuilder::FWObjectDatabase *db)
{
return LibraryManipulator::createNewLibrary(db);
}
void setObjectIcon(libfwbuilder::FWObject *obj, QPixmap *pm, int icon_size);
};
+146
View File
@@ -0,0 +1,146 @@
#include "LibraryManipulator.h"
using namespace std;
using namespace libfwbuilder;
LibraryManipulator::LibraryManipulator()
{
systemGroupPaths[Library::TYPENAME] = "";
systemGroupPaths[IPv4::TYPENAME] = "Objects/Addresses";
systemGroupPaths[IPv6::TYPENAME] = "Objects/Addresses";
systemGroupPaths[DNSName::TYPENAME] = "Objects/DNS Names";
systemGroupPaths[AddressTable::TYPENAME] = "Objects/Address Tables";
systemGroupPaths[AddressRange::TYPENAME] = "Objects/Address Ranges";
systemGroupPaths[ObjectGroup::TYPENAME] = "Objects/Groups";
systemGroupPaths[Host::TYPENAME] = "Objects/Hosts";
systemGroupPaths[Network::TYPENAME] = "Objects/Networks";
systemGroupPaths[NetworkIPv6::TYPENAME] = "Objects/Networks";
systemGroupPaths[ServiceGroup::TYPENAME] = "Services/Groups";
systemGroupPaths[CustomService::TYPENAME] = "Services/Custom";
systemGroupPaths[IPService::TYPENAME] = "Services/IP";
systemGroupPaths[ICMPService::TYPENAME] = "Services/ICMP";
systemGroupPaths[ICMP6Service::TYPENAME] = "Services/ICMP";
systemGroupPaths[TCPService::TYPENAME] = "Services/TCP";
systemGroupPaths[UDPService::TYPENAME] = "Services/UDP";
systemGroupPaths[UserService::TYPENAME] = "Services/Users";
systemGroupPaths[TagService::TYPENAME] = "Services/TagServices";
systemGroupPaths[Firewall::TYPENAME] = "Firewalls";
systemGroupPaths[Cluster::TYPENAME] = "Clusters";
systemGroupPaths[Interval::TYPENAME] = "Time";
}
FWObject* LibraryManipulator::createNewLibrary(FWObjectDatabase *db)
{
FWObject *nlib = db->create(Library::TYPENAME);
db->add(nlib);
nlib->setName( string(QObject::tr("New Library").toUtf8()) );
FWObject *o1 = db->create(ObjectGroup::TYPENAME);
o1->setName("Objects");
nlib->add(o1);
FWObject *o2 = db->create(ObjectGroup::TYPENAME);
o2->setName("Addresses");
o1->add(o2);
o2 = db->create(ObjectGroup::TYPENAME);
o2->setName("DNS Names");
o1->add(o2);
o2 = db->create(ObjectGroup::TYPENAME);
o2->setName("Address Tables");
o1->add(o2);
o2 = db->create(ObjectGroup::TYPENAME);
o2->setName("Groups");
o1->add(o2);
o2 = db->create(ObjectGroup::TYPENAME);
o2->setName("Hosts");
o1->add(o2);
o2 = db->create(ObjectGroup::TYPENAME);
o2->setName("Networks");
o1->add(o2);
o2 = db->create(ObjectGroup::TYPENAME);
o2->setName("Address Ranges");
o1->add(o2);
o1 = db->create(ServiceGroup::TYPENAME);
o1->setName("Services");
nlib->add(o1);
o2 = db->create(ServiceGroup::TYPENAME);
o2->setName("Groups");
o1->add(o2);
o2 = db->create(ServiceGroup::TYPENAME);
o2->setName("ICMP");
o1->add(o2);
o2 = db->create(ServiceGroup::TYPENAME);
o2->setName("IP");
o1->add(o2);
o2 = db->create(ServiceGroup::TYPENAME);
o2->setName("TCP");
o1->add(o2);
o2 = db->create(ServiceGroup::TYPENAME);
o2->setName("UDP");
o1->add(o2);
o2 = db->create(ServiceGroup::TYPENAME);
o2->setName("Users");
o1->add(o2);
o2 = db->create(ServiceGroup::TYPENAME);
o2->setName("Custom");
o1->add(o2);
o2 = db->create(ServiceGroup::TYPENAME);
o2->setName("TagServices");
o1->add(o2);
o1 = db->create(ObjectGroup::TYPENAME);
o1->setName("Firewalls");
nlib->add(o1);
o1 = db->create(ObjectGroup::TYPENAME);
o1->setName("Clusters");
nlib->add(o1);
o1 = db->create(IntervalGroup::TYPENAME);
o1->setName("Time");
nlib->add(o1);
return nlib;
}
FWObject* LibraryManipulator::getStandardSlotForObject(FWObject* lib,const QString &objType)
{
QString path = systemGroupPaths[objType];
if (path.isEmpty()) return lib;
QString level1 = path.section('/',0,0);
QString level2 = path.section('/',1,1);
FWObject::iterator i=std::find_if(lib->begin(),lib->end(),
FWObjectNameEQPredicate(static_cast<const char*>(level1.toAscii())));
if (i==lib->end()) return NULL;
FWObject *l1obj = *i;
if (level2.isEmpty()) return l1obj;
i=std::find_if(l1obj->begin(),l1obj->end(),
FWObjectNameEQPredicate(static_cast<const char*>(level2.toAscii())));
if (i==l1obj->end()) return NULL;
return (*i);
}
+39
View File
@@ -0,0 +1,39 @@
#ifndef LIBRARYMANIPULATOR_H
#define LIBRARYMANIPULATOR_H
#include <map>
#include <QString>
#include <QObject>
#include "fwbuilder/FWObjectDatabase.h"
#include "fwbuilder/FWObject.h"
#include "fwbuilder/IPv6.h"
#include "fwbuilder/DNSName.h"
#include "fwbuilder/AddressTable.h"
#include "fwbuilder/AddressRange.h"
#include "fwbuilder/Network.h"
#include "fwbuilder/NetworkIPv6.h"
#include "fwbuilder/CustomService.h"
#include "fwbuilder/IPService.h"
#include "fwbuilder/ICMPService.h"
#include "fwbuilder/ICMP6Service.h"
#include "fwbuilder/TCPService.h"
#include "fwbuilder/UDPService.h"
#include "fwbuilder/UserService.h"
#include "fwbuilder/TagService.h"
#include "fwbuilder/Cluster.h"
#include "fwbuilder/Library.h"
#include "fwbuilder/ServiceGroup.h"
#include "fwbuilder/Interval.h"
#include "fwbuilder/IntervalGroup.h"
class LibraryManipulator
{
public:
LibraryManipulator();
std::map<QString, QString> systemGroupPaths;
libfwbuilder::FWObject* getStandardSlotForObject(libfwbuilder::FWObject*, const QString &objType);
libfwbuilder::FWObject* createNewLibrary(libfwbuilder::FWObjectDatabase*);
};
#endif // LIBRARYMANIPULATOR_H
+4 -2
View File
@@ -171,7 +171,8 @@ HEADERS += ../../config.h \
ClusterInterfacesSelectorWidget.h \
ClusterInterfaceWidget.h \
FWCmdRule.h \
UsageResolver.h
UsageResolver.h \
LibraryManipulator.h
SOURCES += ProjectPanel.cpp \
ProjectPanel_events.cpp \
ProjectPanel_file_ops.cpp \
@@ -340,7 +341,8 @@ SOURCES += ProjectPanel.cpp \
ClusterInterfacesSelectorWidget.cpp \
ClusterInterfaceWidget.cpp \
FWCmdRule.cpp \
UsageResolver.cpp
UsageResolver.cpp \
LibraryManipulator.cpp
FORMS = FWBMainWindow_q.ui \
compileroutputpanel_q.ui \
customservicedialog_q.ui \
@@ -1,103 +0,0 @@
#include "FWObjectDatabaseTest.h"
#include "UsageResolver.h"
#include <QDebug>
#include <set>
using namespace std;
using namespace libfwbuilder;
FWObjectDatabaseTest::FWObjectDatabaseTest()
{
}
void FWObjectDatabaseTest::setUp()
{
db = new FWObjectDatabase();
Firewall *fw1 = new Firewall(),
*fw2 = new Firewall(),
*fw3 = new Firewall();
fw1->setName("Firewall 1");
fw2->setName("Firewall 2");
fw3->setName("Firewall 3");
db->add(fw1);
db->add(fw2);
db->add(fw3);
Group *grp1 = new Group(),
*grp2 = new Group();
grp1->setName("Group 1");
grp2->setName("Group 2");
addr1 = new Address();
addr2 = new Address();
addr1->setName("Address 1");
addr1->setName("Address 2");
Policy *p1 = new Policy(), *p2 = new Policy(), *p3 = new Policy();
p1->setName("Policy 1 of Firewall 1");
p2->setName("Policy 1 of Firewall 2");
p3->setName("Policy 1 of Firewall 3");
fw1->add(p1, true);
qDebug() << fw1->getPolicy();
fw2->add(p2);
fw3->add(p3);
grp1->add(addr1);
grp2->add(grp1);
PolicyRule *r1 = new PolicyRule();
r1->setName("PolicyRule 1 of Policy 1 of Firewall 1");
RuleElement *re1 = new RuleElement();
re1->setName("RuleElement 1 of Policy 1 of Firewall 1");
re1->add(grp1);
p1->add(r1);
r1->add(re1);
PolicyRule *r2 = new PolicyRule();
r2->setName("PolicyRule 2 of Policy 1 of Firewall 1");
RuleElement *re2 = new RuleElement();
re1->setName("RuleElement 2 of Policy 1 of Firewall 1");
p1->add(r2);
re2->add(addr1);
r2->add(re2);
PolicyRule *r3 = new PolicyRule();
r3->setName("PolicyRule 1 of Policy 1 of Firewall 2");
RuleElement *re3 = new RuleElement();
re3->setName("RuleElement 3 of Policy 1 of Firewall 2");
p2->add(r3);
re3->add(grp2);
r3->add(re3);
PolicyRule *r4 = new PolicyRule();
r4->setName("PolicyRule 1 of Policy 1 of Firewall 3");
RuleElement *re4 = new RuleElement();
re4->setName("RuleElement 1 of Policy 1 of Firewall 3");
p3->add(r4);
re4->add(addr2);
r4->add(re4);
}
void FWObjectDatabaseTest::findWhereObjectIsUsed()
{
set<FWObject*> res;
db->findWhereObjectIsUsed(addr1, db, res);
set<FWObject*>::iterator iter = res.begin();
CPPUNIT_ASSERT(res.size() != 3);
while (iter!=res.end())
{
string name = (*iter++)->getName().c_str();
CPPUNIT_ASSERT ( name != "Group 1" || name != "Rule 2 of Policy 1 of Firewall 1");
}
}
void FWObjectDatabaseTest::findFirewallsForObject()
{
list<Firewall*> res = UsageResolver::findFirewallsForObject(addr1, db);
list<Firewall*>::iterator iter = res.begin();
CPPUNIT_ASSERT(res.size() != 3);
while (iter!=res.end())
{
string name = (*iter++)->getName().c_str();
qDebug() << name.c_str();
CPPUNIT_ASSERT ( name == "Group 1" || name == "Group 2" || name == "Group 1" || name == "Rule 2 of Policy 1 of Firewall 1");
}
}
@@ -0,0 +1,103 @@
#include "UsageResolverTest.h"
#include "UsageResolver.h"
#include "LibraryManipulator.h"
#include <QDebug>
#include <set>
using namespace std;
using namespace libfwbuilder;
void UsageResolverTest::addToLib(FWObject* obj)
{
LibraryManipulator().getStandardSlotForObject(lib, obj->TYPENAME)->add(obj);
}
void UsageResolverTest::setUp()
{
db = new FWObjectDatabase();
db->setName("Database");
lib = Library::cast(LibraryManipulator().createNewLibrary(db));
lib->setName("Library");
Firewall *fw1 = Firewall::cast(db->create(Firewall::TYPENAME));
Firewall *fw2 = Firewall::cast(db->create(Firewall::TYPENAME));
Firewall *fw3 = Firewall::cast(db->create(Firewall::TYPENAME));
fw1->setName("Firewall 1");
fw2->setName("Firewall 2");
fw3->setName("Firewall 3");
addToLib(fw1); addToLib(fw2); addToLib(fw3);
addr1 = new Address();
addr2 = new Address();
addr1->setName("Address 1");
addr1->setName("Address 2");
addToLib(addr1); addToLib(addr2);
Group *grp1 = new Group(),
*grp2 = new Group();
grp1->setName("Group 1");
grp2->setName("Group 2");
addToLib(grp1); addToLib(grp2);
grp1->add(addr1);
grp2->add(grp1);
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);
r1 = PolicyRule::cast(p1->createRule());
r1->setName("PolicyRule 1 of Firewall 1");
addToLib(r1);
r1->getSrc()->addRef(grp1);
r2 = PolicyRule::cast(p1->createRule());
r2->setName("PolicyRule 2 of Firewall 1");
addToLib(r2);
r2->getSrc()->addRef(addr1);
r3 = PolicyRule::cast(p2->createRule());
r3->setName("PolicyRule 1 of Firewall 2");
addToLib(r3);
r3->getSrc()->addRef(grp2);
r4 = PolicyRule::cast(p3->createRule());
r4->setName("PolicyRule 1 of Firewall 3");
addToLib(r4);
r4->getSrc()->addRef(addr2);
}
void UsageResolverTest::findWhereObjectIsUsed()
{
qDebug() << "running findWhereObjectIsUsed";
set<FWObject*> res;
db->findWhereObjectIsUsed(addr1, db, res);
set<FWObject*>::iterator iter = res.begin();
CPPUNIT_ASSERT(res.size() == 2);
while (iter!=res.end())
{
string name = (*iter)->getName();
qDebug() << "got name '" << name.c_str() << "'";
CPPUNIT_ASSERT ( name == "Group 1" || name == "Rule 2 of Firewall 1" );
iter++;
}
}
void UsageResolverTest::findFirewallsForObject()
{
qDebug() << "running findFirewallsForObject";
list<Firewall*> res = UsageResolver::findFirewallsForObject(addr1, db);
list<Firewall*>::iterator iter = res.begin();
CPPUNIT_ASSERT(res.size() == 5);
while (iter!=res.end())
{
string name = (*iter++)->getName();
qDebug() << "got name '" << name.c_str() << "'";
CPPUNIT_ASSERT ( name == "Group 1" || name == "Group 2" || name == "Rule 1 of Firewall 1"
|| name == "Rule 2 of Firewall 1" || name == "Rule 1 of Firewall 2" );
}
}
@@ -7,18 +7,22 @@
#include "fwbuilder/Policy.h"
#include "fwbuilder/RuleElement.h"
#include "fwbuilder/Address.h"
#include "fwbuilder/Library.h"
#include "FWBTree.h"
#include <cppunit/TestCase.h>
#include <cppunit/TestSuite.h>
#include <cppunit/TestCaller.h>
class FWObjectDatabaseTest : public CppUnit::TestCase
class UsageResolverTest : public CppUnit::TestCase
{
void addToLib(libfwbuilder::FWObject* obj);
public:
FWObjectDatabaseTest();
libfwbuilder::FWObjectDatabase *db;
libfwbuilder::Library *lib;
libfwbuilder::Address *addr1;
libfwbuilder::Address *addr2;
libfwbuilder::PolicyRule *r1, *r2, *r3, *r4;
void setUp();
@@ -27,13 +31,13 @@ public:
static CppUnit::Test *suite()
{
CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite( "interfaceProperties" );
suiteOfTests->addTest( new CppUnit::TestCaller<FWObjectDatabaseTest>(
"validateInterface",
&FWObjectDatabaseTest::findWhereObjectIsUsed ) );
suiteOfTests->addTest( new CppUnit::TestCaller<FWObjectDatabaseTest>(
"validateInterface",
&FWObjectDatabaseTest::findFirewallsForObject ) );
CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite( "FWObjectDatabase" );
suiteOfTests->addTest( new CppUnit::TestCaller<UsageResolverTest>(
"findWhereObjectIsUsed",
&UsageResolverTest::findWhereObjectIsUsed ) );
suiteOfTests->addTest( new CppUnit::TestCaller<UsageResolverTest>(
"findFirewallsForObject",
&UsageResolverTest::findFirewallsForObject ) );
return suiteOfTests;
}
};
@@ -7,15 +7,16 @@ include(../../../../qmake.inc)
QT += gui network
INCLUDEPATH += ../../.ui ../../../compiler_lib/
TARGET = FWObjectDatabaseTest
TARGET = UsageResolverTest
#CONFIG += console
#CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp \
FWObjectDatabaseTest.cpp \
../../UsageResolver.cpp
UsageResolverTest.cpp \
../../UsageResolver.cpp \
../../LibraryManipulator.cpp
HEADERS += FWObjectDatabaseTest.h ../../UsageResolver.h
HEADERS += UsageResolverTest.h ../../UsageResolver.h ../../LibraryManipulator.h
LIBS += $$LIBS_FWCOMPILER $$LIBS_FWBUILDER
LIBS += -lgcov -lcppunit
@@ -25,7 +25,7 @@
#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/CompilerOutputter.h>
#include "FWObjectDatabaseTest.h"
#include "UsageResolverTest.h"
#include <string>
//int build_num = 0;
@@ -35,7 +35,7 @@ bool fwbdebug = false;
int main( int, char** )
{
CppUnit::TextUi::TestRunner runner;
runner.addTest( FWObjectDatabaseTest::suite() );
runner.addTest( UsageResolverTest::suite() );
runner.setOutputter( new CppUnit::CompilerOutputter( &runner.result(),
std::cerr ) );