Skip to content

Commit

Permalink
unittests: use unique socket for each test
Browse files Browse the repository at this point in the history
This makes parallel execution of tests possible
  • Loading branch information
franku authored and pstorz committed Mar 6, 2019
1 parent c9e2329 commit 6df58d6
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 32 deletions.
32 changes: 24 additions & 8 deletions core/src/tests/bareos_test_sockets.cc
Expand Up @@ -25,8 +25,6 @@
#include "gtest/gtest.h"
#include "include/bareos.h"

int listening_server_port_number = BSOCK_TEST_PORT_NUMBER;

static int create_listening_server_socket(int port)
{
int listen_file_descriptor;
Expand Down Expand Up @@ -97,19 +95,18 @@ std::unique_ptr<TestSockets> create_connected_server_and_client_bareos_socket()
{
std::unique_ptr<TestSockets> test_sockets(new TestSockets);

listening_server_port_number++;
int server_file_descriptor =
create_listening_server_socket(listening_server_port_number);
uint16_t portnumber = create_unique_socket_number();

int server_file_descriptor = create_listening_server_socket(portnumber);

EXPECT_GE(server_file_descriptor, 0) << "Could not create listening socket";
if (server_file_descriptor < 0) { return nullptr; }

test_sockets->client.reset(New(BareosSocketTCP));
test_sockets->client->sleep_time_after_authentication_error = 0;

bool ok =
test_sockets->client->connect(NULL, 1, 1, 0, "Director daemon", HOST,
NULL, listening_server_port_number, false);
bool ok = test_sockets->client->connect(NULL, 1, 1, 0, "Director daemon",
HOST, NULL, portnumber, false);
EXPECT_EQ(ok, true) << "Could not connect client socket with server socket.";
if (!ok) { return nullptr; }

Expand All @@ -132,3 +129,22 @@ BareosSocket* create_new_bareos_socket(int fd)
memset(&bs->peer_addr, 0, sizeof(bs->peer_addr));
return bs;
}


#include <sys/types.h>
#include <unistd.h>

static uint16_t listening_server_port_number = 0;

uint16_t create_unique_socket_number()
{
if (listening_server_port_number == 0) {
pid_t pid = getpid();
uint16_t port_number = 5 * (static_cast<uint32_t>(pid) % 10000) + 10000;
listening_server_port_number = port_number;
} else {
++listening_server_port_number;
}

return listening_server_port_number;
}
3 changes: 1 addition & 2 deletions core/src/tests/bareos_test_sockets.h
Expand Up @@ -37,10 +37,9 @@ class TestSockets {
TestSockets(const TestSockets&) = delete;
};

extern int listening_server_port_number;

int create_accepted_server_socket(int port);
BareosSocket* create_new_bareos_socket(int fd);
std::unique_ptr<TestSockets> create_connected_server_and_client_bareos_socket();
uint16_t create_unique_socket_number();

#endif /* BAREOS_TESTS_BAREOS_TEST_SOCKETS_H_ */
38 changes: 19 additions & 19 deletions core/src/tests/bsock_test.cc
Expand Up @@ -246,7 +246,8 @@ std::string server_cons_password;

TEST(bsock, auth_works)
{
listening_server_port_number++;
uint16_t portnumber = create_unique_socket_number();

std::promise<bool> promise;
std::future<bool> future = promise.get_future();

Expand All @@ -263,12 +264,11 @@ TEST(bsock, auth_works)

Dmsg0(10, "starting listen thread...\n");
std::thread server_thread(start_bareos_server, &promise, server_cons_name,
server_cons_password, HOST,
listening_server_port_number);
server_cons_password, HOST, portnumber);

Dmsg0(10, "connecting to server\n");
EXPECT_TRUE(connect_to_server(client_cons_name, client_cons_password, HOST,
listening_server_port_number));
portnumber));

server_thread.join();
EXPECT_TRUE(future.get());
Expand All @@ -277,7 +277,8 @@ TEST(bsock, auth_works)

