* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
 * Copyright (c) 2020-2021 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 _IT_PTHREAD_TEST_H  // 防止头文件被重复包含
#define _IT_PTHREAD_TEST_H

#include "osTest.h"  // 包含操作系统测试相关的头文件
#include <sys/resource.h>  // 包含资源控制相关的头文件
#include <sys/wait.h>  // 包含等待进程结束相关的头文件
#include <time.h>  // 包含时间处理的头文件

#define SLEEP_AND_YIELD(tick) usleep((tick)*10 * 1000)  // 定义宏,用于睡眠和让出CPU,tick为微秒单位

#include "sys/syscall.h"  // 包含系统调用相关的头文件

// 定义一个内联函数,用于执行系统调用
static inline int Syscall(int nbr, int parm1, int parm2, int parm3, int parm4)
{
    register int reg7 __asm__("r7") = nbr;  // 将系统调用号放入寄存器r7
    register int reg3 __asm__("r3") = parm4;  // 将第四个参数放入寄存器r3
    register int reg2 __asm__("r2") = parm3;  // 将第三个参数放入寄存器r2
    register int reg1 __asm__("r1") = parm2;  // 将第二个参数放入寄存器r1
    register int reg0 __asm__("r0") = parm1;  // 将第一个参数放入寄存器r0

    // 使用svc指令触发系统调用,将结果存回reg0
    __asm__ __volatile__("svc 0" : "=r"(reg0) : "r"(reg7), "r"(reg0), "r"(reg1), "r"(reg2), "r"(reg3) : "memory");

    return reg0;  // 返回系统调用的结果
}

// 声明全局变量,用于存储单元测试的错误码和错误行号
extern INT32 g_iCunitErrCode;
extern INT32 g_iCunitErrLineNo;

// 声明一系列pthread相关的测试函数
extern void ItTestPthread001(void);  // pthread测试函数1
extern void ItTestPthread002(void);  // pthread测试函数2
extern void ItTestPthread003(void);  // pthread测试函数3
extern void ItTestPthread004(void);  // pthread测试函数4
extern void ItTestPthread005(void);  // pthread测试函数5
extern void ItTestPthread006(void);  // pthread测试函数6
extern void ItTestPthread007(void);  // pthread测试函数7
extern void ItTestPthread008(void);  // pthread测试函数8
extern void ItTestPthread009(void);  // pthread测试函数9
extern void ItTestPthread010(void);  // pthread测试函数10
extern void ItTestPthread012(void);  // 省略了11,可能是个错误或者遗漏
extern void ItTestPthread011(void);  // pthread测试函数11
extern void ItTestPthread013(void);  // pthread测试函数13
extern void ItTestPthread014(void);  // pthread测试函数14
extern void ItTestPthread015(void);  // pthread测试函数15
extern void ItTestPthread016(void);  // pthread测试函数16
extern void ItTestPthread017(void);  // pthread测试函数17
extern void ItTestPthread018(void);  // pthread测试函数18
extern void ItTestPthread019(void);  // pthread测试函数19
extern void ItTestPthread020(void);  // pthread测试函数20
extern void ItTestPthread021(void);  // pthread测试函数21
extern void ItTestPthread022(void);  // pthread测试函数22
extern void ItTestPthread023(void);  // pthread测试函数23
extern void ItTestPthread024(void);  // pthread测试函数24
extern void ItTestPthread025(void);  // pthread测试函数25
extern void ItTestPthread026(void);  // pthread测试函数26
extern void ItTestPthread027(void);  // pthread测试函数27
extern void ItTestPthreadAtfork001(void);  // pthread atfork测试函数1
extern void ItTestPthreadAtfork002(void);  // pthread atfork测试函数2
extern void ItTestPthreadOnce001(void);  // pthread once测试函数1
extern void ItTestPthreadCond001(void);  // pthread 条件变量测试函数1
extern void ItTestPthreadCond002(void);  // pthread 条件变量测试函数2
extern void ItTestPthreadCond003(void);  // pthread 条件变量测试函数3
extern void ItTestPthreadCond004(void);  // pthread 条件变量测试函数4
#endif  // 结束头文件保护
pull/2/head
Lvwenxuan 7 months ago
parent 7a03be035e
commit 1e2e1722f8

