Parcourir la source

Revert the double read bug test

Revert "[trac931_2] make sure the workaround -Wno-unused-parameter follows -Wextra"
Revert "[trac931] Disable warning on one needed file"
Revert "[trac931] Missing includes"
Revert "[trac931] Test reproducing the double read bug"

This reverts commit ec6446047b5007290ca4d6d31e67239c424f33bb.
This reverts commit 990a0cff9891fce08b3e163720dfa08fffdede5f.
This reverts commit 54f86d7796c55289518befaefdcdd7d84ebefa88.
This reverts commit 37ded0b31a0a0dcadb93da7bd85248b90d9af57f.
Michal 'vorner' Vaner il y a 14 ans
Parent
commit
5d33e8c43d

+ 2 - 2
src/lib/config/ccsession.cc

@@ -193,7 +193,7 @@ ModuleCCSession::ModuleCCSession(
         isc::data::ConstElementPtr new_config),
     isc::data::ConstElementPtr(*command_handler)(
         const std::string& command, isc::data::ConstElementPtr args),
-    bool start_immediately, const char* socket_path
+    bool start_immediately
     ) :
     started_(false),
     session_(session)
@@ -205,7 +205,7 @@ ModuleCCSession::ModuleCCSession(
     config_handler_ = config_handler;
     command_handler_ = command_handler;
 
-    session_.establish(socket_path);
+    session_.establish(NULL);
     session_.subscribe(module_name_, "*");
     //session_.subscribe("Boss", "*");
     //session_.subscribe("statistics", "*");

+ 6 - 9
src/lib/config/ccsession.h

@@ -171,13 +171,11 @@ public:
      * @param command_handler A callback function pointer to be called when
      * a control command from a remote agent needs to be performed on the
      * local module.
-     * @param start_immediately If true (default), start listening to new
-     * commands and configuration changes asynchronously at the end of the
-     * constructor; if false, it will be delayed until the start() method is
-     * explicitly called. (This is a short term workaround for an
-     * initialization trouble. We'll need to develop a cleaner solution, and
-     * then remove this knob)
-     * @param socket_path The path to the socket. For testing purposes.
+     * @start_immediately If true (default), start listening to new commands
+     * and configuration changes asynchronously at the end of the constructor;
+     * if false, it will be delayed until the start() method is explicitly
+     * called. (This is a short term workaround for an initialization trouble.
+     * We'll need to develop a cleaner solution, and then remove this knob)
      */
     ModuleCCSession(const std::string& spec_file_name,
                     isc::cc::AbstractSession& session,
@@ -186,8 +184,7 @@ public:
                     isc::data::ConstElementPtr(*command_handler)(
                         const std::string& command,
                         isc::data::ConstElementPtr args) = NULL,
-                    bool start_immediately = true,
-                    const char* socket_path = NULL
+                    bool start_immediately = true
                     );
 
     /// Start receiving new commands and configuration changes asynchronously.

+ 1 - 11
src/lib/config/tests/Makefile.am

@@ -16,17 +16,8 @@ libfake_session_la_SOURCES = fake_session.h fake_session.cc
 
 TESTS =
 if HAVE_GTEST
-# We build this file with disabled warnings because of ASIO
-lib_LTLIBRARIES += libasiobased.la
-libasiobased_la_SOURCES = ccsession_unittests.cc
-libasiobased_la_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
-# Note: the ordering matters: -Wno-... must follow -Wextra (defined in
-# B10_CXXFLAGS)
-libasiobased_la_CXXFLAGS = $(AM_CXXFLAGS) -Wno-unused-parameter
-libasiobased_la_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS)
-
 TESTS += run_unittests
-run_unittests_SOURCES = module_spec_unittests.cc config_data_unittests.cc run_unittests.cc
+run_unittests_SOURCES = ccsession_unittests.cc module_spec_unittests.cc config_data_unittests.cc run_unittests.cc
 
 run_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
 run_unittests_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS)
@@ -35,7 +26,6 @@ run_unittests_LDADD += $(top_builddir)/src/lib/cc/libcc.la
 run_unittests_LDADD += $(top_builddir)/src/lib/exceptions/libexceptions.la
 run_unittests_LDADD += $(top_builddir)/src/lib/log/liblog.la
 run_unittests_LDADD += libfake_session.la
-run_unittests_LDADD += libasiobased.la
 run_unittests_LDADD += $(top_builddir)/src/lib/config/libcfgclient.la
 
 endif

+ 0 - 105
src/lib/config/tests/ccsession_unittests.cc

@@ -12,16 +12,6 @@
 // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 // PERFORMANCE OF THIS SOFTWARE.
 
