sustaining_gazes/lib/3rdParty/dlib/include/dlib/test/iosockstream.cpp
2016-04-28 15:40:36 -04:00

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;
}