主机单测:新增卷锁与时间同步两套用例(33+80 项)并登记钩子
- vol_lock(App/fs/vol_lock.c):33 用例。核心不变量是 fail-open—— 互斥量创建失败时 vol_lock_wait() 必须返回 1 且绝不阻塞,因为调用者 defaultTask 是看门狗喂狗点;板端该路径只在内存耗尽时才可能走到。 - time_sync(App/sync/time_sync.c):80 用例。本模块是 N-17 看门狗风险的 全部逻辑贡献者,用例钉死分片喂狗节奏、监听退避、报文重组(半包/粘连/ EOF/真错/预算耗尽/tick 回绕)、重听门控;用 longjmp 跳出 for(;;) 任务循环。 - 两套均为纯逻辑主机侧测试,MSVC 离线编译真实源文件(#include 纳入)。 - 新增钩子 vol-lock-unit-test、time-sync-unit-test(7f/7g)。 - 全量主机单测:watchdog 39 + sys_clock 100 + cfg_file 149 + phasor 57 + adc_input 70 + vol_lock 33 + time_sync 80 = 528 项,全绿。
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* 主机侧单测桩:net_socket.h(含内联 net_types.h 子集)
|
||||
* 模块功能:为 App/sync/time_sync.c 提供主机可编译的网络 Socket API 声明与类型。
|
||||
*
|
||||
* ⚠ 仅供 test/host/time_sync/ 使用,不参与 MCU 构建。
|
||||
* 真实头(Drivers/BSP/NET/net_socket.h)包含 net_types.h → net_config.h,并经
|
||||
* FreeRTOS.h / task.h 拖入整套 FreeRTOS;本桩改为包含同名桩头。
|
||||
*
|
||||
* 保真点:
|
||||
* - 地址族/类型/特殊地址常量与 Drivers/BSP/NET/net_types.h 逐字一致;
|
||||
* - struct net_sockaddr / net_in_addr / net_sockaddr_in 字段与真实头一致
|
||||
* (被测代码写 sin_family / sin_port / sin_addr.s_addr,桩按同布局读取);
|
||||
* - 7 个被测代码调用的接口签名与真实头一致(net_socket / net_bind / net_listen /
|
||||
* net_accept / net_close / net_recv_to / net_get_generation / net_htons)。
|
||||
* 全部由测试单元给强符号桩(脚本化返回值 + 调用记录)。
|
||||
*
|
||||
* 创建日期:2026-10-10
|
||||
*/
|
||||
|
||||
#ifndef NET_SOCKET_H
|
||||
#define NET_SOCKET_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* ===== 以下取自 Drivers/BSP/NET/net_types.h(逐字) ===== */
|
||||
|
||||
#define NET_AF_INET 2 /* IPv4 */
|
||||
#define NET_SOCK_STREAM 1 /* TCP */
|
||||
#define NET_SOCK_DGRAM 2 /* UDP */
|
||||
#define NET_INADDR_ANY 0 /* 任意地址 */
|
||||
#define NET_INADDR_NONE 0xFFFFFFFF /* 无效地址 */
|
||||
|
||||
struct net_sockaddr {
|
||||
uint16_t sa_family; /* 地址族 */
|
||||
char sa_data[14]; /* 地址数据 */
|
||||
};
|
||||
|
||||
struct net_in_addr {
|
||||
uint32_t s_addr; /* IP 地址(网络字节序) */
|
||||
};
|
||||
|
||||
struct net_sockaddr_in {
|
||||
uint16_t sin_family; /* 地址族,必须为 AF_INET */
|
||||
uint16_t sin_port; /* 端口号(网络字节序) */
|
||||
struct net_in_addr sin_addr; /* IP 地址(网络字节序) */
|
||||
char sin_zero[8]; /* 填充字节 */
|
||||
};
|
||||
|
||||
/* ===== 被测代码用到的 Socket API(签名与真实头一致) ===== */
|
||||
|
||||
int net_socket(int domain, int type);
|
||||
int net_bind(int sockfd, const struct net_sockaddr *addr, int addrlen);
|
||||
int net_listen(int sockfd);
|
||||
int net_accept(int sockfd, struct net_sockaddr *addr, int *addrlen);
|
||||
int net_close(int sockfd);
|
||||
int net_recv_to(int sockfd, void *buf, int len, uint32_t timeout_ms);
|
||||
uint32_t net_get_generation(void);
|
||||
uint16_t net_htons(uint16_t hostshort);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* NET_SOCKET_H */
|
||||
Reference in New Issue
Block a user