TEST(bsock, auth_works_with_different_names)
{
listening_server_port_number++;
uint16_t portnumber = create_unique_socket_number();

std::promise<bool> promise;
std::future<bool> future = promise.get_future();

Expand All @@ -294,20 +295,20 @@ TEST(bsock, auth_works_with_different_names)

Dmsg0(10, "starting listen thread...\n");
std::thread server_thread(start_bareos_server, &promise, server_cons_name,
server_cons_password, HOST,
listening_server_port_number);
server_cons_password, HOST, portnumber);

Dmsg0(10, "connecting to server\n");
EXPECT_TRUE(connect_to_server(client_cons_name, client_cons_password, HOST,
listening_server_port_number));
portnumber));

server_thread.join();
EXPECT_TRUE(future.get());
}

TEST(bsock, auth_fails_with_different_passwords)
{
listening_server_port_number++;
uint16_t portnumber = create_unique_socket_number();

std::promise<bool> promise;
std::future<bool> future = promise.get_future();

Expand All @@ -324,20 +325,20 @@ TEST(bsock, auth_fails_with_different_passwords)

Dmsg0(10, "starting listen thread...\n");
std::thread server_thread(start_bareos_server, &promise, server_cons_name,
server_cons_password, HOST,
listening_server_port_number);
server_cons_password, HOST, portnumber);

Dmsg0(10, "connecting to server\n");
EXPECT_FALSE(connect_to_server(client_cons_name, client_cons_password, HOST,
listening_server_port_number));
portnumber));

server_thread.join();
EXPECT_FALSE(future.get());
}

TEST(bsock, auth_works_with_tls_cert)
{
listening_server_port_number++;
uint16_t portnumber = create_unique_socket_number();

std::promise<bool> promise;
std::future<bool> future = promise.get_future();

Expand All @@ -354,19 +355,18 @@ TEST(bsock, auth_works_with_tls_cert)

Dmsg0(10, "starting listen thread...\n");
std::thread server_thread(start_bareos_server, &promise, server_cons_name,
server_cons_password, HOST,
listening_server_port_number);
server_cons_password, HOST, portnumber);

Dmsg0(10, "connecting to server\n");

#if CLIENT_AS_A_THREAD
std::thread client_thread(
connect_to_server, client_cons_name, client_cons_password, HOST,
listening_server_port_number, cons_dir_config.get());
std::thread client_thread(connect_to_server, client_cons_name,
client_cons_password, HOST, portnumber,
cons_dir_config.get());
client_thread.join();
#else
EXPECT_TRUE(connect_to_server(client_cons_name, client_cons_password, HOST,
listening_server_port_number));
portnumber));
#endif

server_thread.join();
Expand Down
1 change: 0 additions & 1 deletion core/src/tests/bsock_test.h
Expand Up @@ -23,7 +23,6 @@
#define BAREOS_LIB_UNITTESTS_BSOCK_TEST_H_

#define HOST "127.0.0.1"
#define BSOCK_TEST_PORT_NUMBER 54321

class BareosSocket;

Expand Down
5 changes: 3 additions & 2 deletions core/src/tests/create_resource.cc
Expand Up @@ -20,6 +20,7 @@
*/
#include "create_resource.h"
#include "bsock_test.h"
#include "bareos_test_sockets.h"

#include "include/bareos.h"
#include "console/console_conf.h"
Expand All @@ -31,7 +32,7 @@ console::DirectorResource* CreateAndInitializeNewDirectorResource()
{
console::DirectorResource* dir = new (console::DirectorResource);
dir->address = (char*)HOST;
dir->DIRport = htons(BSOCK_TEST_PORT_NUMBER);
dir->DIRport = htons(create_unique_socket_number());
dir->tls_enable_ = false;
dir->tls_require_ = false;
dir->tls_cert_.certfile_ =
Expand Down Expand Up @@ -87,7 +88,7 @@ directordaemon::StorageResource* CreateAndInitializeNewStorageResource()
directordaemon::StorageResource* store =
new (directordaemon::StorageResource);
store->address = (char*)HOST;
store->SDport = htons(BSOCK_TEST_PORT_NUMBER);
store->SDport = htons(create_unique_socket_number());
store->tls_enable_ = false;
store->tls_require_ = false;
store->tls_cert_.certfile_ =
Expand Down

0 comments on commit 6df58d6

Please sign in to comment.