-#include <asio.hpp>
-#include <boost/bind.hpp>
-
-// These 3 are for delayedStart test. For windows and such, probably disabling
-// that test would be best option, it is not that important and while the test
-// itself uses unix-specific features, it tests OS-agnostic part of code.
-#include <unistd.h> // For fork in one of the tests
-#include <sys/types.h> // And for kill
-#include <signal.h>
-
 #include <config.h>
 
 #include <gtest/gtest.h>
@@ -34,8 +24,6 @@
 
 #include <config/tests/data_def_unittests_config.h>
 
-#include <unistd.h>
-
 using namespace isc::data;
 using namespace isc::config;
 using namespace isc::cc;
@@ -567,97 +555,4 @@ TEST_F(CCSessionTest, initializationFail) {
     EXPECT_TRUE(session.haveSubscription("Spec29", "*"));
 }
 
-void
-dumpSocket(unsigned char* data, asio::local::stream_protocol::socket* socket,
-           asio::error_code)
-{
-    asio::async_read(*socket, asio::buffer(data, 1),
-                     boost::bind(&dumpSocket, data, socket, _1));
-}
-
-// Format the wire data for send
-void
-putTestData(size_t& length, unsigned char* data, ConstElementPtr routing,
-            ConstElementPtr msg)
-{
-    std::string r(routing->str());
-    std::string m(msg->str());
-    uint32_t l(r.size() + m.size() + 2);
-    l = htonl(l);
-    uint16_t h(r.size());
-    h = htons(h);
-    memcpy(data + length, &l, 4);
-    length += 4;
-    memcpy(data + length, &h, 2);
-    length += 2;
-    memcpy(data + length, r.c_str(), r.size());
-    length += r.size();
-    memcpy(data + length, m.c_str(), m.size());
-    length += m.size();
-}
-
-void
-emptyHandler(asio::error_code, size_t) {}
-
-TEST_F(CCSessionTest, delayedStart) {
-    // There's a problem when mixing synchronous and asynchronous
-    // reads, because both will read 4 bytes as length and mess it
-    // up.
-    //
-    // This tests our workaround for it, starting the asynchronous
-    // calls later.
-
-    // FIXME Is this OK in a test? Using asio directly?
-    // The cc library seems to do the same, we don't have
-    // asiolink wrappers for local sockets
-    //
-    // We use separate service for each process, just to make sure
-    // nothing bad happens
-    asio::io_service forkService;
-    ::unlink(TEST_SOCKET_PATH);
-    asio::local::stream_protocol::endpoint ep(TEST_SOCKET_PATH);
-    asio::local::stream_protocol::acceptor acceptor(forkService, ep);
-
-    // We fork and we'll do the feeding with data from there.
-    pid_t child(fork());
-    ASSERT_NE(-1, child);
-    if (!child) {
-        asio::local::stream_protocol::socket socket(forkService);
-        acceptor.accept(socket);
-        // We just empty everything from the socket
-        unsigned char dump;
-        dumpSocket(&dump, &socket, asio::error_code());
-        // And schedule writing of the data
-        size_t length(0);
-        // That is enough for our tests, no need for dynamic allocation
-        unsigned char data[4096];
-        putTestData(length, data, el("{}"), el("{\"lname\": \"mock\"}"));
-        putTestData(length, data, el("{\"reply\": 0}"), createAnswer());
-        putTestData(length, data, el("{\"reply\": 3}"), el("{\"a\": 42}"));
-        asio::async_write(socket, asio::buffer(data, length), &emptyHandler);
-        forkService.run();
-    } else {
-        try {
-            asio::io_service sessionService;
-            asio::io_service::work w(sessionService);
-            Session session(sessionService);
-            // Start the session, but defer the reads
-            ModuleCCSession mccs(ccspecfile("spec2.spec"), session,
-                                 NULL, NULL, false, TEST_SOCKET_PATH);
-            ConstElementPtr env, answer;
-            // Ask for the data there
-            // If there are two scheduled reads, this'll probably fail
-            session.group_recvmsg(env, answer, false, 3);
-            // Check that we received what we shoud have
-            EXPECT_TRUE(el("{\"a\": 42}")->equals(*answer));
-            kill(child, SIGTERM);
-        }
-        catch (...) {
-            // Just make sure the child is killed no matter what
-            kill(child, SIGTERM);
-            throw;
-        }
-    }
-}
-
 }

+ 0 - 1
src/lib/config/tests/data_def_unittests_config.h.in

@@ -13,4 +13,3 @@
 // PERFORMANCE OF THIS SOFTWARE.
 
 #define TEST_DATA_PATH "@abs_srcdir@/testdata"
-#define TEST_SOCKET_PATH "@abs_builddir@/test.sock"