Compare commits

...

45 Commits

Author SHA1 Message Date
openharmony_ci 3d8536b450
!1122 liteos_m cpup 中断索引值越界修复
Merge pull request !1122 from hw_llm/master
2024-09-02 12:36:22 +00:00
hw_llm 413b08295d Description: liteos_m cpup 中断索引值越界修复
IssueNo: https://gitee.com/openharmony/kernel_liteos_m/issues/I9RHZ7
Feature Or Bugfix: Bugfix
Binary Source: No
Signed-off-by: hw_llm <liu.limin@huawei.com>
2024-08-29 15:28:16 +08:00
openharmony_ci 10e00b3047
!1120 【修复】OAT告警
Merge pull request !1120 from 石子怡/master
2024-06-05 08:04:36 +00:00
石子怡 88fd668b8f
修复OAT告警
Signed-off-by: 石子怡 <z15319797139@163.com>
2024-06-05 06:47:40 +00:00
openharmony_ci ddaad05097
!1116 clear systick pending status
Merge pull request !1116 from hw_llm/master
2024-05-29 05:00:53 +00:00
openharmony_ci c739d4a164
!1114 【修复】OAT告警
Merge pull request !1114 from 石子怡/master
2024-05-27 11:39:31 +00:00
hw_llm 92fbcaf074 Description: clear systick pending status
IssueNo: https://gitee.com/openharmony/kernel_liteos_m/issues/I93ZUQ
Feature Or Bugfix: Feature
Binary Source: No
Signed-off-by: hw_llm <liu.limin@huawei.com>
2024-05-25 11:03:53 +08:00
石子怡 441d552355
修复OAT告警
Signed-off-by: 石子怡 <z15319797139@163.com>
2024-05-25 02:21:53 +00:00
石子怡 e151e8369b
修复OAT告警
Signed-off-by: 石子怡 <z15319797139@163.com>
2024-05-25 01:17:11 +00:00
openharmony_ci e539a6c951
!1102 fix:设置LOSCFG_PLATFORM_HWI_WITH_ARG为1后,编译失败问题修复
Merge pull request !1102 from zhangkt/master
2024-03-26 06:58:35 +00:00
openharmony_ci e19155f49f
!1108 删除bundle.json中的syscap信息,确保与架构信息平台设计信息一致
Merge pull request !1108 from hw_llm/master
2024-02-05 07:22:45 +00:00
hw_llm 76562c376c Description: 删除bundle.json中syscap信息
IssueNo: https://gitee.com/openharmony/kernel_liteos_a/issues/I90PKD
Feature Or Bugfix: Feature
Binary Source: No
Signed-off-by: hw_llm <liu.limin@huawei.com>
2024-02-02 15:40:05 +08:00
openharmony_ci 954c855528
!1107 cortex-m7支持iccarm 编译
Merge pull request !1107 from hw_llm/master
2024-01-27 08:20:41 +00:00
hw_llm 80f3e0f6b2 Description: cortex-m7支持iccarm 编译
IssueNo: https://gitee.com/openharmony/kernel_liteos_m/issues/I8ZCYS
Feature Or Bugfix: Feature
Binary Source: No
Signed-off-by: hw_llm <liu.limin@huawei.com>
2024-01-27 15:38:28 +08:00
zhangkt 36c0634ff5 fix:设置LOSCFG_PLATFORM_HWI_WITH_ARG为1后,编译失败问题修复
Signed-off-by: zhangkt <zhangkt1995@gmail.com>
2023-11-23 11:15:09 +08:00
openharmony_ci e22e8525e9
!1094 增加内核queue可以在中断中进行读写操作的接口
Merge pull request !1094 from libnew/master
2023-09-12 11:36:36 +00:00
zengwenlong 1b778c4267 feat: 增加内核queue在中断中进行读写操作的接口
方案描述:
1,基于 OsQueueOperate增加支持queue在中断中进行读写操作的接口。
BREAKING CHANGE:
增加支持queue在中断中进行读写操作的接口,需要适配接口描述:
适配API:

新增API:
UINT32 LOS_QueueReadCopyIsr(UINT32 queueID,   VOID *bufferAddr, UINT32 *bufferSize);
UINT32 LOS_QueueWriteCopyIsr(UINT32 queueID, VOID *bufferAddr, UINT32 bufferSize);
UINT32 LOS_QueueReadIsr(UINT32 queueID,VOID *bufferAddr,  UINT32 bufferSize);
UINT32 LOS_QueueWriteIsr(UINT32 queueID, VOID *bufferAddr,  UINT32 bufferSize);
UINT32 LOS_QueueWriteHeadIsr(UINT32 queueID, VOID *bufferAddr,UINT32 bufferSize);
UINT32 LOS_QueueWriteHeadCopyIsr(UINT32 queueID,  VOID *bufferAddr,UINT32 bufferSize);

Signed-off-by: zengwenlong <zengwenlong@openvalley.net>
2023-09-11 20:47:44 -07:00
openharmony_ci c70295cc30
!1096 xts用例
Merge pull request !1096 from 乔克叔叔/wxliu
2023-08-31 09:10:48 +00:00
liuwenxin c19dc1bc94 fix:xts用例
Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
Change-Id: I2d3f856eb94e5ced0bc5a9c0211f10f453a4ad03
2023-08-31 16:49:50 +08:00
openharmony_ci d2bf535696
!1091 支持可配置是否生成asm文件
Merge pull request !1091 from wangchen/0817_m
2023-08-18 01:52:50 +00:00
wangchen bda25829af Fix: 支持可配置是否生成asm文件
Close #I7U2V4
Signed-off-by: wangchen <wangchen240@huawei.com>
2023-08-17 21:41:43 +08:00
openharmony_ci a1e215f16a
!1090 liteos_m内核xts用例补齐cmsis中task剩余
Merge pull request !1090 from zwx1232718/master
2023-08-17 02:14:08 +00:00
zwx1232718 5e36b8b599 test:xts用例,task补充
Signed-off-by: zwx1232718 <zhenghui23@huawei.com>
2023-08-17 09:06:40 +08:00
openharmony_ci 954aa6fb70
!1087 liteos_m内核xts用例补齐cmsis剩余task部分
Merge pull request !1087 from zwx1232718/master
2023-08-16 01:18:57 +00:00
zwx1232718 64a73724b3 test:xts用例补齐,cmsis中task部分
Signed-off-by: zwx1232718 <zhenghui23@huawei.com>
2023-08-15 10:40:53 +08:00
openharmony_ci 2a49ac7323
!1084 readme翻译问题修改
Merge pull request !1084 from wangchen/0804_m
2023-08-14 13:38:45 +00:00
openharmony_ci cde26d8d68
!1080 Kconfig清理冗余代码
Merge pull request !1080 from 乔克叔叔/master
2023-08-11 02:49:30 +00:00
openharmony_ci 4140bd673e
!1081 liteos_m内核xts用例补齐部分cmsis
Merge pull request !1081 from zwx1232718/master
2023-08-09 06:58:11 +00:00
openharmony_ci 2b81e524a1
!1085 Fix : 内核告警清理
Merge pull request !1085 from yinjiaming/fix
2023-08-09 02:14:05 +00:00
zwx1232718 1dae9259ef test:xts用例补齐,部分cmsis
Signed-off-by: zwx1232718 <zhenghui23@huawei.com>
2023-08-09 09:58:58 +08:00
yinjiaming 3ce50a610c fix:内核代码告警清理
内核代码经工具检测有告警,现予清理

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I3bf6c421296dfccd9c78cc6af47dcb1879da5cea
2023-08-08 16:22:32 +08:00
wangchen cf980647d6 Fix: readme翻译问题修改
Close #I7QAKU
Signed-off-by: wangchen <wangchen240@huawei.com>
2023-08-04 10:28:10 +08:00
openharmony_ci ab131703be
!1079 liteos_m内核xts用例补齐net、time以及部分cmsis
Merge pull request !1079 from zwx1232718/master
2023-07-30 09:27:23 +00:00
liuwenxin f42c36ac8e fix:kconfig清理冗余代码
Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
Change-Id: I45b8185b87b9c6cb03a470c9969239fdda5f6b4d
2023-07-29 15:57:26 +08:00
zwx1232718 f2ddeaebfd test:net、time以及部分cmsis
Signed-off-by: zwx1232718 <zhenghui23@huawei.com>
2023-07-28 17:36:06 +08:00
openharmony_ci 5d5e155f31
!1078 liteos_m内核xts用例补齐mem、process、sched、sys部分
Merge pull request !1078 from zwx1232718/master
2023-07-21 01:53:13 +00:00
zwx1232718 0c3dbb4c01 test:xts用例补齐,mem、process、sched、sys部分
Signed-off-by: zwx1232718 <zhenghui23@huawei.com>
2023-07-19 14:41:06 +08:00
openharmony_ci 873255af51
!1077 liteos_m内核xts用例补齐math部分及ipc中msg部分
Merge pull request !1077 from zwx1232718/master
2023-07-14 01:39:23 +00:00
zwx1232718 22702a27fc test:xts用例补齐,math及ipc中msg部分
Signed-off-by: zwx1232718 <zhenghui23@huawei.com>
2023-07-13 10:02:43 +08:00
openharmony_ci b37358cb47
!1076 liteos_m内核xts用例补齐io部分
Merge pull request !1076 from zwx1232718/master
2023-07-10 02:07:07 +00:00
zwx1232718 b73eb72ba6 test:xts用力补齐,io部分
Signed-off-by: zwx1232718 <zhenghui23@huawei.com>
2023-07-08 14:22:06 +08:00
openharmony_ci e98de4489f
!1074 liteos_m内核xts用例补齐ipc部分
Merge pull request !1074 from zwx1232718/master
2023-06-30 07:46:54 +00:00
zwx1232718 4cfb20d7e9 test:测试用力补齐
Signed-off-by: zwx1232718 <zhenghui23@huawei.com>
2023-06-28 17:52:39 +08:00
openharmony_ci 9248d46457
!1073 fix:三方软件名称整改
Merge pull request !1073 from zhangdengyu/componentization_0627
2023-06-28 01:29:47 +00:00
zhangdengyu 808b9de5b8 fix:三方软件名称整改
Close:#I7G9O9

Signed-off-by: zhangdengyu <zhangdengyu2@huawei.com>
Change-Id: I026d94ae8f068134d4047902203ea56122574bec
2023-06-27 20:58:18 +08:00
127 changed files with 14519 additions and 276 deletions

View File

