Skip to content
Snippets Groups Projects
Commit 52a8aaa5 authored by Carsten Patzke's avatar Carsten Patzke
Browse files

Added Skip() test to tcp/ip test

parent 77a353db
No related branches found
No related tags found
No related merge requests found
......@@ -14,7 +14,7 @@ class SystemIO final : public IO {
private:
static const int kNetBufferSize;//TODO: need to set by config
void ApplyNetworkOptions(SocketDescriptor socket_fd, IOErrors * err) const;
void ApplyNetworkOptions(SocketDescriptor socket_fd, IOErrors* err) const;
//void CollectFileInformationRecursivly(const std::string& path, std::vector<FileInfo>* files, IOErrors* err) const;
int FileOpenModeToPosixFileOpenMode(int open_flags) const;
......@@ -60,7 +60,7 @@ class SystemIO final : public IO {
void InetBind(SocketDescriptor socket_fd, const std::string& address, IOErrors* err) const;
std::unique_ptr<std::tuple<std::string, SocketDescriptor>> InetAccept(SocketDescriptor socket_fd, IOErrors* err) const;
void InetConnect(SocketDescriptor socket_fd, const std::string& address, IOErrors* err) const;
SocketDescriptor CreateAndConnectIPTCPSocket(const std::string& address, IOErrors* err) const;
SocketDescriptor CreateAndConnectIPTCPSocket(const std::string& address, IOErrors* err) const;
size_t Receive(SocketDescriptor socket_fd, void* buf, size_t length, IOErrors* err) const;
size_t ReceiveTimeout(SocketDescriptor socket_fd, void* buf, size_t length, long timeout_in_usec,
IOErrors* err) const;
......
......@@ -37,15 +37,14 @@ void StripBasePath(const std::string& folder, std::vector<FileInfo>* file_list)
// PRIVATE FUNCTIONS - END
void hidra2::SystemIO::ApplyNetworkOptions(SocketDescriptor socket_fd, IOErrors* err) const
{
if (
setsockopt(socket_fd, SOL_SOCKET, SO_SNDBUF, (char*)&kNetBufferSize, sizeof(kNetBufferSize)) != 0
||
setsockopt(socket_fd, SOL_SOCKET, SO_SNDBUF, (char*)&kNetBufferSize, sizeof(kNetBufferSize)) != 0
) {
*err = GetLastError();
}
void hidra2::SystemIO::ApplyNetworkOptions(SocketDescriptor socket_fd, IOErrors* err) const {
if (
setsockopt(socket_fd, SOL_SOCKET, SO_SNDBUF, (char*)&kNetBufferSize, sizeof(kNetBufferSize)) != 0
||
setsockopt(socket_fd, SOL_SOCKET, SO_SNDBUF, (char*)&kNetBufferSize, sizeof(kNetBufferSize)) != 0
) {
*err = GetLastError();
}
}
......@@ -252,9 +251,9 @@ SocketDescriptor SystemIO::CreateSocket(AddressFamilies address_family,
return socket_fd;
}
*err = IOErrors::kNoError;
*err = IOErrors::kNoError;
ApplyNetworkOptions(socket_fd, err);
ApplyNetworkOptions(socket_fd, err);
return socket_fd;
}
......@@ -484,7 +483,7 @@ IOErrors* err) const {
return nullptr;
}
ApplyNetworkOptions(peer_fd, err);
ApplyNetworkOptions(peer_fd, err);
std::string
address = std::string(inet_ntoa(client_address.sin_addr)) + ':' + std::to_string(client_address.sin_port);
......
......@@ -20,6 +20,7 @@ static const std::unique_ptr<SystemIO> io(new SystemIO());
static const std::string kListenAddress = "127.0.0.1:60123";
static std::promise<void> kThreadStarted;
static const int kNumberOfChecks = 3;
static const size_t kSkipAmount = 500;
void Exit(int exit_number) {
std::cerr << "ERROR: Exit on " << exit_number << std::endl;
......@@ -63,19 +64,25 @@ std::thread* CreateEchoServerThread() {
if (err == IOErrors::kEndOfFile) {
break;
}
ExitIfErrIsNotOk(&err, 105);//ReceiveTimeout
std::unique_ptr<uint8_t[]> buffer(new uint8_t[need_to_receive_size]);
io->Skip(client_fd, kSkipAmount, &err);
ExitIfErrIsNotOk(&err, 106);
size_t received = io->Receive(client_fd, buffer.get(), need_to_receive_size, &err);
io->Send(client_fd, buffer.get(), received, &err);
ExitIfErrIsNotOk(&err, 106);
ExitIfErrIsNotOk(&err, 107);
}
std::cout << "[SERVER][" << i << "] Close client_fd" << std::endl;
io->CloseSocket(client_fd, &err);
ExitIfErrIsNotOk(&err, 107);
ExitIfErrIsNotOk(&err, 108);
}
std::cout << "[SERVER] Close server socket" << std::endl;
io->CloseSocket(socket, &err);
ExitIfErrIsNotOk(&err, 108);
ExitIfErrIsNotOk(&err, 109);
});
}
......@@ -104,14 +111,18 @@ void CheckNormal(int times, size_t size) {
io->Send(socket, &send_size, sizeof(uint64_t), &err);
ExitIfErrIsNotOk(&err, 203);
std::cout << "[CLIENT] Send data to skip" << std::endl;
io->Send(socket, buffer.get(), kSkipAmount, &err);
ExitIfErrIsNotOk(&err, 204);
std::cout << "[CLIENT] Send" << std::endl;
io->Send(socket, buffer.get(), size, &err);
ExitIfErrIsNotOk(&err, 203);
ExitIfErrIsNotOk(&err, 205);
std::unique_ptr<uint8_t[]> buffer2(new uint8_t[size]);
std::cout << "[CLIENT] Receive" << std::endl;
size_t receive_count = io->Receive(socket, buffer2.get(), size, &err);
ExitIfErrIsNotOk(&err, 204);
ExitIfErrIsNotOk(&err, 206);
if(receive_count != size) {
Exit(205);
}
......@@ -119,14 +130,14 @@ void CheckNormal(int times, size_t size) {
std::cout << "[CLIENT] buffer check" << std::endl;
for (size_t i = 0; i < size; i++) {
if (buffer[i] != buffer2[i]) {
Exit(206);
Exit(207);
}
}
}
std::cout << "[CLIENT] Close" << std::endl;
io->CloseSocket(socket, &err);
ExitIfErrIsNotOk(&err, 107);
ExitIfErrIsNotOk(&err, 108);
}
int main(int argc, char* argv[]) {
......
......@@ -87,7 +87,7 @@ void Speedtest() {
high_resolution_clock::time_point t2 = high_resolution_clock::now();
double tookMs = std::chrono::duration_cast<std::chrono::milliseconds>( t2 - t1 ).count();
std::cout << std::setprecision(2) << std::fixed << (kTestSize / (tookMs / 1000)) / 1024 / 1024 / 1024 << " GiByte/s" <<
std::cout << i << ":\t" << std::setprecision(2) << std::fixed << (kTestSize / (tookMs / 1000)) / 1024 / 1024 / 1024 << " GiByte/s" <<
std::endl;
/*
<< "\t"<< std::fixed << kTestSize/(tookMs/1000) << " Byte/s" << std::endl
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment