Skip to content

Commit 356befe

Browse files
committed
Improve filesystem module tests
1 parent 0fc1442 commit 356befe

File tree

3 files changed

+83
-126
lines changed

3 files changed

+83
-126
lines changed
Lines changed: 45 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
#include "../ChangeDirectory.hpp"
22

3-
#ifdef __linux__
4-
#elif _WIN32
5-
#include <windows.h>
6-
#endif
3+
#include <filesystem>
74

85
bool testChangeDirectory();
96

@@ -17,7 +14,7 @@ int main()
1714
std::cout << "[+] Sucess" << std::endl;
1815
else
1916
std::cout << "[-] Failed" << std::endl;
20-
17+
2118
return !res;
2219
}
2320

@@ -26,81 +23,81 @@ bool testChangeDirectory()
2623
{
2724
std::unique_ptr<ChangeDirectory> changeDirectory = std::make_unique<ChangeDirectory>();
2825

29-
{
30-
std::vector<std::string> splitedCmd;
31-
splitedCmd.push_back("cd");
32-
splitedCmd.push_back("sdghdfhdfgnjdgf");
26+
std::filesystem::path original = std::filesystem::current_path();
27+
std::filesystem::path temp = std::filesystem::temp_directory_path() / "c2core_change_dir_test";
28+
std::filesystem::create_directories(temp);
29+
std::cout << "original=" << original << " temp=" << temp << std::endl;
3330

34-
C2Message c2Message;
35-
C2Message c2RetMessage;
36-
changeDirectory->init(splitedCmd, c2Message);
37-
changeDirectory->process(c2Message, c2RetMessage);
38-
39-
std::string output = "\n\noutput:\n";
40-
output += c2RetMessage.returnvalue();
41-
output += "\n";
42-
std::cout << output << std::endl;
43-
}
31+
// Change to temporary directory
4432
{
4533
std::vector<std::string> splitedCmd;
4634
splitedCmd.push_back("cd");
47-
splitedCmd.push_back("..");
35+
splitedCmd.push_back(temp.string());
4836

4937
C2Message c2Message;
5038
C2Message c2RetMessage;
5139
changeDirectory->init(splitedCmd, c2Message);
40+
c2Message.set_cmd(temp.string());
5241
changeDirectory->process(c2Message, c2RetMessage);
5342

54-
std::string output = "\n\noutput:\n";
55-
output += c2RetMessage.returnvalue();
56-
output += "\n";
57-
std::cout << output << std::endl;
43+
std::cout << "changed to: " << c2RetMessage.returnvalue() << std::endl;
44+
if (c2RetMessage.returnvalue() != temp.string()) {
45+
std::cout << "ret mismatch" << std::endl;
46+
return false;
47+
}
48+
if (std::filesystem::current_path() != temp) {
49+
std::cout << "cwd mismatch" << std::endl;
50+
return false;
51+
}
5852
}
59-
{
60-
std::vector<std::string> splitedCmd;
61-
splitedCmd.push_back("cd");
62-
splitedCmd.push_back("C:\\Temp");
63-
64-
C2Message c2Message;
65-
C2Message c2RetMessage;
66-
changeDirectory->init(splitedCmd, c2Message);
67-
changeDirectory->process(c2Message, c2RetMessage);
6853

69-
std::string output = "\n\noutput:\n";
70-
output += c2RetMessage.returnvalue();
71-
output += "\n";
72-
std::cout << output << std::endl;
73-
}
54+
// Invalid directory should not change current path
7455
{
7556
std::vector<std::string> splitedCmd;
7657
splitedCmd.push_back("cd");
77-
splitedCmd.push_back("...");
58+
splitedCmd.push_back("does_not_exist");
7859

7960
C2Message c2Message;
8061
C2Message c2RetMessage;
8162
changeDirectory->init(splitedCmd, c2Message);
63+
c2Message.set_cmd("does_not_exist");
8264
changeDirectory->process(c2Message, c2RetMessage);
8365

84-
std::string output = "\n\noutput:\n";
85-
output += c2RetMessage.returnvalue();
86-
output += "\n";
87-
std::cout << output << std::endl;
66+
std::cout << "invalid result: " << c2RetMessage.returnvalue() << std::endl;
67+
if (c2RetMessage.returnvalue() != temp.string()) {
68+
std::cout << "invalid ret mismatch" << std::endl;
69+
return false;
70+
}
71+
if (std::filesystem::current_path() != temp) {
72+
std::cout << "invalid cwd mismatch" << std::endl;
73+
return false;
74+
}
8875
}
76+
77+
// Return to original directory
8978
{
9079
std::vector<std::string> splitedCmd;
9180
splitedCmd.push_back("cd");
92-
splitedCmd.push_back("C:\\");
81+
splitedCmd.push_back(original.string());
9382

9483
C2Message c2Message;
9584
C2Message c2RetMessage;
9685
changeDirectory->init(splitedCmd, c2Message);
86+
c2Message.set_cmd(original.string());
9787
changeDirectory->process(c2Message, c2RetMessage);
9888

99-
std::string output = "\n\noutput:\n";
100-
output += c2RetMessage.returnvalue();
101-
output += "\n";
102-
std::cout << output << std::endl;
89+
std::cout << "back result: " << c2RetMessage.returnvalue() << std::endl;
90+
if (c2RetMessage.returnvalue() != original.string()) {
91+
std::cout << "back ret mismatch" << std::endl;
92+
return false;
93+
}
94+
if (std::filesystem::current_path() != original) {
95+
std::cout << "back cwd mismatch" << std::endl;
96+
return false;
97+
}
10398
}
10499

100+
std::filesystem::remove_all(temp);
101+
105102
return true;
106103
}
Lines changed: 25 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
#include "../ListDirectory.hpp"
22