@ -44,6 +44,10 @@ if (defined(LOSCFG_COMPILER_ICCARM)) {
}
}
declare_args() {
liteos_build_asm = true
}
config("arch_config") {
cflags = arch_config_cflags
asmflags = arch_config_asmflags
@ -215,4 +219,7 @@ build_ext_component("build_kernel_image") {
exec_path = rebase_path(root_out_dir)
command = toochain_config_command
if (liteos_build_asm) {
command += toochain_asm_command
}
}

170
Kconfig
View File

@ -39,19 +39,9 @@ choice
config COMPILER_GCC
bool "GCC"
config CROSS_COMPILE
string "GCC cross-compile toolchain prefix"
depends on COMPILER_GCC
default "arm-none-eabi-" if ARCH_ARM_AARCH32
config COMPILER_CLANG_LLVM
bool "Clang"
config LLVM_TARGET
string "Clang LLVM target"
depends on COMPILER_CLANG_LLVM
default "arm-liteos-ohos" if ARCH_ARM_AARCH32
config COMPILER_ICCARM
bool "ICCARM"
@ -96,15 +86,6 @@ config PLATFORM
string
default "virt" if PLATFORM_QEMU_ARM_VIRT_CM7 || PLATFORM_QEMU_ARM_VIRT_CM4 || PLATFORM_QEMU_ARM_VIRT_CM55 || PRODUCT_QEMU_RISCV32_VIRT || PLATFORM_QEMU_CSKY_SMARTL || PLATFORM_QEMU_XTENSA_ESP32
config PRODUCT_NAME
string
default "arm_virt" if PRODUCT_QEMU_ARM
default "arm_mps2_an386" if PRODUCT_QEMU_ARM_MPS2_AN386
default "arm_mps3_an547" if PRODUCT_QEMU_ARM_MPS3_AN547
default "riscv32_virt" if PRODUCT_QEMU_RISCV32_VIRT
default "csky_smartl_e802" if PRODUCT_QEMU_CSKY_SMARTL_E802
default "xtensa_esp32" if PRODUCT_QEMU_XTENSA_ESP32
config DEVICE_COMPANY
string
default "qemu" if PLATFORM_QEMU_ARM_VIRT_CM7 || PLATFORM_QEMU_ARM_VIRT_CM4 || PLATFORM_QEMU_ARM_VIRT_CM55 || PRODUCT_QEMU_RISCV32_VIRT || PLATFORM_QEMU_CSKY_SMARTL || PLATFORM_QEMU_XTENSA_ESP32
@ -163,24 +144,9 @@ choice
help
Select your target board.
config PRODUCT_QEMU_ARM
bool "arm_virt" if PLATFORM_QEMU_ARM_VIRT_CM7
config PRODUCT_QEMU_ARM_MPS2_AN386
bool "arm_mps2_an386" if PLATFORM_QEMU_ARM_VIRT_CM4
config PRODUCT_QEMU_ARM_MPS3_AN547
bool "arm_mps3_an547" if PLATFORM_QEMU_ARM_VIRT_CM55
config PRODUCT_QEMU_RISCV32_VIRT
bool "riscv32_virt" if PLATFORM_QEMU_RISCV32_VIRT
config PRODUCT_QEMU_CSKY_SMARTL_E802
bool "csky_smartl_e802" if PLATFORM_QEMU_CSKY_SMARTL
config PRODUCT_QEMU_XTENSA_ESP32
bool "xtensa_esp32" if PLATFORM_QEMU_XTENSA_ESP32
endchoice
@ -219,12 +185,6 @@ endchoice
orsource "../../device/soc/*/Kconfig.liteos_m.soc"
config QUICK_START
bool "Enable QUICK_START"
default n
depends on DRIVERS && FS_VFS
help
Answer Y to enable LiteOS support quick start.
endmenu
######################### config options of kernel #####################
@ -343,21 +303,6 @@ config KERNEL_PM_IDLE
Configuration item for low power frame tailoring.
If you wish to build LiteOS with support for power management idle.
config KERNEL_PM_TASK_PTIORITY
int "Power Management Task Priority"
default 1
range 1 31
depends on KERNEL_PM
help
Configuration item for priority of low-power task.
config KERNEL_PM_TASK_STACKSIZE
int "Power Management Task Stack Size"
default 1024
depends on KERNEL_PM
help
Configuration item for stack size of low-power task.
config KERNEL_PM_DEBUG
bool "Power Management Debug"
default n
@ -393,17 +338,6 @@ source "components/lms/Kconfig"
endmenu
######################### config options of lib ########################
menu "Lib"
config LIB_LIBC
bool "Enable Libc"
default y
help
Answer Y to enable libc for full code.
endmenu
######################### config options of compatibility ##############
menu "Compat"
@ -436,43 +370,6 @@ endmenu
######################## config options of debug ########################
menu "Debug"
config GDB
bool "Enable gdb functions"
default n
help
Answer Y to enable gdb functions.
config PLATFORM_ADAPT
bool "Enable Os_adapt"
default y
help
Answer Y to add os_adapt.c to LiteOS.
config ENABLE_OOM_LOOP_TASK
bool "Enable Oom loop task"
default n
depends on KERNEL_VM
help
Answer Y to enable oom loop kthread to check system out of memory.
config DO_ALIGN
bool "Enable do align for hi3518e"
default y
depends on PLATFORM_HI3518EV200
help
Answer Y to enable do align for hi3518e.
config ENABLE_MAGICKEY
bool "Enable MAGIC KEY"
default y
help
Answer Y to enable LiteOS Magic key.
ctrl + r : Magic key check switch;
ctrl + z : Show all magic op key;
ctrl + t : Show task information;
ctrl + p : System panic;
ctrl + e : Check system memory pool.
config THUMB
bool "Enable Thumb"
@ -481,20 +378,6 @@ config THUMB
help
Answer Y to build thumb version. This will make LiteOS smaller.
config PLATFORM_DVFS
bool "Enable Dvfs"
default n
depends on COMPAT_LINUXKPI
help
Answer Y to enable LiteOS support dynamic voltage and frequency scaling feature for
low power consumption.
config SAVE_EXCINFO
bool "Enable Saving Exception Information"
default n
help
Answer Y to enable LiteOS support saving exception information to storage medium.
config DEBUG_VERSION
bool "Enable a Debug Version"
default y
@ -514,13 +397,6 @@ config DEBUG_KERNEL
It also means you want to get queue, mutex, semaphore, memory debug information.
That means you want a opposite behaviour compared to release version.
config DEBUG_QUEUE
bool "Enable Queue Debugging"
default n
depends on DEBUG_KERNEL
help
Answer Y to enable debug queue.
config MUTEX_CREATE_TRACE
bool "Enable Mutex Trace Debugging"
default n
@ -529,20 +405,6 @@ config MUTEX_CREATE_TRACE
help
Answer Y to enable debug mutex trace.
config DEBUG_DEADLOCK
bool "Enable Mutex Deadlock Debugging"
default n
depends on DEBUG_KERNEL
help
Answer Y to enable debug mutex deadlock.
config DEBUG_SEMAPHORE
bool "Enable Semaphore Debugging"
default n
depends on DEBUG_KERNEL
help
Answer Y to enable debug semaphore.
config NET_LWIP_SACK_TFTP
bool "Enable Tftp"
default y
@ -557,18 +419,6 @@ config DEBUG_HOOK
help
Enable the kernel hook framework to support customized trace information capture.
config SCHED_DEBUG
bool "Enable sched debug Feature"
default n
depends on DEBUG_VERSION
help
If you wish to build LiteOS with support for sched debug.
config USER_INIT_DEBUG
bool "Enable user init Debug"
default n
depends on DEBUG_VERSION
config SHELL_CMD_DEBUG
bool "Enable shell cmd Debug"
default n
@ -581,13 +431,6 @@ config DEBUG_TOOLS
help
Answer Y to enable LiteOS debug tools, include stackdump, hwidump, tasktrack.
config USB_DEBUG
bool "Enable USB Debug"
default n
depends on SHELL && DRIVERS_USB && DEBUG_VERSION
help
Answer Y to enable LiteOS support usb debug.
use shell command to open the specified debug level print.
config MEM_DEBUG
bool "Enable MEM Debug"
default n
@ -611,13 +454,6 @@ config MEM_WATERLINE
default n
depends on DEBUG_VERSION && MEM_DEBUG
config VM_OVERLAP_CHECK
bool "Enable VM overlap check or not"
default n
depends on DEBUG_VERSION && MEM_DEBUG
help
Answer Y to enable vm overlap check.
config TASK_MEM_USED
bool "Enable show task mem used or not"
default n
@ -643,12 +479,6 @@ config SECURE_HEAP_SIZE
int "TrustZone Heap Size (bytes)"
default 2048
depends on SECURE_TRUSTZONE
config SECURE_STACK_DEFAULT_SIZE
int "TrustZone Stack Size (bytes)"
default 512
depends on SECURE_TRUSTZONE
help
The secure stack must be allocated before the task calls non-secure functions.
config SECURE
bool "Enable Security"
default n

View File

@ -23,6 +23,7 @@
<policylist>
<policy name="projectPolicy" desc="">
<policyitem type="copyright" name="Huawei Technologies Co., Ltd. All rights reserved." path=".*" desc="original liteos copyright"/>
<policyitem type="copyright" name="Hunan OpenValley Digital Industry Development Co., Ltd." path=".*" desc="Developed By OpenValley Digital Co., Ltd."/>
<policyitem type="license" name="BSD-3-Clause" path=".*" desc="Liteos kernel use bsd3 license"/>
<policyitem type="license" name="BSD-3-Clause" path=".*" desc="Liteos kernel use bsd3 license"/>
</policy>
@ -66,6 +67,9 @@
<!--filteritem type="filepath" name="projectroot/[a-zA-Z0-9]{20,}.sh" desc="Temp files"/-->
</filefilter>
<filefilter name="binaryFileTypePolicyFilter" desc="Filters for binary file policies">
<filteritem type="filepath"
name="figures/architecture-of-openharmony-the-liteos-cortex-m-kernel.png" desc="architecture-of-openharmony-the-liteos-cortex-m-kernel"/>
<filteritem type="filepath" name="figures/OpenHarmony-LiteOS-M核内核架构图.png" desc="内核驱动架构"/>
<!--filteritem type="filename" name="*.uvwxyz" desc="Describe the reason for filtering scan results"/-->
<!--filteritem type="filepath" name="abcdefg/.*.uvwxyz" desc="Describe the reason for filtering scan results"/-->
<!--filteritem type="filepath" name="projectroot/[a-zA-Z0-9]{20,}.sh" desc="Temp files"/-->

View File

@ -35,7 +35,7 @@ The directory structure is as follows. For more details, see [arch_spec.md](arch
│ ├── include # APIs exposed externally
│ ├── risc-v # Code of the risc-v architecture
│ │ ├── nuclei # Code of the nuclei system technology risc-v architecture
│ │ └── riscv32 # Code of the risc-v architecture
│ │ └── riscv32 # Code of the risc-v official common architecture
│ └── xtensa # Code of the xtensa architecture
│ └── lx6 # Code of the lx6 xtensa architecture
├── components # Optional components

View File

@ -24,27 +24,6 @@ config ARCH_FPU_DISABLE
help
This option will bypass floating procedure in system.
config ARCH_SECURE_MONITOR_MODE
bool "Run On Secure Monitor Mode"
default n
depends on ARCH_ARM_AARCH64
help
This option will make the system run on EL3.
config ARCH_INTERRUPT_PREEMPTION
bool "Enable Interrupt Preemption"
default n
depends on ARCH_ARM_AARCH64
help
This option will support high priority interrupt preemption.
config IRQ_USE_STANDALONE_STACK
bool "Use Interrupt Stack"
default y
depends on ARCH_ARM_AARCH64 || ARCH_ARM_AARCH32
help
This option will support using standalone interrupt stack.
config ARCH_UNALIGNED_EXC
bool "Enable Unaligned Exception"
default y

View File

@ -105,10 +105,6 @@ BOOL OsHwiIsCreated(UINT32 index)
#endif
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
typedef struct {
HWI_PROC_FUNC pfnHandler;
VOID *pParm;
} HWI_HANDLER_FUNC;
/* *
* @ingroup los_hwi

View File

@ -63,6 +63,11 @@ extern UINT32 g_intCount;
#endif
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
typedef struct {
HWI_PROC_FUNC pfnHandler;
VOID *pParm;
} HWI_HANDLER_FUNC;
/* *
* @ingroup los_arch_interrupt
* Set interrupt vector table.

View File

@ -86,7 +86,7 @@ STATIC UINT64 SysTickReload(UINT64 nextResponseTime)
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
NVIC_ClearPendingIRQ(SysTick_IRQn);
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
return nextResponseTime;

View File

@ -85,7 +85,7 @@ STATIC UINT64 SysTickReload(UINT64 nextResponseTime)
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
NVIC_ClearPendingIRQ(SysTick_IRQn);
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
return nextResponseTime;
}

View File

@ -84,7 +84,7 @@ STATIC UINT64 SysTickReload(UINT64 nextResponseTime)
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
NVIC_ClearPendingIRQ(SysTick_IRQn);
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
return nextResponseTime;
}

View File

@ -84,7 +84,7 @@ STATIC UINT64 SysTickReload(UINT64 nextResponseTime)
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
NVIC_ClearPendingIRQ(SysTick_IRQn);
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
return nextResponseTime;
}

View File

@ -85,7 +85,7 @@ STATIC UINT64 SysTickReload(UINT64 nextResponseTime)
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
NVIC_ClearPendingIRQ(SysTick_IRQn);
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
return nextResponseTime;
}

View File

@ -84,7 +84,7 @@ STATIC UINT64 SysTickReload(UINT64 nextResponseTime)
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
NVIC_ClearPendingIRQ(SysTick_IRQn);
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
return nextResponseTime;
}

View File

@ -84,7 +84,7 @@ STATIC UINT64 SysTickReload(UINT64 nextResponseTime)
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
NVIC_ClearPendingIRQ(SysTick_IRQn);
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
return nextResponseTime;
}

View File

@ -84,7 +84,7 @@ STATIC UINT64 SysTickReload(UINT64 nextResponseTime)
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
NVIC_ClearPendingIRQ(SysTick_IRQn);
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
return nextResponseTime;
}

View File

@ -84,7 +84,7 @@ STATIC UINT64 SysTickReload(UINT64 nextResponseTime)
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
NVIC_ClearPendingIRQ(SysTick_IRQn);
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
return nextResponseTime;
}

View File

@ -84,7 +84,7 @@ STATIC UINT64 SysTickReload(UINT64 nextResponseTime)
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
NVIC_ClearPendingIRQ(SysTick_IRQn);
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
return nextResponseTime;
}

View File

@ -85,7 +85,7 @@ STATIC UINT64 SysTickReload(UINT64 nextResponseTime)
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
NVIC_ClearPendingIRQ(SysTick_IRQn);
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
return nextResponseTime;
}

View File

@ -84,7 +84,7 @@ STATIC UINT64 SysTickReload(UINT64 nextResponseTime)
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
NVIC_ClearPendingIRQ(SysTick_IRQn);
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
return nextResponseTime;
}

View File

@ -0,0 +1,47 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2024 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni")
module_name = "arch"
kernel_module(module_name) {
sources = [
"los_context.c",
"los_dispatch.S",
"los_exc.S",
"los_interrupt.c",
"los_mpu.c",
"los_timer.c",
]
configs += [ "$LITEOSTOPDIR:warn_config" ]
}
config("public") {
include_dirs = [ "." ]
}

View File

@ -84,7 +84,7 @@ STATIC UINT64 SysTickReload(UINT64 nextResponseTime)
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
NVIC_ClearPendingIRQ(SysTick_IRQn);
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
return nextResponseTime;
}

View File

@ -155,10 +155,6 @@ UINT32 ArchIntCurIrqNum(VOID)
}
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
typedef struct {
HWI_PROC_FUNC pfnHandler;
VOID *pParm;
} HWI_HANDLER_FUNC;
/* *
* @ingroup los_hwi

View File

@ -63,6 +63,11 @@ extern volatile UINT32 g_intCount;
#endif
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
typedef struct {
HWI_PROC_FUNC pfnHandler;
VOID *pParm;
} HWI_HANDLER_FUNC;
/* *
* @ingroup los_arch_interrupt
* Set interrupt vector table.

View File

@ -110,6 +110,12 @@ typedef struct {
*/
#define OS_RISCV_VECTOR_CNT (OS_RISCV_SYS_VECTOR_CNT + OS_RISCV_CUSTOM_IRQ_VECTOR_CNT)
/**
* @ingroup los_arch_interrupt
* Count of risc-v system interrupt vector.
*/
#define OS_SYS_VECTOR_CNT 0
/**
* Maximum number of supported hardware devices that generate hardware interrupts.
* The maximum number of hardware devices that generate hardware interrupts supported by hi3518ev200 is 32.

View File

@ -137,10 +137,6 @@ UINT32 ArchIntCurIrqNum(VOID)
}
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
typedef struct {
HWI_PROC_FUNC pfnHandler;
VOID *pParm;
} HWI_HANDLER_FUNC;
/* *
* @ingroup los_hwi

View File

@ -63,6 +63,11 @@ extern UINT32 g_intCount;
#endif
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
typedef struct {
HWI_PROC_FUNC pfnHandler;
VOID *pParm;
} HWI_HANDLER_FUNC;
/* *
* @ingroup los_arch_interrupt
* Set interrupt vector table.

View File

@ -27,9 +27,6 @@
"component": {
"name": "liteos_m",
"subsystem": "kernel",
"syscap": [
"SystemCapability.Kernel.Liteos-M"
],
"features": [],
"adapted_system_type": [
"mini"
@ -43,7 +40,7 @@
"third_party": [
"bounds_checking_function",
"cmsis",
"fatfs",
"FatFs",
"littlefs",
"lwip",
"musl"

View File

@ -616,11 +616,11 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_CpupUsageMonitor(CPUP_TYPE_E type, CPUP_MODE_E
#if (LOSCFG_CPUP_INCLUDE_IRQ == 1)
LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqStart(UINT32 intNum)
{
if (g_irqCpupInitFlg == 0) {
if ((g_irqCpupInitFlg == 0) || (intNum < OS_SYS_VECTOR_CNT)) {
return;
}
g_irqCpup[intNum].startTime = CpupTimeUsGet();
UINT32 cpupIntNum = intNum - OS_SYS_VECTOR_CNT;
g_irqCpup[cpupIntNum].startTime = CpupTimeUsGet();
return;
}
@ -629,33 +629,34 @@ LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqEnd(UINT32 intNum)
UINT64 cpuTime;
UINT64 usedTime;
if (g_irqCpupInitFlg == 0) {
if ((g_irqCpupInitFlg == 0) || (intNum < OS_SYS_VECTOR_CNT)) {
return;
}
if (g_irqCpup[intNum].startTime == 0) {
UINT32 cpupIntNum = intNum - OS_SYS_VECTOR_CNT;
if (g_irqCpup[cpupIntNum].startTime == 0) {
return;
}
cpuTime = CpupTimeUsGet();
if (cpuTime < g_irqCpup[intNum].startTime) {
if (cpuTime < g_irqCpup[cpupIntNum].startTime) {
cpuTime += OS_US_PER_TICK;
}
g_irqCpup[intNum].cpupID = intNum;
g_irqCpup[intNum].status = OS_CPUP_USED;
usedTime = cpuTime - g_irqCpup[intNum].startTime;
g_irqCpup[cpupIntNum].cpupID = intNum;
g_irqCpup[cpupIntNum].status = OS_CPUP_USED;
usedTime = cpuTime - g_irqCpup[cpupIntNum].startTime;
if (g_irqCpup[intNum].count <= 1000) { /* 1000, Take 1000 samples */
g_irqCpup[intNum].allTime += usedTime;
g_irqCpup[intNum].count++;
if (g_irqCpup[cpupIntNum].count <= 1000) { /* 1000, Take 1000 samples */
g_irqCpup[cpupIntNum].allTime += usedTime;
g_irqCpup[cpupIntNum].count++;
} else {
g_irqCpup[intNum].allTime = 0;
g_irqCpup[intNum].count = 0;
g_irqCpup[cpupIntNum].allTime = 0;
g_irqCpup[cpupIntNum].count = 0;
}
g_irqCpup[intNum].startTime = 0;
if (usedTime > g_irqCpup[intNum].timeMax) {
g_irqCpup[intNum].timeMax = usedTime;
g_irqCpup[cpupIntNum].startTime = 0;
if (usedTime > g_irqCpup[cpupIntNum].timeMax) {
g_irqCpup[cpupIntNum].timeMax = usedTime;
}
return;
}

View File

@ -31,11 +31,4 @@ config LMS_CHECK_STRICT
default n
depends on KERNEL_LMS
help
Select y to enable byte-by-byte check in lms
config LMS_LIBC_FULL_CHECK
bool "Enable libc all function do lms check"
default n
depends on KERNEL_LMS
help
Select y to enable libc full check
Select y to enable byte-by-byte check in Lms

View File

@ -162,7 +162,8 @@ UINT32 LOS_LmsCheckPoolAdd(const VOID *pool, UINT32 size)
lmsPoolNode->shadowStart = (UINTPTR)poolAddr + realSize;
lmsPoolNode->shadowSize = poolAddr + size - lmsPoolNode->shadowStart;
/* init shadow value */
(VOID)memset_s((VOID *)lmsPoolNode->shadowStart, lmsPoolNode->shadowSize, LMS_SHADOW_AFTERFREE_U8, lmsPoolNode->shadowSize);
(VOID)memset_s((VOID *)lmsPoolNode->shadowStart, lmsPoolNode->shadowSize, LMS_SHADOW_AFTERFREE_U8,
lmsPoolNode->shadowSize);
LOS_ListAdd(&g_lmsCheckPoolList, &(lmsPoolNode->node));

View File

@ -147,7 +147,6 @@ STATIC BOOL OsPmTickTimerStop(LosPmCB *pm)
realSleepTime = expireTime - currTime;
sleepCycle = OS_SYS_CYCLE_TO_NS(realSleepTime, g_sysClock);
sleepCycle = OS_SYS_NS_TO_CYCLE(sleepCycle, tickTimer->freq);
if (sleepCycle == 0) {
pm->sysMode = LOS_SYS_NORMAL_SLEEP;
return FALSE;

View File

@ -24,18 +24,4 @@ config SHELL_STACK_SIZE
default 4096
depends on SHELL
config SHELL_LK
bool "Enable Shell lk"
default y
depends on DEBUG_VERSION && SHELL
help
Answer Y to enable LiteOS support shell lk.
config SHELL_DMESG
bool "Enable Shell dmesg"
default n
depends on DEBUG_VERSION && SHELL && SHELL_CMD_DEBUG
help
Answer Y to enable LiteOS support shell dmesg.
endmenu

View File

@ -72,7 +72,4 @@ config TRACE_CONTROL_VIA_SHELL
config TRACE_CONTROL_AGENT
bool "Via Trace Agent Task"
config TRACE_NO_CONTROL
bool "No Control"
endchoice

View File

@ -206,5 +206,6 @@ toochain_config_objdump = "${compile_prefix}objdump$toolchain_cmd_suffix"
toochain_config_command =
"$toochain_config_objcopy -O binary $liteos_name $liteos_name.bin"
toochain_config_command += " && sh -c '$toochain_config_objdump -t $liteos_name | sort >$liteos_name.sym.sorted'"
toochain_config_command +=
toochain_asm_command =
" && sh -c '$toochain_config_objdump -d $liteos_name >$liteos_name.asm'"

View File

@ -149,4 +149,5 @@ toochain_config_objdump = "${compile_prefix}ielfdumparm$toolchain_cmd_suffix"
toochain_config_command =
"$toochain_config_objcopy --bin --verbose $liteos_name $liteos_name.bin"
toochain_config_command += " && sh -c '$toochain_config_objdump --source --all $liteos_name -o $liteos_name.asm'"
toochain_asm_command = " && sh -c '$toochain_config_objdump --source --all $liteos_name -o $liteos_name.asm'"

View File

@ -39,6 +39,7 @@
#include "los_list.h"
#include "los_config.h"
#include "los_task.h"
#ifdef __cplusplus
#if __cplusplus
@ -487,6 +488,50 @@ extern UINT32 LOS_QueueReadCopy(UINT32 queueID,
UINT32 *bufferSize,
UINT32 timeOut);
/**
* @ingroup los_queue
* @brief Read a queue in interrupt service routine.
*
* @par Description:
* This API is used to read data in a specified queue, and store the obtained data to the address specified
* by bufferAddr. The address and the size of the data to be read are defined by users.
* It is safe to use this API from within an interrupt service routine.
* @attention
* <ul>
* <li>The specific queue should be created firstly.</li>
* <li>Queue reading adopts the fist in first out (FIFO) mode. The data that is first stored in the queue is read
* first.</li>
* <li>This API read a queue in unblocking modes.</li>
* <li>bufferAddr stores the obtained data.</li>
* <li>This API cannot be called before the kernel is initialized.</li>
* </ul>
*
* @param queueID [IN] Queue ID created by LOS_QueueCreate. The value range is
* [1,LOSCFG_BASE_IPC_QUEUE_LIMIT].
* @param bufferAddr [OUT] Starting address that stores the obtained data. The starting address must not be
* null.
* @param bufferSize [IN/OUT] Where to maintain the buffer expected-size before read, and the real-size after read.
*
* @retval #LOS_OK The queue is successfully read.
* @retval #LOS_ERRNO_QUEUE_INVALID The handle of the queue that is being read is invalid.
* @retval #LOS_ERRNO_QUEUE_READ_PTR_NULL The pointer passed in during queue reading is null.
* @retval #LOS_ERRNO_QUEUE_READSIZE_ISZERO The buffer size passed in during queue reading is 0.
* @retval #LOS_ERRNO_QUEUE_NOT_CREATE The queue to be read is not created.
* @retval #LOS_ERRNO_QUEUE_ISEMPTY No resource is in the queue that is being read when the time for
* waiting to processing the queue expires.
* @retval #LOS_ERRNO_QUEUE_READ_SIZE_TOO_SMALL The buffer size passed in during queue reading is less than
* the queue size.
* @par Dependency:
* <ul><li>los_queue.h: the header file that contains the API declaration.</li></ul>
* @see LOS_QueueWriteCopy | LOS_QueueCreate
*/
STATIC INLINE UINT32 LOS_QueueReadCopyIsr(UINT32 queueID,
VOID *bufferAddr,
UINT32 *bufferSize)
{
return LOS_QueueReadCopy(queueID, bufferAddr, bufferSize, LOS_NO_WAIT);
}
/**
* @ingroup los_queue
* @brief Write data into a queue.
@ -533,6 +578,47 @@ extern UINT32 LOS_QueueWriteCopy(UINT32 queueID,
UINT32 bufferSize,
UINT32 timeOut);
/**
* @ingroup los_queue
* @brief Write data into a queue in interrupt service routine.
*
* @par Description:
* This API is used to write the data of the size specified by bufferSize and stored at the address specified by
* bufferAddr into a queue.It is safe to use this API from within an interrupt service routine.
* @attention
* <ul>
* <li>The specific queue should be created firstly.</li>
* <li>This API write data into a queue in unblocking modes.</li>
* <li>This API cannot be called before the kernel is initialized.</li>
* <li>The data to be written is of the size specified by bufferSize and is stored at the address specified by
* BufferAddr.</li>
* </ul>
*
* @param queueID [IN] Queue ID created by LOS_QueueCreate. The value range is
* [1,LOSCFG_BASE_IPC_QUEUE_LIMIT].
* @param bufferAddr [IN] Starting address that stores the data to be written.The starting address must
* not be null.
* @param bufferSize [IN] Passed-in buffer size. The value range is [1,USHRT_MAX - sizeof(UINT32)].
*
* @retval #LOS_OK The data is successfully written into the queue.
* @retval #LOS_ERRNO_QUEUE_INVALID The queue handle passed in during queue writing is invalid.
* @retval #LOS_ERRNO_QUEUE_WRITE_PTR_NULL The pointer passed in during queue writing is null.
* @retval #LOS_ERRNO_QUEUE_WRITESIZE_ISZERO The buffer size passed in during queue writing is 0.
* @retval #LOS_ERRNO_QUEUE_NOT_CREATE The queue into which the data is written is not created.
* @retval #LOS_ERRNO_QUEUE_WRITE_SIZE_TOO_BIG The buffer size passed in during queue writing is bigger than
* the queue size.
* @retval #LOS_ERRNO_QUEUE_ISFULL No free node is available during queue writing.
* @par Dependency:
* <ul><li>los_queue.h: the header file that contains the API declaration.</li></ul>
* @see LOS_QueueReadCopy | LOS_QueueCreate
*/
STATIC INLINE UINT32 LOS_QueueWriteCopyIsr(UINT32 queueID,
VOID *bufferAddr,
UINT32 bufferSize)
{
return LOS_QueueWriteCopy(queueID, bufferAddr, bufferSize, LOS_NO_WAIT);
}
/**
* @ingroup los_queue
* @brief Read a queue.
@ -582,6 +668,50 @@ extern UINT32 LOS_QueueRead(UINT32 queueID,
UINT32 bufferSize,
UINT32 timeOut);
/**
* @ingroup los_queue
* @brief Read a queue in interrupt service routine.
*
* @par Description:
* This API is used to read the address of data in a specified queue, and store it to the address specified by
* bufferAddr.It is safe to use this API from within an interrupt service routine.
* @attention
* <ul>
* <li>The specific queue should be created firstly.</li>
* <li>Queue reading adopts the fist in first out (FIFO) mode. The data that is first stored in the queue is
* read first.</li>
* <li>This API read a queue in unblocking modes.</li>
* <li>bufferAddr stores the obtained data address.</li>
* <li>This API cannot be called before the kernel is initialized.</li>
* <li>The bufferSize is not really used in LOS_QueueRead, because the interface is only used to
* obtain the address of data.</li>
* <li>The buffer which the bufferAddr pointing to must be greater than or equal to 4 bytes.</li>
* </ul>
*
* @param queueID [IN] Queue ID created by LOS_QueueCreate. The value range is
* [1,LOSCFG_BASE_IPC_QUEUE_LIMIT].
* @param bufferAddr [OUT] Starting address that stores the obtained data. The starting address must
* not be null.
* @param bufferSize [IN] Passed-in buffer size, which must not be 0. The value range is [1,0xffffffff].
*
* @retval #LOS_OK The queue is successfully read.
* @retval #LOS_ERRNO_QUEUE_INVALID The handle of the queue that is being read is invalid.
* @retval #LOS_ERRNO_QUEUE_READ_PTR_NULL The pointer passed in during queue reading is null.
* @retval #LOS_ERRNO_QUEUE_READSIZE_ISZERO The buffer size passed in during queue reading is 0.
* @retval #LOS_ERRNO_QUEUE_NOT_CREATE The queue to be read is not created.
* @retval #LOS_ERRNO_QUEUE_ISEMPTY No resource is in the queue that is being read when the time for
* waiting to processing the queue expires.
* @par Dependency:
* <ul><li>los_queue.h: The header file that contains the API declaration.</li></ul>
* @see LOS_QueueWrite | LOS_QueueCreate
*/
STATIC INLINE UINT32 LOS_QueueReadIsr(UINT32 queueID,
VOID *bufferAddr,
UINT32 bufferSize)
{
return LOS_QueueRead(queueID, bufferAddr, bufferSize, LOS_NO_WAIT);
}
/**
* @ingroup los_queue
* @brief Write data into a queue.
@ -629,6 +759,49 @@ extern UINT32 LOS_QueueWrite(UINT32 queueID,
UINT32 bufferSize,
UINT32 timeOut);
/**
* @ingroup los_queue
* @brief Write data into a queue in interrupt service routine.
*
* @par Description:
* This API is used to write the address of data specified by bufferAddr into a queue.
* It is safe to use this API from within an interrupt service routine.
* @attention
* <ul>
* <li>The specific queue should be created firstly.</li>
* <li>This API write data into a queue in unblocking modes.</li>
* <li>This API cannot be called before the kernel is initialized.</li>
* <li>The address of the data of the size specified by bufferSize and stored at the address specified by
* BufferAddr is to be written.</li>
* <li>The bufferSize is not really used in LOS_QueueWriteIsr, because the interface is only used to write the address
* of data specified by bufferAddr into a queue.</li>
* </ul>
*
* @param queueID [IN] Queue ID created by LOS_QueueCreate. The value range is
* [1,LOSCFG_BASE_IPC_QUEUE_LIMIT].
* @param bufferAddr [IN] Starting address that stores the data to be written. The starting address
* must not be null.
* @param bufferSize [IN] Passed-in buffer size, which must not be 0. The value range is [1,0xffffffff].
*
* @retval #LOS_OK The data is successfully written into the queue.
* @retval #LOS_ERRNO_QUEUE_INVALID The queue handle passed in during queue writing is invalid.
* @retval #LOS_ERRNO_QUEUE_WRITE_PTR_NULL The pointer passed in during queue writing is null.
* @retval #LOS_ERRNO_QUEUE_WRITESIZE_ISZERO The buffer size passed in during queue writing is 0.
* @retval #LOS_ERRNO_QUEUE_NOT_CREATE The queue into which the data is written is not created.
* @retval #LOS_ERRNO_QUEUE_WRITE_SIZE_TOO_BIG The buffer size passed in during queue writing is bigger than
* the queue size.
* @retval #LOS_ERRNO_QUEUE_ISFULL No free node is available during queue writing.
* @par Dependency:
* <ul><li>los_queue.h: The header file that contains the API declaration.</li></ul>
* @see LOS_QueueRead | LOS_QueueCreate
*/
STATIC INLINE UINT32 LOS_QueueWriteIsr(UINT32 queueID,
VOID *bufferAddr,
UINT32 bufferSize)
{
return LOS_QueueWrite(queueID, bufferAddr, bufferSize, LOS_NO_WAIT);
}
/**
* @ingroup los_queue
* @brief Write data into a queue header.
@ -676,6 +849,48 @@ extern UINT32 LOS_QueueWriteHead(UINT32 queueID,
UINT32 bufferSize,
UINT32 timeOut);
/**
* @ingroup los_queue
* @brief Write data into a queue header in interrupt service routine.
*
* @par Description:
* This API is used to write the data of the size specified by bufferSize and stored at the address specified by
* bufferAddr into a queue header.It is safe to use this API from within an interrupt service routine.
* @attention
* <ul>
* <li>This API cannot be called before the kernel is initialized.</li>
* <li>This API write data into a queue header in unblocking modes.</li>
* <li>The address of the data of the size specified by bufferSize and stored at the address specified by
* BufferAddr is to be written.</li>
* <li>LOS_QueueRead and LOS_QueueWriteHeadIsr are a set of interfaces, and the two groups of interfaces need to be used.
* <li>
* </ul>
*
* @param queueID [IN] Queue ID created by LOS_QueueCreate. The value range is
* [1,LOSCFG_BASE_IPC_QUEUE_LIMIT].
* @param bufferAddr [OUT] Starting address that stores the data to be written. The starting address
* must not be null.
* @param bufferSize [IN] Passed-in buffer size, which must not be 0. The value range is [1,0xffffffff].
*
* @retval #LOS_OK The data is successfully written into the queue.
* @retval #LOS_ERRNO_QUEUE_INVALID The queue handle passed in during queue writing is invalid.
* @retval #LOS_ERRNO_QUEUE_WRITE_PTR_NULL The pointer passed in during queue writing is null.
* @retval #LOS_ERRNO_QUEUE_WRITESIZE_ISZERO The buffer size passed in during queue writing is 0.
* @retval #LOS_ERRNO_QUEUE_NOT_CREATE The queue into which the data is written is not created.
* @retval #LOS_ERRNO_QUEUE_WRITE_SIZE_TOO_BIG The buffer size passed in during queue writing is bigger than
* the queue size.
* @retval #LOS_ERRNO_QUEUE_ISFULL No free node is available during queue writing.
* @par Dependency:
* <ul><li>los_queue.h: The header file that contains the API declaration.</li></ul>
* @see LOS_QueueRead | LOS_QueueCreate
*/
STATIC INLINE UINT32 LOS_QueueWriteHeadIsr(UINT32 queueID,
VOID *bufferAddr,
UINT32 bufferSize)
{
return LOS_QueueWriteHead(queueID, bufferAddr, bufferSize, LOS_NO_WAIT);
}
/**
* @ingroup los_queue
* @brief Write data into a queue header.
@ -723,6 +938,48 @@ extern UINT32 LOS_QueueWriteHeadCopy(UINT32 queueID,
UINT32 bufferSize,
UINT32 timeOut);
/**
* @ingroup los_queue
* @brief Write data into a queue header in interrupt service routine.
*
* @par Description:
* This API is used to write the data of the size specified by bufferSize and stored at the address specified by
* bufferAddr into a queue header.It is safe to use this API from within an interrupt service routine.
* @attention
* <ul>
* <li>This API cannot be called before the kernel is initialized.</li>
* <li>This API write data into a queue header in unblocking modes.</li>
* <li>The address of the data of the size specified by bufferSize and stored at the address specified by
* BufferAddr is to be written.</li>
* <li>LOS_QueueReadCopy and LOS_QueueWriteHeadCopyIsr are a set of interfaces, and the two groups of interfaces need to be
* used.<li>
* </ul>
*
* @param queueID [IN] Queue ID created by LOS_QueueCreate. The value range is
* [1,LOSCFG_BASE_IPC_QUEUE_LIMIT].
* @param bufferAddr [OUT] Starting address that stores the data to be written.
* The starting address must not be null.
* @param bufferSize [IN] Passed-in buffer size, which must not be 0. The value range is [1,0xffffffff].
*
* @retval #LOS_OK The data is successfully written into the queue.
* @retval #LOS_ERRNO_QUEUE_INVALID The queue handle passed in during queue writing is invalid.
* @retval #LOS_ERRNO_QUEUE_WRITE_PTR_NULL The pointer passed in during queue writing is null.
* @retval #LOS_ERRNO_QUEUE_WRITESIZE_ISZERO The buffer size passed in during queue writing is 0.
* @retval #LOS_ERRNO_QUEUE_NOT_CREATE The queue into which the data is written is not created.
* @retval #LOS_ERRNO_QUEUE_WRITE_SIZE_TOO_BIG The buffer size passed in during queue writing is bigger than
* the queue size.
* @retval #LOS_ERRNO_QUEUE_ISFULL No free node is available during queue writing.
* @par Dependency:
* <ul><li>los_queue.h: The header file that contains the API declaration.</li></ul>
* @see LOS_QueueWrite | LOS_QueueWriteHeadIsr
*/
STATIC INLINE UINT32 LOS_QueueWriteHeadCopyIsr(UINT32 queueID,
VOID *bufferAddr,
UINT32 bufferSize)
{
return LOS_QueueWriteHeadCopy(queueID, bufferAddr, bufferSize, LOS_NO_WAIT);
}
/**
* @ingroup los_queue
* @brief Delete a queue.

View File

@ -37,7 +37,6 @@
#include "los_interrupt.h"
#include "los_membox.h"
#include "los_memory.h"
#include "los_task.h"
#include "los_sched.h"
#include <stdint.h>

View File

@ -48,7 +48,10 @@ kernel_module("test_init") {
"src/osTest.c",
]
include_dirs = [ "unittest/posix/src" ]
include_dirs = [
"unittest/posix/src",
"unittest/xts",
]
configs += [ ":include" ]
}
@ -69,6 +72,7 @@ group("testsuites") {
"sample/kernel/task:test_task",
"sample/posix:test_posix",
"unittest/posix:posix_test",
"unittest/xts:xts_test",
]
if (defined(LOSCFG_DYNLINK)) {
deps += [ "sample/kernel/dynlink:test_dynlink" ]

View File

@ -96,6 +96,7 @@ extern "C" {
#define LOS_KERNEL_LMK_TEST 0
#define LOS_KERNEL_SIGNAL_TEST 0
#define LOS_XTS_TEST 1
#define LOS_POSIX_TEST 1
#define LOS_CMSIS_TEST 1
#define LOS_CMSIS2_CORE_TASK_TEST 0

View File

@ -164,6 +164,22 @@ static_library("test_queue") {
"It_los_queue_head_040.c",
"It_los_queue_head_041.c",
"It_los_queue_head_042.c",
"It_los_queue_isr_001.c",
"It_los_queue_isr_002.c",
"It_los_queue_isr_003.c",
"It_los_queue_isr_004.c",
"It_los_queue_isr_005.c",
"It_los_queue_isr_006.c",
"It_los_queue_isr_007.c",
"It_los_queue_isr_008.c",
"It_los_queue_isr_009.c",
"It_los_queue_isr_010.c",
"It_los_queue_isr_011.c",
"It_los_queue_isr_012.c",
"It_los_queue_isr_013.c",
"It_los_queue_isr_014.c",
"It_los_queue_isr_015.c",
"It_los_queue_isr_016.c",
"It_los_queue_static_001.c",
"It_los_queue_static_002.c",
"It_los_queue_static_003.c",

View File

@ -151,7 +151,22 @@ VOID ItSuiteLosQueue(VOID)
ItLosQueueHead040();
ItLosQueueHead041();
ItLosQueueHead042();
ItLosQueueIsr001();
ItLosQueueIsr002();
ItLosQueueIsr003();
ItLosQueueIsr004();
ItLosQueueIsr005();
ItLosQueueIsr006();
ItLosQueueIsr007();
ItLosQueueIsr008();
ItLosQueueIsr009();
ItLosQueueIsr010();
ItLosQueueIsr011();
ItLosQueueIsr012();
ItLosQueueIsr013();
ItLosQueueIsr014();
ItLosQueueIsr015();
ItLosQueueIsr016();
#if (LOS_KERNEL_TEST_FULL == 1)
#if (LOS_KERNEL_HWI_TEST == 1)
ItLosQueue044();

View File

@ -183,7 +183,22 @@ extern VOID ItLosQueueHead039(VOID);
extern VOID ItLosQueueHead040(VOID);
extern VOID ItLosQueueHead041(VOID);
extern VOID ItLosQueueHead042(VOID);
extern VOID ItLosQueueIsr001(VOID);
extern VOID ItLosQueueIsr002(VOID);
extern VOID ItLosQueueIsr003(VOID);
extern VOID ItLosQueueIsr004(VOID);
extern VOID ItLosQueueIsr005(VOID);
extern VOID ItLosQueueIsr006(VOID);
extern VOID ItLosQueueIsr007(VOID);
extern VOID ItLosQueueIsr008(VOID);
extern VOID ItLosQueueIsr009(VOID);
extern VOID ItLosQueueIsr010(VOID);
extern VOID ItLosQueueIsr011(VOID);
extern VOID ItLosQueueIsr012(VOID);
extern VOID ItLosQueueIsr013(VOID);
extern VOID ItLosQueueIsr014(VOID);
extern VOID ItLosQueueIsr015(VOID);
extern VOID ItLosQueueIsr016(VOID);
#if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1)
extern VOID ItLosQueueStatic001(VOID);
extern VOID ItLosQueueStatic002(VOID);

View File

@ -0,0 +1,60 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
ret = LOS_QueueWriteIsr(g_testQueueID01, &buff1, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
CHAR *buff2 = NULL;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestHwiTrigger(HWI_NUM_TEST);
ret = LOS_QueueRead(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr001(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr001", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,59 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
ret = LOS_QueueWriteIsr(g_testQueueID01, &buff1, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_ERRNO_QUEUE_NOT_CREATE, ret);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
CHAR *buff2 = NULL;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_QUEUE_PARA_ISZERO, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestHwiTrigger(HWI_NUM_TEST);
ret = LOS_QueueRead(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_QUEUE_NOT_CREATE, ret, EXIT);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_QUEUE_NOT_CREATE, ret);
return LOS_OK;
}
VOID ItLosQueueIsr002(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr002", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,60 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
ret = LOS_QueueWriteIsr(g_testQueueID01, &buff1, 0);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_ERRNO_QUEUE_WRITE_SIZE_TOO_BIG, ret);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
CHAR *buff2 = NULL;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, 1);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestHwiTrigger(HWI_NUM_TEST);
ret = LOS_QueueRead(g_testQueueID01, &buff2, 1, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_QUEUE_ISEMPTY, ret, EXIT);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr003(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr003", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,59 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
ret = LOS_QueueWriteIsr(g_testQueueID01, &buff1, 0);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
CHAR *buff2 = NULL;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, 4);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestHwiTrigger(HWI_NUM_TEST);
ret = LOS_QueueRead(g_testQueueID01, &buff2, 1, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr004(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr004", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,63 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
ret = LOS_QueueWriteIsr(g_testQueueID01, &buff1, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
CHAR *buff2 = NULL;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_QueueRead(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_QUEUE_ISEMPTY, ret, EXIT);
TestHwiTrigger(HWI_NUM_TEST);
ret = LOS_QueueRead(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr005(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr005", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,66 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
CHAR buff1[QUEUE_BASE_MSGSIZE] = "UniDSP";
static VOID HwiF01(VOID)
{
UINT32 ret;
ret = LOS_QueueWriteIsr(g_testQueueID01, &buff1, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
CHAR *buff2 = NULL;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestHwiTrigger(HWI_NUM_TEST);
ret = LOS_QueueRead(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
for (UINT8 index = 0; index < QUEUE_BASE_MSGSIZE - 1; index++) { // 7, QUEUE_BASE_MSGSIZE - 1
ICUNIT_GOTO_EQUAL(*((CHAR *)(intptr_t)buff2 + index), buff1[index],
*((CHAR *)(intptr_t)buff2 + index), EXIT);
}
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr006(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr006", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,63 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
ret = LOS_QueueWriteIsr((UINT32)-1, &buff1, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_ERRNO_QUEUE_INVALID, ret);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
CHAR *buff2 = NULL;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestHwiTrigger(HWI_NUM_TEST);
ret = LOS_QueueRead(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_QUEUE_ISEMPTY, ret, EXIT);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr007(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr007", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,62 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
ret = LOS_QueueWriteIsr(OS_ALL_IPC_QUEUE_LIMIT + 1, &buff1, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_ERRNO_QUEUE_INVALID, ret);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
CHAR *buff2 = NULL;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestHwiTrigger(HWI_NUM_TEST);
ret = LOS_QueueRead(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_QUEUE_ISEMPTY, ret, EXIT);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr008(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr008", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,60 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR *buff2 = NULL;
ret = LOS_QueueReadIsr(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_QueueWrite(g_testQueueID01, &buff1, QUEUE_BASE_MSGSIZE, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
TestHwiTrigger(HWI_NUM_TEST);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr009(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr009", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,77 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR *buff2 = NULL;
ret = LOS_QueueReadIsr(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_ERRNO_QUEUE_ISEMPTY, ret);
}
static VOID HwiF02(VOID)
{
UINT32 ret;
CHAR *buff2 = NULL;
ret = LOS_QueueReadIsr(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST0, hwiPrio, mode, (HWI_PROC_FUNC)HwiF02, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestHwiTrigger(HWI_NUM_TEST);
ret = LOS_QueueWrite(g_testQueueID01, &buff1, QUEUE_BASE_MSGSIZE, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
TestHwiTrigger(HWI_NUM_TEST0);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
TestHwiDelete(HWI_NUM_TEST0);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr010(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr010", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,65 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static CHAR g_buff[QUEUE_BASE_MSGSIZE] = "UniDSP";
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR *buff2 = NULL;
ret = LOS_QueueReadIsr(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
for (UINT8 index = 0; index < QUEUE_BASE_MSGSIZE - 1; index++) { // 7, QUEUE_BASE_MSGSIZE - 1
ICUNIT_ASSERT_EQUAL_VOID(*((CHAR *)(intptr_t)buff2 + index), g_buff[index],
*((CHAR *)(intptr_t)buff2 + index));
}
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_QueueWrite(g_testQueueID01, &g_buff, QUEUE_BASE_MSGSIZE, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
TestHwiTrigger(HWI_NUM_TEST);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr011(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr011", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,81 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
ret = LOS_QueueWriteIsr(g_testQueueID01, &buff1, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
}
static VOID TaskF01(VOID)
{
UINT32 ret;
CHAR *buff2 = NULL;
g_testCount++;
ret = LOS_QueueRead(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE,LOS_WAIT_FOREVER);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
g_testCount++;
return;
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TSK_INIT_PARAM_S task1 = { 0 };
task1.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01;
task1.uwStackSize = TASK_STACK_SIZE_TEST;
task1.pcName = "Tsk001A";
task1.usTaskPrio = TASK_PRIO_TEST - 1;
task1.uwResved = LOS_TASK_STATUS_DETACHED;
g_testCount = 0;
ret = LOS_TaskCreate(&g_testTaskID01, &task1);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestHwiTrigger(HWI_NUM_TEST);
ICUNIT_ASSERT_EQUAL(g_testCount, 2, g_testCount);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr012(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr012", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,87 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
ret = LOS_QueueWriteIsr(g_testQueueID01, &buff1, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
}
static VOID TaskF01(VOID)
{
UINT32 ret;
CHAR *buff2 = NULL;
g_testCount++;
ret = LOS_QueueRead(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE,LOS_WAIT_FOREVER);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
g_testCount++;
return;
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TSK_INIT_PARAM_S task1 = { 0 };
task1.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01;
task1.uwStackSize = TASK_STACK_SIZE_TEST;
task1.pcName = "Tsk001A";
task1.usTaskPrio = TASK_PRIO_TEST + 1;
task1.uwResved = LOS_TASK_STATUS_DETACHED;
g_testCount = 0;
ret = LOS_TaskCreate(&g_testTaskID01, &task1);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(1);
ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
TestHwiTrigger(HWI_NUM_TEST);
ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
LOS_TaskDelay(1);
ICUNIT_ASSERT_EQUAL(g_testCount, 2, g_testCount);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr013(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr013", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,84 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
ret = LOS_QueueWriteCopyIsr(g_testQueueID01, buff1, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
}
static VOID TaskF01(VOID)
{
UINT32 ret;
UINT32 msgSize = (UINT32)QUEUE_BASE_MSGSIZE;
CHAR buff[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
CHAR buff2[QUEUE_SHORT_BUFFER_LENGTH] = " ";
ret = LOS_QueueReadCopy(g_testQueueID01, buff2, &msgSize, LOS_WAIT_FOREVER);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
for (UINT8 index = 0; index < QUEUE_BASE_MSGSIZE - 1; index++) { // 7, QUEUE_BASE_MSGSIZE - 1
ICUNIT_GOTO_EQUAL(*((CHAR *)(intptr_t)buff2 + index), buff[index],
*((CHAR *)(intptr_t)buff2 + index), EXIT);
}
EXIT:
return;
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TSK_INIT_PARAM_S task1 = { 0 };
task1.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01;
task1.uwStackSize = TASK_STACK_SIZE_TEST;
task1.pcName = "Tsk001A";
task1.usTaskPrio = TASK_PRIO_TEST - 1;
task1.uwResved = LOS_TASK_STATUS_DETACHED;
g_testCount = 0;
ret = LOS_TaskCreate(&g_testTaskID01, &task1);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestHwiTrigger(HWI_NUM_TEST);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr014(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr014", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,109 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static CHAR g_buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
static CHAR g_buff2[QUEUE_SHORT_BUFFER_LENGTH] = "DOPRA";
static CHAR g_buff3[QUEUE_SHORT_BUFFER_LENGTH] = "TEST";
static VOID HwiF01(VOID)
{
UINT32 ret;
ret = LOS_QueueWriteHeadIsr(g_testQueueID01, &g_buff1, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
ret = LOS_QueueWriteHeadIsr(g_testQueueID01, &g_buff2, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
ret = LOS_QueueWriteHeadIsr(g_testQueueID01, &g_buff3, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
}
static VOID TaskF01(VOID)
{
UINT32 ret;
CHAR buffA[QUEUE_SHORT_BUFFER_LENGTH] = "TEST";
CHAR buffB[QUEUE_SHORT_BUFFER_LENGTH] = "DOPRA";
CHAR buffC[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
CHAR *buff = NULL;
ret = LOS_QueueRead(g_testQueueID01, &buff, QUEUE_BASE_MSGSIZE, LOS_WAIT_FOREVER);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
for (UINT8 index = 0; index < QUEUE_BASE_MSGSIZE - 1; index++) { // 7, QUEUE_BASE_MSGSIZE - 1
ICUNIT_GOTO_EQUAL(*((CHAR *)(intptr_t)buff + index), buffA[index],
*((CHAR *)(intptr_t)buff + index), EXIT);
}
ret = LOS_QueueRead(g_testQueueID01, &buff, QUEUE_BASE_MSGSIZE, LOS_WAIT_FOREVER);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
for (UINT8 index = 0; index < QUEUE_BASE_MSGSIZE - 1; index++) { // 7, QUEUE_BASE_MSGSIZE - 1
ICUNIT_GOTO_EQUAL(*((CHAR *)(intptr_t)buff + index), buffB[index],
*((CHAR *)(intptr_t)buff + index), EXIT);
}
ret = LOS_QueueRead(g_testQueueID01, &buff, QUEUE_BASE_MSGSIZE, LOS_WAIT_FOREVER);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
for (UINT8 index = 0; index < QUEUE_BASE_MSGSIZE - 1; index++) { // 7, QUEUE_BASE_MSGSIZE - 1
ICUNIT_GOTO_EQUAL(*((CHAR *)(intptr_t)buff + index), buffC[index],
*((CHAR *)(intptr_t)buff + index), EXIT);
}
EXIT:
return;
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TSK_INIT_PARAM_S task1 = { 0 };
task1.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01;
task1.uwStackSize = TASK_STACK_SIZE_TEST;
task1.pcName = "Tsk001A";
task1.usTaskPrio = TASK_PRIO_TEST - 1;
task1.uwResved = LOS_TASK_STATUS_DETACHED;
g_testCount = 0;
ret = LOS_TaskCreate(&g_testTaskID01, &task1);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestHwiTrigger(HWI_NUM_TEST);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr015(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr015", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -0,0 +1,108 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "It_los_queue.h"
static VOID HwiF01(VOID)
{
UINT32 ret;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
CHAR buff2[QUEUE_SHORT_BUFFER_LENGTH] = "DOPRA";
CHAR buff3[QUEUE_SHORT_BUFFER_LENGTH] = "TEST";
ret = LOS_QueueWriteHeadCopyIsr(g_testQueueID01, buff1, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
ret = LOS_QueueWriteHeadCopyIsr(g_testQueueID01, buff2, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
ret = LOS_QueueWriteHeadCopyIsr(g_testQueueID01, buff3, QUEUE_BASE_MSGSIZE);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
}
static VOID TaskF01(VOID)
{
UINT32 ret;
UINT32 msgSize = (UINT32)QUEUE_BASE_MSGSIZE;
CHAR buffA[QUEUE_SHORT_BUFFER_LENGTH] = "TEST";
CHAR buffB[QUEUE_SHORT_BUFFER_LENGTH] = "DOPRA";
CHAR buffC[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
CHAR buff[QUEUE_SHORT_BUFFER_LENGTH] = " ";
ret = LOS_QueueReadCopy(g_testQueueID01, buff, &msgSize, LOS_WAIT_FOREVER);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
for (UINT8 index = 0; index < QUEUE_BASE_MSGSIZE - 1; index++) { // 7, QUEUE_BASE_MSGSIZE - 1
ICUNIT_GOTO_EQUAL(*((CHAR *)(intptr_t)buff + index), buffA[index],
*((CHAR *)(intptr_t)buff + index), EXIT);
}
ret = LOS_QueueReadCopy(g_testQueueID01, buff, &msgSize, LOS_WAIT_FOREVER);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
for (UINT8 index = 0; index < QUEUE_BASE_MSGSIZE - 1; index++) { // 7, QUEUE_BASE_MSGSIZE - 1
ICUNIT_GOTO_EQUAL(*((CHAR *)(intptr_t)buff + index), buffB[index],
*((CHAR *)(intptr_t)buff + index), EXIT);
}
ret = LOS_QueueReadCopy(g_testQueueID01, buff, &msgSize, LOS_WAIT_FOREVER);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
for (UINT8 index = 0; index < QUEUE_BASE_MSGSIZE - 1; index++) { // 7, QUEUE_BASE_MSGSIZE - 1
ICUNIT_GOTO_EQUAL(*((CHAR *)(intptr_t)buff + index), buffC[index],
*((CHAR *)(intptr_t)buff + index), EXIT);
}
EXIT:
return;
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
HWI_PRIOR_T hwiPrio = 3;
HWI_MODE_T mode = 0;
HwiIrqParam irqParam;
ret = LOS_QueueCreate("Q1", QUEUE_BASE_NUM, &g_testQueueID01, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
(VOID)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
irqParam.pDevId = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiF01, &irqParam);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TSK_INIT_PARAM_S task1 = { 0 };
task1.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01;
task1.uwStackSize = TASK_STACK_SIZE_TEST;
task1.pcName = "Tsk001A";
task1.usTaskPrio = TASK_PRIO_TEST - 1;
task1.uwResved = LOS_TASK_STATUS_DETACHED;
g_testCount = 0;
ret = LOS_TaskCreate(&g_testTaskID01, &task1);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestHwiTrigger(HWI_NUM_TEST);
EXIT:
TestHwiDelete(HWI_NUM_TEST);
ret = LOS_QueueDelete(g_testQueueID01);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosQueueIsr016(VOID)
{
TEST_ADD_CASE("ItLosQueueIsr016", Testcase, TEST_LOS, TEST_QUE, TEST_LEVEL1, TEST_FUNCTION);
}

View File

@ -85,7 +85,7 @@
#define ICUNIT_GOTO_WITHIN_EQUAL(param, value1, value2, retcode, label) \
do { \
if ((param) < (value1) || (param) > (value2)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
ICunitSaveErr(__LINE__, (iiUINT32)(retcode)); \
goto label; \
} \
} while (0)

View File

@ -49,7 +49,7 @@ static VOID *PthreadF01(VOID *argument)
g_testCount = 2; // 2, Init test count value.
EXIT1:
EXIT1:
return NULL;
EXIT2:
g_testCount = 0;

View File

@ -50,7 +50,7 @@ static UINT32 Testcase(VOID)
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
ret = mq_close(mqdes);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT2);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT2);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);

View File

@ -38,6 +38,9 @@
#if (LOS_POSIX_TEST == 1)
#include "posix_test.h"
#endif
#if (LOS_XTS_TEST == 1)
#include "xts_test.h"
#endif
UINT32 volatile g_testCount;
UINT32 g_testTskHandle;
@ -246,6 +249,10 @@ VOID TestTaskEntry(VOID)
CmsisFuncTestSuite();
#endif
#if(LOS_XTS_TEST == 1)
XtsTestSuite();
#endif
/* The log is used for testing entrance guard, please do not make any changes. */
PRINTF("\nfailed count:%d, success count:%d\n", g_failResult, g_passResult);
PRINTF("--- Test End ---\n");

View File

@ -135,8 +135,8 @@ static char *TmToStr(const struct tm *timePtr, char *timeStr, unsigned len)
if (timePtr == NULL || timeStr == NULL) {
return "";
}
sprintf_s(timeStr, len, "%ld/%d/%d %02d:%02d:%02d WEEK(%d)", timePtr->tm_year + TM_BASE_YEAR, timePtr->tm_mon + 1,
timePtr->tm_mday, timePtr->tm_hour, timePtr->tm_min, timePtr->tm_sec, timePtr->tm_wday);
(VOID)sprintf_s(timeStr, len, "%ld/%d/%d %02d:%02d:%02d WEEK(%d)", timePtr->tm_year + TM_BASE_YEAR,
timePtr->tm_mon + 1, timePtr->tm_mday, timePtr->tm_hour, timePtr->tm_min, timePtr->tm_sec, timePtr->tm_wday);
return timeStr;
}

View File

@ -0,0 +1,46 @@
# Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni")
static_library("xts_test") {
sources = [ "xts_test.c" ]
deps = [
"cmsis:cmsis_test",
"io:io_test",
"ipc:ipc_test",
"math:math_test",
"mem:mem_test",
"net:net_test",
"process:pthread_test",
"sched:sched_test",
"sys:system_test",
"time:time_test",
]
configs += [ "$LITEOSTOPDIR/testsuites:include" ]
}

View File

@ -0,0 +1,48 @@
# Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni")
static_library("cmsis_test") {
sources = [
"cmsis_event_func_test.c",
"cmsis_msg_func_test.c",
"cmsis_mutex_func_test.c",
"cmsis_sem_func_test.c",
"cmsis_task_func_test.c",
"cmsis_task_pri_func_test.c",
"cmsis_timer_func_test.c",
"xts_cmsis.c",
]
include_dirs = [
".",
"$LITEOSTOPDIR/testsuites/include",
"$LITEOSTOPDIR/testsuites/unittest/xts",
]
}

View File

@ -0,0 +1,364 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_cmsis.h"
osEventFlagsId_t g_eventId;
UINT16 g_cmsisTestEventCount;
LITE_TEST_SUIT(Cmsis, Cmsisevent, CmsisEventFuncTestSuite);
static BOOL CmsisEventFuncTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL CmsisEventFuncTestSuiteTearDown(void)
{
return TRUE;
}
static void CmsisEventFlagsWaitFunc001(void const *argument)
{
(void)argument;
g_cmsisTestEventCount++;
UINT32 ret = osEventFlagsWait(g_eventId, EVENT_MASK_HEX_11, (osFlagsWaitAll | osFlagsNoClear), osWaitForever);
ICUNIT_ASSERT_EQUAL_VOID(ret, EVENT_MASK_HEX_11, ret);
g_cmsisTestEventCount++;
osThreadExit();
}
static void CmsisEventFlagsSetFunc002(void const *argument)
{
(void)argument;
UINT32 ret;
g_cmsisTestEventCount++;
ret = osEventFlagsWait(g_eventId, EVENT_MASK_HEX_11, (osFlagsWaitAll | osFlagsNoClear), TIMEOUT_NUM_3);
ICUNIT_ASSERT_EQUAL_VOID(ret, osErrorTimeout, ret);
g_cmsisTestEventCount++;
ret = osEventFlagsWait(g_eventId, EVENT_MASK_HEX_4, (osFlagsWaitAll | osFlagsNoClear), osWaitForever);
ICUNIT_ASSERT_EQUAL_VOID(ret, TESTCOUNT_NUM_4, ret);
g_cmsisTestEventCount++;
osThreadExit();
}
static void CmsisEventFlagsClearFunc001(void const *argument)
{
(void)argument;
g_cmsisTestEventCount++;
UINT32 ret = osEventFlagsWait(g_eventId, EVENT_MASK_HEX_1, osFlagsWaitAll, osWaitForever);
ICUNIT_ASSERT_EQUAL_VOID(ret, EVENT_MASK_HEX_1, ret);
g_cmsisTestEventCount++;
osThreadExit();
}
/**
* @tc.number : SUB_KERNEL_CMSIS_EVENT_OPERATION_0100
* @tc.name : event operation for creat
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisEventFuncTestSuite, testOsEventFlagsNew001, Function | MediumTest | Level1)
{
g_eventId = osEventFlagsNew(NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_eventId, NULL, g_eventId);
(void)osEventFlagsDelete(g_eventId);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_EVENT_OPERATION_0200
* @tc.name : event operation for delete
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisEventFuncTestSuite, testOsEventFlagsDelete001, Function | MediumTest | Level1)
{
UINT32 ret;
g_eventId = osEventFlagsNew(NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_eventId, NULL, g_eventId);
ret = osEventFlagsDelete(g_eventId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_EVENT_OPERATION_0300
* @tc.name : event delete operation with EventFlagsId = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisEventFuncTestSuite, testOsEventFlagsDelete002, Function | MediumTest | Level1)
{
UINT32 ret = osEventFlagsDelete(NULL);
ICUNIT_ASSERT_EQUAL(ret, osErrorParameter, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_EVENT_OPERATION_0400
* @tc.name : event operation for flags set
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisEventFuncTestSuite, testOsEventFlagsSet001, Function | MediumTest | Level1)
{
UINT32 ret;
g_eventId = osEventFlagsNew(NULL);
ret = osEventFlagsSet(g_eventId, EVENT_MASK_HEX_10);
ICUNIT_ASSERT_EQUAL(ret, EVENT_MASK_HEX_10, ret);
ret = osEventFlagsDelete(g_eventId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_EVENT_OPERATION_0500
* @tc.name : event reliability test for flags set
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisEventFuncTestSuite, testOsEventFlagsSet002, Function | MediumTest | Level1)
{
UINT32 ret;
osThreadId_t id;
osStatus_t status;
osThreadAttr_t attr;
attr.name = "test";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = TEST_TASK_STACK_SIZE;
attr.priority = osPriorityAboveNormal;
g_cmsisTestEventCount = 0;
g_eventId = osEventFlagsNew(NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_eventId, NULL, g_eventId);
id = osThreadNew((osThreadFunc_t)CmsisEventFlagsSetFunc002, NULL, &attr);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
ICUNIT_ASSERT_EQUAL(g_cmsisTestEventCount, EVENT_MASK_HEX_1, g_cmsisTestEventCount);
g_cmsisTestEventCount++;
ret = osEventFlagsSet(g_eventId, EVENT_MASK_HEX_2);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
ICUNIT_ASSERT_EQUAL(g_cmsisTestEventCount, TESTCOUNT_NUM_3, g_cmsisTestEventCount);
g_cmsisTestEventCount++;
ret = osEventFlagsSet(g_eventId, EVENT_MASK_HEX_11);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
ICUNIT_ASSERT_EQUAL(g_cmsisTestEventCount, TESTCOUNT_NUM_4, g_cmsisTestEventCount);
ret = osEventFlagsSet(g_eventId, EVENT_MASK_HEX_4);
ICUNIT_ASSERT_EQUAL(g_cmsisTestEventCount, TESTCOUNT_NUM_5, g_cmsisTestEventCount);
ret = osEventFlagsDelete(g_eventId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_EVENT_OPERATION_0600
* @tc.name : event flags set operation with EventFlagsId = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisEventFuncTestSuite, testOsEventFlagsSet003, Function | MediumTest | Level1)
{
UINT32 ret = osEventFlagsSet(NULL, EVENT_MASK_HEX_10);
ICUNIT_ASSERT_EQUAL(ret, osFlagsErrorParameter, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_EVENT_OPERATION_0700
* @tc.name : event operation for wait
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisEventFuncTestSuite, testOsEventFlagsWait001, Function | MediumTest | Level1)
{
UINT32 ret;
osThreadId_t id;
osThreadAttr_t attr;
attr.name = "test";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = TEST_TASK_STACK_SIZE;
attr.priority = osPriorityAboveNormal;
g_cmsisTestEventCount = 0;
g_eventId = osEventFlagsNew(NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_eventId, NULL, g_eventId);
id = osThreadNew((osThreadFunc_t)CmsisEventFlagsWaitFunc001, NULL, &attr);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
ret = osEventFlagsSet(g_eventId, EVENT_MASK_HEX_10);
ICUNIT_ASSERT_EQUAL(ret, EVENT_MASK_HEX_10, ret);
ICUNIT_ASSERT_EQUAL(g_cmsisTestEventCount, EVENT_MASK_HEX_1, g_cmsisTestEventCount);
ret = osEventFlagsSet(g_eventId, EVENT_MASK_HEX_1);
ICUNIT_ASSERT_EQUAL(ret, EVENT_MASK_HEX_11, ret);
ICUNIT_ASSERT_EQUAL(g_cmsisTestEventCount, TESTCOUNT_NUM_2, g_cmsisTestEventCount);
ret = osEventFlagsDelete(g_eventId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_EVENT_OPERATION_0800
* @tc.name : event operation for invalid option
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisEventFuncTestSuite, testOsEventFlagsWait002, Function | MediumTest | Level1)
{
UINT32 ret;
g_eventId = osEventFlagsNew(NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_eventId, NULL, g_eventId);
ret = osEventFlagsWait(g_eventId, EVENT_MASK_HEX_11, INVALID_FLAG_OPTION, osWaitForever);
ICUNIT_ASSERT_EQUAL(ret, osFlagsErrorParameter, ret);
ret = osEventFlagsDelete(g_eventId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_EVENT_OPERATION_0900
* @tc.name : event wait operation with EventFlagsId = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisEventFuncTestSuite, testOsEventFlagsWait003, Function | MediumTest | Level1)
{
UINT32 ret = osEventFlagsWait(NULL, EVENT_MASK_HEX_11, (osFlagsWaitAll | osFlagsNoClear), osWaitForever);
ICUNIT_ASSERT_EQUAL(ret, osFlagsErrorParameter, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_EVENT_OPERATION_1000
* @tc.name : event operation for flags get
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisEventFuncTestSuite, testOsEventFlagsGet001, Function | MediumTest | Level1)
{
UINT32 ret;
g_eventId = osEventFlagsNew(NULL);
ret = osEventFlagsSet(g_eventId, EVENT_MASK_HEX_10);
ICUNIT_ASSERT_EQUAL(ret, EVENT_MASK_HEX_10, ret);
ret = osEventFlagsGet(g_eventId);
ICUNIT_ASSERT_EQUAL(ret, EVENT_MASK_HEX_10, ret);
ret = osEventFlagsDelete(g_eventId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_EVENT_OPERATION_1100
* @tc.name : event flags get operation with EventFlagsId = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisEventFuncTestSuite, testOsEventFlagsGet002, Function | MediumTest | Level1)
{
UINT32 ret = osEventFlagsGet(NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_EVENT_OPERATION_1200
* @tc.name : event operation for flags clear
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisEventFuncTestSuite, testOsEventFlagsClear001, Function | MediumTest | Level1)
{
UINT32 ret;
osThreadId_t id;
osThreadAttr_t attr;
attr.name = "test";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = TEST_TASK_STACK_SIZE;
attr.priority = osPriorityAboveNormal;
g_cmsisTestEventCount = 0;
g_eventId = osEventFlagsNew(NULL);
id = osThreadNew((osThreadFunc_t)CmsisEventFlagsClearFunc001, NULL, &attr);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
ret = osEventFlagsSet(g_eventId, EVENT_MASK_HEX_10);
ICUNIT_ASSERT_EQUAL(ret, EVENT_MASK_HEX_10, ret);
ICUNIT_ASSERT_EQUAL(g_cmsisTestEventCount, EVENT_MASK_HEX_1, g_cmsisTestEventCount);
ret = osEventFlagsClear(g_eventId, 0xffff);
ICUNIT_ASSERT_EQUAL(ret, EVENT_MASK_HEX_10, ret);
ret = osEventFlagsGet(g_eventId);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = osEventFlagsSet(g_eventId, EVENT_MASK_HEX_1);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(g_cmsisTestEventCount, TESTCOUNT_NUM_2, g_cmsisTestEventCount);
ret = osEventFlagsDelete(g_eventId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_EVENT_OPERATION_1300
* @tc.name : event flags clear operation with EventFlagsId = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisEventFuncTestSuite, testOsEventFlagsClear002, Function | MediumTest | Level1)
{
UINT32 ret = osEventFlagsClear(NULL, 0xffff);
ICUNIT_ASSERT_EQUAL(ret, osFlagsErrorParameter, ret);
return 0;
};
RUN_TEST_SUITE(CmsisEventFuncTestSuite);
void CmsisEventFuncTest(void)
{
RUN_ONE_TESTCASE(testOsEventFlagsNew001);
RUN_ONE_TESTCASE(testOsEventFlagsDelete001);
RUN_ONE_TESTCASE(testOsEventFlagsDelete002);
RUN_ONE_TESTCASE(testOsEventFlagsSet001);
RUN_ONE_TESTCASE(testOsEventFlagsSet002);
RUN_ONE_TESTCASE(testOsEventFlagsSet003);
RUN_ONE_TESTCASE(testOsEventFlagsWait001);
RUN_ONE_TESTCASE(testOsEventFlagsWait002);
RUN_ONE_TESTCASE(testOsEventFlagsWait003);
RUN_ONE_TESTCASE(testOsEventFlagsGet001);
RUN_ONE_TESTCASE(testOsEventFlagsGet002);
RUN_ONE_TESTCASE(testOsEventFlagsClear001);
RUN_ONE_TESTCASE(testOsEventFlagsClear002);
}

View File

@ -0,0 +1,419 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_cmsis.h"
osMessageQueueId_t g_cmsisMqId;
static char *g_cmsisMessageInfo[] = {"msg1", "msg2", "msg3", "msg4", "msg5", "msg6", "msg7", "msg8"};
LITE_TEST_SUIT(Cmsis, Cmsismsg, CmsisMsgFuncTestSuite);
static BOOL CmsisMsgFuncTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL CmsisMsgFuncTestSuiteTearDown(void)
{
return TRUE;
}
static void CmsisMessageQueueGetFunc001(void const *argument)
{
(void)argument;
osStatus_t uwRet;
UINT8 msgPrio = 0;
CHAR ucTemp[MSGINFO_LEN] = "";
UINT32 uwCmp;
uwRet = osMessageQueueGet(g_cmsisMqId, ucTemp, &msgPrio, TIMEOUT_COUNT);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwCmp = memcmp(ucTemp, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], MSGINFO_LEN);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwCmp);
uwRet = osMessageQueueDelete(g_cmsisMqId);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
osThreadExit();
}
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0100
* @tc.name : message queue operation for creat
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueNew001, Function | MediumTest | Level1)
{
osStatus_t status;
g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
(void)osMessageQueueDelete(g_cmsisMqId);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0200
* @tc.name : message queue operation for creat when msg_count = 0
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueNew002, Function | MediumTest | Level1)
{
osStatus_t status;
g_cmsisMqId = osMessageQueueNew(0, MSG_SIZE, NULL);
ICUNIT_ASSERT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0300
* @tc.name : message queue operation for creat when msg_size = 0
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueNew003, Function | MediumTest | Level1)
{
osStatus_t status;
g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, 0, NULL);
ICUNIT_ASSERT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0400
* @tc.name : message queue operation for delete
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueDelete001, Function | MediumTest | Level1)
{
osStatus_t uwRet;
g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
uwRet = osMessageQueueDelete(g_cmsisMqId);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0500
* @tc.name : message queue delete operation with mq_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueDelete002, Function | MediumTest | Level1)
{
osStatus_t uwRet = osMessageQueueDelete(NULL);
ICUNIT_ASSERT_EQUAL(uwRet, osErrorParameter, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0600
* @tc.name : message queue operation for put
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueuePut001, Function | MediumTest | Level1)
{
osStatus_t uwRet;
g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwRet = osMessageQueueDelete(g_cmsisMqId);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0700
* @tc.name : message queue put operation with mq_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueuePut002, Function | MediumTest | Level1)
{
osStatus_t uwRet = osMessageQueuePut(NULL, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
ICUNIT_ASSERT_EQUAL(uwRet, osErrorParameter, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0800
* @tc.name : message queue operation for put when msg_ptr = 0
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueuePut003, Function | MediumTest | Level1)
{
osStatus_t uwRet;
g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
uwRet = osMessageQueuePut(g_cmsisMqId, NULL, 0, 0);
ICUNIT_ASSERT_EQUAL(uwRet, osErrorParameter, uwRet);
uwRet = osMessageQueueDelete(g_cmsisMqId);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0900
* @tc.name : message queue operation for get
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGet001, Function | MediumTest | Level1)
{
osStatus_t uwRet;
UINT32 uId;
osThreadId_t id;
osThreadAttr_t attr;
attr.name = "test";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = TEST_TASK_STACK_SIZE;
attr.priority = osPriorityAboveNormal;
uId = osKernelLock();
ICUNIT_ASSERT_EQUAL(uId, 0, uId); /* 1, common data for test, no special meaning */
g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
id = osThreadNew((osThreadFunc_t)CmsisMessageQueueGetFunc001, NULL, &attr);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uId = osKernelUnlock();
ICUNIT_ASSERT_EQUAL(uId, 1, uId); /* 1, common data for test, no special meaning */
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1000
* @tc.name : message queue get operation with mq_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGet002, Function | MediumTest | Level1)
{
osStatus_t uwRet;
UINT8 msgPrio = 0;
CHAR ucTemp[MSGINFO_LEN] = "";
uwRet = osMessageQueueGet(NULL, ucTemp, &msgPrio, TIMEOUT_COUNT);
ICUNIT_ASSERT_EQUAL(uwRet, osErrorParameter, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1100
* @tc.name : message queue operation for get when msg_ptr = 0
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGet003, Function | MediumTest | Level1)
{
osStatus_t uwRet;
UINT8 msgPrio = 0;
g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
uwRet = osMessageQueueGet(g_cmsisMqId, NULL, &msgPrio, TIMEOUT_COUNT);
ICUNIT_ASSERT_EQUAL(uwRet, osErrorParameter, uwRet);
uwRet = osMessageQueueDelete(g_cmsisMqId);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1200
* @tc.name : message queue operation for get msg size
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetMsgSize001, Function | MediumTest | Level1)
{
UINT32 uwRet;
g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
uwRet = osMessageQueueGetMsgSize(g_cmsisMqId);
ICUNIT_ASSERT_EQUAL(uwRet, MSG_SIZE, uwRet);
uwRet = osMessageQueueDelete(g_cmsisMqId);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1300
* @tc.name : message queue get msg size with mq_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetMsgSize002, Function | MediumTest | Level1)
{
UINT32 uwRet = osMessageQueueGetMsgSize(NULL);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1400
* @tc.name : message queue operation for get capacity
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetCapacity001, Function | MediumTest | Level1)
{
UINT32 uwRet;
g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
uwRet = osMessageQueueGetCapacity(g_cmsisMqId);
ICUNIT_ASSERT_EQUAL(uwRet, MSGQUEUE_COUNT, uwRet);
uwRet = osMessageQueueDelete(g_cmsisMqId);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1500
* @tc.name : message queue get capacity with mq_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetCapacity002, Function | MediumTest | Level1)
{
UINT32 uwRet = osMessageQueueGetCapacity(NULL);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1600
* @tc.name : message queue operation for get count
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetCount001, Function | MediumTest | Level1)
{
UINT32 uwRet;
g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_1], 0, 0);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_2], 0, 0);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwRet = osMessageQueueGetCount(g_cmsisMqId);
ICUNIT_ASSERT_EQUAL(uwRet, MSGQUEUE_PUT_COUNT, uwRet);
uwRet = osMessageQueueDelete(g_cmsisMqId);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1700
* @tc.name : message queue get count with mq_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetCount002, Function | MediumTest | Level1)
{
UINT32 uwRet = osMessageQueueGetCount(NULL);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1800
* @tc.name : message queue operation for get space
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetSpace001, Function | MediumTest | Level1)
{
UINT32 uwRet;
g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_1], 0, 0);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_2], 0, 0);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwRet = osMessageQueueGetSpace(g_cmsisMqId);
ICUNIT_ASSERT_EQUAL(uwRet, MSGQUEUE_SPACE_COUNT, uwRet);
uwRet = osMessageQueueDelete(g_cmsisMqId);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1900
* @tc.name : message queue get space with mq_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetSpace002, Function | MediumTest | Level1)
{
UINT32 uwRet = osMessageQueueGetSpace(NULL);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
return 0;
};
RUN_TEST_SUITE(CmsisMsgFuncTestSuite);
void CmsisMsgFuncTest(void)
{
RUN_ONE_TESTCASE(testOsMessageQueueNew001);
RUN_ONE_TESTCASE(testOsMessageQueueNew002);
RUN_ONE_TESTCASE(testOsMessageQueueNew003);
RUN_ONE_TESTCASE(testOsMessageQueueDelete001);
RUN_ONE_TESTCASE(testOsMessageQueueDelete002);
RUN_ONE_TESTCASE(testOsMessageQueuePut001);
RUN_ONE_TESTCASE(testOsMessageQueuePut002);
RUN_ONE_TESTCASE(testOsMessageQueuePut003);
RUN_ONE_TESTCASE(testOsMessageQueueGet001);
RUN_ONE_TESTCASE(testOsMessageQueueGet002);
RUN_ONE_TESTCASE(testOsMessageQueueGet003);
RUN_ONE_TESTCASE(testOsMessageQueueGetMsgSize001);
RUN_ONE_TESTCASE(testOsMessageQueueGetMsgSize002);
RUN_ONE_TESTCASE(testOsMessageQueueGetCapacity001);
RUN_ONE_TESTCASE(testOsMessageQueueGetCapacity002);
RUN_ONE_TESTCASE(testOsMessageQueueGetCount001);
RUN_ONE_TESTCASE(testOsMessageQueueGetCount002);
RUN_ONE_TESTCASE(testOsMessageQueueGetSpace001);
RUN_ONE_TESTCASE(testOsMessageQueueGetSpace002);
}

