diff options
-rw-r--r-- | include/configreader.h | 5 | ||||
-rw-r--r-- | include/modules.h | 7 | ||||
-rw-r--r-- | include/testsuite.h | 9 | ||||
-rw-r--r-- | src/inspircd.cpp | 18 | ||||
-rw-r--r-- | src/modules.cpp | 1 | ||||
-rw-r--r-- | src/testsuite.cpp | 9 |
6 files changed, 45 insertions, 4 deletions
diff --git a/include/configreader.h b/include/configreader.h index e74895e8b..a5ae36c09 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -629,6 +629,11 @@ class CoreExport ServerConfig : public Extensible */ char sid[MAXBUF]; + /** True if we have been told to run the testsuite from the commandline, + * rather than entering the mainloop. + */ + bool TestSuite; + /** Construct a new ServerConfig */ ServerConfig(InspIRCd* Instance); diff --git a/include/modules.h b/include/modules.h index f19df390c..9498e239e 100644 --- a/include/modules.h +++ b/include/modules.h @@ -401,7 +401,7 @@ enum Implementation I_OnRawSocketAccept, I_OnRawSocketClose, I_OnRawSocketWrite, I_OnRawSocketRead, I_OnChangeLocalUserGECOS, I_OnUserRegister, I_OnChannelPreDelete, I_OnChannelDelete, I_OnPostOper, I_OnSyncOtherMetaData, I_OnSetAway, I_OnCancelAway, I_OnUserList, I_OnPostCommand, I_OnPostJoin, I_OnWhoisLine, I_OnBuildExemptList, I_OnRawSocketConnect, I_OnGarbageCollect, I_OnBufferFlushed, - I_OnText, I_OnReadConfig, I_OnDownloadFile, I_OnPassCompare, + I_OnText, I_OnReadConfig, I_OnDownloadFile, I_OnPassCompare, I_OnRunTestSuite, I_END }; @@ -1352,6 +1352,11 @@ class CoreExport Module : public Extensible * @param user The user who's buffer is now empty. */ virtual void OnBufferFlushed(User* user); + + /** Add test suite hooks here. These are used for testing functionality of a module + * via the --testsuite debugging parameter. + */ + virtual void OnRunTestSuite(); }; diff --git a/include/testsuite.h b/include/testsuite.h index 447e2b15e..b72e2b3a1 100644 --- a/include/testsuite.h +++ b/include/testsuite.h @@ -14,4 +14,13 @@ #ifndef __TESTSUITE_H__ #define __TESTSUITE_H__ +class InspIRCd; + +class TestSuite : public Extensible +{ + public: + TestSuite(InspIRCd* ServerInstance); + ~TestSuite(); +}; + #endif diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 501be3979..907a4c14d 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -289,7 +289,8 @@ InspIRCd::InspIRCd(int argc, char** argv) int found_ports = 0; FailedPortList pl; - int do_version = 0, do_nofork = 0, do_debug = 0, do_nolog = 0, do_root = 0; /* flag variables */ + int do_version = 0, do_nofork = 0, do_debug = 0, + do_nolog = 0, do_root = 0, do_testsuite = 0; /* flag variables */ char c = 0; memset(&server, 0, sizeof(server)); @@ -352,6 +353,7 @@ InspIRCd::InspIRCd(int argc, char** argv) { "nolog", no_argument, &do_nolog, 1 }, { "runasroot", no_argument, &do_root, 1 }, { "version", no_argument, &do_version, 1 }, + { "testsuite", no_argument, &do_testsuite, 1 }, { 0, 0, 0, 0 } }; @@ -372,7 +374,8 @@ InspIRCd::InspIRCd(int argc, char** argv) break; default: /* Unknown parameter! DANGER, INTRUDER.... err.... yeah. */ - printf("Usage: %s [--nofork] [--nolog] [--debug] [--logfile <filename>] [--runasroot] [--version] [--config <config>]\n", argv[0]); + printf("Usage: %s [--nofork] [--nolog] [--debug] [--logfile <filename>]\n\ + [--runasroot] [--version] [--config <config>] [--testsuite]\n", argv[0]); Exit(EXIT_STATUS_ARGV); break; } @@ -404,7 +407,8 @@ InspIRCd::InspIRCd(int argc, char** argv) /* Set the finished argument values */ Config->nofork = do_nofork; Config->forcedebug = do_debug; - Config->writelog = !do_nolog; + Config->writelog = !do_nolog; + Config->TestSuite = do_testsuite; if (!this->OpenLog(argv, argc)) { @@ -602,6 +606,14 @@ void InspIRCd::InitialiseUID() int InspIRCd::Run() { + /* See if we're supposed to be running the test suite rather than entering the mainloop */ + if (Config->TestSuite) + { + TestSuite* ts = new TestSuite(this); + delete ts; + Exit(0); + } + while (true) { #ifndef WIN32 diff --git a/src/modules.cpp b/src/modules.cpp index 81be24154..ba98ad865 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -192,6 +192,7 @@ void Module::OnBuildExemptList(MessageType, Channel*, User*, char, CUList&, con void Module::OnGarbageCollect() { } void Module::OnBufferFlushed(User*) { } void Module::OnText(User*, void*, int, const std::string&, char, CUList&) { } +void Module::OnRunTestSuite() { } ModuleManager::ModuleManager(InspIRCd* Ins) : ModCount(0), Instance(Ins) diff --git a/src/testsuite.cpp b/src/testsuite.cpp index a9ae8caba..80a9a3d38 100644 --- a/src/testsuite.cpp +++ b/src/testsuite.cpp @@ -16,4 +16,13 @@ #include "inspircd.h" #include "testsuite.h" +TestSuite::TestSuite(InspIRCd* ServerInstance) +{ + FOREACH_MOD(I_OnRunTestSuite, OnRunTestSuite()); +} + +TestSuite::~TestSuite() +{ +} + /* $Core: libIRCDtestsuite */ |