Skip to content

Commit 53aa286

Browse files
committed
Dirents are dumped by read value (again)
Removed error counter from ly log util Moved Enderman to UTests
1 parent c1ed010 commit 53aa286

10 files changed

Lines changed: 188 additions & 107 deletions

File tree

tests/code/filesystem_dirents/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ link_libraries(SceSystemService)
44

55
create_pkg(TEST12345 5 50 "code/log.cpp;code/fs_test_tools.cpp;code/fs_test.cpp;code/main.cpp")
66
set_target_properties(TEST12345 PROPERTIES OO_PKG_TITLE "Enderman")
7-
set_target_properties(TEST12345 PROPERTIES OO_PKG_APPVER "1.08")
7+
set_target_properties(TEST12345 PROPERTIES OO_PKG_APPVER "1.10")
88
finalize_pkg(TEST12345)

tests/code/filesystem_dirents/code/fs_test.cpp

Lines changed: 166 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@
22

33
#include "orbis/UserService.h"
44

5+
#include <CppUTest/TestHarness.h>
56
#include <chrono>
67
#include <cstring>
78
#include <filesystem>
89
#include <sstream>
910
#include <string>
1011
#include <vector>
1112

12-
namespace FS_Test {
13-
1413
std::vector<u32> read_sizes {// 8
1514
7, 8, 9,
1615
// 16
@@ -37,7 +36,6 @@ std::vector<u32> read_sizes {// 8
3736
2137, 21, 37, 69, 420, 42, 123, 222, 666, 911, 112, 997,
3837
// something for zoomers
3938
67};
40-
std::vector<u32> read_sizes_pfs {65535, 65536, 65537};
4139
std::vector<u16> read_offsets {0, 1, 5, 10, 21, 37, 127, 128, 129, 400, 500, 512, 768, 1024, 111, 666, 420, 1234, 96, 42};
4240

4341
namespace fs = std::filesystem;
@@ -47,9 +45,170 @@ bool DumpByRead(int dir_fd, int dump_fd, char* buffer, size_t size);
4745
bool DumpByDirent(int dir_fd, int dump_fd, char* buffer, size_t size, s64* idx);
4846
void DumpDirectory(int fd, int buffer_size, s64 offset, bool is_pfs = false);
4947

48+
TEST_GROUP (DirentTests) {
49+
void setup() {}
50+
void teardown() {}
51+
};
52+
53+
TEST(DirentTests, LseekRegularTests) {
54+
int fd = sceKernelOpen("/data/enderman", O_DIRECTORY | O_RDONLY, 0777);
55+
CHECK_COMPARE_TEXT(fd, >, 0, "Unable to open /data/enderman");
56+
57+
int status;
58+
59+
errno = 0;
60+
status = sceKernelLseek(fd, 0, 0);
61+
UNSIGNED_LONGLONGS_EQUAL_TEXT(0, status, "START+0");
62+
UNSIGNED_INT_EQUALS(0, errno);
63+
64+
errno = 0;
65+
status = sceKernelLseek(fd, -123, 0);
66+
UNSIGNED_LONGLONGS_EQUAL_TEXT(ORBIS_KERNEL_ERROR_EINVAL, status, "START-123");
67+
UNSIGNED_INT_EQUALS(EINVAL, errno);
68+
69+
errno = 0;
70+
status = sceKernelLseek(fd, 123456, 0);
71+
UNSIGNED_LONGLONGS_EQUAL_TEXT(123456, status, "START+123456");
72+
UNSIGNED_INT_EQUALS(0, errno);
73+
74+
errno = 0;
75+
status = sceKernelLseek(fd, 60, 0);
76+
UNSIGNED_LONGLONGS_EQUAL_TEXT(60, status, "START+60");
77+
UNSIGNED_INT_EQUALS(0, errno);
78+
79+
errno = 0;
80+
status = sceKernelLseek(fd, 0, 1);
81+
UNSIGNED_LONGLONGS_EQUAL_TEXT(60, status, "CUR+0");
82+
UNSIGNED_INT_EQUALS(0, errno);
83+
84+
errno = 0;
85+
status = sceKernelLseek(fd, 24, 1);
86+
UNSIGNED_LONGLONGS_EQUAL_TEXT(84, status, "CUR+24");
87+
UNSIGNED_INT_EQUALS(0, errno);
88+
89+
errno = 0;
90+
status = sceKernelLseek(fd, -24, 1);
91+
UNSIGNED_LONGLONGS_EQUAL_TEXT(60, status, "CUR-24");
92+
UNSIGNED_INT_EQUALS(EINVAL, errno);
93+
94+
errno = 0;
95+
status = sceKernelLseek(fd, -6666, 1);
96+
UNSIGNED_LONGLONGS_EQUAL_TEXT(ORBIS_KERNEL_ERROR_EINVAL, status, "CUR-6666");
97+
UNSIGNED_INT_EQUALS(EINVAL, errno);
98+
99+
errno = 0;
100+
status = sceKernelLseek(fd, 123456, 1);
101+
UNSIGNED_LONGLONGS_EQUAL_TEXT(123516, status, "CUR+123456");
102+
UNSIGNED_INT_EQUALS(0, errno);
103+
104+
errno = 0;
105+
status = sceKernelLseek(fd, 0, 2);
106+
UNSIGNED_LONGLONGS_EQUAL_TEXT(2048, status, "END+0");
107+
UNSIGNED_INT_EQUALS(0, errno);
108+
109+
errno = 0;
110+
status = sceKernelLseek(fd, 123456, 2);
111+
UNSIGNED_LONGLONGS_EQUAL_TEXT(125504, status, "END+123456");
112+
UNSIGNED_INT_EQUALS(0, errno);
113+
114+
errno = 0;
115+
status = sceKernelLseek(fd, 100, 2);
116+
UNSIGNED_LONGLONGS_EQUAL_TEXT(2148, status, "END+100");
117+
UNSIGNED_INT_EQUALS(0, errno);
118+
119+
errno = 0;
120+
status = sceKernelLseek(fd, -100, 2);
121+
UNSIGNED_LONGLONGS_EQUAL_TEXT(1948, status, "END-100");
122+
UNSIGNED_INT_EQUALS(EINVAL, errno);
123+
124+
errno = 0;
125+
status = sceKernelLseek(fd, -100000, 2);
126+
UNSIGNED_LONGLONGS_EQUAL_TEXT(ORBIS_KERNEL_ERROR_EINVAL, status, "END-100000");
127+
UNSIGNED_INT_EQUALS(EINVAL, errno);
128+
129+
sceKernelClose(fd);
130+
}
131+
132+
TEST(DirentTests, LseekPFSTests) {
133+
int fd = sceKernelOpen("/app0/assets/misc", O_DIRECTORY | O_RDONLY, 0777);
134+
CHECK_COMPARE_TEXT(fd, >, 0, "Unable to open /app0/assets/misc");
135+
136+
s64 status;
137+
138+
errno = 0;
139+
status = sceKernelLseek(fd, 0, 0);
140+
UNSIGNED_LONGLONGS_EQUAL_TEXT(0, status, "START+0");
141+
UNSIGNED_INT_EQUALS(0, errno);
142+
143+
errno = 0;
144+
status = sceKernelLseek(fd, -123, 0);
145+
UNSIGNED_LONGLONGS_EQUAL_TEXT(ORBIS_KERNEL_ERROR_EINVAL, status, "START-123");
146+
UNSIGNED_INT_EQUALS(EINVAL, errno);
147+
148+
errno = 0;
149+
status = sceKernelLseek(fd, 123456, 0);
150+
UNSIGNED_LONGLONGS_EQUAL_TEXT(123456, status, "START+123456");
151+
UNSIGNED_INT_EQUALS(0, errno);
152+
153+
errno = 0;
154+
status = sceKernelLseek(fd, 60, 0);
155+
UNSIGNED_LONGLONGS_EQUAL_TEXT(60, status, "START+60");
156+
UNSIGNED_INT_EQUALS(0, errno);
157+
158+
errno = 0;
159+
status = sceKernelLseek(fd, 0, 1);
160+
UNSIGNED_LONGLONGS_EQUAL_TEXT(60, status, "CUR+0");
161+
UNSIGNED_INT_EQUALS(0, errno);
162+
163+
errno = 0;
164+
status = sceKernelLseek(fd, 24, 1);
165+
UNSIGNED_LONGLONGS_EQUAL_TEXT(84, status, "CUR+24");
166+
UNSIGNED_INT_EQUALS(0, errno);
167+
168+
errno = 0;
169+
status = sceKernelLseek(fd, -24, 1);
170+
UNSIGNED_LONGLONGS_EQUAL_TEXT(60, status, "CUR-24");
171+
UNSIGNED_INT_EQUALS(EINVAL, errno);
172+
173+
errno = 0;
174+
status = sceKernelLseek(fd, -6666, 1);
175+
UNSIGNED_LONGLONGS_EQUAL_TEXT(ORBIS_KERNEL_ERROR_EINVAL, status, "CUR-6666");
176+
UNSIGNED_INT_EQUALS(EINVAL, errno);
177+
178+
errno = 0;
179+
status = sceKernelLseek(fd, 123456, 1);
180+
UNSIGNED_LONGLONGS_EQUAL_TEXT(123516, status, "CUR+123456");
181+
UNSIGNED_INT_EQUALS(0, errno);
182+
183+
errno = 0;
184+
status = sceKernelLseek(fd, 0, 2);
185+
UNSIGNED_LONGLONGS_EQUAL_TEXT(2048, status, "END+0");
186+
UNSIGNED_INT_EQUALS(0, errno);
187+
188+
errno = 0;
189+
status = sceKernelLseek(fd, 123456, 2);
190+
UNSIGNED_LONGLONGS_EQUAL_TEXT(125504, status, "END+123456");
191+
UNSIGNED_INT_EQUALS(0, errno);
192+
193+
errno = 0;
194+
status = sceKernelLseek(fd, 100, 2);
195+
UNSIGNED_LONGLONGS_EQUAL_TEXT(2148, status, "END+100");
196+
UNSIGNED_INT_EQUALS(0, errno);
197+
198+
errno = 0;
199+
status = sceKernelLseek(fd, -100, 2);
200+
UNSIGNED_LONGLONGS_EQUAL_TEXT(1948, status, "END-100");
201+
UNSIGNED_INT_EQUALS(EINVAL, errno);
202+
203+
errno = 0;
204+
status = sceKernelLseek(fd, -100000, 2);
205+
UNSIGNED_LONGLONGS_EQUAL_TEXT(ORBIS_KERNEL_ERROR_EINVAL, status, "END-100000");
206+
UNSIGNED_INT_EQUALS(EINVAL, errno);
207+
208+
sceKernelClose(fd);
209+
}
210+
50211
void RunTests() {
51-
RegenerateDir("/data/enderman");
52-
sceKernelMkdir("/data/enderman/dumps", 0777);
53212
std::string nf_path = "/data/enderman/filewithaverylongname";
54213
char nf_num[4] {0};
55214
for (u8 idx = 1; idx <= 50; idx++) {
@@ -62,59 +221,22 @@ void RunTests() {
62221
Log("---------------------");
63222

64223
int fd = sceKernelOpen("/data/enderman", O_DIRECTORY | O_RDONLY, 0777);
65-
Log("Directory opened with fd=", fd);
66-
67-
Log("LSeek START+0=", sceKernelLseek(fd, 0, 0));
68-
Log("LSeek START-123=", sceKernelLseek(fd, -123, 0));
69-
Log("LSeek START+123456=", sceKernelLseek(fd, 123456, 0));
70-
Log("LSeek START+60=", sceKernelLseek(fd, 60, 0));
71-
Log("LSeek CUR+0=", sceKernelLseek(fd, 0, 1));
72-
Log("LSeek CUR+24=", sceKernelLseek(fd, 24, 1));
73-
Log("LSeek CUR-24=", sceKernelLseek(fd, -24, 1));
74-
Log("LSeek CUR-6666=", sceKernelLseek(fd, -6666, 1));
75-
Log("LSeek CUR+123456=", sceKernelLseek(fd, 123456, 1));
76-
Log("LSeek END+0=", sceKernelLseek(fd, 0, 2));
77-
Log("LSeek END+123456=", sceKernelLseek(fd, 123456, 2));
78-
Log("LSeek END+100=", sceKernelLseek(fd, 100, 2));
79-
Log("LSeek END-100=", sceKernelLseek(fd, -100, 2));
80-
Log("LSeek END-100000=", sceKernelLseek(fd, -100000, 2));
81-
82224
for (auto read_size: read_sizes) {
83225
for (auto read_offset: read_offsets) {
84226
DumpDirectory(fd, read_size, read_offset);
85227
}
86228
}
87-
88229
sceKernelClose(fd);
89230

90231
Log("------------------");
91232
Log("Dump PFS directory");
92233
Log("------------------");
93234
fd = sceKernelOpen("/app0/assets/misc", O_DIRECTORY | O_RDONLY, 0777);
94-
95-
Log("Directory opened with fd=", fd);
96-
97-
Log("LSeek START+0=", sceKernelLseek(fd, 0, 0));
98-
Log("LSeek START-123=", sceKernelLseek(fd, -123, 0));
99-
Log("LSeek START+123456=", sceKernelLseek(fd, 123456, 0));
100-
Log("LSeek START+60=", sceKernelLseek(fd, 60, 0));
101-
Log("LSeek CUR+0=", sceKernelLseek(fd, 0, 1));
102-
Log("LSeek CUR+24=", sceKernelLseek(fd, 24, 1));
103-
Log("LSeek CUR-24=", sceKernelLseek(fd, -24, 1));
104-
Log("LSeek CUR-6666=", sceKernelLseek(fd, -6666, 1));
105-
Log("LSeek CUR+123456=", sceKernelLseek(fd, 123456, 1));
106-
Log("LSeek END+0=", sceKernelLseek(fd, 0, 2));
107-
Log("LSeek END+123456=", sceKernelLseek(fd, 123456, 2));
108-
Log("LSeek END+100=", sceKernelLseek(fd, 100, 2));
109-
Log("LSeek END-100=", sceKernelLseek(fd, -100, 2));
110-
Log("LSeek END-100000=", sceKernelLseek(fd, -100000, 2));
111-
112235
for (auto read_size: read_sizes) {
113236
for (auto read_offset: read_offsets) {
114237
DumpDirectory(fd, read_size, read_offset, true);
115238
}
116239
}
117-
118240
sceKernelClose(fd);
119241
}
120242

@@ -129,11 +251,10 @@ bool DumpByRead(int dir_fd, int dump_fd, char* buffer, size_t size) {
129251
return false;
130252
}
131253
if (tbr == 0) {
132-
LogSuccess("Read finished");
133254
return false;
134255
}
135256

136-
if (s64 tbw = sceKernelWrite(dump_fd, buffer, size); tbw != size) LogError("Written", tbw, "bytes out of", size, "bytes");
257+
if (s64 tbw = sceKernelWrite(dump_fd, buffer, tbr); tbw != tbr) LogError("Written", tbw, "bytes out of", tbr, "bytes");
137258
return true;
138259
}
139260

@@ -149,11 +270,10 @@ bool DumpByDirent(int dir_fd, int dump_fd, char* buffer, size_t size, s64* idx)
149270
return false;
150271
}
151272
if (tbr == 0) {
152-
LogSuccess("Dirent finished");
153273
return false;
154274
}
155275

156-
if (s64 tbw = sceKernelWrite(dump_fd, buffer, size); tbw != size) LogError("Written", tbw, "bytes out of", size, "bytes");
276+
if (s64 tbw = sceKernelWrite(dump_fd, buffer, tbr); tbw != tbr) LogError("Written", tbw, "bytes out of", tbr, "bytes");
157277
return true;
158278
}
159279

@@ -186,5 +306,3 @@ void DumpDirectory(int fd, int buffer_size, s64 offset, bool is_pfs) {
186306
sceKernelClose(dirent_fd);
187307
delete[] buffer;
188308
}
189-
190-
} // namespace FS_Test

