Skip to content

Commit 440900b

Browse files
this time
1 parent 2b1884c commit 440900b

File tree

2 files changed

+103
-68
lines changed

2 files changed

+103
-68
lines changed

code/tests/cases/test_elf.c

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -65,51 +65,70 @@ FOSSIL_TEST_CASE(c_test_elf_is_elf_short_buffer) {
6565
ASSUME_ITS_FALSE(fossil_media_elf_is_elf(elf_magic, 2));
6666
}
6767

68-
69-
FOSSIL_TEST_CASE(c_test_elf_load_builtin_blob) {
68+
FOSSIL_TEST_CASE(c_test_elf_load_from_memory_builtin_blob) {
7069
fossil_media_elf_t *elf = NULL;
71-
fossil_media_elf_load_from_memory(
70+
int rc = fossil_media_elf_load_from_memory(
7271
FOSSIL_MEDIA_ELF_BUILTIN_BLOB,
7372
FOSSIL_MEDIA_ELF_BUILTIN_BLOB_SIZE,
74-
&elf);
75-
ASSUME_NOT_CNULL(elf);
73+
&elf
74+
);
75+
ASSUME_ITS_TRUE(rc == FOSSIL_MEDIA_ELF_OK);
76+
ASSUME_ITS_TRUE(elf != NULL);
77+
78+
size_t section_count = 0;
79+
rc = fossil_media_elf_get_section_count(elf, &section_count);
80+
ASSUME_ITS_TRUE(rc == FOSSIL_MEDIA_ELF_OK);
81+
ASSUME_ITS_TRUE(section_count == 3);
7682

7783
fossil_media_elf_free(elf);
7884
}
7985

80-
FOSSIL_TEST_CASE(c_test_elf_section_lookup) {
86+
FOSSIL_TEST_CASE(c_test_elf_get_section_name_and_data_builtin_blob) {
8187
fossil_media_elf_t *elf = NULL;
82-
fossil_media_elf_load_from_memory(
88+
int rc = fossil_media_elf_load_from_memory(
8389
FOSSIL_MEDIA_ELF_BUILTIN_BLOB,
8490
FOSSIL_MEDIA_ELF_BUILTIN_BLOB_SIZE,
85-
&elf);
91+
&elf
92+
);
93+
ASSUME_ITS_TRUE(rc == FOSSIL_MEDIA_ELF_OK);
8694

8795
const char *name = NULL;
88-
fossil_media_elf_get_section_name(elf, 2, &name);
89-
ASSUME_NOT_CNULL(name);
90-
ASSUME_ITS_EQUAL_CSTR(name, ".text");
96+
rc = fossil_media_elf_get_section_name(elf, 1, &name);
97+
ASSUME_ITS_TRUE(rc == FOSSIL_MEDIA_ELF_OK);
98+
ASSUME_ITS_TRUE(name != NULL);
99+
100+
const uint8_t *ptr = NULL;
101+
size_t len = 0;
102+
rc = fossil_media_elf_get_section_data(elf, 1, &ptr, &len);
103+
ASSUME_ITS_TRUE(rc == FOSSIL_MEDIA_ELF_OK);
91104

92105
fossil_media_elf_free(elf);
93106
}
94107

95-
FOSSIL_TEST_CASE(c_test_elf_section_data) {
108+
FOSSIL_TEST_CASE(c_test_elf_find_section_by_name_builtin_blob) {
96109
fossil_media_elf_t *elf = NULL;
97-
fossil_media_elf_load_from_memory(
110+
int rc = fossil_media_elf_load_from_memory(
98111
FOSSIL_MEDIA_ELF_BUILTIN_BLOB,
99112
FOSSIL_MEDIA_ELF_BUILTIN_BLOB_SIZE,
100-
&elf);
113+
&elf
114+
);
115+
ASSUME_ITS_TRUE(rc == FOSSIL_MEDIA_ELF_OK);
101116

102-
const uint8_t *sec_data = NULL;
103-
size_t sec_size = 0;
104-
fossil_media_elf_get_section_data(elf, 2, &sec_data, &sec_size);
105-
ASSUME_ITS_EQUAL_U32(sec_size, 1U);
106-
ASSUME_NOT_CNULL(sec_data);
117+
size_t idx = 0;
118+
rc = fossil_media_elf_find_section_by_name(elf, ".text", &idx);
119+
ASSUME_ITS_TRUE(rc == FOSSIL_MEDIA_ELF_OK);
107120

108-
ASSUME_ITS_EQUAL_O32(sec_data[0], 0x90); // single NOP
121+
rc = fossil_media_elf_find_section_by_name(elf, ".shstrtab", &idx);
122+
ASSUME_ITS_TRUE(rc == FOSSIL_MEDIA_ELF_OK);
109123

110124
fossil_media_elf_free(elf);
111125
}
112126

127+
FOSSIL_TEST_CASE(c_test_elf_strerror_known_and_unknown) {
128+
ASSUME_ITS_TRUE(strcmp(fossil_media_elf_strerror(FOSSIL_MEDIA_ELF_OK), "OK") == 0);
129+
ASSUME_ITS_TRUE(strcmp(fossil_media_elf_strerror(-9999), "Unknown error") == 0);
130+
}
131+
113132
// * * * * * * * * * * * * * * * * * * * * * * * *
114133
// * Fossil Logic Test Pool
115134
// * * * * * * * * * * * * * * * * * * * * * * * *
@@ -118,9 +137,10 @@ FOSSIL_TEST_GROUP(c_elf_tests) {
118137
FOSSIL_TEST_ADD(c_elf_fixture, c_test_elf_is_elf_non_magic);
119138
FOSSIL_TEST_ADD(c_elf_fixture, c_test_elf_is_elf_short_buffer);
120139

121-
FOSSIL_TEST_ADD(c_elf_fixture, c_test_elf_load_builtin_blob);
122-
FOSSIL_TEST_ADD(c_elf_fixture, c_test_elf_section_lookup);
123-
FOSSIL_TEST_ADD(c_elf_fixture, c_test_elf_section_data);
140+
FOSSIL_TEST_ADD(c_elf_fixture, c_test_elf_load_from_memory_builtin_blob);
141+
FOSSIL_TEST_ADD(c_elf_fixture, c_test_elf_get_section_name_and_data_builtin_blob);
142+
FOSSIL_TEST_ADD(c_elf_fixture, c_test_elf_find_section_by_name_builtin_blob);
143+
FOSSIL_TEST_ADD(c_elf_fixture, c_test_elf_strerror_known_and_unknown);
124144

125145
FOSSIL_TEST_REGISTER(c_elf_fixture);
126146
}

code/tests/cases/test_elf.cpp

Lines changed: 60 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
* http://www.apache.org/licenses/LICENSE-2.0
1212
*
1313
* Unless required by applicable law or agreed to in writing, software
14-
* distributed under the License is distributed on an "AS IS" BASIS,
15-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
1616
* License for the specific language governing permissions and limitations
1717
* under the License.
1818
*
@@ -25,84 +25,99 @@
2525
#include <fossil/pizza/framework.h>
2626
#include "fossil/media/framework.h"
2727

28-
using namespace fossil::media;
28+
// * * * * * * * * * * * * * * * * * * * * * * * *
29+
// * Fossil Logic Test Utilities
30+
// * * * * * * * * * * * * * * * * * * * * * * * *
31+
// Setup steps for things like test fixtures and
32+
// mock objects are set here.
33+
// * * * * * * * * * * * * * * * * * * * * * * * *
2934

3035
FOSSIL_TEST_SUITE(cpp_elf_fixture);
3136

3237
FOSSIL_SETUP(cpp_elf_fixture) {
33-
// Setup for C++ ELF tests (no-op)
38+
// Setup for ELF tests
3439
}
3540

3641
FOSSIL_TEARDOWN(cpp_elf_fixture) {
37-
// Cleanup (no-op)
42+
// Teardown for ELF tests
3843
}
3944

40-
// ------------------------------------------------------------
41-
// Basic magic number detection
42-
// ------------------------------------------------------------
45+
// * * * * * * * * * * * * * * * * * * * * * * * *
46+
// * Fossil Logic Test Cases
47+
// * * * * * * * * * * * * * * * * * * * * * * * *
48+
// The test cases below are provided as samples, inspired
49+
// by the Meson build system's approach of using test cases
50+
// as samples for library usage.
51+
// * * * * * * * * * * * * * * * * * * * * * * * *
52+
4353
FOSSIL_TEST_CASE(cpp_test_elf_is_elf_magic) {
4454
unsigned char elf_magic[4] = {0x7f, 'E', 'L', 'F'};
45-
ASSUME_ITS_TRUE(Elf::is_elf(elf_magic, 4));
55+
ASSUME_ITS_TRUE(fossil::media::Elf::is_elf(elf_magic, 4));
56+
ASSUME_ITS_TRUE(fossil_media_elf_is_elf(elf_magic, 4));
4657
}
4758

4859
FOSSIL_TEST_CASE(cpp_test_elf_is_elf_non_magic) {
4960
unsigned char not_elf[4] = {0x00, 0x01, 0x02, 0x03};
50-
ASSUME_ITS_FALSE(Elf::is_elf(not_elf, 4));
61+
ASSUME_ITS_FALSE(fossil::media::Elf::is_elf(not_elf, 4));
62+
ASSUME_ITS_FALSE(fossil_media_elf_is_elf(not_elf, 4));
5163
}
5264

5365
FOSSIL_TEST_CASE(cpp_test_elf_is_elf_short_buffer) {
5466
unsigned char elf_magic[2] = {0x7f, 'E'};
55-
ASSUME_ITS_FALSE(Elf::is_elf(elf_magic, 2));
67+
ASSUME_ITS_FALSE(fossil::media::Elf::is_elf(elf_magic, 2));
68+
ASSUME_ITS_FALSE(fossil_media_elf_is_elf(elf_magic, 2));
5669
}
5770

58-
FOSSIL_TEST_CASE(cpp_test_elf_load_builtin_blob) {
59-
Elf elf;
60-
// Should successfully load a minimal ELF64 file with .text section
61-
ASSUME_ITS_TRUE(elf.load_memory(FOSSIL_MEDIA_ELF_BUILTIN_BLOB,
62-
FOSSIL_MEDIA_ELF_BUILTIN_BLOB_SIZE));
71+
FOSSIL_TEST_CASE(cpp_test_elf_load_from_memory_builtin_blob) {
72+
fossil::media::Elf elf;
73+
bool ok = elf.load_memory(FOSSIL_MEDIA_ELF_BUILTIN_BLOB, FOSSIL_MEDIA_ELF_BUILTIN_BLOB_SIZE);
74+
ASSUME_ITS_TRUE(ok);
6375
ASSUME_ITS_TRUE(elf.is_loaded());
76+
ASSUME_ITS_TRUE(elf.section_count() == 3);
6477
}
6578

66-
FOSSIL_TEST_CASE(cpp_test_elf_section_lookup) {
67-
Elf elf;
68-
ASSUME_ITS_TRUE(elf.load_memory(FOSSIL_MEDIA_ELF_BUILTIN_BLOB,
69-
FOSSIL_MEDIA_ELF_BUILTIN_BLOB_SIZE));
70-
ASSUME_ITS_TRUE(elf.is_loaded());
71-
ASSUME_ITS_TRUE(elf.section_count() >= 3);
79+
FOSSIL_TEST_CASE(cpp_test_elf_get_section_name_and_data_builtin_blob) {
80+
fossil::media::Elf elf;
81+
bool ok = elf.load_memory(FOSSIL_MEDIA_ELF_BUILTIN_BLOB, FOSSIL_MEDIA_ELF_BUILTIN_BLOB_SIZE);
82+
ASSUME_ITS_TRUE(ok);
83+
84+
std::string name = elf.section_name(1);
85+
ASSUME_ITS_TRUE(!name.empty());
7286

73-
std::string name = elf.section_name(2);
74-
ASSUME_ITS_EQUAL_CSTR(name.c_str(), ".text");
87+
auto data = elf.section_data(1);
88+
ASSUME_ITS_TRUE(data.first != nullptr);
89+
ASSUME_ITS_TRUE(data.second > 0);
7590
}
7691

77-
FOSSIL_TEST_CASE(cpp_test_elf_section_data) {
78-
Elf elf;
79-
ASSUME_ITS_TRUE(elf.load_memory(FOSSIL_MEDIA_ELF_BUILTIN_BLOB,
80-
FOSSIL_MEDIA_ELF_BUILTIN_BLOB_SIZE));
81-
auto section = elf.section_data(2);
82-
ASSUME_ITS_EQUAL_U32(section.second, 1U);
83-
ASSUME_ITS_EQUAL_O32(section.first[0], 0x90); // NOP
92+
FOSSIL_TEST_CASE(cpp_test_elf_find_section_by_name_builtin_blob) {
93+
fossil::media::Elf elf;
94+
bool ok = elf.load_memory(FOSSIL_MEDIA_ELF_BUILTIN_BLOB, FOSSIL_MEDIA_ELF_BUILTIN_BLOB_SIZE);
95+
ASSUME_ITS_TRUE(ok);
96+
97+
size_t idx = elf.find_section(".text");
98+
ASSUME_ITS_TRUE(idx >= 0);
99+
100+
idx = elf.find_section(".shstrtab");
101+
ASSUME_ITS_TRUE(idx >= 0);
84102
}
85103

86-
FOSSIL_TEST_CASE(cpp_test_elf_dump_does_not_crash) {
87-
Elf elf;
88-
ASSUME_ITS_TRUE(elf.load_memory(FOSSIL_MEDIA_ELF_BUILTIN_BLOB,
89-
FOSSIL_MEDIA_ELF_BUILTIN_BLOB_SIZE));
90-
// Should print to stdout safely
91-
elf.dump(elf.c_struct(), stdout);
104+
FOSSIL_TEST_CASE(cpp_test_elf_strerror_known_and_unknown) {
105+
ASSUME_ITS_TRUE(strcmp(fossil_media_elf_strerror(FOSSIL_MEDIA_ELF_OK), "OK") == 0);
106+
ASSUME_ITS_TRUE(strcmp(fossil_media_elf_strerror(-9999), "Unknown error") == 0);
92107
}
93108

94-
// ------------------------------------------------------------
95-
// Test Group Registration
96-
// ------------------------------------------------------------
109+
// * * * * * * * * * * * * * * * * * * * * * * * *
110+
// * Fossil Logic Test Pool
111+
// * * * * * * * * * * * * * * * * * * * * * * * *
97112
FOSSIL_TEST_GROUP(cpp_elf_tests) {
98113
FOSSIL_TEST_ADD(cpp_elf_fixture, cpp_test_elf_is_elf_magic);
99114
FOSSIL_TEST_ADD(cpp_elf_fixture, cpp_test_elf_is_elf_non_magic);
100115
FOSSIL_TEST_ADD(cpp_elf_fixture, cpp_test_elf_is_elf_short_buffer);
101116

102-
FOSSIL_TEST_ADD(cpp_elf_fixture, cpp_test_elf_load_builtin_blob);
103-
FOSSIL_TEST_ADD(cpp_elf_fixture, cpp_test_elf_section_lookup);
104-
FOSSIL_TEST_ADD(cpp_elf_fixture, cpp_test_elf_section_data);
105-
FOSSIL_TEST_ADD(cpp_elf_fixture, cpp_test_elf_dump_does_not_crash);
117+
FOSSIL_TEST_ADD(cpp_elf_fixture, cpp_test_elf_load_from_memory_builtin_blob);
118+
FOSSIL_TEST_ADD(cpp_elf_fixture, cpp_test_elf_get_section_name_and_data_builtin_blob);
119+
FOSSIL_TEST_ADD(cpp_elf_fixture, cpp_test_elf_find_section_by_name_builtin_blob);
120+
FOSSIL_TEST_ADD(cpp_elf_fixture, cpp_test_elf_strerror_known_and_unknown);
106121

107122
FOSSIL_TEST_REGISTER(cpp_elf_fixture);
108-
}
123+
}

0 commit comments

Comments
 (0)