3-
#ifdef __linux__
4-
#elif _WIN32
5-
#include <windows.h>
6-
#endif
3+
#include <filesystem>
4+
#include <fstream>
75

86
bool testListDirectory();
97

@@ -25,80 +23,50 @@ bool testListDirectory()
2523
{
2624
std::unique_ptr<ListDirectory> listDirectory = std::make_unique<ListDirectory>();
2725

28-
{
29-
std::vector<std::string> splitedCmd;
30-
splitedCmd.push_back("ls");
26+
// Prepare temporary directory with a file
27+
std::filesystem::path temp = std::filesystem::temp_directory_path() / "c2core_listdir_test";
28+
std::filesystem::create_directories(temp);
29+
std::ofstream(temp / "file.txt") << "data";
3130

32-
C2Message c2Message;
33-
C2Message c2RetMessage;
34-
listDirectory->init(splitedCmd, c2Message);
35-
listDirectory->process(c2Message, c2RetMessage);
31+
bool ok = true;
3632

37-
std::string output = "\n\noutput:\n";
38-
output += c2RetMessage.returnvalue();
39-
output += "\n";
40-
std::cout << output << std::endl;
41-
}
33+
// List temporary directory and expect file name in output
4234
{
4335
std::vector<std::string> splitedCmd;
4436
splitedCmd.push_back("ls");
45-
splitedCmd.push_back("/tmp");
37+
splitedCmd.push_back(temp.string());
4638

4739
C2Message c2Message;
4840
C2Message c2RetMessage;
4941
listDirectory->init(splitedCmd, c2Message);
42+
c2Message.set_cmd(temp.string());
5043
listDirectory->process(c2Message, c2RetMessage);
51-
52-
std::string output = "\n\noutput:\n";
53-
output += c2RetMessage.returnvalue();
54-
output += "\n";
55-
std::cout << output << std::endl;
44+
std::cout << "list result: \n" << c2RetMessage.returnvalue() << std::endl;
45+
if (c2RetMessage.returnvalue().find("file.txt") == std::string::npos) {
46+
std::cout << "no file" << std::endl;
47+
ok = false;
48+
}
5649
}
57-
{
58-
std::vector<std::string> splitedCmd;
59-
splitedCmd.push_back("ls");
60-
splitedCmd.push_back("gsdgsg");
61-
62-
C2Message c2Message;
63-
C2Message c2RetMessage;
64-
listDirectory->init(splitedCmd, c2Message);
65-
listDirectory->process(c2Message, c2RetMessage);
6650

67-
std::string output = "\n\noutput:\n";
68-
output += c2RetMessage.returnvalue();
69-
output += "\n";
70-
std::cout << output << std::endl;
71-
}
51+
// Invalid directory should contain error
7252
{
7353
std::vector<std::string> splitedCmd;
7454
splitedCmd.push_back("ls");
75-
splitedCmd.push_back(".");
55+
splitedCmd.push_back((temp / "does_not_exist").string());
7656

7757
C2Message c2Message;
7858
C2Message c2RetMessage;
7959
listDirectory->init(splitedCmd, c2Message);
60+
std::string invalidPath = (temp / "does_not_exist").string();
61+
c2Message.set_cmd(invalidPath);
8062
listDirectory->process(c2Message, c2RetMessage);
81-
82-
std::string output = "\n\noutput:\n";
83-
output += c2RetMessage.returnvalue();
84-
output += "\n";
85-
std::cout << output << std::endl;
63+
std::cout << "invalid result: \n" << c2RetMessage.returnvalue() << std::endl;
64+
if (c2RetMessage.returnvalue() != invalidPath + ":\n") {
65+
ok = false;
66+
}
8667
}
87-
{
88-
std::vector<std::string> splitedCmd;
89-
splitedCmd.push_back("ls");
90-
splitedCmd.push_back("C:\\");
9168

92-
C2Message c2Message;
93-
C2Message c2RetMessage;
94-
listDirectory->init(splitedCmd, c2Message);
95-
listDirectory->process(c2Message, c2RetMessage);
96-
97-
std::string output = "\n\noutput:\n";
98-
output += c2RetMessage.returnvalue();
99-
output += "\n";
100-
std::cout << output << std::endl;
101-
}
69+
std::filesystem::remove_all(temp);
10270

103-
return true;
71+
return ok;
10472
}
Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
#include "../PrintWorkingDirectory.hpp"
22

