summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/configreader.h5
-rw-r--r--include/modules.h7
-rw-r--r--include/testsuite.h9
-rw-r--r--src/inspircd.cpp18
-rw-r--r--src/modules.cpp1
-rw-r--r--src/testsuite.cpp9
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 */