View File

@ -0,0 +1,296 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_cmsis.h"
UINT16 g_cmsisTestMutexCount;
osMutexId_t g_cmsisOsMutexId;
osMutexAttr_t g_cmsisMutexAttr;
LITE_TEST_SUIT(Cmsis, Cmsismutex, CmsisMutexFuncTestSuite);
static BOOL CmsisMutexFuncTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL CmsisMutexFuncTestSuiteTearDown(void)
{
return TRUE;
}
static void CmsisMutexGetOwnerFunc001(void const *argument)
{
(void)argument;
osStatus_t ret;
osThreadId_t id1;
osThreadId_t id2;
osThreadAttr_t attr;
g_cmsisOsMutexId = osMutexNew(&g_cmsisMutexAttr);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisOsMutexId, NULL, g_cmsisOsMutexId);
ret = osMutexAcquire(g_cmsisOsMutexId, LOS_WAIT_FOREVER);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
id1 = osMutexGetOwner(g_cmsisOsMutexId);
id2 = osThreadGetId();
ICUNIT_ASSERT_STRING_EQUAL(id1, id2, id1);
attr.name = osThreadGetName(id1);
ICUNIT_ASSERT_STRING_EQUAL("testMutexGetOwner001", attr.name, attr.name);
ret = osMutexRelease(g_cmsisOsMutexId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
ret = osMutexDelete(g_cmsisOsMutexId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
osThreadExit();
}
/**
* @tc.number : SUB_KERNEL_CMSIS_MUTEX_OPERATION_0100
* @tc.name : mutex operation for creat with NULL para
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMutexFuncTestSuite, testOsMutexNew001, Function | MediumTest | Level1)
{
osStatus_t status;
g_cmsisOsMutexId = osMutexNew(NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisOsMutexId, NULL, g_cmsisOsMutexId);
(void)osMutexDelete(g_cmsisOsMutexId);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MUTEX_OPERATION_0200
* @tc.name : mutex operation for creat
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMutexFuncTestSuite, testOsMutexNew002, Function | MediumTest | Level1)
{
osStatus_t status;
g_cmsisOsMutexId = osMutexNew(&g_cmsisMutexAttr);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisOsMutexId, NULL, g_cmsisOsMutexId);
(void)osMutexDelete(g_cmsisOsMutexId);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MUTEX_OPERATION_0300
* @tc.name : mutex operation for delete after creat mutex with NULL parameter
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMutexFuncTestSuite, testOsMutexDelete001, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisOsMutexId = osMutexNew(NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisOsMutexId, NULL, g_cmsisOsMutexId);
ret = osMutexDelete(g_cmsisOsMutexId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
ret = osMutexDelete(g_cmsisOsMutexId);
ICUNIT_ASSERT_EQUAL(ret, osErrorParameter, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MUTEX_OPERATION_0400
* @tc.name : mutex operation for delete
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMutexFuncTestSuite, testOsMutexDelete002, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisOsMutexId = osMutexNew(&g_cmsisMutexAttr);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisOsMutexId, NULL, g_cmsisOsMutexId);
ret = osMutexDelete(g_cmsisOsMutexId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
ret = osMutexDelete(g_cmsisOsMutexId);
ICUNIT_ASSERT_EQUAL(ret, osErrorParameter, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MUTEX_OPERATION_0500
* @tc.name : mutex operation for delete after mutex acquire and release
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMutexFuncTestSuite, testOsMutexDelete003, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisOsMutexId = osMutexNew(NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisOsMutexId, NULL, g_cmsisOsMutexId);
osMutexAcquire(g_cmsisOsMutexId, LOS_WAIT_FOREVER);
ret = osMutexDelete(g_cmsisOsMutexId);
ICUNIT_ASSERT_EQUAL(ret, osErrorResource, ret);
(void)osMutexRelease(g_cmsisOsMutexId);
ret = osMutexDelete(g_cmsisOsMutexId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MUTEX_OPERATION_0600
* @tc.name : mutex delete operation with mutex_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMutexFuncTestSuite, testOsMutexDelete004, Function | MediumTest | Level1)
{
osStatus_t ret = osMutexDelete(NULL);
ICUNIT_ASSERT_EQUAL(ret, osErrorParameter, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MUTEX_OPERATION_0700
* @tc.name : mutex acquire operation with mutex_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMutexFuncTestSuite, testOsMutexAcquire001, Function | MediumTest | Level1)
{
osStatus_t ret = osMutexAcquire(NULL, LOS_WAIT_FOREVER);
ICUNIT_ASSERT_EQUAL(ret, osErrorParameter, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MUTEX_OPERATION_0800
* @tc.name : mutex operation for acquire
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMutexFuncTestSuite, testOsMutexAcquire002, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisOsMutexId = osMutexNew(&g_cmsisMutexAttr);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisOsMutexId, NULL, g_cmsisOsMutexId);
ret = osMutexAcquire(g_cmsisOsMutexId, LOS_WAIT_FOREVER);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
(void)osMutexRelease(g_cmsisOsMutexId);
ret = osMutexDelete(g_cmsisOsMutexId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MUTEX_OPERATION_0900
* @tc.name : mutex operation for release
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMutexFuncTestSuite, testOsMutexRelease001, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisOsMutexId = osMutexNew(&g_cmsisMutexAttr);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisOsMutexId, NULL, g_cmsisOsMutexId);
ret = osMutexAcquire(g_cmsisOsMutexId, LOS_WAIT_FOREVER);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
ret = osMutexDelete(g_cmsisOsMutexId);
ICUNIT_ASSERT_EQUAL(ret, osErrorResource, ret);
ret = osMutexRelease(g_cmsisOsMutexId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
ret = osMutexDelete(g_cmsisOsMutexId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MUTEX_OPERATION_1000
* @tc.name : mutex release operation with mutex_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMutexFuncTestSuite, testOsMutexRelease002, Function | MediumTest | Level1)
{
osStatus_t ret = osMutexRelease(NULL);
ICUNIT_ASSERT_EQUAL(ret, osErrorParameter, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MUTEX_OPERATION_1100
* @tc.name : mutex operation for get owner
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMutexFuncTestSuite, testOsMutexGetOwner001, Function | MediumTest | Level1)
{
osThreadId_t id;
osThreadAttr_t osAttr;
osAttr.name = "testMutexGetOwner001";
osAttr.attr_bits = 0U;
osAttr.cb_mem = NULL;
osAttr.cb_size = 0U;
osAttr.stack_mem = NULL;
osAttr.stack_size = TEST_TASK_STACK_SIZE;
osAttr.priority = osPriorityAboveNormal;
id = osThreadNew((osThreadFunc_t)CmsisMutexGetOwnerFunc001, NULL, &osAttr);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_MUTEX_OPERATION_1200
* @tc.name : mutex get owner operation with mutex_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisMutexFuncTestSuite, testOsMutexGetOwner002, Function | MediumTest | Level1)
{
osThreadId_t id = osMutexGetOwner(NULL);
ICUNIT_ASSERT_EQUAL(id, NULL, id);
return 0;
};
RUN_TEST_SUITE(CmsisMutexFuncTestSuite);
void CmsisMutexFuncTest(void)
{
RUN_ONE_TESTCASE(testOsMutexNew001);
RUN_ONE_TESTCASE(testOsMutexNew002);
RUN_ONE_TESTCASE(testOsMutexDelete001);
RUN_ONE_TESTCASE(testOsMutexDelete002);
RUN_ONE_TESTCASE(testOsMutexDelete003);
RUN_ONE_TESTCASE(testOsMutexDelete004);
RUN_ONE_TESTCASE(testOsMutexAcquire001);
RUN_ONE_TESTCASE(testOsMutexAcquire002);
RUN_ONE_TESTCASE(testOsMutexRelease001);
RUN_ONE_TESTCASE(testOsMutexRelease002);
RUN_ONE_TESTCASE(testOsMutexGetOwner001);
RUN_ONE_TESTCASE(testOsMutexGetOwner002);
}

View File

@ -0,0 +1,466 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_cmsis.h"
osSemaphoreId_t g_cmsisSemSemaph;
LITE_TEST_SUIT(Cmsis, CmsisSem, CmsisSemFuncTestSuite);
static BOOL CmsisSemFuncTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL CmsisSemFuncTestSuiteTearDown(void)
{
return TRUE;
}
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_0100
* @tc.name : semaphore operation for creat when Semaphhore count = 1 and 0
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreNew001, Function | MediumTest | Level1)
{
osStatus_t status;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT1, SEMAPHHORE_COUNT_INT0, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
(void)osSemaphoreDelete(g_cmsisSemSemaph);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_0200
* @tc.name : semaphore operation for creat when Semaphhore count = 10 and 1
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreNew002, Function | MediumTest | Level1)
{
osStatus_t status;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT10, SEMAPHHORE_COUNT_INT1, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
(void)osSemaphoreDelete(g_cmsisSemSemaph);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_0300
* @tc.name : semaphore operation for creat when Semaphhore count = 0 and 10
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreNew003, Function | MediumTest | Level1)
{
osStatus_t status;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT0, SEMAPHHORE_COUNT_INT10, NULL);
ICUNIT_ASSERT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
(void)osSemaphoreDelete(g_cmsisSemSemaph);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_0400
* @tc.name : semaphore operation for creat when Semaphhore count = 0 and 0
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreNew004, Function | MediumTest | Level1)
{
osStatus_t status;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT0, SEMAPHHORE_COUNT_INT0, NULL);
ICUNIT_ASSERT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
(void)osSemaphoreDelete(g_cmsisSemSemaph);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_0500
* @tc.name : semaphore operation for creat when Semaphhore count = 1 and 1
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreNew005, Function | MediumTest | Level1)
{
osStatus_t status;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT1, SEMAPHHORE_COUNT_INT1, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
(void)osSemaphoreDelete(g_cmsisSemSemaph);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_0600
* @tc.name : semaphore operation for creat when Semaphhore count = 10 and 10
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreNew006, Function | MediumTest | Level1)
{
osStatus_t status;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT10, SEMAPHHORE_COUNT_INT10, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
(void)osSemaphoreDelete(g_cmsisSemSemaph);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_0700
* @tc.name : semaphore operation for creat when Semaphhore count = 0xFE and 0
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreNew007, Function | MediumTest | Level1)
{
osStatus_t status;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_HEX_MAX, SEMAPHHORE_COUNT_INT0, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
(void)osSemaphoreDelete(g_cmsisSemSemaph);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_0800
* @tc.name : semaphore operation for creat when Semaphhore count = 0 and 0xFE
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreNew008, Function | MediumTest | Level1)
{
osStatus_t status;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT0, SEMAPHHORE_COUNT_HEX_MAX, NULL);
ICUNIT_ASSERT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
(void)osSemaphoreDelete(g_cmsisSemSemaph);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_0900
* @tc.name : semaphore operation for delete
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreDelete001, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT10, SEMAPHHORE_COUNT_INT0, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
ret = osSemaphoreDelete(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_1000
* @tc.name : semaphore delete operation twice
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreDelete002, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT10, SEMAPHHORE_COUNT_INT0, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
ret = osSemaphoreDelete(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
ret = osSemaphoreDelete(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osErrorParameter, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_1100
* @tc.name : semaphore delete operation with semaphore_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreDelete003, Function | MediumTest | Level1)
{
osStatus_t ret = osSemaphoreDelete(NULL);
ICUNIT_ASSERT_EQUAL(ret, osErrorParameter, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_1200
* @tc.name : semaphore operation for acquire when Semaphhore count = 1 and 1
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreAcquire001, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT1, SEMAPHHORE_COUNT_INT1, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
ret = osSemaphoreAcquire(g_cmsisSemSemaph, 0);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
ret = osSemaphoreDelete(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_1300
* @tc.name : semaphore operation for acquire when Semaphhore count = 1 and 0
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreAcquire002, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT1, SEMAPHHORE_COUNT_INT0, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
ret = osSemaphoreAcquire(g_cmsisSemSemaph, 0);
ICUNIT_ASSERT_EQUAL(ret, osErrorResource, ret);
ret = osSemaphoreDelete(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_1400
* @tc.name : semaphore operation for acquire when Semaphhore count = 0 and 1
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreAcquire003, Function | MediumTest | Level1)
{
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT0, SEMAPHHORE_COUNT_INT1, NULL);
ICUNIT_ASSERT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_1500
* @tc.name : semaphore acquire operation with semaphore_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreAcquire004, Function | MediumTest | Level1)
{
osStatus_t ret = osSemaphoreAcquire(NULL, 0);
ICUNIT_ASSERT_EQUAL(ret, osErrorParameter, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_1600
* @tc.name : semaphore operation for release
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreRelease001, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT1, SEMAPHHORE_COUNT_INT0, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
ret = osSemaphoreAcquire(g_cmsisSemSemaph, 0);
ICUNIT_ASSERT_EQUAL(ret, osErrorResource, ret);
ret = osSemaphoreRelease(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
ret = osSemaphoreDelete(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_1700
* @tc.name : semaphore release operation twice
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreRelease002, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT1, SEMAPHHORE_COUNT_INT0, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
ret = osSemaphoreRelease(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
ret = osSemaphoreRelease(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osErrorResource, ret);
ret = osSemaphoreDelete(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_1800
* @tc.name : semaphore operation for release after semaphore acquire
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreRelease003, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT1, SEMAPHHORE_COUNT_INT1, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
ret = osSemaphoreRelease(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osErrorResource, ret);
ret = osSemaphoreAcquire(g_cmsisSemSemaph, 0);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
ret = osSemaphoreRelease(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
ret = osSemaphoreRelease(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osErrorResource, ret);
ret = osSemaphoreDelete(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_1900
* @tc.name : semaphore release operation with semaphore_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreRelease004, Function | MediumTest | Level1)
{
osStatus_t ret = osSemaphoreRelease(NULL);
ICUNIT_ASSERT_EQUAL(ret, osErrorParameter, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_2000
* @tc.name : semaphore operation for get count when Semaphhore count = 1 or 0xFE
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreGetCount001, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT1, SEMAPHHORE_COUNT_INT1, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
ret = osSemaphoreGetCount(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, 1, ret); /* 1, common data for test, no special meaning */
ret = osSemaphoreDelete(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_HEX_MAX, SEMAPHHORE_COUNT_HEX_MAX, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
ret = osSemaphoreGetCount(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, SEMAPHHORE_COUNT_HEX_MAX, ret);
ret = osSemaphoreDelete(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_2100
* @tc.name : semaphore operation for get count when Semaphhore count = 1 or 0
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreGetCount002, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT1, SEMAPHHORE_COUNT_INT0, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
ret = osSemaphoreGetCount(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = osSemaphoreDelete(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_INT0, SEMAPHHORE_COUNT_INT1, NULL);
ICUNIT_ASSERT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_2200
* @tc.name : semaphore operation for get count
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreGetCount003, Function | MediumTest | Level1)
{
osStatus_t ret;
g_cmsisSemSemaph = osSemaphoreNew(SEMAPHHORE_COUNT_HEX_MAX, SEMAPHHORE_COUNT_HEX_MAX, NULL);
ICUNIT_ASSERT_NOT_EQUAL(g_cmsisSemSemaph, NULL, g_cmsisSemSemaph);
ret = osSemaphoreAcquire(g_cmsisSemSemaph, osWaitForever);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
ret = osSemaphoreGetCount(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, SEMAPHHORE_COUNT_HEX_MAX - 1, ret); /* 1, common data for test, no special meaning */
ret = osSemaphoreDelete(g_cmsisSemSemaph);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_SEM_OPERATION_2300
* @tc.name : semaphore get count operation with semaphore_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisSemFuncTestSuite, testOsSemaphoreGetCount004, Function | MediumTest | Level1)
{
osStatus_t ret = osSemaphoreGetCount(NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
};
RUN_TEST_SUITE(CmsisSemFuncTestSuite);
void CmsisSemFuncTest(void)
{
RUN_ONE_TESTCASE(testOsSemaphoreNew001);
RUN_ONE_TESTCASE(testOsSemaphoreNew002);
RUN_ONE_TESTCASE(testOsSemaphoreNew003);
RUN_ONE_TESTCASE(testOsSemaphoreNew004);
RUN_ONE_TESTCASE(testOsSemaphoreNew005);
RUN_ONE_TESTCASE(testOsSemaphoreNew006);
RUN_ONE_TESTCASE(testOsSemaphoreNew007);
RUN_ONE_TESTCASE(testOsSemaphoreNew008);
RUN_ONE_TESTCASE(testOsSemaphoreDelete001);
RUN_ONE_TESTCASE(testOsSemaphoreDelete002);
RUN_ONE_TESTCASE(testOsSemaphoreDelete003);
RUN_ONE_TESTCASE(testOsSemaphoreAcquire001);
RUN_ONE_TESTCASE(testOsSemaphoreAcquire002);
RUN_ONE_TESTCASE(testOsSemaphoreAcquire003);
RUN_ONE_TESTCASE(testOsSemaphoreAcquire004);
RUN_ONE_TESTCASE(testOsSemaphoreRelease001);
RUN_ONE_TESTCASE(testOsSemaphoreRelease002);
RUN_ONE_TESTCASE(testOsSemaphoreRelease003);
RUN_ONE_TESTCASE(testOsSemaphoreRelease004);
RUN_ONE_TESTCASE(testOsSemaphoreGetCount001);
RUN_ONE_TESTCASE(testOsSemaphoreGetCount002);
RUN_ONE_TESTCASE(testOsSemaphoreGetCount003);
RUN_ONE_TESTCASE(testOsSemaphoreGetCount004);
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,768 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_cmsis.h"
UINT16 g_cmsisTestTimeCount;
/**
* @tc.desc : register a test suite, this suite is used to test basic flow and interface dependency
* @param : subsystem name is utils
* @param : module name is utilsFile
* @param : test suit name is CmsisTaskFuncTestSuite
*/
LITE_TEST_SUIT(Cmsis, Cmsistimer, CmsisTimerFuncTestSuite);
/**
* @tc.setup : setup for all testcases
* @return : setup result, TRUE is success, FALSE is fail
*/
static BOOL CmsisTimerFuncTestSuiteSetUp(void)
{
return TRUE;
}
/**
* @tc.teardown : teardown for all testcases
* @return : teardown result, TRUE is success, FALSE is fail
*/
static BOOL CmsisTimerFuncTestSuiteTearDown(void)
{
return TRUE;
}
static void CmsisTimerFunc001(void const *argument)
{
(void)argument;
return;
}
static void CmsisTimerFunc002(void const *argument)
{
(void)argument;
g_cmsisTestTimeCount++;
return;
}
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_0100
* @tc.name : timer operation for creat with parameter osTimerOnce
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerNew001, Function | MediumTest | Level1)
{
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerOnce, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
(void)osTimerDelete(id);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_0200
* @tc.name : timer operation for creat with parameter osTimerPeriodic
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerNew002, Function | MediumTest | Level1)
{
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerPeriodic, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
(void)osTimerDelete(id);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_0300
* @tc.name : timer creat operation with NULL func and parameter osTimerOnce
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerNew003, Function | MediumTest | Level1)
{
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
id = osTimerNew(NULL, osTimerOnce, &value, NULL);
ICUNIT_ASSERT_EQUAL(id, NULL, id);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_0400
* @tc.name : timer creat operation with NULL func and parameter osTimerPeriodic
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerNew004, Function | MediumTest | Level1)
{
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
id = osTimerNew(NULL, osTimerPeriodic, &value, NULL);
ICUNIT_ASSERT_EQUAL(id, NULL, id);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_0500
* @tc.name : timer operation for invalid timer type
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerNew005, Function | MediumTest | Level1)
{
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, INVALID_TIMER_TYPE, &value, NULL);
ICUNIT_ASSERT_EQUAL(id, NULL, id);
status = osDelay(DELAY_TICKS_5);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_0600
* @tc.name : timer operation for start with parameter osTimerOnce
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerStart001, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT4;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerOnce, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, millisec);
ICUNIT_ASSERT_EQUAL(osOK, uwRet, uwRet);
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_0700
* @tc.name : timer operation for start with parameter osTimerPeriodic
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerStart002, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT4;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerPeriodic, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, millisec);
ICUNIT_ASSERT_EQUAL(osOK, uwRet, uwRet);
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_0800
* @tc.name : timer operation for start with callback func and parameter osTimerOnce
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerStart003, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT4;
g_cmsisTestTimeCount = 0;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc002, osTimerOnce, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, millisec);
ICUNIT_ASSERT_EQUAL(osOK, uwRet, uwRet);
status = osDelay(DELAY_TICKS_10);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
ICUNIT_ASSERT_EQUAL(1, g_cmsisTestTimeCount, g_cmsisTestTimeCount); /* 1, common data for test, no special meaning */
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_0900
* @tc.name : timer operation for start with callback func and parameter osTimerPeriodic
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerStart004, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT4;
g_cmsisTestTimeCount = 0;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc002, osTimerPeriodic, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, millisec);
ICUNIT_ASSERT_EQUAL(osOK, uwRet, uwRet);
status = osDelay(DELAY_TICKS_10);
ICUNIT_ASSERT_EQUAL(status, osOK, status);
ICUNIT_ASSERT_EQUAL(TIMER_PERIODIC_COUNT, g_cmsisTestTimeCount, g_cmsisTestTimeCount);
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_1000
* @tc.name : timer start operation with ticks = 0 and parameter osTimerOnce
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerStart005, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
UINT32 value = 0xffff;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerOnce, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, 0);
ICUNIT_ASSERT_EQUAL(osErrorParameter, uwRet, uwRet);
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_1100
* @tc.name : timer start operation with ticks = 0 and parameter osTimerPeriodic
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerStart006, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
UINT32 value = 0xffff;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerPeriodic, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, 0);
ICUNIT_ASSERT_EQUAL(osErrorParameter, uwRet, uwRet);
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_1200
* @tc.name : timer start operation with timer_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerStart007, Function | MediumTest | Level1)
{
UINT32 millisec = MILLISEC_NUM_INT4;
UINT32 uwRet = osTimerStart(NULL, millisec);
ICUNIT_ASSERT_EQUAL(osErrorParameter, uwRet, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_1300
* @tc.name : timer operation for delete with parameter osTimerOnce
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerDelete001, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerOnce, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
status = osDelay(1); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(status, osOK, status);
uwRet = osTimerDelete(id);
ICUNIT_ASSERT_EQUAL(osOK, uwRet, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_1400
* @tc.name : timer operation for delete with parameter osTimerPeriodic
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerDelete002, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerPeriodic, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
status = osDelay(1); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(status, osOK, status);
uwRet = osTimerDelete(id);
ICUNIT_ASSERT_EQUAL(osOK, uwRet, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_1500
* @tc.name : timer operation for delete after osTimerStart with parameter osTimerOnce
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerDelete003, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT10;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerOnce, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
osTimerStart(id, millisec);
status = osDelay(1); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(status, osOK, status);
uwRet = osTimerDelete(id);
ICUNIT_ASSERT_EQUAL(osOK, uwRet, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_1600
* @tc.name : timer operation for delete after osTimerStart with parameter osTimerPeriodic
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerDelete004, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT10;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerPeriodic, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, millisec);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
status = osDelay(1); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(status, osOK, status);
uwRet = osTimerDelete(id);
ICUNIT_ASSERT_EQUAL(osOK, uwRet, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_1700
* @tc.name : timer delete operation with timer_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerDelete005, Function | MediumTest | Level1)
{
UINT32 uwRet = osTimerDelete(NULL);
ICUNIT_ASSERT_EQUAL(osErrorParameter, uwRet, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_1800
* @tc.name : timer operation for stop after osTimerStart with parameter osTimerOnce
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerStop001, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT10;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerOnce, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, millisec);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
status = osDelay(1); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(status, osOK, status);
uwRet = osTimerStop(id);
ICUNIT_ASSERT_EQUAL(osOK, uwRet, uwRet);
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_1900
* @tc.name : timer operation for stop after osTimerStart with parameter osTimerPeriodic
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerStop002, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT10;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerPeriodic, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, millisec);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
status = osDelay(1); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(status, osOK, status);
uwRet = osTimerStop(id);
ICUNIT_ASSERT_EQUAL(osOK, uwRet, uwRet);
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_2000
* @tc.name : timer operation for stop with parameter osTimerOnce
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerStop003, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerOnce, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
status = osDelay(1); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(status, osOK, status);
uwRet = osTimerStop(id);
ICUNIT_ASSERT_EQUAL(osErrorResource, uwRet, uwRet);
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_2100
* @tc.name : timer operation for stop with parameter osTimerPeriodic
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerStop004, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
osStatus_t status;
UINT32 value = 0xffff;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerPeriodic, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
status = osDelay(1); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(status, osOK, status);
uwRet = osTimerStop(id);
ICUNIT_ASSERT_EQUAL(osErrorResource, uwRet, uwRet);
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_2200
* @tc.name : timer stop operation with timer_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerStop005, Function | MediumTest | Level1)
{
UINT32 uwRet = osTimerStop(NULL);
ICUNIT_ASSERT_EQUAL(osErrorParameter, uwRet, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_2300
* @tc.name : timer operation for running
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerIsRunning001, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
UINT32 value = 0xffff;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerOnce, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerIsRunning(id);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_2400
* @tc.name : timer operation for running after osTimerStart
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerIsRunning002, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT10;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerOnce, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, millisec);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwRet = osTimerIsRunning(id);
ICUNIT_ASSERT_EQUAL(uwRet, 1, uwRet); /* 1, common data for test, no special meaning */
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_2500
* @tc.name : timer operation for running after osTimerStart and osTimerStop
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerIsRunning003, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT10;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerOnce, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, millisec);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwRet = osTimerStop(id);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwRet = osTimerIsRunning(id);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_2600
* @tc.name : timer operation for running after osTimerStart and osTimerDelete
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerIsRunning004, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT10;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerOnce, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, millisec);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwRet = osTimerDelete(id);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwRet = osTimerIsRunning(id);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_2700
* @tc.name : timer operation for running with parameter osTimerPeriodic
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerIsRunning005, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
UINT32 value = 0xffff;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerPeriodic, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerIsRunning(id);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_2800
* @tc.name : timer operation for running after osTimerStart with parameter osTimerPeriodic
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerIsRunning006, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT10;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerPeriodic, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, millisec);
ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
uwRet = osTimerIsRunning(id);
ICUNIT_ASSERT_EQUAL(uwRet, 1, uwRet); /* 1, common data for test, no special meaning */
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_2900
* @tc.name : timer operation for running after osTimerStart and osTimerStop with parameter osTimerPeriodic
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerIsRunning007, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT10;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerPeriodic, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, millisec);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
uwRet = osTimerStop(id);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
uwRet = osTimerIsRunning(id);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
(void)osTimerDelete(id);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_3000
* @tc.name : timer operation for running after osTimerStart and osTimerDelete with parameter osTimerPeriodic
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerIsRunning008, Function | MediumTest | Level1)
{
UINT32 uwRet;
osTimerId_t id;
UINT32 value = 0xffff;
UINT32 millisec = MILLISEC_NUM_INT10;
id = osTimerNew((osTimerFunc_t)CmsisTimerFunc001, osTimerPeriodic, &value, NULL);
ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
uwRet = osTimerStart(id, millisec);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
uwRet = osTimerDelete(id);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
uwRet = osTimerIsRunning(id);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_3100
* @tc.name : timer running inquiry with timer_id = NULL
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsTimerIsRunning009, Function | MediumTest | Level1)
{
UINT32 uwRet = osTimerIsRunning(NULL);
ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_3200
* @tc.name : os operation for get tick freq
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsKernelGetTickFreq001, Function | MediumTest | Level1)
{
UINT32 uwRet = osKernelGetTickFreq();
ICUNIT_ASSERT_EQUAL(uwRet, LOSCFG_BASE_CORE_TICK_PER_SECOND, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_3300
* @tc.name : os operation for get sys time freq
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsKernelGetSysTimerFreq001, Function | MediumTest | Level1)
{
UINT32 uwRet = osKernelGetSysTimerFreq();
ICUNIT_ASSERT_EQUAL(uwRet, OS_SYS_CLOCK, uwRet);
return 0;
};
/**
* @tc.number : SUB_KERNEL_CMSIS_TIMER_OPERATION_3400
* @tc.name : os operation for get sys time count
* @tc.desc : [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(CmsisTimerFuncTestSuite, testOsKernelGetSysTimerCount001, Function | MediumTest | Level1)
{
UINT32 uwRet = osKernelGetSysTimerCount();
ICUNIT_ASSERT_WITHIN_EQUAL(uwRet, 0, UINT_MAX, uwRet);
return 0;
};
RUN_TEST_SUITE(CmsisTimerFuncTestSuite);
void CmsisTimerFuncTest(void)
{
RUN_ONE_TESTCASE(testOsTimerNew001);
RUN_ONE_TESTCASE(testOsTimerNew002);
RUN_ONE_TESTCASE(testOsTimerNew003);
RUN_ONE_TESTCASE(testOsTimerNew004);
RUN_ONE_TESTCASE(testOsTimerNew005);
RUN_ONE_TESTCASE(testOsTimerStart001);
RUN_ONE_TESTCASE(testOsTimerStart002);
RUN_ONE_TESTCASE(testOsTimerStart003);
RUN_ONE_TESTCASE(testOsTimerStart004);
RUN_ONE_TESTCASE(testOsTimerStart005);
RUN_ONE_TESTCASE(testOsTimerStart006);
RUN_ONE_TESTCASE(testOsTimerStart007);
RUN_ONE_TESTCASE(testOsTimerDelete001);
RUN_ONE_TESTCASE(testOsTimerDelete002);
RUN_ONE_TESTCASE(testOsTimerDelete003);
RUN_ONE_TESTCASE(testOsTimerDelete004);
RUN_ONE_TESTCASE(testOsTimerDelete005);
RUN_ONE_TESTCASE(testOsTimerStop001);
RUN_ONE_TESTCASE(testOsTimerStop002);
RUN_ONE_TESTCASE(testOsTimerStop003);
RUN_ONE_TESTCASE(testOsTimerStop004);
RUN_ONE_TESTCASE(testOsTimerStop005);
RUN_ONE_TESTCASE(testOsTimerIsRunning001);
RUN_ONE_TESTCASE(testOsTimerIsRunning002);
RUN_ONE_TESTCASE(testOsTimerIsRunning003);
RUN_ONE_TESTCASE(testOsTimerIsRunning004);
RUN_ONE_TESTCASE(testOsTimerIsRunning005);
RUN_ONE_TESTCASE(testOsTimerIsRunning006);
RUN_ONE_TESTCASE(testOsTimerIsRunning007);
RUN_ONE_TESTCASE(testOsTimerIsRunning008);
RUN_ONE_TESTCASE(testOsTimerIsRunning009);
RUN_ONE_TESTCASE(testOsKernelGetTickFreq001);
RUN_ONE_TESTCASE(testOsKernelGetSysTimerFreq001);
RUN_ONE_TESTCASE(testOsKernelGetSysTimerCount001);
}

View File

@ -0,0 +1,42 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_test.h"
void CmsisFuncTest(void)
{
CmsisEventFuncTest();
CmsisMsgFuncTest();
CmsisMutexFuncTest();
CmsisSemFuncTest();
CmsisTaskFuncTest();
CmsisTaskPriFuncTest();
CmsisTimerFuncTest();
}

View File

@ -0,0 +1,89 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef XTS_CMSID_H
#define XTS_CMSID_H
#include "xts_test.h"
#include <securec.h>
#include <limits.h>
#include "cmsis_os2.h"
#define LOS_WAIT_FOREVER 0xFFFFFFFF
#define TESTCOUNT_NUM_1 1
#define TESTCOUNT_NUM_2 2
#define TESTCOUNT_NUM_3 3
#define TESTCOUNT_NUM_4 4
#define TESTCOUNT_NUM_5 5
#define MSGQUEUE_COUNT 16
#define MSGQUEUE_SPACE_COUNT 13
#define MSGQUEUE_PUT_COUNT 3
#define MSG_SIZE 4
#define MSGINFO_LEN 4
#define TIMEOUT_COUNT 1000
#define BUF_LEN 32
#define MSGQUEUE_COUNT_INDEX_0 0
#define MSGQUEUE_COUNT_INDEX_1 1
#define MSGQUEUE_COUNT_INDEX_2 2
#define SEMAPHHORE_COUNT_HEX_MAX 0xFE
#define SEMAPHHORE_COUNT_INT0 0
#define SEMAPHHORE_COUNT_INT1 1
#define SEMAPHHORE_COUNT_INT10 10
#define EVENT_MASK_HEX_1 0x01
#define EVENT_MASK_HEX_2 0x02
#define EVENT_MASK_HEX_4 0x04
#define EVENT_MASK_HEX_10 0x10
#define EVENT_MASK_HEX_11 0x11
#define TIMEOUT_NUM_3 3
#define TIMEOUT_NUM_10 10
#define INVALID_FLAG_OPTION 0x00000004U
#define MILLISEC_NUM_INT10 10U
#define MILLISEC_NUM_INT4 4U
#define INVALID_TIMER_TYPE 10
#define TIMER_PERIODIC_COUNT 2
#define DELAY_TICKS_1 1
#define DELAY_TICKS_5 5
#define DELAY_TICKS_10 10
#define PRIORITY_COUNT_NOT_MIN 3
#define PRIORITY_COUNT_MIN_1 4
#define PRIORITY_COUNT_MIN_2 5
#define PRIORITY_COUNT_MIN_3 6
#define PRIORITY_COUNT_MIN_4 7
#define MAX_UINT32 0xFFFFFFFF
#define ALIVE_INFO_DIS 10000
#endif

View File

@ -0,0 +1,46 @@
# Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni")
static_library("io_test") {
sources = [
"xts_io.c",
"xts_io_other_test.c",
"xts_io_stdio_test.c",
"xts_io_stdlib_test.c",
"xts_io_string_test.c",
"xts_io_strings_test.c",
]
include_dirs = [
".",
"$LITEOSTOPDIR/testsuites/include",
"$LITEOSTOPDIR/testsuites/unittest/xts",
]
}

View File

@ -0,0 +1,40 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_test.h"
void IoFuncTest(void)
{
XtsIoOtherTest();
XtsIoStdioFuncTest();
XtsIoStdlibFuncTest();
XtsIoStringFuncTest();
XtsIoStringsFuncTest();
}

View File

@ -0,0 +1,51 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef XTS_IO_H
#define XTS_IO_H
#include "xts_test.h"
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <pthread.h>
#include <time.h>
#include <securec.h>
#include <sys/uio.h>
#include <grp.h>
#include <shadow.h>
#include <pwd.h>
#include <inttypes.h>
#include <iconv.h>
#include <stdarg.h>
#include <err.h>
#include <threads.h>
#endif

View File

@ -0,0 +1,78 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_io.h"
LITE_TEST_SUIT(IO, IoOther, IoOtherTestSuite);
static BOOL IoOtherTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL IoOtherTestSuiteTearDown(void)
{
return TRUE;
}
/**
* @tc.number SUB_KERNEL_IO_OTHER_0900
* @tc.name strptime basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoOtherTestSuite, testStrptime, Function | MediumTest | Level1)
{
struct tm tm;
memset_s(&tm, sizeof(struct tm), 0, sizeof(struct tm));
char *ret = strptime("2020-10-29 21:24:00abc", "%Y-%m-%d %H:%M:%S", &tm);
ICUNIT_ASSERT_STRING_EQUAL(ret, "abc", ret);
ICUNIT_ASSERT_EQUAL(tm.tm_year, 120, tm.tm_year); /* 120 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(tm.tm_mon, 9, tm.tm_mon); /* 9 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(tm.tm_mday, 29, tm.tm_mday); /* 29 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(tm.tm_hour, 21, tm.tm_hour); /* 21 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(tm.tm_min, 24, tm.tm_min); /* 24 common data for test, no special meaning */
ret = strptime("14 Oct October 20 09:24:00 Sat Saturday 363", "%d %b %B %y %I:%M:%S %a %A %j", &tm);
ICUNIT_ASSERT_STRING_EQUAL(ret, "", ret);
ICUNIT_ASSERT_EQUAL(tm.tm_year, 120, tm.tm_year); /* 120 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(tm.tm_mon, 9, tm.tm_mon); /* 9 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(tm.tm_mday, 14, tm.tm_mday); /* 14 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(tm.tm_hour, 9, tm.tm_hour); /* 9 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(tm.tm_wday, 6, tm.tm_wday); /* 6 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(tm.tm_yday, 362, tm.tm_yday); /* 362 common data for test, no special meaning */
return 0;
}
RUN_TEST_SUITE(IoOtherTestSuite);
void XtsIoOtherTest(void)
{
RUN_ONE_TESTCASE(testStrptime);
}