@ -28,65 +28,70 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _IT_PTHREAD_TEST_H
#ifndef _IT_PTHREAD_TEST_H // 防止头文件被重复包含
#define _IT_PTHREAD_TEST_H
#include "osTest.h"
#include <sys/resource.h>
#include <sys/wait.h>
#include <time.h>
#define SLEEP_AND_YIELD(tick) usleep((tick)*10 * 1000)
#include "sys/syscall.h"
#include "osTest.h" // 包含操作系统测试相关的头文件
#include <sys/resource.h> // 包含资源控制相关的头文件
#include <sys/wait.h> // 包含等待进程结束相关的头文件
#include <time.h> // 包含时间处理的头文件
#define SLEEP_AND_YIELD(tick) usleep((tick)*10 * 1000) // 定义宏用于睡眠和让出CPUtick为微秒单位
#include "sys/syscall.h" // 包含系统调用相关的头文件
// 定义一个内联函数,用于执行系统调用
static inline int Syscall(int nbr, int parm1, int parm2, int parm3, int parm4)
{
register int reg7 __asm__("r7") = nbr;
register int reg3 __asm__("r3") = parm4;
register int reg2 __asm__("r2") = parm3;
register int reg1 __asm__("r1") = parm2;
register int reg0 __asm__("r0") = parm1;
register int reg7 __asm__("r7") = nbr; // 将系统调用号放入寄存器r7
register int reg3 __asm__("r3") = parm4; // 将第四个参数放入寄存器r3
register int reg2 __asm__("r2") = parm3; // 将第三个参数放入寄存器r2
register int reg1 __asm__("r1") = parm2; // 将第二个参数放入寄存器r1
register int reg0 __asm__("r0") = parm1; // 将第一个参数放入寄存器r0
// 使用svc指令触发系统调用将结果存回reg0
__asm__ __volatile__("svc 0" : "=r"(reg0) : "r"(reg7), "r"(reg0), "r"(reg1), "r"(reg2), "r"(reg3) : "memory");
return reg0;
return reg0; // 返回系统调用的结果
}
// 声明全局变量,用于存储单元测试的错误码和错误行号
extern INT32 g_iCunitErrCode;
extern INT32 g_iCunitErrLineNo;
extern void ItTestPthread001(void);
extern void ItTestPthread002(void);
extern void ItTestPthread003(void);
extern void ItTestPthread004(void);
extern void ItTestPthread005(void);
extern void ItTestPthread006(void);
extern void ItTestPthread007(void);
extern void ItTestPthread008(void);
extern void ItTestPthread009(void);
extern void ItTestPthread010(void);
extern void ItTestPthread012(void);
extern void ItTestPthread011(void);
extern void ItTestPthread013(void);
extern void ItTestPthread014(void);
extern void ItTestPthread015(void);
extern void ItTestPthread016(void);
extern void ItTestPthread017(void);
extern void ItTestPthread018(void);
extern void ItTestPthread019(void);
extern void ItTestPthread020(void);
extern void ItTestPthread021(void);
extern void ItTestPthread022(void);
extern void ItTestPthread023(void);
extern void ItTestPthread024(void);
extern void ItTestPthread025(void);
extern void ItTestPthread026(void);
extern void ItTestPthread027(void);
extern void ItTestPthreadAtfork001(void);
extern void ItTestPthreadAtfork002(void);
extern void ItTestPthreadOnce001(void);
extern void ItTestPthreadCond001(void);
extern void ItTestPthreadCond002(void);
extern void ItTestPthreadCond003(void);
extern void ItTestPthreadCond004(void);
#endif
// 声明一系列pthread相关的测试函数
extern void ItTestPthread001(void); // pthread测试函数1
extern void ItTestPthread002(void); // pthread测试函数2
extern void ItTestPthread003(void); // pthread测试函数3
extern void ItTestPthread004(void); // pthread测试函数4
extern void ItTestPthread005(void); // pthread测试函数5
extern void ItTestPthread006(void); // pthread测试函数6
extern void ItTestPthread007(void); // pthread测试函数7
extern void ItTestPthread008(void); // pthread测试函数8
extern void ItTestPthread009(void); // pthread测试函数9
extern void ItTestPthread010(void); // pthread测试函数10
extern void ItTestPthread012(void); // 省略了11可能是个错误或者遗漏
extern void ItTestPthread011(void); // pthread测试函数11
extern void ItTestPthread013(void); // pthread测试函数13
extern void ItTestPthread014(void); // pthread测试函数14
extern void ItTestPthread015(void); // pthread测试函数15
extern void ItTestPthread016(void); // pthread测试函数16
extern void ItTestPthread017(void); // pthread测试函数17
extern void ItTestPthread018(void); // pthread测试函数18
extern void ItTestPthread019(void); // pthread测试函数19
extern void ItTestPthread020(void); // pthread测试函数20
extern void ItTestPthread021(void); // pthread测试函数21
extern void ItTestPthread022(void); // pthread测试函数22
extern void ItTestPthread023(void); // pthread测试函数23
extern void ItTestPthread024(void); // pthread测试函数24
extern void ItTestPthread025(void); // pthread测试函数25
extern void ItTestPthread026(void); // pthread测试函数26
extern void ItTestPthread027(void); // pthread测试函数27
extern void ItTestPthreadAtfork001(void); // pthread atfork测试函数1
extern void ItTestPthreadAtfork002(void); // pthread atfork测试函数2
extern void ItTestPthreadOnce001(void); // pthread once测试函数1
extern void ItTestPthreadCond001(void); // pthread 条件变量测试函数1
extern void ItTestPthreadCond002(void); // pthread 条件变量测试函数2
extern void ItTestPthreadCond003(void); // pthread 条件变量测试函数3
extern void ItTestPthreadCond004(void); // pthread 条件变量测试函数4
#endif // 结束头文件保护