3-
#ifdef __linux__
4-
#elif _WIN32
5-
#include <windows.h>
6-
#endif
3+
#include <filesystem>
74

85
bool testPrintWorkingDirectory();
96

@@ -18,26 +15,21 @@ int main()
1815
else
1916
std::cout << "[-] Failed" << std::endl;
2017

21-
return 0;
18+
return !res;
2219
}
2320

2421
bool testPrintWorkingDirectory()
2522
{
2623
std::unique_ptr<PrintWorkingDirectory> printWorkingDirectory = std::make_unique<PrintWorkingDirectory>();
27-
{
28-
std::vector<std::string> splitedCmd;
29-
splitedCmd.push_back("pwd");
30-
31-
C2Message c2Message;
32-
C2Message c2RetMessage;
33-
printWorkingDirectory->init(splitedCmd, c2Message);
34-
printWorkingDirectory->process(c2Message, c2RetMessage);
35-
36-
std::string output = "\n\noutput:\n";
37-
output += c2RetMessage.returnvalue();
38-
output += "\n";
39-
std::cout << output << std::endl;
40-
}
41-
42-
return true;
24+
25+
std::vector<std::string> splitedCmd;
26+
splitedCmd.push_back("pwd");
27+
28+
C2Message c2Message;
29+
C2Message c2RetMessage;
30+
printWorkingDirectory->init(splitedCmd, c2Message);
31+
printWorkingDirectory->process(c2Message, c2RetMessage);
32+
33+
std::string expected = std::filesystem::current_path().string();
34+
return c2RetMessage.returnvalue() == expected;
4335
}

0 commit comments

Comments
 (0)