+ cout << "\n\nWildcard and CIDR tests\n\n";
+ bool passed = false;
+
+ WCTEST("foobar", "*");
+ WCTEST("foobar", "foo*");
+ WCTEST("foobar", "*bar");
+ WCTEST("foobar", "foo??r");
+ WCTEST("foobar.test", "fo?bar.*t");
+ WCTEST("foobar.test", "fo?bar.t*t");
+ WCTEST("foobar.tttt", "fo?bar.**t");
+ WCTEST("foobar", "foobar");
+ WCTEST("foobar", "foo***bar");
+ WCTEST("foobar", "*foo***bar");
+ WCTEST("foobar", "**foo***bar");
+ WCTEST("foobar", "**foobar*");
+ WCTEST("foobar", "**foobar**");
+ WCTEST("foobar", "**foobar");
+ WCTEST("foobar", "**f?*?ar");
+ WCTEST("foobar", "**f?*b?r");
+ WCTEST("foofar", "**f?*f*r");
+ WCTEST("foofar", "**f?*f*?");
+ WCTEST("r", "*");
+ WCTEST("", "");
+ WCTEST("test@foo.bar.test", "*@*.bar.test");
+ WCTEST("test@foo.bar.test", "*test*@*.bar.test");
+ WCTEST("test@foo.bar.test", "*@*test");
+
+ WCTEST("a", "*a");
+ WCTEST("aa", "*a");
+ WCTEST("aaa", "*a");
+ WCTEST("aaaa", "*a");
+ WCTEST("aaaaa", "*a");
+ WCTEST("aaaaaa", "*a");
+ WCTEST("aaaaaaa", "*a");
+ WCTEST("aaaaaaaa", "*a");
+ WCTEST("aaaaaaaaa", "*a");
+ WCTEST("aaaaaaaaaa", "*a");
+ WCTEST("aaaaaaaaaaa", "*a");
+
+ WCTESTNOT("foobar", "bazqux");
+ WCTESTNOT("foobar", "*qux");
+ WCTESTNOT("foobar", "foo*x");
+ WCTESTNOT("foobar", "baz*");
+ WCTESTNOT("foobar", "foo???r");
+ WCTESTNOT("foobar", "foobars");
+ WCTESTNOT("foobar", "**foobar**h");
+ WCTESTNOT("foobar", "**foobar**h*");
+ WCTESTNOT("foobar", "**f??*bar?");
+ WCTESTNOT("foobar", "");
+ WCTESTNOT("", "foobar");
+ WCTESTNOT("OperServ", "O");
+ WCTESTNOT("O", "OperServ");
+ WCTESTNOT("foobar.tst", "fo?bar.*g");
+ WCTESTNOT("foobar.test", "fo?bar.*tt");
+
+ CIDRTEST("brain@1.2.3.4", "*@1.2.0.0/16");
+ CIDRTEST("brain@1.2.3.4", "*@1.2.3.0/24");
+ CIDRTEST("192.168.3.97", "192.168.3.0/24");
+
+ CIDRTESTNOT("brain@1.2.3.4", "x*@1.2.0.0/16");
+ CIDRTESTNOT("brain@1.2.3.4", "*@1.3.4.0/24");
+ CIDRTESTNOT("1.2.3.4", "1.2.4.0/24");
+ CIDRTESTNOT("brain@1.2.3.4", "*@/24");
+ CIDRTESTNOT("brain@1.2.3.4", "@1.2.3.4/9");
+ CIDRTESTNOT("brain@1.2.3.4", "@");
+ CIDRTESTNOT("brain@1.2.3.4", "");
+
+ return true;
+}
+
+bool TestSuite::DoThreadTests()
+{
+ std::string anything;
+ ThreadEngine* te = NULL;
+
+ cout << "Creating new ThreadEngine class...\n";
+ try
+ {
+ ThreadEngineFactory* tef = new ThreadEngineFactory();
+ te = tef->Create(ServerInstance);
+ delete tef;
+ }
+ catch (...)
+ {
+ cout << "Creation failed, test failure.\n";
+ return false;
+ }
+ cout << "Creation success, type " << te->GetName() << "\n";
+
+ cout << "Allocate: new TestSuiteThread...\n";
+ TestSuiteThread* tst = new TestSuiteThread();
+
+ cout << "ThreadEngine::Create on TestSuiteThread...\n";
+ try
+ {
+ try
+ {
+ te->Create(tst);
+ }
+ catch (CoreException &ce)
+ {
+ cout << "Failure: " << ce.GetReason() << endl;
+ }
+ }
+ catch (...)
+ {
+ cout << "Failure, unhandled exception\n";
+ }
+
+ cout << "Type any line and press enter to end test.\n";
+ cin >> anything;
+
+ /* Thread engine auto frees thread on delete */
+ cout << "Waiting for thread to exit... " << flush;
+ delete tst;
+ cout << "Done!\n";
+
+ cout << "Delete ThreadEngine... ";
+ delete te;
+ cout << "Done!\n";
+
+ return true;