tests/code/filesystem_dirents/code/fs_test.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
#ifndef FS_TEST_H
22
#define FS_TEST_H
33

4+
#define UNSIGNED_INT_EQUALS(expected, actual) UNSIGNED_LONGS_EQUAL_LOCATION((uint32_t)expected, (uint32_t)actual, NULLPTR, __FILE__, __LINE__)
5+
#define UNSIGNED_INT_EQUALS_TEXT(expected, actual, text) UNSIGNED_LONGS_EQUAL_LOCATION((uint32_t)expected, (uint32_t)actual, text, __FILE__, __LINE__)
6+
47
#include "log.h"
58

69
#include <orbis/libkernel.h>
710

8-
namespace FS_Test {
9-
1011
using s8 = int8_t;
1112
using s16 = int16_t;
1213
using s32 = int32_t;
@@ -42,5 +43,4 @@ void Obliterate(const char* path);
4243
int32_t touch(const char* path);
4344
int32_t touch(const std::string& path);
4445

45-
} // namespace FS_Test
4646
#endif // FS_TEST_H

tests/code/filesystem_dirents/code/fs_test_tools.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
#include <orbis/libkernel.h>
55
#include <vector>
66

7-
namespace FS_Test {
8-
97
namespace fs = std::filesystem;
108
namespace oi = OrbisInternals;
119

@@ -51,5 +49,3 @@ void RegenerateDir(const char* path) {
5149
Obliterate(path);
5250
sceKernelMkdir(path, 0777);
5351
}
54-
55-
} // namespace FS_Test

