Packets: BUGFIX: Ensure correct linking of all referenced packet types
g0dil [Fri, 8 Feb 2008 22:44:58 +0000 (22:44 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@674 270642c3-0616-0410-b53a-bc976706d245

Packets/DefaultBundle/SConscript
Packets/DefaultBundle/extra_tests/PacketLink.test.cc [new file with mode: 0644]
Packets/DefaultBundle/extra_tests/SConscript [new file with mode: 0644]
Packets/DefaultBundle/extra_tests/main.test.cc [new file with mode: 0644]
Packets/PacketInterpreter.cti
doclib/Doxyfile.global
senfscons/SENFSCons.py

index 4d765df..310d9c8 100644 (file)
@@ -19,4 +19,6 @@ SENFSCons.Lib(env,
     sources = sources[0],
     no_includes = 1)
                  
+SConscript(glob.glob("*/SConscript"))
+
 SENFSCons.Doxygen(env)
diff --git a/Packets/DefaultBundle/extra_tests/PacketLink.test.cc b/Packets/DefaultBundle/extra_tests/PacketLink.test.cc
new file mode 100644 (file)
index 0000000..11b0d74
--- /dev/null
@@ -0,0 +1,76 @@
+// $Id$
+//
+// Copyright (C) 2008 
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+//     Stefan Bund <g0dil@berlios.de>
+//
+// 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.
+
+/** \file
+    \brief PacketLink.test unit tests */
+
+//#include "PacketLink.test.hh"
+//#include "PacketLink.test.ih"
+
+// Custom includes
+#include "../EthernetPacket.hh"
+#include "../IPv6Packet.hh"
+
+#include <boost/test/auto_unit_test.hpp>
+#include <boost/test/test_tools.hpp>
+
+#define prefix_
+///////////////////////////////cc.p////////////////////////////////////////
+
+BOOST_AUTO_UNIT_TEST(packetLink)
+{
+    // This test shall test, whether referencing a packet (in this case IPv6Packet) as template
+    // argument correctly includes the corresponding object file when linking
+
+    boost::uint8_t data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,             // source mac
+                              0x00, 0x00, 0x00, 0x00, 0x00, 0x02,             // target mac
+                              0x86, 0xdd,                                     // ethertype
+
+                              0x60, 0x00, 0x00, 0x00,                         // IP version, class, 
+                                                                              //          flow label
+                              0x00, 0x00,                                     // payload length
+                              0x3B,                                           // no next header
+                              0x10,                                           // hop limit
+                              0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source ip
+                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
+                              0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // target ip
+                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 };
+
+    senf::EthernetPacket p (senf::EthernetPacket::create(data));
+
+    BOOST_REQUIRE( p.next() );
+    BOOST_CHECK( p.next().is<senf::IPv6Packet>() );
+}
+
+///////////////////////////////cc.e////////////////////////////////////////
+#undef prefix_
+
+\f
+// Local Variables:
+// mode: c++
+// fill-column: 100
+// comment-column: 40
+// c-file-style: "senf"
+// indent-tabs-mode: nil
+// ispell-local-dictionary: "american"
+// compile-command: "scons -u test"
+// End:
diff --git a/Packets/DefaultBundle/extra_tests/SConscript b/Packets/DefaultBundle/extra_tests/SConscript
new file mode 100644 (file)
index 0000000..19777cd
--- /dev/null
@@ -0,0 +1,9 @@
+# -*- python -*-
+
+Import('env')
+import SENFSCons, glob
+
+###########################################################################
+
+SENFSCons.Test(env, sources = glob.glob("*.test.cc"),
+               LIBS = [ 'Packets_DefaultBundle', 'Packets', 'Socket', 'Utils' ])
diff --git a/Packets/DefaultBundle/extra_tests/main.test.cc b/Packets/DefaultBundle/extra_tests/main.test.cc
new file mode 100644 (file)
index 0000000..b6d1686
--- /dev/null
@@ -0,0 +1,49 @@
+// $Id$
+//
+// Copyright (C) 2006
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+//     Stefan Bund <g0dil@berlios.de>
+//
+// 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.
+
+// Definition of non-inline non-template functions
+
+//#include "test.hh"
+//#include "test.ih"
+
+// Custom includes
+#define BOOST_AUTO_TEST_MAIN
+#include "../Utils/auto_unit_test.hh"
+#include <boost/test/test_tools.hpp>
+
+#define prefix_
+///////////////////////////////cc.p////////////////////////////////////////
+
+
+///////////////////////////////cc.e////////////////////////////////////////
+#undef prefix_
+
+\f
+// Local Variables:
+// mode: c++
+// fill-column: 100
+// c-file-style: "senf"
+// indent-tabs-mode: nil
+// ispell-local-dictionary: "american"
+// compile-command: "scons -u test"
+// comment-column: 40
+// End:
index 08e3395..672436f 100644 (file)
 template <class Type>
 prefix_ bool senf::PacketInterpreterBase::is()
 {
+    { static void const * const _ ((void*)&Type::dump); (void) _; }
     return dynamic_cast< PacketInterpreter<Type>* >(this);
 }
 
 template <class Type>
 prefix_ typename senf::PacketInterpreter<Type>::ptr senf::PacketInterpreterBase::as()
 {
+    { static void const * const _ ((void*)&Type::dump); (void) _; }
     return typename PacketInterpreter<Type>::ptr(
         static_cast< PacketInterpreter<Type>* >(this));
 }
index f188e64..5ffddee 100644 (file)
@@ -10,7 +10,7 @@ ALIASES                = "fixme=\xrefitem fixme \"Fix\" \"Fixmes\"" \
                          "idea=\xrefitem idea \"Idea\" \"Ideas\"" \
                          "implementation=\par \"Implementation note:\"" \
                          "doc=\xrefitem doc \"Documentation request\" \"Documentation Requests\"" \
-                         "autotoc=\htmlonly <div id="autotoc"></div> \endhtmlonly"
+                         "autotoc=\htmlonly <div id=\"autotoc\"></div> \endhtmlonly"
 REPEAT_BRIEF           = YES
 ALWAYS_DETAILED_SEC    = YES
 MULTILINE_CPP_IS_BRIEF = YES
index 4c00d5a..125984a 100644 (file)
@@ -302,6 +302,18 @@ def GlobalTargets(env):
 # \internal
 def LibPath(lib): return '${LOCALLIBDIR}/${LIBPREFIX}%s${LIBADDSUFFIX}${LIBSUFFIX}' % lib
 
+def Test(env, sources, LIBS = [], OBJECTS = []):
+    test = env.BoostUnitTests(
+        target = 'test',
+        objects = [],
+        test_sources = sources,
+        LIBS = [ x + '$LIBADDSUFFIX' for x in LIBS ],
+        OBJECTS = OBJECTS,
+        DEPENDS = [ env.File(LibPath(x)) for x in LIBS ])
+    env.Alias('all_tests', test)
+    env.Alias(env.File('test'), test)
+    
+
 ## \brief Build object files
 #
 # This target helper will build object files from the given