View File

@ -0,0 +1,75 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_io.h"
LITE_TEST_SUIT(IO, IoStdio, IoStdioTestSuite);
static BOOL IoStdioTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL IoStdioTestSuiteTearDown(void)
{
return TRUE;
}
int FormatVsnptf(char *format, ...)
{
va_list vArgList;
va_start(vArgList, format);
char str[50] = {0}; /* 50 common data for test, no special meaning */
int ret = vsnprintf_s(str, sizeof(str), sizeof(str), format, vArgList);
va_end(vArgList);
return ret;
}
/**
* @tc.number SUB_KERNEL_IO_STDIO_2100
* @tc.name vsnprintf basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStdioTestSuite, testVsnprintf, Function | MediumTest | Level1)
{
int ret = FormatVsnptf((char *)"%s has %d words", "hello world", 11); /* 11 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 24, ret); /* 24 common data for test, no special meaning */
ret = FormatVsnptf((char *)"%f and %c as well as %ld\n", 2.2, 'c', 6); /* 2.2, 6 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 28, ret); /* 28 common data for test, no special meaning */
return 0;
}
RUN_TEST_SUITE(IoStdioTestSuite);
void XtsIoStdioFuncTest(void)
{
RUN_ONE_TESTCASE(testVsnprintf);
}

