181 lines
4.3 KiB
C++
181 lines
4.3 KiB
C++
// Copyright (C) 2012 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
|
|
|
|
#include <sstream>
|
|
#include <string>
|
|
#include <cstdlib>
|
|
#include <ctime>
|
|
#include <dlib/iosockstream.h>
|
|
#include <dlib/server.h>
|
|
#include <vector>
|
|
|
|
#include "tester.h"
|
|
|
|
namespace
|
|
{
|
|
|
|
using namespace test;
|
|
using namespace dlib;
|
|
using namespace std;
|
|
|
|
|
|
logger dlog("test.iosockstream");
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
class serv : public server_iostream
|
|
{
|
|
virtual void on_connect (
|
|
std::istream& in,
|
|
std::ostream& out,
|
|
const std::string& ,
|
|
const std::string& ,
|
|
unsigned short ,
|
|
unsigned short ,
|
|
uint64
|
|
)
|
|
{
|
|
try
|
|
{
|
|
dlog << LINFO << "serv1: serving connection";
|
|
|
|
std::string temp;
|
|
in >> temp;
|
|
DLIB_TEST(temp == "word");
|
|
in >> temp;
|
|
DLIB_TEST(temp == "another");
|
|
out << "yay words ";
|
|
in >> temp;
|
|
DLIB_TEST(temp == "yep");
|
|
}
|
|
catch (error& e)
|
|
{
|
|
error_string = e.what();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public:
|
|
std::string error_string;
|
|
|
|
};
|
|
|
|
class serv2 : public server_iostream
|
|
{
|
|
virtual void on_connect (
|
|
std::istream& ,
|
|
std::ostream& out,
|
|
const std::string& ,
|
|
const std::string& ,
|
|
unsigned short ,
|
|
unsigned short ,
|
|
uint64
|
|
)
|
|
{
|
|
try
|
|
{
|
|
dlog << LINFO << "serv2: serving connection";
|
|
|
|
out << "one two three four five";
|
|
}
|
|
catch (error& e)
|
|
{
|
|
error_string = e.what();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public:
|
|
std::string error_string;
|
|
|
|
};
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
void test1()
|
|
{
|
|
dlog << LINFO << "in test1()";
|
|
serv theserv;
|
|
theserv.set_listening_port(12345);
|
|
theserv.start_async();
|
|
|
|
// wait a little bit to make sure the server has started listening before we try
|
|
// to connect to it.
|
|
dlib::sleep(500);
|
|
|
|
for (int i = 0; i < 200; ++i)
|
|
{
|
|
dlog << LINFO << "i: " << i;
|
|
print_spinner();
|
|
iosockstream stream("localhost:12345");
|
|
|
|
stream << "word another ";
|
|
std::string temp;
|
|
stream >> temp;
|
|
DLIB_TEST(temp == "yay");
|
|
stream >> temp;
|
|
DLIB_TEST(temp == "words");
|
|
stream << "yep ";
|
|
}
|
|
|
|
// Just to make sure the server finishes processing the last connection before
|
|
// we kill it and accidentally trigger a DLIB_TEST().
|
|
dlib::sleep(500);
|
|
|
|
if (theserv.error_string.size() != 0)
|
|
throw error(theserv.error_string);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
void test2()
|
|
{
|
|
dlog << LINFO << "in test2()";
|
|
serv2 theserv;
|
|
theserv.set_listening_port(12345);
|
|
theserv.start_async();
|
|
|
|
// wait a little bit to make sure the server has started listening before we try
|
|
// to connect to it.
|
|
dlib::sleep(500);
|
|
|
|
for (int i = 0; i < 200; ++i)
|
|
{
|
|
dlog << LINFO << "i: " << i;
|
|
print_spinner();
|
|
iosockstream stream("localhost:12345");
|
|
|
|
std::string temp;
|
|
stream >> temp; DLIB_TEST(temp == "one");
|
|
stream >> temp; DLIB_TEST(temp == "two");
|
|
stream >> temp; DLIB_TEST(temp == "three");
|
|
stream >> temp; DLIB_TEST(temp == "four");
|
|
stream >> temp; DLIB_TEST(temp == "five");
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
class test_iosockstream : public tester
|
|
{
|
|
public:
|
|
test_iosockstream (
|
|
) :
|
|
tester ("test_iosockstream",
|
|
"Runs tests on the iosockstream component.")
|
|
{}
|
|
|
|
void perform_test (
|
|
)
|
|
{
|
|
test1();
|
|
test2();
|
|
}
|
|
} a;
|
|
|
|
}
|
|
|
|
|