tests/code/filesystem_dirents/code/log.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,6 @@
33
#include <iomanip>
44
#include <sstream>
55

6-
int error_counter = 0;
7-
8-
int GetErrorCounter(void) {
9-
Log("rtyrtyrty");
10-
return error_counter;
11-
}
12-
13-
void ResetErrorCounter(void) {
14-
error_counter = 0;
15-
}
16-
176
std::ostream& center(std::ostream& os, const std::string& s, int width) {
187
int len = (int)s.size();
198
if (width <= len) return os << s.substr(0, width);

tests/code/filesystem_dirents/code/log.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ void ResetErrorCounter(void);
3939

4040
#define LogError(...) \
4141
{ \
42-
error_counter++; \
4342
LogCustom(__FUNCTION__, "\033[31;1m[FAIL]\033[0m", ##__VA_ARGS__, "( " __FILE__ ":", __LINE__, ")"); \
4443
}
4544

@@ -48,7 +47,7 @@ void ResetErrorCounter(void);
4847
LogCustom(__FUNCTION__, "\033[32;1m[SUCC]\033[0m", ##__VA_ARGS__); \
4948
}
5049

51-
#define TEST(cond, success_str, fail_str, ...) \
50+
#define TEST_CASE(cond, success_str, fail_str, ...) \
5251
{ \
5352
if (cond) { \
5453
LogSuccess(success_str, ##__VA_ARGS__); \

0 commit comments

Comments
 (0)