Changed test name for auto parameterized test case

Added test for network::send_file

Changed test website error version reporting to show when error was
first found
This commit is contained in:
Pauli Nieminen 2008-08-10 10:50:11 +00:00
parent dc74d7ce2c
commit 843c0dd4e2
6 changed files with 109 additions and 11 deletions

View file

@ -426,6 +426,7 @@ static SOCKET_STATE send_file(buffer* buf)
size_t filesize = file_size(buf->config_error);
#ifdef USE_SENDFILE
// implements linux sendfile support
LOG_NW << "send_file use system sendfile: " << (network_use_system_sendfile?"yes":"no") << "\n";
if (network_use_system_sendfile)
{
std::vector<char> buffer;

View file

@ -52,7 +52,7 @@ struct wesnoth_global_fixture {
SDL_Init(SDL_INIT_TIMER);
test_utils::get_fake_display();
// lg::set_log_domain_severity("all",3);
//lg::set_log_domain_severity("all",3);
// Set more report as default
if (boost::unit_test::runtime_config::log_level() == boost::unit_test::invalid_log_level)

View file

@ -16,10 +16,18 @@
#include <string>
#include <SDL.h>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include "utils/auto_parameterized.hpp"
#include "network.hpp"
#include "network_worker.hpp"
#include "thread.hpp"
#include "config.hpp"
#include "filesystem.hpp"
#include "game_config.hpp"
//! Test networking to prevent bugs there.
//! Try to create all kind of unlikely error conditions
@ -31,7 +39,7 @@ BOOST_AUTO_TEST_SUITE( test_network )
const int TEST_PORT = 15010;
const int MIN_THREADS = 1;
const int MAX_THREADS = 1;
const int MAX_THREADS = 5;
const std::string LOCALHOST = "localhost";
@ -67,13 +75,14 @@ BOOST_AUTO_TEST_CASE( test_connect )
}
static network::connection receive(config& cfg, int max_tries = 100)
template<class T>
static network::connection receive(T& cfg, int max_tries = 100)
{
network::connection receive_con;
while ((receive_con = network::receive_data(cfg)) == network::null_connection)
{
// loop untill data is received
SDL_Delay(10);
SDL_Delay(50);
if (--max_tries <= 0)
{
BOOST_WARN_MESSAGE(max_tries > 0,"receiving data took too long. Preventing for ever loop");
@ -158,6 +167,95 @@ BOOST_AUTO_TEST_CASE( test_sdl_thread_wait_crash )
wes_manager = new network::manager(MIN_THREADS,MAX_THREADS);
wes_server = new network::server_manager(TEST_PORT,network::server_manager::MUST_CREATE_SERVER);
}
// Use 1kb, 500kb and 10Mb files for testing
struct sendfile_param {
sendfile_param(size_t size, bool system) : size_(size), system_(system) {}
size_t size_;
bool system_;
};
std::ostream& operator<<(std::ostream& s, const sendfile_param& p)
{
return s << "size: " << p.size_ << "system: " << (p.system_?"true":"false");
}
sendfile_param sendfile_sizes[] = {sendfile_param(1*1024,true),
sendfile_param(500*1024,true),
sendfile_param(10*1024*1024,true),
// sendfile_param(50*1024*1024,true),
sendfile_param(1*1024,false),
sendfile_param(500*1024,false),
sendfile_param(10*1024*1024,false)//,
// sendfile_param(50*1024*1024,false)
};
std::string create_random_sendfile(size_t size)
{
char buffer[1024];
const int buffer_size = sizeof(buffer)/sizeof(buffer[0]);
int *begin = reinterpret_cast<int*>(&buffer[0]);
int *end = begin + sizeof(buffer)/sizeof(int);
std::string filename = "sendfile.tmp";
scoped_ostream file = ostream_file(filename);
std::generate(begin,end,std::rand);
while( size > 0
&& !file->bad())
{
file->write(buffer, buffer_size);
size -= buffer_size;
}
return filename;
}
void delete_random_sendfile(const std::string file)
{
delete_directory(file);
}
template<class T>
class auto_resetter {
T& value_to_change_;
T old_val_;
public:
auto_resetter(const T& new_value, T& value_to_change) : value_to_change_(value_to_change), old_val_(value_to_change)
{
value_to_change_ = new_value;
}
~auto_resetter()
{
value_to_change_ = old_val_;
}
};
WESNOTH_PARAMETERIZED_TEST_CASE( test_system_sendfile, sendfile_param, sendfile_sizes, size )
{
auto_resetter<std::string> path("", game_config::path);
network::set_raw_data_only();
std::string file = create_random_sendfile(size.size_);
network_worker_pool::set_use_system_sendfile(size.system_);
network::connection client_client, server_client;
BOOST_CHECK_MESSAGE((client_client = network::connect(LOCALHOST, TEST_PORT)) > 0, "Can't connect to server!");
BOOST_CHECK_MESSAGE((server_client = network::accept_connection()) > 0, "Coulnd't accept new connection");
network::send_file(file, client_client);
std::vector<char> data;
BOOST_CHECK_EQUAL(server_client, receive(data,500));
BOOST_CHECK_EQUAL(data.size(), file_size(file));
network::disconnect(client_client);
BOOST_CHECK_THROW(receive(data),network::error);
delete_random_sendfile(file);
}
#if 0
BOOST_AUTO_TEST_CASE( test_multiple_connections )
{

View file

@ -39,7 +39,8 @@ static void BOOST_AUTO_TC_INVOKER( test_name )(const type_name& param_name ) \
struct BOOST_AUTO_TC_UNIQUE_ID( test_name ) {}; \
\
BOOST_AUTO_TU_REGISTRAR( test_name )( \
BOOST_PARAM_TEST_CASE(&BOOST_AUTO_TC_INVOKER( test_name ), \
boost::unit_test::make_test_case(&BOOST_AUTO_TC_INVOKER( test_name ), \
BOOST_TEST_STRINGIZE( test_name ),\
BOOST_JOIN(test_name, _begin), BOOST_JOIN(test_name, _end))); \
\
void test_name::test_method(const type_name& param_name) \

View file

@ -128,7 +128,7 @@ class TestError {
{
if ($this->end_version == -1)
{
$result = $this->db->Execute('SELECT svn_version as end_version FROM builds WHERE id=?',array($this->last_id));
$result = $this->db->Execute('SELECT MIN(svn_version) as end_version FROM builds WHERE id>? AND status=?',array($this->before_id, Build::S_GOOD));
$this->end_version = $result->fields['end_version'];
}
return $this->end_version;

View file

@ -13,12 +13,11 @@
</tr>
</table>
<br/>
<h3>Errors in unit tests in the latest build</h3>
<h3>Current list of errors in unit tests</h3>
<table class="test_error" border="1">
<tr>
<th>Type</th>
<th>First rev</th>
<th>Last rev</th>
<th>Broken in version</th>
<th>File</th>
<th>Line</th>
<th>Message</th>
@ -26,8 +25,7 @@
{foreach from=$build.errors item=err}
<tr>
<td class="{$err.error_type}">{$err.error_type}</td>
<td class="{$err.error_type}">r{$err.start_version}</td>
<td class="{$err.error_type}">r{$err.end_version}</td>
<td class="{$err.error_type}">r{$err.start_version} - r{$err.end_version}</td>
<td class="{$err.error_type}">{$err.file|autohide:25:false:true}</td>
<td class="{$err.error_type}">{$err.line}</td>
<td class="{$err.error_type}">{$err.error_msg|autohide:40:true}</td>