Skip to content

Commit

Permalink
Implemented my own system_execute command to work around differences …
Browse files Browse the repository at this point in the history
…between windows and Posix
  • Loading branch information
FlorianReimold committed Nov 1, 2023
1 parent 9222318 commit bd275d6
Showing 1 changed file with 39 additions and 27 deletions.
66 changes: 39 additions & 27 deletions tests/fineftp_test/src/permission_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,32 @@

namespace
{
#ifdef WIN32
// https://everything.curl.dev/usingcurl/returns
constexpr int curl_return_code_quote_command_error = 21;
constexpr int curl_return_code_upload_failed = 25;
constexpr int curl_return_code_login_failed = 67;
#else
// I have absolutely no idea, why the return codes are shifted by 8 bit on Linux and macOS.
// However, for some reasons they are.
// Here are the original return codes, that are only true on Windows:
// https://everything.curl.dev/usingcurl/returns
constexpr int curl_return_code_quote_command_error = 21 << 8;
constexpr int curl_return_code_upload_failed = 25 << 8;
constexpr int curl_return_code_login_failed = 67 << 8;

// Custom system command that returns the actual return value of the command, even on POSIX Systems.
int system_execute(const std::string& command)
{
int status = std::system(command.c_str());
#ifdef WIN32
return status;
#else // WIN32
if (WIFEXITED(status))
{
// Program has exited normally
return WEXITSTATUS(status);
}
else
{
// Program has exited abnormally
return -1;
}
#endif // WIN32

}

struct DirPreparer
{
DirPreparer()
Expand Down Expand Up @@ -121,7 +133,7 @@ TEST(PermissionTest, UploadNewFile)
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + "/test.txt\""
+ " -s -S ";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

if (permission_pair.second)
{
Expand Down Expand Up @@ -181,7 +193,7 @@ TEST(PermissionTest, UploadNewFileToNewDir)
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + "/newdir/test.txt\""
+ " -s -S --ftp-create-dirs";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

if (permission_pair.second)
{
Expand Down Expand Up @@ -243,7 +255,7 @@ TEST(PermissionTest, UploadAndOverwriteFile)
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + ftp_target_path + "\""
+ " -s -S ";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

if (permission_pair.second)
{
Expand Down Expand Up @@ -306,7 +318,7 @@ TEST(PermissionTest, AppendToExistingFile)
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + ftp_target_path + "\""
+ " -s -S --append";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

if (permission_pair.second)
{
Expand Down Expand Up @@ -369,7 +381,7 @@ TEST(PermissionTest, AppendToNewFile)
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + ftp_target_path + "\""
+ " -s -S --append";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

if (permission_pair.second)
{
Expand Down Expand Up @@ -436,7 +448,7 @@ TEST(PermissionTest, RenameFile)
+ " -o " + curl_output_file + " "
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + "\"";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

if (permission_pair.second)
{
Expand Down Expand Up @@ -511,7 +523,7 @@ TEST(PermissionTest, RenameDir)
+ " -o " + curl_output_file + " "
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + "\"";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

if (permission_pair.second)
{
Expand Down Expand Up @@ -572,7 +584,7 @@ TEST(PermissionTest, DeleteFile)
+ " -o " + curl_output_file + " "
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + "\"";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

if (permission_pair.second)
{
Expand Down Expand Up @@ -637,7 +649,7 @@ TEST(PermissionTest, DeleteEmptyDir)
+ " -o " + curl_output_file + " "
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + "\"";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

if (permission_pair.second)
{
Expand Down Expand Up @@ -683,7 +695,7 @@ TEST(PermissionTest, WrongLogin)
+ " -s -S ";


auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

// Test for Failure
ASSERT_EQ(curl_result, curl_return_code_login_failed);
Expand Down Expand Up @@ -721,7 +733,7 @@ TEST(PermissionTest, DeleteFullDirWithRMD)
+ " -o " + curl_output_file + " "
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + "\"";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

// Test for Failure
ASSERT_EQ(curl_result, curl_return_code_quote_command_error);
Expand Down Expand Up @@ -759,7 +771,7 @@ TEST(PermissionTest, DeleteDirWithDELE)
+ " -o " + curl_output_file + " "
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + "\"";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

// Test for Failure
ASSERT_EQ(curl_result, curl_return_code_quote_command_error);
Expand Down Expand Up @@ -790,7 +802,7 @@ TEST(PermissionTest, UploadToPathThatIsADir)
+ " -s -S ";


auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

// Test for Failure
ASSERT_EQ(curl_result, curl_return_code_upload_failed);
Expand Down Expand Up @@ -822,7 +834,7 @@ TEST(PermissionTest, AppendToPathThatIsADir)
+ " -s -S --append";


auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

// Test for Failure
ASSERT_EQ(curl_result, curl_return_code_upload_failed);
Expand Down Expand Up @@ -861,7 +873,7 @@ TEST(PermissionTest, RenameNonExistingFile)
+ " -o " + curl_output_file + " "
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + "\"";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

// Test for Failure
ASSERT_EQ(curl_result, curl_return_code_quote_command_error);
Expand Down Expand Up @@ -897,7 +909,7 @@ TEST(PermissionTest, RenameTargetExistsAlready)
+ " -o " + curl_output_file + " "
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + "\"";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

// Test for Failure
ASSERT_EQ(curl_result, curl_return_code_quote_command_error);
Expand Down Expand Up @@ -943,7 +955,7 @@ TEST(PermissionTest, DeleteNonExistingWithDELE)
+ " -o " + curl_output_file + " "
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + "\"";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

// Test for Failure
ASSERT_EQ(curl_result, curl_return_code_quote_command_error);
Expand Down Expand Up @@ -975,7 +987,7 @@ TEST(PermissionTest, DeleteNonExistingWithRMD)
+ " -o " + curl_output_file + " "
+ " \"ftp://myuser:mypass@localhost:" + std::to_string(ftp_port) + "\"";

auto curl_result = std::system(curl_command.c_str());
auto curl_result = system_execute(curl_command);

// Test for Failure
ASSERT_EQ(curl_result, curl_return_code_quote_command_error);
Expand Down

0 comments on commit bd275d6

Please sign in to comment.