From e7af73992d778f95546778a798167b3ab15a1e60 Mon Sep 17 00:00:00 2001 From: accusys Date: Sun, 29 Mar 2026 14:53:26 +0800 Subject: [PATCH] Add all pages test and accessor functions --- raidguard_c_gui_server_mock/Makefile | 21 +- raidguard_c_gui_server_mock/mock_driver.c | 13 ++ raidguard_c_gui_server_mock/mock_driver.h | 4 + raidguard_c_gui_server_mock/test_all_pages | Bin 0 -> 55472 bytes raidguard_c_gui_server_mock/test_all_pages.c | 202 ++++++++++++++++++ .../test_all_pages.dSYM/Contents/Info.plist | 20 ++ .../Contents/Resources/DWARF/test_all_pages | Bin 0 -> 18408 bytes .../Relocations/aarch64/test_all_pages.yml | 5 + 8 files changed, 260 insertions(+), 5 deletions(-) create mode 100755 raidguard_c_gui_server_mock/test_all_pages create mode 100644 raidguard_c_gui_server_mock/test_all_pages.c create mode 100644 raidguard_c_gui_server_mock/test_all_pages.dSYM/Contents/Info.plist create mode 100644 raidguard_c_gui_server_mock/test_all_pages.dSYM/Contents/Resources/DWARF/test_all_pages create mode 100644 raidguard_c_gui_server_mock/test_all_pages.dSYM/Contents/Resources/Relocations/aarch64/test_all_pages.yml diff --git a/raidguard_c_gui_server_mock/Makefile b/raidguard_c_gui_server_mock/Makefile index 9453041..c2c9cbd 100644 --- a/raidguard_c_gui_server_mock/Makefile +++ b/raidguard_c_gui_server_mock/Makefile @@ -6,22 +6,33 @@ SRCS = test_mock_driver.c mock_driver.c OBJS = $(SRCS:.c=.o) TARGET = test_mock_driver -all: $(TARGET) +# Test programs +TEST_ALL = test_all_pages +TEST_ALL_SRCS = test_all_pages.c mock_driver.c -$(TARGET): $(OBJS) - $(CC) $(CFLAGS) -o $@ $(OBJS) +all: $(TARGET) $(TEST_ALL) + +$(TARGET): test_mock_driver.o mock_driver.o + $(CC) $(CFLAGS) -o $@ test_mock_driver.o mock_driver.o + +$(TEST_ALL): $(TEST_ALL_SRCS) + $(CC) $(CFLAGS) -o $@ $(TEST_ALL_SRCS) test_mock_driver.o: test_mock_driver.c mock_driver.h mock_driver.o: mock_driver.c mock_driver.h +test_all_pages.o: test_all_pages.c mock_driver.h clean: - rm -f $(TARGET) $(OBJS) + rm -f $(TARGET) $(TEST_ALL) *.o run: $(TARGET) ./$(TARGET) +run-all: $(TEST_ALL) + ./$(TEST_ALL) + # Enable verbose output debug: CFLAGS += -DVERBOSE=1 debug: $(TARGET) -.PHONY: all clean run debug +.PHONY: all clean run run-all debug diff --git a/raidguard_c_gui_server_mock/mock_driver.c b/raidguard_c_gui_server_mock/mock_driver.c index e992de5..47aef29 100644 --- a/raidguard_c_gui_server_mock/mock_driver.c +++ b/raidguard_c_gui_server_mock/mock_driver.c @@ -443,3 +443,16 @@ void mock_print_config(void) { printf("Pending Events: %d\n", g_mockEventCount); printf("=========================\n"); } + +// ============================================================================= +// Accessors for testing +// ============================================================================= + +MOCK_CTRL_INFO* mock_get_ctrl_info(int index) { + if (index < 0 || index >= MAX_DTR_IN_HOST) return NULL; + return &g_mockCtrl[index]; +} + +int mock_get_event_queue_count(void) { + return g_mockEventCount; +} diff --git a/raidguard_c_gui_server_mock/mock_driver.h b/raidguard_c_gui_server_mock/mock_driver.h index 54ac436..24c2d44 100644 --- a/raidguard_c_gui_server_mock/mock_driver.h +++ b/raidguard_c_gui_server_mock/mock_driver.h @@ -104,4 +104,8 @@ void mock_register_default_events(void); int mock_load_config(const char *filename); void mock_print_config(void); +// Accessors for testing +MOCK_CTRL_INFO* mock_get_ctrl_info(int index); +int mock_get_event_queue_count(void); + #endif // MOCK_DRIVER_H diff --git a/raidguard_c_gui_server_mock/test_all_pages b/raidguard_c_gui_server_mock/test_all_pages new file mode 100755 index 0000000000000000000000000000000000000000..322fcad9a5d8d4fbac364c15d6c1ec2b0301662a GIT binary patch literal 55472 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 +#include "mock_driver.h" + +void print_hex(const char *label, unsigned char *buf, int len) { + printf("%s:\n", label); + for (int i = 0; i < len; i++) { + printf("%02X ", buf[i]); + if ((i + 1) % 16 == 0) printf("\n"); + } + printf("\n"); +} + +void test_page0(void) { + printf("\n========== TEST PAGE 0: Controller Info ==========\n"); + unsigned char buf[1024]; + unsigned char heatsink; + + CHAR result = mock_QuaryDTR(0, buf, &heatsink); + printf("Result: %d\n", result); + + printf("Serial Number: %.16s\n", buf + 0); + printf("Model Name: %.32s\n", buf + 16); + printf("Firmware Version: %.8s\n", buf + 64); + printf("BIOS Version: %.8s\n", buf + 72); + printf("Status: 0x%02X\n", buf[96]); + printf("RAID Ports: %d\n", buf[104]); + printf("Disk Count: %d\n", buf[105]); + printf("Controller #: %d\n", buf[106]); + + print_hex("Full Page 0 (first 128 bytes)", buf, 128); +} + +void test_page1(void) { + printf("\n========== TEST PAGE 1: RAID Snapshot ==========\n"); + + // Use accessor to get internal data + MOCK_CTRL_INFO *ctrl = mock_get_ctrl_info(0); + unsigned char *buf = ctrl->bPage1Data; + + printf("RAID 0 Status: 0x%02X\n", buf[0]); + printf("RAID 0 Level: 0x%02X\n", buf[1]); + printf("RAID 0 Disk Count: %d\n", buf[2]); + + printf("RAID 1 Status: 0x%02X\n", buf[128]); + printf("RAID 1 Level: 0x%02X\n", buf[129]); + printf("RAID 1 Disk Count: %d\n", buf[130]); + + print_hex("Full Page 1 (first 256 bytes)", buf, 256); +} + +void test_page7(void) { + printf("\n========== TEST PAGE 7: LUN Map Table ==========\n"); + + MOCK_CTRL_INFO *ctrl = mock_get_ctrl_info(0); + unsigned char *buf = ctrl->bPage7Data; + + printf("LUN 0: 0x%02X\n", buf[0]); + printf("RAID ID 0: 0x%02X\n", buf[1]); + printf("Enable: 0x%02X\n", buf[2]); + + print_hex("Full Page 7", buf, 64); +} + +void test_page10(void) { + printf("\n========== TEST PAGE 10: RAID Info 0-1 ==========\n"); + + MOCK_CTRL_INFO *ctrl = mock_get_ctrl_info(0); + unsigned char *buf = ctrl->bPage10Data; + + printf("RAID 0 Status: 0x%02X\n", buf[0]); + printf("RAID 0 Level: 0x%02X\n", buf[1]); + printf("RAID 0 Disks: %d\n", buf[2]); + printf("RAID 0 Stripe: 0x%02X\n", buf[3]); + + // Capacity (big-endian) + unsigned long long capacity = 0; + for (int i = 0; i < 8; i++) { + capacity = (capacity << 8) | buf[8 + i]; + } + printf("RAID 0 Capacity: %llu bytes\n", capacity); + + print_hex("Full Page 10", buf, 128); +} + +void test_page11(void) { + printf("\n========== TEST PAGE 11: RAID Info 2-3 ==========\n"); + + MOCK_CTRL_INFO *ctrl = mock_get_ctrl_info(0); + unsigned char *buf = ctrl->bPage11Data; + + printf("Status: 0x%02X\n", buf[0]); + + print_hex("Full Page 11", buf, 64); +} + +void test_page14(void) { + printf("\n========== TEST PAGE 14: RAID Info 6-7 ==========\n"); + + MOCK_CTRL_INFO *ctrl = mock_get_ctrl_info(0); + unsigned char *buf = ctrl->bPage14Data; + + print_hex("Full Page 14", buf, 64); +} + +void test_page27(void) { + printf("\n========== TEST PAGE 27: Disk List ==========\n"); + + MOCK_CTRL_INFO *ctrl = mock_get_ctrl_info(0); + unsigned char *buf = ctrl->bPage27Data; + + for (int i = 0; i < 8; i++) { + int offset = i * 16; + printf("Disk %d: Slot=0x%02X Status=0x%02X Type=0x%02X\n", + i, buf[offset], buf[offset+1], buf[offset+2]); + } + + print_hex("Full Page 27", buf, 128); +} + +void test_devioctl(void) { + printf("\n========== TEST DevIoControl ==========\n"); + + unsigned char outBuf[1024]; + USHORT errCode; + UCHAR result; + + // Test IOCTL 0x9001 - GET_CONTROLLER_INFO + result = mock_DevIoControl(0, 0x9001, 0, NULL, 1024, (char*)outBuf, &errCode); + printf("IOCTL 0x9001 (Controller Info): result=0x%02X err=0x%04X\n", result, errCode); + printf(" SN: %.16s\n", outBuf); + + // Test IOCTL 0x9002 - GET_RAID_INFO + result = mock_DevIoControl(0, 0x9002, 0, NULL, 1024, (char*)outBuf, &errCode); + printf("IOCTL 0x9002 (RAID Info): result=0x%02X err=0x%04X\n", result, errCode); + printf(" RAID 0 Status: 0x%02X\n", outBuf[0]); + + // Test IOCTL 0x9020 - GET_INBAND_EVENT + result = mock_DevIoControl(0, 0x9020, 0, NULL, 512, (char*)outBuf, &errCode); + printf("IOCTL 0x9020 (Event): result=0x%02X err=0x%04X\n", result, errCode); +} + +void test_events(void) { + printf("\n========== TEST Events ==========\n"); + + // Generate various events + mock_clear_events(); + + // Disk events + mock_generate_disk_event(0, 0x01); // Online + mock_generate_disk_event(1, 0x01); // Online + mock_generate_disk_event(2, 0x02); // Offline + mock_generate_disk_event(3, 0x03); // Error + + // RAID events + mock_generate_raid_event(0, 0x10); // Rebuild start + mock_generate_raid_event(0, 0x11); // Rebuild done + + printf("Generated 6 events\n"); + + // Read all events + EVENT_INFO evt; + int count = 0; + while (mock_GetCtlrEvent(0, &evt) == SYSOK && evt.bStatus && count < 10) { + printf("Event %d: Type=0x%02X Slot/ID=0x%02X\n", + count + 1, evt.bEventBuf[0], evt.bEventBuf[3]); + count++; + } + printf("Total events read: %d\n", count); +} + +int main(int argc, char *argv[]) { + printf("=== Mock Driver - All Pages Test ===\n"); + + // Enable verbose + mock_set_verbose(true); + + // Initialize + mock_init(); + + // Run all tests + test_page0(); + test_page1(); + test_page7(); + test_page10(); + test_page11(); + test_page14(); + test_page27(); + test_devioctl(); + test_events(); + + // Cleanup + mock_cleanup(); + + printf("\n=== All Tests Completed ===\n"); + return 0; +} diff --git a/raidguard_c_gui_server_mock/test_all_pages.dSYM/Contents/Info.plist b/raidguard_c_gui_server_mock/test_all_pages.dSYM/Contents/Info.plist new file mode 100644 index 0000000..b0c620b --- /dev/null +++ b/raidguard_c_gui_server_mock/test_all_pages.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.test_all_pages + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/raidguard_c_gui_server_mock/test_all_pages.dSYM/Contents/Resources/DWARF/test_all_pages b/raidguard_c_gui_server_mock/test_all_pages.dSYM/Contents/Resources/DWARF/test_all_pages new file mode 100644 index 0000000000000000000000000000000000000000..74ebd9ab9ff79bca23d9f59a6a2455cc859f5c8c GIT binary patch literal 18408 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 M+KxeHn!@aV0hzy)^Z)<= literal 0 HcmV?d00001 diff --git a/raidguard_c_gui_server_mock/test_all_pages.dSYM/Contents/Resources/Relocations/aarch64/test_all_pages.yml b/raidguard_c_gui_server_mock/test_all_pages.dSYM/Contents/Resources/Relocations/aarch64/test_all_pages.yml new file mode 100644 index 0000000..5ff51c9 --- /dev/null +++ b/raidguard_c_gui_server_mock/test_all_pages.dSYM/Contents/Resources/Relocations/aarch64/test_all_pages.yml @@ -0,0 +1,5 @@ +--- +triple: 'arm64-apple-darwin' +binary-path: test_all_pages +relocations: [] +...