@ -28,164 +28,165 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "stdio.h"
#include <climits>
#include <gtest/gtest.h>
#include "it_pthread_test.h"
#include <sys/resource.h>
using namespace testing::ext;
namespace OHOS {
class ProcessPthreadTest : public testing::Test {
#include "stdio.h" // 引入标准输入输出头文件
#include <climits> // 引入字符类型限制头文件
#include <gtest/gtest.h> // 引入google测试框架头文件
#include "it_pthread_test.h" // 引入自定义的pthread测试头文件
#include <sys/resource.h> // 引入系统资源头文件
using namespace testing::ext; // 使用google测试框架的扩展命名空间
namespace OHOS { // 定义OHOS命名空间
class ProcessPthreadTest : public testing::Test { // 定义一个继承自testing::Test的测试类
public:
static void SetUpTestCase(void)
static void SetUpTestCase(void) // 静态成员函数,用于在所有测试开始前执行
{
struct sched_param param = { 0 };
int currThreadPolicy, ret;
ret = pthread_getschedparam(pthread_self(), &currThreadPolicy, &param);
ICUNIT_ASSERT_EQUAL_VOID(ret, 0, -ret);
param.sched_priority = TASK_PRIO_TEST;
ret = pthread_setschedparam(pthread_self(), SCHED_RR, &param);
ICUNIT_ASSERT_EQUAL_VOID(ret, 0, -ret);
struct sched_param param = { 0 }; // 定义一个sched_param结构体并初始化为0
int currThreadPolicy, ret; // 定义当前线程策略和返回值变量
ret = pthread_getschedparam(pthread_self(), &currThreadPolicy, &param); // 获取当前线程的调度参数
ICUNIT_ASSERT_EQUAL_VOID(ret, 0, -ret); // 使用自定义宏断言返回值是否为0
param.sched_priority = TASK_PRIO_TEST; // 设置调度优先级为TASK_PRIO_TEST未在代码中定义
ret = pthread_setschedparam(pthread_self(), SCHED_RR, &param); // 设置当前线程的调度策略和参数
ICUNIT_ASSERT_EQUAL_VOID(ret, 0, -ret); // 使用自定义宏断言返回值是否为0
}
static void TearDownTestCase(void) {}
static void TearDownTestCase(void) {} // 静态成员函数,用于在所有测试结束后执行,此处为空实现
};
#if defined(LOSCFG_USER_TEST_SMOKE)
#if defined(LOSCFG_USER_TEST_SMOKE) // 如果定义了LOSCFG_USER_TEST_SMOKE宏
/* *
* @tc.name: it_test_pthread_003
* @tc.desc: function for ProcessPthreadTest
* @tc.type: FUNC
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread003, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread003, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread003();
ItTestPthread003(); // 调用ItTestPthread003函数未在代码中定义
}
#ifndef LOSCFG_USER_TEST_SMP
#ifndef LOSCFG_USER_TEST_SMP // 如果没有定义LOSCFG_USER_TEST_SMP宏
/* *
* @tc.name: it_test_pthread_006
* @tc.desc: function for ProcessPthreadTest
* @tc.type: FUNC
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread006, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread006, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread006();
ItTestPthread006(); // 调用ItTestPthread006函数未在代码中定义
}
#endif
/* *
* @tc.name: it_test_pthread_007
* @tc.desc: function for ProcessPthreadTest
* @tc.type: FUNC
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread007, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread007, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread007();
ItTestPthread007(); // 调用ItTestPthread007函数未在代码中定义
}
/* *
* @tc.name: it_test_pthread_008
* @tc.desc: function for ProcessPthreadTest
* @tc.type: FUNC
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread008, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread008, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread008();
ItTestPthread008(); // 调用ItTestPthread008函数未在代码中定义
}
/* *
* @tc.name: it_test_pthread_009
* @tc.desc: function for ProcessPthreadTest
* @tc.type: FUNC
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread009, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread009, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread009();
ItTestPthread009(); // 调用ItTestPthread009函数未在代码中定义
}
#ifndef LOSCFG_USER_TEST_SMP
#ifndef LOSCFG_USER_TEST_SMP // 如果没有定义LOSCFG_USER_TEST_SMP宏
/* *
* @tc.name: it_test_pthread_010
* @tc.desc: function for ProcessPthreadTest
* @tc.type: FUNC
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread010, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread010, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread010();
ItTestPthread010(); // 调用ItTestPthread010函数未在代码中定义
}
#endif
/* *
* @tc.name: it_test_pthread_011
* @tc.desc: function for ProcessPthreadTest
* @tc.type: FUNC
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread011, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread011, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread011();
ItTestPthread011(); // 调用ItTestPthread011函数未在代码中定义
}
/* *
* @tc.name: it_test_pthread_012
* @tc.desc: function for ProcessPthreadTest
* @tc.type: FUNC
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread012, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread012, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread012();
ItTestPthread012(); // 调用ItTestPthread012函数未在代码中定义
}
/* *
* @tc.name: it_test_pthread_013
* @tc.desc: function for ProcessPthreadTest
* @tc.type: FUNC
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread013, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread013, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread013();
ItTestPthread013(); // 调用ItTestPthread013函数未在代码中定义
}
/* *
* @tc.name: it_test_pthread_015
* @tc.desc: function for ProcessPthreadTest
* @tc.type: FUNC
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread015, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread015, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread015();
ItTestPthread015(); // 调用ItTestPthread015函数未在代码中定义
}
/* *
* @tc.name: it_test_pthread_016
* @tc.desc: function for ProcessPthreadTest
* @tc.type: FUNC
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread016, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread016, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread016();
ItTestPthread016(); // 调用ItTestPthread016函数未在代码中定义
}
/* *
* @tc.name: it_test_pthread_018
* @tc.desc: function for ProcessPthreadTest
* @tc.type: FUNC
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread018, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread018, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread018();
ItTestPthread018(); // 调用ItTestPthread018函数未在代码中定义
}
/* *
* @tc.name: it_test_pthread_019
* @tc.desc: function for ProcessPthreadTest
* @tc.type: FUNC
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread019, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread019, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread019();
ItTestPthread019(); // 调用ItTestPthread019函数未在代码中定义
}
/* *
* @tc.name: it_test_pthread_020
* @tc.desc: function for ProcessPthreadTest
@ -193,9 +194,9 @@ HWTEST_F(ProcessPthreadTest, ItTestPthread019, TestSize.Level0)
* @tc.require: issueI6T3P3
* @tc.author:
*/
HWTEST_F(ProcessPthreadTest, ItTestPthread020, TestSize.Level0)
HWTEST_F(ProcessPthreadTest, ItTestPthread020, TestSize.Level0) // 定义一个测试用例
{
ItTestPthread020();
ItTestPthread020(); // 调用ItTestPthread020函数未在代码中定义
}
/* *

@ -28,7 +28,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "it_pthread_test.h"
#include "it_pthread_test.h"
static volatile int g_count = 0;
static pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER;

Loading…
Cancel
Save