View File

@ -0,0 +1,282 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_io.h"
LITE_TEST_SUIT(IO, IoStdlibApi, IoStdlibApiTestSuite);
static BOOL IoStdlibApiTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL IoStdlibApiTestSuiteTearDown(void)
{
return TRUE;
}
/**
* @tc.number SUB_KERNEL_IO_STDLIB_0400
* @tc.name strtof basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStdlibApiTestSuite, testStrtof, Function | MediumTest | Level1)
{
char *endPtr = NULL;
float ret = strtof(" -3.40E+38 hello", &endPtr);
ICUNIT_ASSERT_EQUAL(ret, (float)(-3.40E+38), ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " hello", endPtr);
ret = strtof(" 3.40E+38 ===", &endPtr);
ICUNIT_ASSERT_EQUAL(ret, (float)(3.40E+38), ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " ===", endPtr);
ret = strtof("-9.6e17 this 123", &endPtr);
ICUNIT_ASSERT_EQUAL(ret, (float)(-9.6e17), ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " this 123", endPtr);
ret = strtof("this is string", &endPtr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, "this is string", endPtr);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STDLIB_0500
* @tc.name strtod basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStdlibApiTestSuite, testStrtod, Function | MediumTest | Level1)
{
char *endPtr = NULL;
double ret = strtod(" -1.79E+308 hello", &endPtr);
ICUNIT_ASSERT_EQUAL(ret, -1.79E+308, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " hello", endPtr);
ret = strtod("1.79E+308 ===", &endPtr);
ICUNIT_ASSERT_EQUAL(ret, 1.79E+308, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " ===", endPtr);
ret = strtod("-9.6e17 this 123", &endPtr);
ICUNIT_ASSERT_EQUAL(ret, -9.6e17, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " this 123", endPtr);
ret = strtod("this is string", &endPtr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, "this is string", endPtr);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STDLIB_0600
* @tc.name strtold basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStdlibApiTestSuite, testStrtold, Function | MediumTest | Level1)
{
char *endPtr = NULL;
long double ret = strtold(" 2.22507e-308 hello", &endPtr);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " hello", endPtr);
ret = strtold(" 1.79769e+308 ===", &endPtr);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " ===", endPtr);
ret = strtold("-9.6e17 this 123", &endPtr);
ICUNIT_ASSERT_EQUAL(ret, -9.6e17, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " this 123", endPtr);
ret = strtold("this is string", &endPtr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, "this is string", endPtr);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STDLIB_0700
* @tc.name strtol basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStdlibApiTestSuite, testStrtol, Function | MediumTest | Level1)
{
char nPtr[] = "12 0110 0XDEFE 0666 -1.6";
char *endPtr = NULL;
long ret = strtol(nPtr, &endPtr, 10); /* 10 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 12, ret); /* 12 common data for test, no special meaning */
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 0110 0XDEFE 0666 -1.6", endPtr);
ret = strtol(endPtr, &endPtr, 2); /* 2 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 6, ret); /* 6 common data for test, no special meaning */
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 0XDEFE 0666 -1.6", endPtr);
ret = strtol(endPtr, &endPtr, 16); /* 16 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0XDEFE, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 0666 -1.6", endPtr);
ret = strtol(endPtr, &endPtr, 8); /* 8 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0666, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " -1.6", endPtr);
ret = strtol(endPtr, &endPtr, 65); /* 65 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " -1.6", endPtr);
ret = strtol(endPtr, &endPtr, 0);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1 common data for test, no special meaning */
ICUNIT_ASSERT_STRING_EQUAL(endPtr, ".6", endPtr);
ret = strtol(endPtr, &endPtr, 10); /* 10 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, ".6", endPtr);
char nPtr1[] = "2147483647 2147483648 -2147483648 -2147483649";
ret = strtol(nPtr1, &endPtr, 10); /* 10 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 2147483647, ret); /* 2147483647 common data for test, no special meaning */
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 2147483648 -2147483648 -2147483649", endPtr);
ret = strtol(endPtr, &endPtr, 10); /* 10 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 2147483647, ret); /* 2147483647 common data for test, no special meaning */
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " -2147483648 -2147483649", endPtr);
ret = strtol(endPtr, &endPtr, 10); /* 10 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, -2147483648, ret); /* -2147483648 common data for test, no special meaning */
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " -2147483649", endPtr);
ret = strtol(endPtr, &endPtr, 10); /* 10 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, -2147483648, ret); /* -2147483648 common data for test, no special meaning */
ICUNIT_ASSERT_STRING_EQUAL(endPtr, "", endPtr);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STDLIB_0800
* @tc.name strtoul basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStdlibApiTestSuite, testStrtoul, Function | MediumTest | Level1)
{
char nPtr[] = "12 0110 0XDEFE 0666 4294967295 4294967296 12.34";
char *endPtr = NULL;
unsigned long ret = strtoul(nPtr, &endPtr, 10); /* 10 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 12UL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 0110 0XDEFE 0666 4294967295 4294967296 12.34", endPtr);
ret = strtoul(endPtr, &endPtr, 2); /* 2 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 6UL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 0XDEFE 0666 4294967295 4294967296 12.34", endPtr);
ret = strtoul(endPtr, &endPtr, 16); /* 16 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0XDEFEUL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 0666 4294967295 4294967296 12.34", endPtr);
ret = strtoul(endPtr, &endPtr, 8); /* 8 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0666UL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 4294967295 4294967296 12.34", endPtr);
ret = strtoul(endPtr, &endPtr, 0);
ICUNIT_ASSERT_EQUAL(ret, 4294967295UL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 4294967296 12.34", endPtr);
ret = strtoul(endPtr, &endPtr, 0);
ICUNIT_ASSERT_EQUAL(ret, 4294967295UL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 12.34", endPtr);
ret = strtoul(endPtr, &endPtr, 65); /* 65 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0UL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 12.34", endPtr);
ret = strtoul(endPtr, &endPtr, 0);
ICUNIT_ASSERT_EQUAL(ret, 12UL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, ".34", endPtr);
ret = strtoul(endPtr, &endPtr, 0);
ICUNIT_ASSERT_EQUAL(ret, 0UL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, ".34", endPtr);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STDLIB_1000
* @tc.name strtoull basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStdlibApiTestSuite, testStrtoull, Function | MediumTest | Level1)
{
char nPtr[] = "12 0110 0XDEFE 0666 1.6";
char *endPtr = NULL;
unsigned long long ret = strtoull(nPtr, &endPtr, 10); /* 10 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 12ULL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 0110 0XDEFE 0666 1.6", endPtr);
ret = strtoull(endPtr, &endPtr, 2); /* 2 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 6ULL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 0XDEFE 0666 1.6", endPtr);
ret = strtoull(endPtr, &endPtr, 16); /* 16 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0XDEFEULL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 0666 1.6", endPtr);
ret = strtoull(endPtr, &endPtr, 8); /* 8 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0666ULL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 1.6", endPtr);
ret = strtoull(endPtr, &endPtr, 65); /* 65 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0ULL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 1.6", endPtr);
ret = strtoull(endPtr, &endPtr, 0);
ICUNIT_ASSERT_EQUAL(ret, 1ULL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, ".6", endPtr);
ret = strtoull(endPtr, &endPtr, 0);
ICUNIT_ASSERT_EQUAL(ret, 0ULL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, ".6", endPtr);
char nPtr1[] = "18446744073709551615 18446744073709551616";
ret = strtoull(nPtr1, &endPtr, 10); /* 10 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 18446744073709551615ULL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, " 18446744073709551616", endPtr);
ret = strtoull(endPtr, &endPtr, 10); /* 10 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 18446744073709551615ULL, ret);
ICUNIT_ASSERT_STRING_EQUAL(endPtr, "", endPtr);
return 0;
}
RUN_TEST_SUITE(IoStdlibApiTestSuite);
void XtsIoStdlibFuncTest(void)
{
RUN_ONE_TESTCASE(testStrtof);
RUN_ONE_TESTCASE(testStrtod);
RUN_ONE_TESTCASE(testStrtold);
RUN_ONE_TESTCASE(testStrtol);
RUN_ONE_TESTCASE(testStrtoul);
RUN_ONE_TESTCASE(testStrtoull);
}

View File

@ -0,0 +1,374 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_io.h"
LITE_TEST_SUIT(IO, IoStringApi, IoStringApiTestSuite);
static BOOL IoStringApiTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL IoStringApiTestSuiteTearDown(void)
{
return TRUE;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_0300
* @tc.name strcmp basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrcmp, Function | MediumTest | Level1)
{
int ret = strcmp("abcdef", "ABCDEF");
ICUNIT_ASSERT_WITHIN_EQUAL(ret, 0, INT_MAX, ret);
ret = strcmp("123456", "654321");
ICUNIT_ASSERT_WITHIN_EQUAL(ret, INT_MIN, 0, ret);
ret = strcmp("~!@#$%^&*()_+", "~!@#$%^&*()_+");
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_0400
* @tc.name strncmp basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrncmp, Function | MediumTest | Level1)
{
const char dest[] = "abcdef";
const char src[] = "ABCDEF";
int ret = strncmp(dest, src, 1); /* 1 common data for test, no special meaning */
ICUNIT_ASSERT_WITHIN_EQUAL(ret, 0, INT_MAX, ret);
ret = strncmp("123456", "654321", 6); /* 6 common data for test, no special meaning */
ICUNIT_ASSERT_WITHIN_EQUAL(ret, INT_MIN, 0, ret);
ret = strncmp("~!@#$%^&*()_+", "~!@#$%^&*()_+", 8); /* 8 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_0700
* @tc.name stpcpy basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStpcpy, Function | MediumTest | Level1)
{
const char *src = "hello world !";
char dest[50] = {0}; /* 50 common data for test, no special meaning */
char *ret = stpcpy(dest, src);
ICUNIT_ASSERT_NOT_EQUAL(ret, NULL, ret);
ICUNIT_ASSERT_STRING_EQUAL(dest, src, dest);
const char *srcT = "~!@#$%%^&*()_+";
char destT[50] = {0}; /* 50 common data for test, no special meaning */
ret = stpcpy(destT, srcT);
ICUNIT_ASSERT_NOT_EQUAL(ret, NULL, ret);
ICUNIT_ASSERT_STRING_EQUAL(destT, srcT, destT);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_0800
* @tc.name stpncpy basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStpncpy, Function | MediumTest | Level1)
{
char src[] = "hello world !";
char dest[50] = {0}; /* 50 common data for test, no special meaning */
char *ret = stpncpy(dest, src, 5); /* 5 common data for test, no special meaning */
ICUNIT_ASSERT_STRING_EQUAL(ret, "", ret);
ICUNIT_ASSERT_STRING_EQUAL(dest, "hello", dest);
char srcT[] = "~!@#$%%^&*()_+";
char destT[50] = {0}; /* 50 common data for test, no special meaning */
ret = stpncpy(destT, srcT, 15); /* 15 common data for test, no special meaning */
ICUNIT_ASSERT_STRING_EQUAL(ret, "", ret);
ICUNIT_ASSERT_STRING_EQUAL(destT, "~!@#$%%^&*()_+", destT);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_1000
* @tc.name strcpy basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrcpy, Function | MediumTest | Level1)
{
char src[] = "hello world !";
char dest[20] = {0}; /* 20 common data for test, no special meaning */
int ret = strcpy_s(dest, sizeof(dest), src);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
char srcT[] = "This is String1";
char destT[20] = {0}; /* 20 common data for test, no special meaning */
ret = strcpy_s(destT, sizeof(destT), srcT);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_1100
* @tc.name strncpy basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrncpy, Function | MediumTest | Level1)
{
char src[] = "hello world !";
char dest[20] = {0};
int ret = strncpy_s(dest, sizeof(dest), src, 6); /* 6 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
char destT[] = "~!@#$%^&*()_+";
ret = strncpy_s(destT, sizeof(destT), "hello world", 0);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_1400
* @tc.name strcat basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrcat, Function | MediumTest | Level1)
{
char dest[50] = {0}; /* 50 common data for test, no special meaning */
int ret = strcat_s(dest, sizeof(dest), "hello world !");
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
char destT[50] = "hello world ! || "; /* 50 common data for test, no special meaning */
ret = strcat_s(destT, sizeof(destT), "This is String1");
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_1500
* @tc.name strncat basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrncat, Function | MediumTest | Level1)
{
char dest[50] = "hello world || "; /* 50 common data for test, no special meaning */
int ret = strncat_s(dest, sizeof(dest), "This is String1", 7); /* 7 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
char destT[20] = "|/*"; /* 20 common data for test, no special meaning */
ret = strncat_s(destT, sizeof(destT), "~!@#$%^&*()_+", 13); /* 13 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_1600
* @tc.name strchr basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrchr, Function | MediumTest | Level1)
{
char src[] = "hello !! world";
char *ret = strchr(src, '!');
ICUNIT_ASSERT_STRING_EQUAL(ret, "!! world", ret);
ret = strchr(src, '?');
ICUNIT_ASSERT_STRING_EQUAL(ret, NULL, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_1700
* @tc.name strrchr basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrrchr, Function | MediumTest | Level1)
{
char src[] = "hello world & HEELO & WORLD";
char *ret = strrchr(src, '&');
ICUNIT_ASSERT_STRING_EQUAL(ret, "& WORLD", ret);
ret = strrchr(src, '?');
ICUNIT_ASSERT_STRING_EQUAL(ret, NULL, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_1800
* @tc.name strnlen basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrnlen, Function | MediumTest | Level1)
{
char src[] = "hello world !";
unsigned int ltSrcSize = strlen(src) - 2; /* 2 common data for test, no special meaning */
unsigned int gtSrcSize = strlen(src) + 2; /* 2 common data for test, no special meaning */
size_t ret = strnlen(src, ltSrcSize);
ICUNIT_ASSERT_EQUAL(ret, ltSrcSize, ret);
ret = strnlen(src, gtSrcSize);
ICUNIT_ASSERT_EQUAL(ret, strlen(src), ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_1900
* @tc.name strtok basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrtok, Function | MediumTest | Level1)
{
char src[] = "hello world & This is-String1";
char *ret = strtok(src, "&");
ICUNIT_ASSERT_STRING_EQUAL(ret, src, ret);
ret = strtok(NULL, "-");
ICUNIT_ASSERT_STRING_EQUAL(ret, " This is", ret);
char srcS[] = "hello world !";
ret = strtok(srcS, "?");
ICUNIT_ASSERT_STRING_EQUAL(ret, srcS, ret);
char srcT[50] = {0}; /* 50 common data for test, no special meaning */
ret = strtok(srcT, "~");
ICUNIT_ASSERT_STRING_EQUAL(ret, NULL, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_2200
* @tc.name strdup basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrdup, Function | MediumTest | Level1)
{
char src[] = "hello world !";
char *ret = strdup(src);
ICUNIT_ASSERT_STRING_EQUAL(ret, src, ret);
char srcS[] = "This is String1";
ret = strdup(srcS);
ICUNIT_ASSERT_STRING_EQUAL(ret, "This is String1", ret);
free(ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_2500
* @tc.name strcspn basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrcspn, Function | MediumTest | Level1)
{
const char dest[] = "hello world !";
const char src[] = "!";
size_t ret = strcspn(dest, src);
ICUNIT_ASSERT_EQUAL(ret, 12U, ret);
const char srcS[] = "a";
ret = strcspn(dest, srcS);
ICUNIT_ASSERT_EQUAL(ret, 13U, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_2600
* @tc.name strspn basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrspn, Function | MediumTest | Level1)
{
const char dest[] = "hello world !";
const char src[] = "heAlo";
size_t ret = strspn(dest, src);
ICUNIT_ASSERT_EQUAL(ret, 5U, ret);
ICUNIT_ASSERT_EQUAL(ret, 5U, ret);
const char destS[] = "this is string";
const char srcS[] = "abc";
ret = strspn(destS, srcS);
ICUNIT_ASSERT_EQUAL(ret, 0U, ret);
const char srcT[] = "helo\0 wal";
ret = strspn(dest, srcT);
ICUNIT_ASSERT_EQUAL(ret, 5U, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRING_2700
* @tc.name strstr basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringApiTestSuite, testStrstr, Function | MediumTest | Level1)
{
const char dest[] = "hello world !";
const char src[] = "heAlo";
const char *ret = strstr(dest, src);
ICUNIT_ASSERT_STRING_EQUAL(ret, NULL, ret);
const char destS[] = "string this is string";
const char srcS[] = "string";
ret = strstr(destS, srcS);
ICUNIT_ASSERT_STRING_EQUAL(ret, "string this is string", ret);
const char srcT[] = "\0hello";
ret = strstr(dest, srcT);
ICUNIT_ASSERT_STRING_EQUAL(ret, "hello world !", ret);
return 0;
}
RUN_TEST_SUITE(IoStringApiTestSuite);
void XtsIoStringFuncTest(void)
{
RUN_ONE_TESTCASE(testStrcmp);
RUN_ONE_TESTCASE(testStrncmp);
RUN_ONE_TESTCASE(testStpcpy);
RUN_ONE_TESTCASE(testStpncpy);
RUN_ONE_TESTCASE(testStrcpy);
RUN_ONE_TESTCASE(testStrncpy);
RUN_ONE_TESTCASE(testStrcat);
RUN_ONE_TESTCASE(testStrncat);
RUN_ONE_TESTCASE(testStrchr);
RUN_ONE_TESTCASE(testStrrchr);
RUN_ONE_TESTCASE(testStrnlen);
RUN_ONE_TESTCASE(testStrtok);
RUN_ONE_TESTCASE(testStrdup);
RUN_ONE_TESTCASE(testStrcspn);
RUN_ONE_TESTCASE(testStrspn);
RUN_ONE_TESTCASE(testStrstr);
}

View File

@ -0,0 +1,87 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_io.h"
LITE_TEST_SUIT(IO, IoStringsApi, IoStringsApiTestSuite);
static BOOL IoStringsApiTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL IoStringsApiTestSuiteTearDown(void)
{
return TRUE;
}
/**
* @tc.number SUB_KERNEL_IO_STRINGS_0200
* @tc.name strncasecmp basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringsApiTestSuite, testStrncasecmp, Function | MediumTest | Level1)
{
int ret = strncasecmp("abcdefg", "abcdEFg", 7); /* 7 common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = strncasecmp("abcdefg", "abcdEF", 7); /* 7 common data for test, no special meaning */
ICUNIT_ASSERT_WITHIN_EQUAL(ret, 0, INT_MAX, ret);
ret = strncasecmp("abcdef", "abcdEFg", 7); /* 7 common data for test, no special meaning */
ICUNIT_ASSERT_WITHIN_EQUAL(ret, INT_MIN, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IO_STRINGS_0300
* @tc.name strcasecmp basic function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IoStringsApiTestSuite, testStrcasecmp, Function | MediumTest | Level2)
{
int ret = strcasecmp("abcdefg", "abcdEFg");
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = strcasecmp("abcdefg", "abcdEF");
ICUNIT_ASSERT_WITHIN_EQUAL(ret, 0, INT_MAX, ret);
ret = strcasecmp("abcdef", "abcdEFg");
ICUNIT_ASSERT_WITHIN_EQUAL(ret, INT_MIN, 0, ret);
return 0;
}
RUN_TEST_SUITE(IoStringsApiTestSuite);
void XtsIoStringsFuncTest(void)
{
RUN_ONE_TESTCASE(testStrncasecmp);
RUN_ONE_TESTCASE(testStrcasecmp);
}

View File

@ -0,0 +1,48 @@
# Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni")
static_library("ipc_test") {
sources = [
"cond/pthread_cond_test.c",
"msg_queue/mq_exp_test.c",
"msg_queue/mq_test.c",
"mutex/pthread_mutex_test.c",
"semaphone/sem_abn_test.c",
"semaphone/sem_test.c",
"semaphone/sem_xts_test.c",
"xts_ipc.c",
]
include_dirs = [
".",
"$LITEOSTOPDIR/testsuites/include",
"$LITEOSTOPDIR/testsuites/unittest/xts",
]
}

View File

@ -0,0 +1,196 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_ipc.h"
pthread_mutex_t g_mtx3 = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t g_cond3 = PTHREAD_COND_INITIALIZER;
LITE_TEST_SUIT(FUTEX, PthreadCondApiTest, PthreadCondApiTestSuite);
static BOOL PthreadCondApiTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL PthreadCondApiTestSuiteTearDown(void)
{
return TRUE;
}
/**
* @tc.number SUB_KERNEL_PTHREAD_COND_INIT_0100
* @tc.name pthread_cond_init initializes condition variables
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(PthreadCondApiTestSuite, testPthreadCondInit, Function | MediumTest | Level2)
{
int ret;
pthread_condattr_t condAttr;
ret = pthread_condattr_init(&condAttr);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
pthread_cond_t cond1;
ret = pthread_cond_init(&cond1, &condAttr);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
pthread_cond_t cond2;
ret = pthread_cond_init(&cond2, NULL);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_PTHREAD_COND_DESTROY_0100
* @tc.name pthread_cond_destroy destroy condition variables
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(PthreadCondApiTestSuite, testPthreadCondDestroy, Function | MediumTest | Level3)
{
int ret;
pthread_condattr_t condAttr;
ret = pthread_condattr_init(&condAttr);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
pthread_cond_t cond1;
ret = pthread_cond_init(&cond1, &condAttr);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ret = pthread_cond_destroy(&cond1);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
pthread_cond_t cond2;
ret = pthread_cond_init(&cond2, NULL);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ret = pthread_cond_destroy(&cond2);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
pthread_cond_t cond3 = PTHREAD_COND_INITIALIZER;
ret = pthread_cond_destroy(&cond3);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_PTHREAD_CONDATTR_INIT_0100
* @tc.name Init and destroy operations
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(PthreadCondApiTestSuite, testPthreadCondattrInit, Function | MediumTest | Level2)
{
int ret;
pthread_condattr_t condAttr;
ret = pthread_condattr_init(&condAttr);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ret = pthread_condattr_destroy(&condAttr);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ret = pthread_condattr_init(&condAttr);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
return 0;
}
// pthread_cond_broadcast
void *ThreadPthreadCondBroadcast1(void *arg)
{
int ret;
int *testIntP = (int *)arg;
usleep(20); /* 20, common data for test, no special meaning */
ret = pthread_mutex_lock(&g_mtx3);
ICUNIT_GOTO_EQUAL(ret, POSIX_IPC_NO_ERROR, ret, EXIT);
*testIntP = TEST_INTP_SIZE;
ret = pthread_cond_broadcast(&g_cond3);
ICUNIT_GOTO_EQUAL(ret, POSIX_IPC_NO_ERROR, ret, EXIT);
ret = pthread_mutex_unlock(&g_mtx3);
ICUNIT_GOTO_EQUAL(ret, POSIX_IPC_NO_ERROR, ret, EXIT);
return arg;
EXIT:
return NULL;
}
// pthread_cond_wait
void *ThreadPthreadCondBroadcast2(void *arg)
{
int ret;
int *testIntP = (int *)arg;
ret = pthread_mutex_lock(&g_mtx3);
ICUNIT_GOTO_EQUAL(ret, POSIX_IPC_NO_ERROR, ret, EXIT);
ret = pthread_cond_wait(&g_cond3, &g_mtx3);
ICUNIT_GOTO_EQUAL(ret, POSIX_IPC_NO_ERROR, ret, EXIT);
(*testIntP)++;
ret = pthread_mutex_unlock(&g_mtx3);
ICUNIT_GOTO_EQUAL(ret, POSIX_IPC_NO_ERROR, ret, EXIT);
return arg;
EXIT:
return NULL;
}
/**
* @tc.number SUB_KERNEL_PTHREAD_COND_BROADCAST_0100
* @tc.name Use pthread_cond_broadcast to release conditional semaphore
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(PthreadCondApiTestSuite, testPthreadCondBroadcast, Function | MediumTest | Level3)
{
int ret;
pthread_t tid[3]; /* 3, common data for test, no special meaning */
int testInt = 0;
ret = pthread_create(&tid[0], NULL, ThreadPthreadCondBroadcast1, (void*)&testInt);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ret = pthread_create(&tid[1], NULL, ThreadPthreadCondBroadcast2, (void*)&testInt); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ret = pthread_create(&tid[2], NULL, ThreadPthreadCondBroadcast2, (void*)&testInt); /* 2, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
usleep(100); /* 100, common data for test, no special meaning */
int index = (int)(sizeof(tid) / sizeof(tid[0]));
for (int i = 0; i < index; i++) {
ret = pthread_join(tid[i], NULL);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
}
EXIT:
ret = pthread_cond_destroy(&g_cond3);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ret = pthread_mutex_destroy(&g_mtx3);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ICUNIT_ASSERT_EQUAL(testInt, TEST_SEEK_SIZE, testInt);
return 0;
}
RUN_TEST_SUITE(PthreadCondApiTestSuite);
void PosixFutexCondTest(void)
{
RUN_ONE_TESTCASE(testPthreadCondInit);
RUN_ONE_TESTCASE(testPthreadCondDestroy);
RUN_ONE_TESTCASE(testPthreadCondattrInit);
RUN_ONE_TESTCASE(testPthreadCondBroadcast);
}

View File

@ -0,0 +1,870 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_ipc.h"
LITE_TEST_SUIT(IPC, IpcMqExceptionApi, IpcMqExceptionApiTestSuite);
static BOOL IpcMqExceptionApiTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL IpcMqExceptionApiTestSuiteTearDown(void)
{
return TRUE;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_RECEIVE_0200
* @tc.name mq_receive function errno for EBADF and EMSGSIZE test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqReceiveEBADFEMSGSIZE001, Function | MediumTest | Level2)
{
int ret;
mqd_t queue;
unsigned int prio;
struct mq_attr attr = { 0 };
struct mq_attr getAttr = { 0 };
char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN], rMsgErr[1];
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqReceiveEAGAIN_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
attr.mq_msgsize = MQ_MSG_SIZE;
attr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ret = mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_receive(queue, rMsg, getAttr.mq_msgsize, &prio);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ret = strncmp(MQ_MSG, rMsg, MQ_MSG_LEN);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_receive(NULL, rMsg, getAttr.mq_msgsize, &prio);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EBADF, errno);
ret = mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_receive(queue, rMsgErr, sizeof(rMsgErr), &prio);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EMSGSIZE, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_RECEIVE_0200
* @tc.name mq_receive function errno for EBADF and EMSGSIZE test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqReceiveEBADFEMSGSIZE002, Function | MediumTest | Level2)
{
int ret;
mqd_t queue;
unsigned int prio;
struct mq_attr attr = { 0 };
struct mq_attr getAttr = { 0 };
char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN];
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqReceiveEAGAIN_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
attr.mq_msgsize = MQ_MSG_SIZE;
attr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_WRONLY | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ret = mq_getattr(queue, &getAttr);
ret = mq_receive(queue, rMsg, getAttr.mq_msgsize, &prio);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EBADF, errno);
attr.mq_flags |= O_NONBLOCK;
ret = mq_setattr(queue, &attr, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_receive(queue, rMsg, getAttr.mq_msgsize, &prio);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EBADF, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_RECEIVE_0300
* @tc.name mq_receive function errno for EINVAL test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqReceiveEINVAL, Function | MediumTest | Level3)
{
int ret;
mqd_t queue;
unsigned int prio;
struct mq_attr attr = { 0 };
char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN];
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqReceiveEINVAL_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
attr.mq_msgsize = MQ_MSG_SIZE;
attr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ret = mq_receive(queue, rMsg, 0, &prio);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_TIMEDSEND_0100
* @tc.name mq_timedsend function errno for EAGAIN and EBADF test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqTimedSendEAGAINEBADF, Function | MediumTest | Level2)
{
int ret;
mqd_t queue;
struct timespec ts = { 0, 0 };
struct mq_attr attr = { 0 };
char qName[MQ_NAME_LEN];
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqTimedSendEAGAIN_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
attr.mq_msgsize = MQ_MSG_SIZE;
attr.mq_maxmsg = 1; /* 1, common data for test, no special meaning */
queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
ts.tv_nsec = 0;
ret = mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ts.tv_sec = 0;
ts.tv_nsec = 0;
ret = mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EAGAIN, errno);
ret = mq_timedsend(NULL, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EBADF, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
attr.mq_msgsize = MQ_MSG_SIZE;
attr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDONLY | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ret = mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EBADF, errno);
attr.mq_flags |= O_NONBLOCK;
ret = mq_setattr(queue, &attr, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EBADF, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_TIMEDSEND_0200
* @tc.name mq_timedsend function errno for EINVAL test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqTimedSendEINVAL, Function | MediumTest | Level2)
{
int ret;
mqd_t queue;
struct timespec ts = { 0, 0 };
struct mq_attr attr = { 0 };
char qName[MQ_NAME_LEN];
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqTimedSendEINVAL_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
attr.mq_msgsize = MQ_MSG_SIZE;
attr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
for (int i = 0; i < 3; i++) { /* 3, common data for test, no special meaning */
switch (i) {
case 0:
ts.tv_sec = -1; /* -1, common data for test, no special meaning */
ts.tv_nsec = 0;
break;
case 1:
ts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
ts.tv_nsec = -1; /* -1, common data for test, no special meaning */
break;
case 2:
ts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
ts.tv_nsec = 1000000000UL + 1UL;
break;
}
ret = mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
}
ret = mq_timedsend(queue, MQ_MSG, 0, MQ_MSG_PRIO, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_TIMEDSEND_0300
* @tc.name mq_timedsend function errno for EMSGSIZE test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqTimedSendEMSGSIZE, Function | MediumTest | Level3)
{
int ret;
mqd_t queue;
struct timespec ts = { 0, 0 };
struct mq_attr attr = { 0 };
char qName[MQ_NAME_LEN];
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqTimedSendEMSGSIZE_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
attr.mq_msgsize = 1; /* 1, common data for test, no special meaning */
attr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
ts.tv_nsec = 0;
ret = mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EMSGSIZE, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_TIMEDSEND_0400
* @tc.name mq_timedsend function errno for ETIMEDOUT test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqTimedSendETIMEDOUT, Function | MediumTest | Level3)
{
int ret;
mqd_t queue;
struct timespec ts = { 0, 0 };
struct mq_attr attr = { 0 };
char qName[MQ_NAME_LEN];
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqTimedSendETIMEDOUT_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
attr.mq_msgsize = MQ_MSG_SIZE;
attr.mq_maxmsg = 1; /* 1, common data for test, no special meaning */
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
ts.tv_nsec = 0;
ret = mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ts.tv_sec = 0;
ts.tv_nsec = 100; /* 100, common data for test, no special meaning */
ret = mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, ETIMEDOUT, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_TIMEDRECEIVE_0100
* @tc.name mq_timedreceive function errno for EAGAIN and EBADF test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqTimedReceiveEAGAINEBADF, Function | MediumTest | Level2)
{
int ret;
mqd_t queue;
unsigned int prio;
struct timespec ts = { 0, 0 };
struct mq_attr attr = { 0 };
struct mq_attr getAttr = { 0 };
char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN];
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqTimedReceiveEAGAIN_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
attr.mq_msgsize = MQ_MSG_SIZE;
attr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
ts.tv_nsec = 0;
ret = mq_timedreceive(queue, rMsg, getAttr.mq_msgsize, &prio, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EAGAIN, errno);
ret = mq_timedreceive(NULL, rMsg, getAttr.mq_msgsize, &prio, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EBADF, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
attr.mq_msgsize = MQ_MSG_SIZE;
attr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_WRONLY | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ret = mq_timedreceive(NULL, rMsg, getAttr.mq_msgsize, &prio, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EBADF, errno);
attr.mq_flags |= O_NONBLOCK;
ret = mq_setattr(queue, &attr, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_timedreceive(NULL, rMsg, getAttr.mq_msgsize, &prio, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EBADF, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_TIMEDRECEIVE_0200
* @tc.name mq_timedreceive function errno for EINVAL test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqTimedReceiveEINVAL, Function | MediumTest | Level2)
{
int ret;
mqd_t queue;
unsigned int prio;
struct timespec ts = { 0, 0 };
struct mq_attr attr = { 0 };
struct mq_attr getAttr = { 0 };
char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN];
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqTimedReceiveEINVAL_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
attr.mq_msgsize = MQ_MSG_SIZE;
attr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
for (int i = 0; i < 3; i++) { /* 3, common data for test, no special meaning */
switch (i) {
case 0:
ts.tv_sec = -1; /* -1, common data for test, no special meaning */
ts.tv_nsec = 0;
break;
case 1:
ts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
ts.tv_nsec = -1; /* -1, common data for test, no special meaning */
break;
case 2:
ts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
ts.tv_nsec = 1000000000UL + 1UL;
break;
}
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_timedreceive(queue, rMsg, getAttr.mq_msgsize, &prio, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
}
ret = mq_timedreceive(queue, rMsg, 0, &prio, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_TIMEDRECEIVE_0300
* @tc.name mq_timedreceive function errno for ETIMEDOUT test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqTimedReceiveETIMEDOUT, Function | MediumTest | Level3)
{
int ret;
mqd_t queue;
unsigned int prio;
struct timespec ts = { 0, 0 };
struct mq_attr attr = { 0 };
struct mq_attr getAttr = { 0 };
char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN];
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqTimedReceiveETIMEDOUT_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
attr.mq_msgsize = MQ_MSG_SIZE;
attr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ts.tv_sec = 0;
ts.tv_nsec = 100; /* 100, common data for test, no special meaning */
ret = mq_timedreceive(queue, rMsg, getAttr.mq_msgsize, &prio, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, ETIMEDOUT, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_TIMEDRECEIVE_0400
* @tc.name mq_timedreceive function errno for EMSGSIZE test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqTimedReceiveEMSGSIZE, Function | MediumTest | Level3)
{
int ret;
mqd_t queue;
unsigned int prio;
struct timespec ts = { 0, 0 };
struct mq_attr attr = { 0 };
char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN];
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqTimedReceiveEMSGSIZE_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
attr.mq_msgsize = MQ_MSG_SIZE;
attr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ret = mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
ts.tv_nsec = 0;
ret = mq_timedreceive(queue, rMsg, 1, &prio, &ts); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EMSGSIZE, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_UNLINK_0100
* @tc.name mq_unlink function errno for ENAMETOOLONG test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqUnlinkENAMETOOLONG, Function | MediumTest | Level2)
{
char qName[MAX_MQ_NAME_LEN + 10]; /* 10, common data for test, no special meaning */
int i;
for (i = 0; i < MAX_MQ_NAME_LEN + 5; i++) { /* 5, common data for test, no special meaning */
qName[i] = '8';
}
qName[i] = '\0';
int ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, ENAMETOOLONG, errno);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_UNLINK_0200
* @tc.name mq_unlink function errno for ENOENT test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqUnlinkENOENT, Function | MediumTest | Level2)
{
char qName[64] = "/mq_file-does-not-exit"; /* 64, common data for test, no special meaning */
int ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, ENOENT, errno);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_UNLINK_0300
* @tc.name mq_unlink function errno for EINVAL test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqUnlinkEINVAL, Function | MediumTest | Level3)
{
int ret = mq_unlink("");
ICUNIT_ASSERT_EQUAL(ret, -1, ret);
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_GETATTR_0100
* @tc.name mq_getattr function errno for EBAD and EINVALF test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqGetAttrEBADFEINVAL, Function | MediumTest | Level2)
{
int ret;
mqd_t queue;
struct mq_attr mqstat = { 0 };
char qName[MQ_NAME_LEN];
memset_s(&mqstat, sizeof(mqstat), 0, sizeof(mqstat));
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqSendEINVAL_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, NULL);
ret = mq_getattr(NULL, &mqstat);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EBADF, errno);
ret = mq_getattr(queue, NULL);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_SETATTR_0100
* @tc.name mq_receive function errno for EBADF and EINVAL test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqSetAttrEBADFEINVAL, Function | MediumTest | Level2)
{
int ret;
char qName[MQ_NAME_LEN];
mqd_t queue;
struct mq_attr gMqstat = { 0 }, sMqstat = { 0 };
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqSetAttrEBADFEINVAL_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
memset_s(&gMqstat, sizeof(gMqstat), 0, sizeof(gMqstat));
memset_s(&sMqstat, sizeof(sMqstat), 0, sizeof(sMqstat));
ret = mq_getattr(queue, &gMqstat);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
sMqstat.mq_flags |= O_NONBLOCK;
ret = mq_setattr(queue, &sMqstat, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_getattr(queue, &gMqstat);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_NOT_EQUAL(gMqstat.mq_flags, sMqstat.mq_flags, gMqstat.mq_flags);
ret = mq_setattr(NULL, &sMqstat, NULL);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EBADF, errno);
ret = mq_setattr(queue, NULL, NULL);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_OPEN_0100
* @tc.name mq_open function errno for EEXIST test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqOpenEEXIST, Function | MediumTest | Level2)
{
int ret;
char qName[MQ_NAME_LEN];
mqd_t queue, queueOther;
ret = sprintf_s(qName, sizeof(qName), "testMqOpenEEXIST_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* 1, common data for test, no special meaning */
queueOther = mq_open(qName, O_CREAT | O_EXCL, S_IRUSR | S_IWUSR, NULL);
ICUNIT_ASSERT_EQUAL(queueOther, (mqd_t)-1, queueOther); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EEXIST, errno);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_OPEN_0200
* @tc.name mq_open function errno for EINVAL test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqOpenEINVAL, Function | MediumTest | Level2)
{
int i, ret;
mqd_t queue;
struct mq_attr attr = { 0 };
char qName[MQ_NAME_LEN];
const int max = 65535; /* 65535, common data for test, no special meaning */
ret = sprintf_s(qName, sizeof(qName), "testMqOpenEINVAL_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
for (i = 0; i < 6; i++) {
switch (i) {
case 0:
attr.mq_msgsize = -1; /* -1, common data for test, no special meaning */
attr.mq_maxmsg = max;
break;
case 1:
attr.mq_msgsize = max;
attr.mq_maxmsg = max;
break;
case 2:
attr.mq_msgsize = 10; /* 10, common data for test, no special meaning */
attr.mq_maxmsg = -1; /* -1, common data for test, no special meaning */
break;
case 3:
attr.mq_msgsize = 10; /* 10, common data for test, no special meaning */
attr.mq_maxmsg = max + 1;
break;
case 4:
attr.mq_msgsize = 0; /* 0, common data for test, no special meaning */
attr.mq_maxmsg = 16; /* 16, common data for test, no special meaning */
break;
case 5:
attr.mq_msgsize = 64; /* 64, common data for test, no special meaning */
attr.mq_maxmsg = 0; /* 0, common data for test, no special meaning */
break;
}
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_EQUAL(queue, (mqd_t)-1, queue); /* 1, common data for test, no special meaning */
if (queue != (mqd_t)-1) { /* 1, common data for test, no special meaning */
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
}
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
}
for (i = 0; i < MQ_NAME_LEN; i++) {
qName[i] = 0;
}
attr.mq_msgsize = MQ_MSG_SIZE;
attr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_EQUAL(queue, (mqd_t)-1, queue); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_OPEN_0300
* @tc.name mq_open function errno for ENAMETOOLONG test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqOpenENAMETOOLONG, Function | MediumTest | Level2)
{
char qName[MAX_MQ_NAME_LEN + 10]; /* 10, common data for test, no special meaning */
mqd_t queue;
int i, ret;
for (i = 0; i < MAX_MQ_NAME_LEN + 5; i++) { /* 5, common data for test, no special meaning */
qName[i] = '8';
}
qName[i] = '\0';
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_ASSERT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
if (queue != (mqd_t)-1) { /* -1, common data for test, no special meaning */
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
}
ICUNIT_ASSERT_EQUAL(errno, ENAMETOOLONG, errno);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_OPEN_0400
* @tc.name mq_open function errno for ENOENT test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqOpenENOENT, Function | MediumTest | Level3)
{
int ret;
mqd_t queue;
char qName[MQ_NAME_LEN];
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqOpenENOENT_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
queue = mq_open(qName, O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_ASSERT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
if (queue != (mqd_t)-1) { /* -1, common data for test, no special meaning */
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
}
ICUNIT_ASSERT_EQUAL(errno, ENOENT, errno);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_OPEN_0600
* @tc.name mq_open function errno for ENOSPC test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqOpenENOSPC, Function | MediumTest | Level3)
{
int ret;
mqd_t queue;
struct mq_attr setAttr = { 0 };
char qName[MQ_NAME_LEN];
ret = sprintf_s(qName, MQ_NAME_LEN, "testMqOpenENOSPC_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
setAttr.mq_msgsize = MAX_MQ_MSG_SIZE + 1; /* 1, common data for test, no special meaning */
setAttr.mq_maxmsg = MAX_MQ_NAME_LEN;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &setAttr);
ICUNIT_ASSERT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
if (queue != (mqd_t)-1) { /* -1, common data for test, no special meaning */
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
}
ICUNIT_ASSERT_EQUAL(errno, ENOSPC, errno);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_CLOSE_0100
* @tc.name mq_close function errno for EBADF test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqExceptionApiTestSuite, testMqCloseEBADF, Function | MediumTest | Level2)
{
int ret = mq_close(NULL);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EBADF, errno);
return 0;
}
RUN_TEST_SUITE(IpcMqExceptionApiTestSuite);
void IpcMqExceptionFuncTest(void)
{
RUN_ONE_TESTCASE(testMqReceiveEBADFEMSGSIZE001);
RUN_ONE_TESTCASE(testMqReceiveEBADFEMSGSIZE002);
RUN_ONE_TESTCASE(testMqReceiveEINVAL);
RUN_ONE_TESTCASE(testMqTimedSendEAGAINEBADF);
RUN_ONE_TESTCASE(testMqTimedSendEINVAL);
RUN_ONE_TESTCASE(testMqTimedSendEMSGSIZE);
RUN_ONE_TESTCASE(testMqTimedSendETIMEDOUT);
RUN_ONE_TESTCASE(testMqTimedReceiveEAGAINEBADF);
RUN_ONE_TESTCASE(testMqTimedReceiveEINVAL);
RUN_ONE_TESTCASE(testMqTimedReceiveETIMEDOUT);
RUN_ONE_TESTCASE(testMqTimedReceiveEMSGSIZE);
RUN_ONE_TESTCASE(testMqUnlinkENAMETOOLONG);
RUN_ONE_TESTCASE(testMqUnlinkENOENT);
RUN_ONE_TESTCASE(testMqUnlinkEINVAL);
RUN_ONE_TESTCASE(testMqGetAttrEBADFEINVAL);
RUN_ONE_TESTCASE(testMqSetAttrEBADFEINVAL);
RUN_ONE_TESTCASE(testMqOpenEEXIST);
RUN_ONE_TESTCASE(testMqOpenEINVAL);
RUN_ONE_TESTCASE(testMqOpenENAMETOOLONG);
RUN_ONE_TESTCASE(testMqOpenENOENT);
RUN_ONE_TESTCASE(testMqOpenENOSPC);
RUN_ONE_TESTCASE(testMqCloseEBADF);
}

View File

@ -0,0 +1,511 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_ipc.h"
LITE_TEST_SUIT(IPC, IpcMqApi, IpcMqApiTestSuite);
static BOOL IpcMqApiTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL IpcMqApiTestSuiteTearDown(void)
{
return TRUE;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_0100
* @tc.name mq_send and mq_receive function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqApiTestSuite, testMqOneLevelCom, Function | MediumTest | Level0)
{
int ret;
mqd_t queue;
unsigned int prio;
struct mq_attr getAttr = { 0 };
struct mq_attr setAttr = { 0 };
char qName[MQ_NAME_LEN];
char rMsg[MQ_RX_LEN];
ret = sprintf_s(qName, sizeof(qName), "testMqOneLevelCom_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
setAttr.mq_msgsize = MQ_MSG_SIZE;
setAttr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &setAttr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ret = mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(getAttr.mq_msgsize, MQ_MSG_SIZE, getAttr.mq_msgsize);
ICUNIT_ASSERT_EQUAL(getAttr.mq_maxmsg, MQ_MAX_MSG, getAttr.mq_maxmsg);
ret = mq_receive(queue, rMsg, getAttr.mq_msgsize, &prio);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(prio, 0, prio);
ret = strncmp(MQ_MSG, rMsg, MQ_MSG_LEN);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_0200
* @tc.name mq_timedsend and mq_timedreceive function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqApiTestSuite, testMqTimedOneLevelCom, Function | MediumTest | Level1)
{
int ret;
mqd_t queue;
unsigned int prio;
struct timespec tts = { 0 };
struct timespec rts = { 0 };
struct mq_attr getAttr = { 0 };
struct mq_attr setAttr = { 0 };
char qName[MQ_NAME_LEN];
char rMsg[MQ_RX_LEN];
ret = sprintf_s(qName, sizeof(qName), "testMqTimedOneLevelCom_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
setAttr.mq_msgsize = MQ_MSG_SIZE;
setAttr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &setAttr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
tts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
tts.tv_nsec = 0;
ret = mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &tts);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(getAttr.mq_msgsize, MQ_MSG_SIZE, getAttr.mq_msgsize);
ICUNIT_ASSERT_EQUAL(getAttr.mq_maxmsg, MQ_MAX_MSG, getAttr.mq_maxmsg);
rts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
rts.tv_nsec = 0;
ret = mq_timedreceive(queue, rMsg, getAttr.mq_msgsize, &prio, &rts);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(prio, 0, prio);
ret = strncmp(MQ_MSG, rMsg, MQ_MSG_LEN);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_0300
* @tc.name all send and all receive function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqApiTestSuite, testMqAllOneLevelCom001, Function | MediumTest | Level2)
{
int ret;
mqd_t queue;
unsigned int prio;
struct mq_attr getAttr = { 0 };
struct mq_attr setAttr = { 0 };
char qName[MQ_NAME_LEN];
char rMsg[MQ_RX_LEN];
ret = sprintf_s(qName, sizeof(qName), "testMqAllOneLevelCom_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
memset_s(&getAttr, sizeof(getAttr), 0, sizeof(getAttr));
memset_s(&setAttr, sizeof(setAttr), 0, sizeof(setAttr));
setAttr.mq_msgsize = MQ_MSG_SIZE;
setAttr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &setAttr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ret = mq_getattr(queue, &setAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
setAttr.mq_msgsize = MQ_MSG_SIZE;
setAttr.mq_maxmsg = MQ_MAX_MSG;
ret = mq_setattr(queue, &setAttr, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(getAttr.mq_msgsize, setAttr.mq_msgsize, getAttr.mq_msgsize);
ICUNIT_ASSERT_EQUAL(getAttr.mq_maxmsg, setAttr.mq_maxmsg, getAttr.mq_maxmsg);
ICUNIT_ASSERT_EQUAL(getAttr.mq_curmsgs, 1, getAttr.mq_curmsgs); /* 1, common data for test, no special meaning */
ret = mq_receive(queue, rMsg, getAttr.mq_msgsize, &prio);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ret = strncmp(MQ_MSG, rMsg, MQ_MSG_LEN);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_0300
* @tc.name all send and all receive function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqApiTestSuite, testMqAllOneLevelCom002, Function | MediumTest | Level2)
{
int ret;
mqd_t queue;
unsigned int prio;
struct timespec tts = { 0 };
struct timespec rts = { 0 };
struct mq_attr getAttr = { 0 };
struct mq_attr setAttr = { 0 };
char qName[MQ_NAME_LEN];
char rMsg[MQ_RX_LEN];
ret = sprintf_s(qName, sizeof(qName), "testMqAllOneLevelCom_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
memset_s(&getAttr, sizeof(getAttr), 0, sizeof(getAttr));
memset_s(&setAttr, sizeof(setAttr), 0, sizeof(setAttr));
setAttr.mq_msgsize = MQ_MSG_SIZE;
setAttr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &setAttr);
tts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
tts.tv_nsec = 0;
ret = mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &tts);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(getAttr.mq_msgsize, setAttr.mq_msgsize, getAttr.mq_msgsize);
ICUNIT_ASSERT_EQUAL(getAttr.mq_maxmsg, setAttr.mq_maxmsg, getAttr.mq_maxmsg);
ICUNIT_ASSERT_EQUAL(getAttr.mq_curmsgs, 1, getAttr.mq_curmsgs); /* 1, common data for test, no special meaning */
rts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
rts.tv_nsec = 0;
ret = mq_timedreceive(queue, rMsg, getAttr.mq_msgsize, &prio, &rts);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ret = strncmp(MQ_MSG, rMsg, MQ_MSG_LEN);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
static void *PthreadCom(void *arg)
{
int ret;
mqd_t queue;
unsigned int prio;
struct mq_attr getAttr = { 0 };
char rMsg[MQ_RX_LEN];
queue = (mqd_t)arg;
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_receive(queue, rMsg, getAttr.mq_msgsize, &prio);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(prio, MQ_MSG_PRIO, prio);
ret = strncmp(MQ_MSG, rMsg, MQ_MSG_LEN);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return NULL;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_0700
* @tc.name mq_send and mq_receive function test in thread and process
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqApiTestSuite, testMqTwoThreadCom, Function | MediumTest | Level1)
{
int ret;
mqd_t queue;
pthread_t tid;
unsigned int prio;
struct mq_attr getAttr = { 0 };
struct mq_attr setAttr = { 0 };
char qName[MQ_NAME_LEN];
char rMsg[MQ_RX_LEN];
ret = sprintf_s(qName, sizeof(qName), "testMqTwoLevelCom_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
setAttr.mq_msgsize = MQ_MSG_SIZE;
setAttr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &setAttr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ret = pthread_create(&tid, NULL, PthreadCom, (void *)queue);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ret = mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = pthread_join(tid, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(getAttr.mq_curmsgs, 1, getAttr.mq_curmsgs); /* 1, common data for test, no special meaning */
ret = mq_receive(queue, rMsg, getAttr.mq_msgsize, &prio);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(prio, MQ_MSG_PRIO, prio);
ret = strncmp(MQ_MSG, rMsg, MQ_MSG_LEN);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
static void *PthreadTimedCom(void *arg)
{
int ret;
mqd_t queue;
unsigned int prio;
struct timespec tts = { 0 };
struct timespec rts = { 0 };
struct mq_attr getAttr = { 0 };
char rMsg[MQ_RX_LEN];
queue = (mqd_t)arg;
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
rts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
rts.tv_nsec = 0;
ret = mq_timedreceive(queue, rMsg, getAttr.mq_msgsize, &prio, &rts);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(prio, MQ_MSG_PRIO, prio);
ret = strncmp(MQ_MSG, rMsg, MQ_MSG_LEN);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
tts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
tts.tv_nsec = 0;
ret = mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &tts);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return NULL;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_0800
* @tc.name mq_timedsend and mq_timedreceive function test in thread and process
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqApiTestSuite, testMqTimedTwoThreadCom, Function | MediumTest | Level1)
{
int ret;
mqd_t queue;
pthread_t tid;
unsigned int prio;
struct timespec tts = { 0 };
struct timespec rts = { 0 };
struct mq_attr getAttr = { 0 };
struct mq_attr setAttr = { 0 };
char qName[MQ_NAME_LEN];
char rMsg[MQ_RX_LEN];
ret = sprintf_s(qName, sizeof(qName), "testMqTimedTwoThreadCom_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
setAttr.mq_msgsize = MQ_MSG_SIZE;
setAttr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &setAttr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ret = pthread_create(&tid, NULL, PthreadTimedCom, (void *)queue);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
tts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
tts.tv_nsec = 0;
ret = mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &tts);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = pthread_join(tid, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(getAttr.mq_curmsgs, 1, getAttr.mq_curmsgs); /* 1, common data for test, no special meaning */
rts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
rts.tv_nsec = 0;
ret = mq_timedreceive(queue, rMsg, getAttr.mq_msgsize, &prio, &rts);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(prio, MQ_MSG_PRIO, prio);
ret = strncmp(MQ_MSG, rMsg, MQ_MSG_LEN);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
static void *PthreadAllCom(void *arg)
{
int ret;
mqd_t queue;
unsigned int prio;
struct timespec tts = { 0 };
struct timespec rts = { 0 };
struct mq_attr getAttr = { 0 };
char rMsg[MQ_RX_LEN];
queue = (mqd_t)arg;
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
rts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
rts.tv_nsec = 0;
ret = mq_timedreceive(queue, rMsg, getAttr.mq_msgsize, &prio, &rts);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(prio, MQ_MSG_PRIO, prio);
ret = strncmp(MQ_MSG, rMsg, MQ_MSG_LEN);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
tts.tv_sec = time(NULL) + 1; /* 1, common data for test, no special meaning */
tts.tv_nsec = 0;
ret = mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &tts);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return NULL;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_0900
* @tc.name all send and all receive function test in thread and process
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqApiTestSuite, testMqAllTwoThreadCom, Function | MediumTest | Level1)
{
int ret;
mqd_t queue;
pthread_t tid;
unsigned int prio;
struct mq_attr getAttr = { 0 };
struct mq_attr setAttr = { 0 };
char qName[MQ_NAME_LEN];
char rMsg[MQ_RX_LEN];
ret = sprintf_s(qName, sizeof(qName), "testMqAllTwoThreadCom_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
setAttr.mq_msgsize = MQ_MSG_SIZE;
setAttr.mq_maxmsg = MQ_MAX_MSG;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &setAttr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
ret = pthread_create(&tid, NULL, PthreadAllCom, (void *)queue);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ret = mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = pthread_join(tid, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(getAttr.mq_curmsgs, 1, getAttr.mq_curmsgs); /* 1, common data for test, no special meaning */
ret = mq_receive(queue, rMsg, getAttr.mq_msgsize, &prio);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(prio, MQ_MSG_PRIO, prio);
ret = strncmp(MQ_MSG, rMsg, MQ_MSG_LEN);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/* *
* @tc.number SUB_KERNEL_IPC_MQ_1200
* @tc.name mq_setattr set and clean mq_flags for O_NONBLOCK function test
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcMqApiTestSuite, testMqSetGetAttr, Function | MediumTest | Level1)
{
int ret;
mqd_t queue;
struct mq_attr getAttr = { 0 };
struct mq_attr setAttr = { 0 };
char qName[MQ_NAME_LEN];
ret = sprintf_s(qName, sizeof(qName), "testMqFunction_%d", GetRandom(10000)); /* 10000, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, strlen(qName), ret);
memset_s(&setAttr, sizeof(setAttr), 0, sizeof(setAttr));
setAttr.mq_msgsize = MQ_MSG_SIZE;
setAttr.mq_maxmsg = MQ_MAX_MSG;
setAttr.mq_flags = O_NONBLOCK;
queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &setAttr);
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue); /* -1, common data for test, no special meaning */
memset_s(&getAttr, sizeof(getAttr), 0, sizeof(getAttr));
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = (getAttr.mq_flags & O_NONBLOCK);
ICUNIT_ASSERT_EQUAL(ret, O_NONBLOCK, ret);
setAttr.mq_flags &= ~O_NONBLOCK;
ret = mq_setattr(queue, &setAttr, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_getattr(queue, &getAttr);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = (getAttr.mq_flags & O_NONBLOCK);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_close(queue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = mq_unlink(qName);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
RUN_TEST_SUITE(IpcMqApiTestSuite);
void IpcMqFuncTest(void)
{
RUN_ONE_TESTCASE(testMqOneLevelCom);
RUN_ONE_TESTCASE(testMqTimedOneLevelCom);
RUN_ONE_TESTCASE(testMqAllOneLevelCom001);
RUN_ONE_TESTCASE(testMqAllOneLevelCom002);
RUN_ONE_TESTCASE(testMqTwoThreadCom);
RUN_ONE_TESTCASE(testMqTimedTwoThreadCom);
RUN_ONE_TESTCASE(testMqAllTwoThreadCom);
RUN_ONE_TESTCASE(testMqSetGetAttr);
}

View File

@ -0,0 +1,139 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_ipc.h"
LITE_TEST_SUIT(FUTEX, PthreadMutexApiTest, PthreadMutexApiTestSuite);
static BOOL PthreadMutexApiTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL PthreadMutexApiTestSuiteTearDown(void)
{
return TRUE;
}
/********************************************* Test case dividing line ***********************************************/
struct PthreadMutexCond {
int loopNum;
int countMax;
int count;
int top;
int bottom;
pthread_cond_t notfull;
pthread_cond_t notempty;
pthread_mutex_t mutex;
};
struct PthreadMutexCond g_st1;
void *PthreadProduce(void *arg)
{
int ret;
for (int i = 0; i < g_st1.loopNum; i++) {
ret = pthread_mutex_lock(&g_st1.mutex);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
// check full
if ((g_st1.top + 1) % g_st1.countMax == g_st1.bottom) { /* 1, common data for test, no special meaning */
ret = pthread_cond_wait(&g_st1.notempty, &g_st1.mutex);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
}
// Produce
g_st1.top = (g_st1.top + 1) % g_st1.countMax; /* 1, common data for test, no special meaning */
g_st1.count++;
ret = pthread_cond_signal(&g_st1.notempty);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ret = pthread_mutex_unlock(&g_st1.mutex);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
usleep(10); /* 10, common data for test, no special meaning */
}
return arg;
}
void *PthreadConsume(void *arg)
{
int ret;
for (int i = 0; i < g_st1.loopNum; i++) {
ret = pthread_mutex_lock(&g_st1.mutex);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
// check empty
if (g_st1.top == g_st1.bottom) {
ret = pthread_cond_wait(&g_st1.notempty, &g_st1.mutex);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
}
// Consume
g_st1.bottom = (g_st1.bottom + 1) % g_st1.countMax;
g_st1.count--;
ret = pthread_cond_signal(&g_st1.notempty);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ret = pthread_mutex_unlock(&g_st1.mutex);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
usleep(10); /* 10, common data for test, no special meaning */
}
return arg;
}
/**
* @tc.number SUB_KERNEL_FUTEX_MUTEX_ALL_0300
* @tc.name test pthread_mutex with condition variable, produce and consume
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(PthreadMutexApiTestSuite, testPthreadMutexCond, Function | MediumTest | Level3)
{
int ret;
pthread_t tid[2]; /* 2, common data for test, no special meaning */
g_st1.count = 0;
memset_s(tid, sizeof(tid), POSIX_IPC_NO_ERROR, sizeof(tid));
ret = pthread_create(&tid[0], NULL, PthreadProduce, NULL);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ret = pthread_create(&tid[1], NULL, PthreadConsume, NULL); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ret = pthread_join(tid[0], NULL);
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ret = pthread_join(tid[1], NULL); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, POSIX_IPC_NO_ERROR, ret);
ICUNIT_ASSERT_EQUAL(g_st1.count, POSIX_IPC_NO_ERROR, g_st1.count);
return 0;
}
RUN_TEST_SUITE(PthreadMutexApiTestSuite);
void PosixFutexMutexTest(void)
{
RUN_ONE_TESTCASE(testPthreadMutexCond);
}

View File

@ -0,0 +1,195 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_ipc.h"
LITE_TEST_SUIT(IPC, SemAbnormalTestSuite, SemAbnormalTestSuite);
static BOOL SemAbnormalTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL SemAbnormalTestSuiteTearDown(void)
{
return TRUE;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_INIT_0200
* @tc.name Use sem_init initialized value when value is SEM_VALUE_MAX
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(SemAbnormalTestSuite, testSemInitAbnormalSemvaluemax, Function | MediumTest | Level3)
{
int ret;
sem_t sem;
int semValue = 0;
ret = sem_init(&sem, 0, SEM_VALUE_MAX);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(SEM_VALUE_MAX, semValue, SEM_VALUE_MAX);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_INIT_0210
* @tc.name Use sem_init initialized value when value is greater than SEM_VALUE_MAX
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(SemAbnormalTestSuite, testSemInitAbnormalGtsemvaluemax, Function | MediumTest | Level3)
{
int ret;
sem_t sem;
unsigned int gtSemMax = (unsigned int)SEM_VALUE_MAX + 1; /* 1, common data for test, no special meaning */
ret = sem_init(&sem, 0, gtSemMax);
ICUNIT_GOTO_EQUAL(ret, -1, ret, EXIT); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
EXIT:
return 0;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_INIT_0220
* @tc.name Use sem_init initialized value twice
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(SemAbnormalTestSuite, testSemInitAbnormalInitTwice, Function | MediumTest | Level3)
{
int ret;
sem_t sem;
ret = sem_init(&sem, 0, 1); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_POST_0200
* @tc.name sem_post increases the semaphore count near the maximum value
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(SemAbnormalTestSuite, testSemPostAbnormal, Function | MediumTest | Level3)
{
int ret;
sem_t sem;
ret = sem_init(&sem, 0, SEM_VALUE_MAX);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ret = sem_post(&sem);
ICUNIT_GOTO_EQUAL(ret, -1, ret, EXIT);
ICUNIT_GOTO_EQUAL(errno, EOVERFLOW, errno, EXIT); /* -1, common data for test, no special meaning */
EXIT:
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_TIMEDWAIT_0200
* @tc.name sem_timedwait get semaphore, wait time abnormal, tv_nsec less than 0
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(SemAbnormalTestSuite, testSemTimedwaitAbnormalA, Function | MediumTest | Level3)
{
int ret;
struct timespec ts = {0};
sem_t sem;
int semValue = 0;
ret = sem_init(&sem, 0, 0);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ts.tv_sec = time(NULL);
ts.tv_nsec = -2; /* -2, common data for test, no special meaning */
ret = sem_timedwait(&sem, &ts);
ICUNIT_GOTO_EQUAL(ret, -1, ret, EXIT); /* -1, common data for test, no special meaning */
ICUNIT_GOTO_EQUAL(errno, EINVAL, errno, EXIT);
EXIT:
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_TIMEDWAIT_0300
* @tc.name sem_timedwait get semaphore, wait time abnormal
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(SemAbnormalTestSuite, testSemTimedwaitAbnormalB, Function | MediumTest | Level3)
{
int ret;
struct timespec ts = {0};
sem_t sem;
int semValue = 0;
ret = sem_init(&sem, 0, 0);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ts.tv_sec = time(NULL);
ts.tv_nsec = KERNEL_NS_PER_SECOND;
ret = sem_timedwait(&sem, &ts);
ICUNIT_GOTO_EQUAL(ret, -1, ret, EXIT); /* -1, common data for test, no special meaning */
ICUNIT_GOTO_EQUAL(errno, EINVAL, errno, EXIT);
EXIT:
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
RUN_TEST_SUITE(SemAbnormalTestSuite);
void PosixSemAbnFuncTest()
{
RUN_ONE_TESTCASE(testSemInitAbnormalSemvaluemax);
RUN_ONE_TESTCASE(testSemInitAbnormalInitTwice);
RUN_ONE_TESTCASE(testSemTimedwaitAbnormalA);
RUN_ONE_TESTCASE(testSemTimedwaitAbnormalB);
}

View File

@ -0,0 +1,356 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_ipc.h"
static int g_semTestStep = 0;
LITE_TEST_SUIT(IPC, SemApi, IpcSemApiTestSuite);
static BOOL IpcSemApiTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL IpcSemApiTestSuiteTearDown(void)
{
return TRUE;
}
LITE_TEST_CASE(IpcSemApiTestSuite, testSemInit0100, Function | MediumTest | Level2)
{
int ret;
sem_t sem;
int testValue[3] = {0, 1, 10}; /* 3, 1, 10 common data for test, no special meaning */
int index = (int)(sizeof(testValue) / sizeof(int));
for (int i = 0; i < index; i++) {
ret = sem_init((sem_t *)&sem, 0, testValue[0]);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
}
return 0;
}
LITE_TEST_CASE(IpcSemApiTestSuite, testSemPost0100, Function | MediumTest | Level2)
{
int ret;
sem_t sem;
ret = sem_init((sem_t *)&sem, 0, 0);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
LITE_TEST_CASE(IpcSemApiTestSuite, testSemWait0100, Function | MediumTest | Level2)
{
int ret;
sem_t sem;
ret = sem_init((sem_t *)&sem, 0, 3); /* 3, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_wait(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_wait(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_wait(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
void *ThreadChat(void *arg)
{
int ret;
sem_t *sem = (sem_t *)arg;
ICUNIT_ASSERT_EQUAL(g_semTestStep, 0, g_semTestStep);
g_semTestStep = 1; /* 1, common data for test, no special meaning */
ret = sem_wait(sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
g_semTestStep = 2; /* 2, common data for test, no special meaning */
return NULL;
}
LITE_TEST_CASE(IpcSemApiTestSuite, testThreadChat0100, Function | MediumTest | Level3)
{
pthread_t tid;
sem_t sem;
int ret;
struct timespec req;
g_semTestStep = 0;
ret = sem_init((sem_t *)&sem, 0, 0);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = pthread_create(&tid, NULL, ThreadChat, (void *)&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
req.tv_sec = 0;
req.tv_nsec = TEN_CONT * NANO_MS;
ret = nanosleep(&req, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(g_semTestStep, 1, g_semTestStep); /* 1, common data for test, no special meaning */
ret = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = nanosleep(&req, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(g_semTestStep, 2, g_semTestStep); /* 2, common data for test, no special meaning */
ret = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(g_semTestStep, 2, g_semTestStep); /* 2, common data for test, no special meaning */
ret = pthread_join(tid, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
void *ThreadNThreadWait1(void *arg)
{
int ret;
sem_t *sem = (sem_t *)arg;
struct timespec req;
req.tv_sec = 0;
req.tv_nsec = HUNDRED_CONT * NANO_MS;
ret = nanosleep(&req, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
g_semTestStep = 1; /* 1, common data for test, no special meaning */
ret = sem_wait(sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
g_semTestStep = 2; /* 2, common data for test, no special meaning */
return NULL;
}
void *ThreadNThreadWait2(void *arg)
{
int ret;
sem_t *sem = (sem_t *)arg;
struct timespec req;
req.tv_sec = 0;
req.tv_nsec = 300 * NANO_MS; /* 300, common data for test, no special meaning */
ret = nanosleep(&req, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
g_semTestStep = 3; /* 3, common data for test, no special meaning */
req.tv_nsec = 200 * NANO_MS; /* 200, common data for test, no special meaning */
ret = nanosleep(&req, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_wait(sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
g_semTestStep = 4; /* 4, common data for test, no special meaning */
return NULL;
}
LITE_TEST_CASE(IpcSemApiTestSuite, testThreadChat0400, Function | MediumTest | Level4)
{
pthread_t tid1;
pthread_t tid2;
sem_t sem;
int ret;
struct timespec req;
req.tv_sec = 0;
req.tv_nsec = 200 * NANO_MS; /* 200, common data for test, no special meaning */
g_semTestStep = 0;
ret = sem_init((sem_t *)&sem, 0, 0);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = pthread_create(&tid1, NULL, ThreadNThreadWait1, (void *)&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = pthread_create(&tid2, NULL, ThreadNThreadWait2, (void *)&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = nanosleep(&req, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(g_semTestStep, 1, g_semTestStep); /* 1, common data for test, no special meaning */
ret = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
req.tv_nsec = 20 * NANO_MS; /* 20, common data for test, no special meaning */
ret = nanosleep(&req, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(g_semTestStep, 2, g_semTestStep); /* 2, common data for test, no special meaning */
req.tv_nsec = 200 * NANO_MS; /* 200, common data for test, no special meaning */
ret = nanosleep(&req, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(g_semTestStep, 3, g_semTestStep); /* 3, common data for test, no special meaning */
ret = sem_post(&sem);
req.tv_nsec = 20 * NANO_MS; /* 20, common data for test, no special meaning */
ret = nanosleep(&req, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(g_semTestStep, 3, g_semTestStep); /* 3, common data for test, no special meaning */
ret = pthread_join(tid1, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = pthread_join(tid2, NULL);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(g_semTestStep, 4, g_semTestStep); /* 4, common data for test, no special meaning */
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
LITE_TEST_CASE(IpcSemApiTestSuite, testSemInitAbnormal0200, Function | MediumTest | Level3)
{
int ret;
sem_t sem;
unsigned int gtSemMax = (unsigned int)SEM_VALUE_MAX + 1; /* 1, common data for test, no special meaning */
ret = sem_init(&sem, 0, SEM_VALUE_MAX);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_init(&sem, 0, gtSemMax);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
ret = sem_init(&sem, 0, 1); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
LITE_TEST_CASE(IpcSemApiTestSuite, testSemPostAbnormal, Function | MediumTest | Level3)
{
int ret;
sem_t sem;
ret = sem_init(&sem, 0, SEM_VALUE_MAX);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
LITE_TEST_CASE(IpcSemApiTestSuite, testSemTimedWaitAbnormalA, Function | MediumTest | Level3)
{
int ret;
struct timespec ts;
sem_t sem;
ret = sem_init(&sem, 0, 0);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ts.tv_sec = 0;
ts.tv_nsec = -2; /* -2, common data for test, no special meaning */
ret = sem_timedwait(&sem, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
LITE_TEST_CASE(IpcSemApiTestSuite, testSemTimedWaitAbnormalB, Function | MediumTest | Level3)
{
int ret;
struct timespec ts;
sem_t sem;
ret = sem_init(&sem, 0, 0);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ts.tv_sec = time(NULL);
ts.tv_nsec = NANO_S;
ret = sem_timedwait(&sem, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
RUN_TEST_SUITE(IpcSemApiTestSuite);
void PosixSemFuncTest()
{
RUN_ONE_TESTCASE(testSemInit0100);
RUN_ONE_TESTCASE(testSemPost0100);
RUN_ONE_TESTCASE(testSemWait0100);
RUN_ONE_TESTCASE(testThreadChat0100);
RUN_ONE_TESTCASE(testThreadChat0400);
RUN_ONE_TESTCASE(testSemInitAbnormal0200);
RUN_ONE_TESTCASE(testSemPostAbnormal);
RUN_ONE_TESTCASE(testSemTimedWaitAbnormalA);
RUN_ONE_TESTCASE(testSemTimedWaitAbnormalB);
}

View File

@ -0,0 +1,436 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_ipc.h"
LITE_TEST_SUIT(IPC, SemApi, IpcSemApiXtsTestSuite);
static BOOL IpcSemApiXtsTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL IpcSemApiXtsTestSuiteTearDown(void)
{
return TRUE;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_INIT_0100
* @tc.name Use sem_init initialize the semaphore with 0
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcSemApiXtsTestSuite, testSemInitA, Function | MediumTest | Level2)
{
int ret;
sem_t sem;
int semValue = 0;
int testValue = 0;
ret = sem_init(&sem, 0, testValue);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, testValue, semValue);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_INIT_0110
* @tc.name Use sem_init initialize the semaphore with 1
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcSemApiXtsTestSuite, testSemInitB, Function | MediumTest | Level2)
{
int ret;
sem_t sem;
int semValue = 0;
int testValue = 1; /* 1, common data for test, no special meaning */
ret = sem_init(&sem, 0, testValue);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, testValue, semValue);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_INIT_0120
* @tc.name Use sem_init initialize the semaphore with 100
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcSemApiXtsTestSuite, testSemInitC, Function | MediumTest | Level2)
{
int ret;
sem_t sem;
int semValue = 0;
int testValue = 10; /* 10, common data for test, no special meaning */
ret = sem_init(&sem, 0, testValue);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, testValue, semValue);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_POST_0100
* @tc.name sem_post increases the semaphore count
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcSemApiXtsTestSuite, testSemPost, Function | MediumTest | Level2)
{
int ret;
sem_t sem;
int semValue = 0;
ret = sem_init(&sem, 0, 0);
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
ret = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 1, semValue); /* 1, common data for test, no special meaning */
ret = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 3, semValue); /* 3, common data for test, no special meaning */
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_WAIT_0100
* @tc.name sem_wait get semaphore
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcSemApiXtsTestSuite, testSemWait, Function | MediumTest | Level2)
{
int ret;
sem_t sem;
int semValue = 0;
ret = sem_init(&sem, 0, 3); /* 3, common data for test, no special meaning */
ICUNIT_ASSERT_NOT_EQUAL(ret, -1, ret); /* -1, common data for test, no special meaning */
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 3, semValue); /* 3, common data for test, no special meaning */
ret = sem_wait(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 2, semValue); /* 2, common data for test, no special meaning */
ret = sem_wait(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_wait(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_DESTROY_0100
* @tc.name check sem_destroy function
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcSemApiXtsTestSuite, testSemdestroy, Function | MediumTest | Level3)
{
int ret;
sem_t sem;
ret = sem_init(&sem, 0, 0);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
void *ThreadChatF01(void *arg)
{
int ret;
sem_t *sem = (sem_t*)arg;
int semValue = 0;
ret = sem_getvalue(sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
ret = sem_wait(sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return NULL;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_CHAT_0100
* @tc.name Inter-thread communication, check sem_wait function
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcSemApiXtsTestSuite, testThreadChat, Function | MediumTest | Level3)
{
pthread_t tid;
sem_t sem;
int reInt;
int semValue = 0;
reInt = sem_init(&sem, 0, 0);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
reInt = pthread_create(&tid, NULL, ThreadChatF01, (void*)&sem);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
usleep(20); /* 20, common data for test, no special meaning */
reInt = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
reInt = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
reInt = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
usleep(20); /* 20, common data for test, no special meaning */
reInt = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
ICUNIT_ASSERT_EQUAL(semValue, 1, semValue); /* 1, common data for test, no special meaning */
reInt = pthread_join(tid, NULL);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
reInt = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
return 0;
}
void *ThreadSemTimedWait(void *arg)
{
int ret;
struct timespec ts = {0};
sem_t *sem = (sem_t*)arg;
int semValue = 0;
ret = sem_getvalue(sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec = ts.tv_sec + (ts.tv_nsec + KERNEL_100MS_BY_NS) / KERNEL_NS_PER_SECOND;
ts.tv_nsec = (ts.tv_nsec + KERNEL_100MS_BY_NS) % KERNEL_NS_PER_SECOND;
usleep(50); /* 50, common data for test, no special meaning */
ret = sem_timedwait(sem, &ts);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_getvalue(sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
usleep(100); /* 100, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(semValue, 1, semValue); /* 1, common data for test, no special meaning */
return NULL;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_CHAT_0300
* @tc.name Inter-thread communication, check sem_timedwait function
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcSemApiXtsTestSuite, testThreadSemTimedWait, Function | MediumTest | Level3)
{
int ret;
pthread_t tid;
sem_t sem;
int reInt;
int semValue = 0;
reInt = sem_init(&sem, 0, 0);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
reInt = pthread_create(&tid, NULL, ThreadSemTimedWait, (void*)&sem);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
usleep(10); /* 10, common data for test, no special meaning */
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
ret = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
reInt = pthread_join(tid, NULL);
ret = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 1, semValue); /* 1, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
ret = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
void *ThreadNThreadWaitF01(void *arg)
{
int ret;
sem_t *sem = (sem_t*)arg;
int semValue = 0;
usleep(100); /* 100, common data for test, no special meaning */
ret = sem_getvalue(sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
ret = sem_wait(sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return NULL;
}
void *ThreadNThreadWaitF02(void *arg)
{
int ret;
sem_t *sem = (sem_t*)arg;
int semValue = 0;
ret = sem_getvalue(sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
usleep(300); /* 300, common data for test, no special meaning */
ret = sem_getvalue(sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
usleep(200); /* 200, common data for test, no special meaning */
ret = sem_getvalue(sem, &semValue);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(semValue, 1, semValue); /* 1, common data for test, no special meaning */
ret = sem_wait(sem);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return NULL;
}
/**
* @tc.number SUB_KERNEL_IPC_SEM_CHAT_0400
* @tc.name N threads wait, main thread post
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(IpcSemApiXtsTestSuite, testNThreadWait, Function | MediumTest | Level4)
{
pthread_t tid1;
pthread_t tid2;
sem_t sem;
int reInt;
int semValue = 0;
reInt = sem_init(&sem, 0, 0);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
reInt = pthread_create(&tid1, NULL, ThreadNThreadWaitF01, (void*)&sem);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
reInt = pthread_create(&tid2, NULL, ThreadNThreadWaitF02, (void*)&sem);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
usleep(200); /* 200, common data for test, no special meaning */
reInt = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
reInt = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
usleep(20); /* 20, common data for test, no special meaning */
reInt = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
usleep(200); /* 200, common data for test, no special meaning */
reInt = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
ICUNIT_ASSERT_EQUAL(semValue, 0, semValue);
reInt = sem_post(&sem);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
usleep(20); /* 20, common data for test, no special meaning */
reInt = sem_getvalue(&sem, &semValue);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
ICUNIT_ASSERT_EQUAL(semValue, 1, semValue); /* 1, common data for test, no special meaning */
reInt = pthread_join(tid1, NULL);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
reInt = pthread_join(tid2, NULL);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
reInt = sem_destroy(&sem);
ICUNIT_ASSERT_EQUAL(reInt, 0, reInt);
return 0;
}
RUN_TEST_SUITE(IpcSemApiXtsTestSuite);
void PosixSemXtsFuncTest()
{
RUN_ONE_TESTCASE(testSemInitA);
RUN_ONE_TESTCASE(testSemInitB);
RUN_ONE_TESTCASE(testSemInitC);
RUN_ONE_TESTCASE(testSemPost);
RUN_ONE_TESTCASE(testSemWait);
RUN_ONE_TESTCASE(testSemdestroy);
RUN_ONE_TESTCASE(testThreadChat);
}

View File

@ -0,0 +1,42 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_test.h"
void IpcSemApiTest(void)
{
PosixFutexCondTest();
PosixFutexMutexTest();
IpcMqExceptionFuncTest();
IpcMqFuncTest();
PosixSemFuncTest();
PosixSemAbnFuncTest();
PosixSemXtsFuncTest();
}

View File

@ -0,0 +1,81 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef XTS_IPC_H
#define XTS_IPC_H
#include "xts_test.h"
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <pthread.h>
#include <time.h>
#include <unistd.h>
#include <sys/time.h>
#include <securec.h>
#include <semaphore.h>
#include <sys/resource.h>
#include <errno.h>
#include <stdlib.h>
#include <mqueue.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#define NANO_S 1000000000
#define NANO_MS 1000000
#define TEN_CONT 10
#define FIFTY_CONT 50
#define HUNDRED_CONT 100
#define TEST_INTP_SIZE 10
#define TEST_SEEK_SIZE 12
#define POSIX_IPC_NO_ERROR 0
#define KERNEL_NS_PER_SECOND 1000000000
#define SEM_VALUE_MAX 0xFFFE
#define KERNEL_NS_PER_SECOND 1000000000
#define KERNEL_100MS_BY_NS 100000000
#define MQ_NAME_LEN 64
#define MQ_TX_LEN 64
#define MQ_RX_LEN 64
#define MQ_MSG_SIZE 64
#define MQ_MSG_PRIO 0
#define MQ_MAX_MSG 16
#define MQ_MAX_QN_LEN 24
#define MAX_SIGNAL_NUMBER 64
#define MAX_PIPE_BUFFER 1023
#define MAX_PIPE_NUMBER 32
#define MAX_MQ_NUMBER LOSCFG_BASE_IPC_QUEUE_LIMIT
#define MAX_MQ_NAME_LEN 2560
#define MAX_MQ_MSG_SIZE 65530
#define MQ_MSG "MessageToSend"
#define MQ_MSG_LEN sizeof(MQ_MSG)
#endif

View File

@ -0,0 +1,43 @@
# Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni")
static_library("math_test") {
sources = [
"math_api_test.c",
"math_std_api_test.c",
"xts_math.c",
]
include_dirs = [
".",
"$LITEOSTOPDIR/testsuites/include",
"$LITEOSTOPDIR/testsuites/unittest/xts",
]
}

View File

@ -0,0 +1,68 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_math.h"
LITE_TEST_SUIT(MATH, MathApi, MathApiTestSuite);
static BOOL MathApiTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL MathApiTestSuiteTearDown(void)
{
return TRUE;
}
/**
* @tc.number SUB_KERNEL_MATH_MATH_SIGNBIT_0100
* @tc.name test signbit api
* @tc.desc [C- SOFTWARE -0100]
**/
LITE_TEST_CASE(MathApiTestSuite, testsignbit, Function | MediumTest | Level1)
{
const int testCount = 3; /* 3 common data for test, no special meaning */
float testValues[] = {3.000001, -3.000001, 0.0}; /* 3.000001, -3.000001 common data for test, no special meaning */
float expected[] = {0, 1, 0}; /* 1 common data for test, no special meaning */
float ret;
for (int i = 0; i < testCount; ++i) {
ret = signbit(testValues[i]);
ICUNIT_ASSERT_EQUAL(ret, expected[i], ret);
}
return 0;
}
RUN_TEST_SUITE(MathApiTestSuite);
void MathApiTest(void)
{
RUN_ONE_TESTCASE(testsignbit);
}

View File

@ -0,0 +1,88 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_math.h"
LITE_TEST_SUIT(MATH, MathStdApi, MathStdApiTestSuite);
static BOOL MathStdApiTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL MathStdApiTestSuiteTearDown(void)
{
return TRUE;
}
/**
* @tc.number SUB_KERNEL_MATH_STD_STDLIB_0100
* @tc.name test abs api
* @tc.desc [C- SOFTWARE -0100]
*/
LITE_TEST_CASE(MathStdApiTestSuite, testAbs, Function | MediumTest | Level1)
{
const int testCount = 3; /* 3 common data for test, no special meaning */
int testValues[] = {-3, 0, 3}; /* -3, 3 common data for test, no special meaning */
int expected[] = {3, 0, 3}; /* 3 common data for test, no special meaning */
int ret;
for (int i = 0; i < testCount; ++i) {
ret = abs(testValues[i]);
ICUNIT_ASSERT_EQUAL(ret, expected[i], ret);
}
return 0;
}
/**
* @tc.number SUB_KERNEL_MATH_STD_LLABS_0100
* @tc.name test llabs api
* @tc.desc [C- SOFTWARE -0100]
**/
LITE_TEST_CASE(MathStdApiTestSuite, testllabs, Function | MediumTest | Level1)
{
const int testCount = 3; /* 3 common data for test, no special meaning */
intmax_t testValues[] = {2147483649, -2147483649, 0}; /* 2147483649, -2147483649 common data for test, no special meaning */
intmax_t expected[] = {2147483649, 2147483649, 0}; /* 2147483649, common data for test, no special meaning */
long long ret;
for (int i = 0; i < testCount; ++i) {
ret = llabs(testValues[i]);
ICUNIT_ASSERT_EQUAL(ret, expected[i], ret);
}
return 0;
}
RUN_TEST_SUITE(MathStdApiTestSuite);
void MathStdApiTest(void)
{
RUN_ONE_TESTCASE(testAbs);
RUN_ONE_TESTCASE(testllabs);
}

View File

@ -0,0 +1,37 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_test.h"
void MathFuncTest(void)
{
MathApiTest();
MathStdApiTest();
}

View File

@ -0,0 +1,42 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef XTS_MATH_H
#define XTS_MATH_H
#include "xts_test.h"
#include <float.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
#include <limits.h>
#endif

View File

@ -0,0 +1,43 @@
# Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni")
static_library("mem_test") {
sources = [
"acts_mem_api_test.c",
"mem_api_test.c",
"xts_mem.c",
]
include_dirs = [
".",
"$LITEOSTOPDIR/testsuites/include",
"$LITEOSTOPDIR/testsuites/unittest/xts",
]
}

View File

@ -0,0 +1,89 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_mem.h"
LITE_TEST_SUIT(MEM, ActsMemApi, ActsMemApiTestSuite);
static BOOL ActsMemApiTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL ActsMemApiTestSuiteTearDown(void)
{
return TRUE;
}
/**
* @tc.number SUB_KERNEL_NDKAPI_MEM_MEMCHR_0100
* @tc.name test memchr api
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(ActsMemApiTestSuite, testMemchr_0100, Function | MediumTest | Level1) {
char srcStr[] = "this is str a;";
char *pos = (char *)memchr(srcStr, 'a', 14); /* 14, common data for test, no special meaning */
ICUNIT_ASSERT_STRING_EQUAL(pos, (char *)"a;", pos);
return 0;
}
/**
* @tc.number SUB_KERNEL_NDKAPI_MEM_MEMCHR_1000
* @tc.name test memchr api para len not enough
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(ActsMemApiTestSuite, testMemchr_1000, Function | MediumTest | Level1) {
char srcStr[] = "this is str a;";
char *pos = (char *)memchr(srcStr, 'a', 4); /* 4, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(pos, 0, pos);
return 0;
}
/**
* @tc.number SUB_KERNEL_NDKAPI_MEM_MEMCHR_1100
* @tc.name test memchr api para c not found
* @tc.desc [C- SOFTWARE -0200]
*/
LITE_TEST_CASE(ActsMemApiTestSuite, testMemchr_1100, Function | MediumTest | Level1) {
char srcStr[] = "this is str a;";
char *pos = (char *)memchr(srcStr, 'b', 14); /* 14, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(pos, 0, pos);
return 0;
}
RUN_TEST_SUITE(ActsMemApiTestSuite);
void ActsMemApiTest(void)
{
RUN_ONE_TESTCASE(testMemchr_0100);
RUN_ONE_TESTCASE(testMemchr_1000);
RUN_ONE_TESTCASE(testMemchr_1100);
}

View File

@ -0,0 +1,201 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "xts_mem.h"
LITE_TEST_SUIT(MEM, MemApi, MemApiTestSuite);
static BOOL MemApiTestSuiteSetUp(void)
{
return TRUE;
}
static BOOL MemApiTestSuiteTearDown(void)
{
return TRUE;
}
/**
* @tc.number SUB_KERNEL_MEM_MEMSET_0100
* @tc.name memset function set buffer value test
* @tc.desc [C-L*-311]
*/
LITE_TEST_CASE(MemApiTestSuite, testMemset, Function | MediumTest | Level1)
{
char chr = 'A';
int i, len, failure;
len = GetRandom(1024); /* 1024, common data for test, no special meaning */
errno_t err = EOK;
char buf[1024]; /* 1024, common data for test, no special meaning */
err = memset_s(buf, sizeof(buf), chr, len);
ICUNIT_ASSERT_EQUAL(err, 0, err);
failure = 0;
for (i = 0; i < len; i++) {
if (buf[i] != chr) {
failure = 1; /* 1, common data for test, no special meaning */
break;
}
}
ICUNIT_ASSERT_EQUAL(failure, 0, failure);
return 0;
}
/**
* @tc.number SUB_KERNEL_MEM_MEMCPY_0100
* @tc.name memcpy function copy buffer test
* @tc.desc [C-L*-311]
*/
LITE_TEST_CASE(MemApiTestSuite, testMemcpy, Function | MediumTest | Level2)
{
char chr = 'A';
int i, len, failure;
char src[1024]; /* 1024, common data for test, no special meaning */
char dst[1024]; /* 1024, common data for test, no special meaning */
len = GetRandom(1024); /* 1024, common data for test, no special meaning */
for (i = 0; i < len; i++) {
src[i] = chr + i % 26; /* 26, common data for test, no special meaning */
}
errno_t err = memcpy_s(dst, sizeof(dst) / sizeof(dst[0]), src, len);
ICUNIT_ASSERT_EQUAL(err, 0, err);
failure = 0;
for (i = 0; i < len; i++) {
if (dst[i] != src[i]) {
failure = 1; /* 1, common data for test, no special meaning */
break;
}
}
ICUNIT_ASSERT_EQUAL(failure, 0, failure);
return 0;
}
/**
* @tc.number SUB_KERNEL_MEM_MEMMOVE_0100
* @tc.name memmove function move buffer test
* @tc.desc [C-L*-311]
*/
LITE_TEST_CASE(MemApiTestSuite, testMemmove, Function | MediumTest | Level2)
{
char chr = 'A';
char buf[1024]; /* 1024, common data for test, no special meaning */
int i, len, failure;
len = sizeof(buf);
for (i = 0; i < len; i++) {
buf[i] = chr + GetRandom(26); /* 26, common data for test, no special meaning */
}
errno_t err = memmove_s(&buf[0], sizeof(buf) / sizeof(buf[0]), &buf[len / 2], len / 2); /* 2, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(err, 0, err);
failure = 0;
for (i = 0; i < len / 2; i++) { /* 2, common data for test, no special meaning */
if (buf[i] != buf[len / 2 + i]) { /* 2, common data for test, no special meaning */
failure = 1; /* 1, common data for test, no special meaning */
break;
}
}
ICUNIT_ASSERT_EQUAL(failure, 0, failure);
return 0;
}
/**
* @tc.number SUB_KERNEL_MEM_MEMMOVE_0200
* @tc.name memmove function overlay move buffer test
* @tc.desc [C-L*-311]
*/
LITE_TEST_CASE(MemApiTestSuite, testMemmoveOverlay, Function | MediumTest | Level3)
{
char chr = 'A';
char buf[1024]; /* 1024, common data for test, no special meaning */
char backup[1024]; /* 1024, common data for test, no special meaning */
int i, len, failure;
len = sizeof(buf);
for (i = 0; i < len; i++) {
buf[i] = chr + GetRandom(26); /* 26, common data for test, no special meaning */
backup[i] = buf[i];
}
errno_t err = memmove_s(&buf[16], sizeof(buf) / sizeof(buf[0]) - 16, &buf[0], len / 2); /* 16, 2, common data for test, no special meaning */
ICUNIT_ASSERT_EQUAL(err, 0, err);
failure = 0;
for (i = 0; i < len / 2; i++) { /* 2, common data for test, no special meaning */
if (buf[i + 16] != backup[i]) { /* 16, common data for test, no special meaning */
failure = 1; /* 1, common data for test, no special meaning */
break;
}
}
ICUNIT_ASSERT_EQUAL(failure, 0, failure);
return 0;
}
/**
* @tc.number SUB_KERNEL_MEM_MEMCMP_0100
* @tc.name memmove function move buffer test
* @tc.desc [C-L*-311]
*/
LITE_TEST_CASE(MemApiTestSuite, testMemcmp, Function | MediumTest | Level2)
{
char orign[8] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}; /* 8, common data for test, no special meaning */
char lt[8] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x77}; /* 8, common data for test, no special meaning */
char eq[8] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}; /* 8, common data for test, no special meaning */
char gt[8] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x99}; /* 8, common data for test, no special meaning */
int ret;
int len = sizeof(orign);
ret = memcmp(lt, orign, len);
ICUNIT_ASSERT_WITHIN_EQUAL(ret, INT_MIN, 0, ret);
ret = memcmp(eq, orign, len);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ret = memcmp(gt, orign, len);
ICUNIT_ASSERT_WITHIN_EQUAL(ret, 0, INT_MAX, ret);
ret = memcmp(gt, orign, 0);
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
return 0;
}
RUN_TEST_SUITE(MemApiTestSuite);
void MemApiTest(void)
{
RUN_ONE_TESTCASE(testMemset);
RUN_ONE_TESTCASE(testMemcpy);
RUN_ONE_TESTCASE(testMemmove);
RUN_ONE_TESTCASE(testMemmoveOverlay);
RUN_ONE_TESTCASE(testMemcmp);
}

Some files were not shown because too many files have changed in this diff Show More