提交 7240fe3b 编写于 作者: O openharmony_ci 提交者: Gitee

!405 修复mqueue_unittest用例存在偶尔无法通过的问题

Merge pull request !405 from phchang/fix_mq
...@@ -132,6 +132,7 @@ extern void TestBusyTaskDelay(UINT32 tick); ...@@ -132,6 +132,7 @@ extern void TestBusyTaskDelay(UINT32 tick);
extern void *malloc(size_t size); extern void *malloc(size_t size);
extern void TEST_DumpCpuid(void); extern void TEST_DumpCpuid(void);
extern u_long T_random(void); extern u_long T_random(void);
extern VOID TestAssertWaitDelay(UINT32 *testCount, UINT32 flag);
UINT32 LosTaskDelay(UINT32 tick); UINT32 LosTaskDelay(UINT32 tick);
#define TEST_HwiDelete(ID) TEST_TEST_HwiDelete(ID, NULL) #define TEST_HwiDelete(ID) TEST_TEST_HwiDelete(ID, NULL)
......
...@@ -215,6 +215,13 @@ VOID TestAssertBusyTaskDelay(UINT32 timeout, UINT32 flag) ...@@ -215,6 +215,13 @@ VOID TestAssertBusyTaskDelay(UINT32 timeout, UINT32 flag)
} }
} }
VOID TestAssertWaitDelay(UINT32 *testCount, UINT32 flag)
{
while (*testCount != flag) {
usleep(1);
}
}
UINT32 PosixPthreadInit(pthread_attr_t *attr, int pri) UINT32 PosixPthreadInit(pthread_attr_t *attr, int pri)
{ {
UINT32 uwRet = 0; UINT32 uwRet = 0;
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "It_posix_queue.h" #include "It_posix_queue.h"
static int g_testFlag = 0;
static VOID *PthreadF01(VOID *arg) static VOID *PthreadF01(VOID *arg)
{ {
...@@ -37,12 +38,12 @@ static VOID *PthreadF01(VOID *arg) ...@@ -37,12 +38,12 @@ static VOID *PthreadF01(VOID *arg)
CHAR msgrcd[MQUEUE_STANDARD_NAME_LENGTH] = {0}; CHAR msgrcd[MQUEUE_STANDARD_NAME_LENGTH] = {0};
struct timespec ts = { 0 }; struct timespec ts = { 0 };
ts.tv_sec = 0xffff; ts.tv_sec = 0xffff;
for (i = 0; i < MQUEUE_STANDARD_NAME_LENGTH * 2; i++) { // 2, The loop frequency name length. for (i = 0; i < MQUEUE_STANDARD_NAME_LENGTH * 2; i++) { // 2, The loop frequency name length.
ret = mq_timedreceive(g_gqueue, msgrcd, MQUEUE_STANDARD_NAME_LENGTH, NULL, &ts); ret = mq_timedreceive(g_gqueue, msgrcd, MQUEUE_STANDARD_NAME_LENGTH, NULL, &ts);
ICUNIT_GOTO_EQUAL(ret, MQUEUE_SHORT_ARRAY_LENGTH, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, MQUEUE_SHORT_ARRAY_LENGTH, ret, EXIT);
ICUNIT_GOTO_STRING_EQUAL(msgrcd, MQUEUE_SEND_STRING_TEST, msgrcd, EXIT); ICUNIT_GOTO_STRING_EQUAL(msgrcd, MQUEUE_SEND_STRING_TEST, msgrcd, EXIT);
} }
g_testFlag = 0; // 0 means the sub thread has executed
return NULL; return NULL;
EXIT: EXIT:
return NULL; return NULL;
...@@ -62,6 +63,7 @@ static UINT32 Testcase(VOID) ...@@ -62,6 +63,7 @@ static UINT32 Testcase(VOID)
attr.mq_msgsize = MQUEUE_STANDARD_NAME_LENGTH; attr.mq_msgsize = MQUEUE_STANDARD_NAME_LENGTH;
attr.mq_maxmsg = MQUEUE_STANDARD_NAME_LENGTH; attr.mq_maxmsg = MQUEUE_STANDARD_NAME_LENGTH;
g_testFlag = 1; // 1 initialize the flag
LOS_TaskLock(); LOS_TaskLock();
snprintf(mqname, MQUEUE_STANDARD_NAME_LENGTH, "/mq075_%d", LosCurTaskIDGet()); snprintf(mqname, MQUEUE_STANDARD_NAME_LENGTH, "/mq075_%d", LosCurTaskIDGet());
...@@ -85,7 +87,10 @@ static UINT32 Testcase(VOID) ...@@ -85,7 +87,10 @@ static UINT32 Testcase(VOID)
ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT1); ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT1);
} }
TestExtraTaskDelay(10); // 10, Set delay time. // waitting for the flag is 0, means the sub thread has executed
while (g_testFlag) {
usleep(1);
}
ret = mq_close(g_gqueue); ret = mq_close(g_gqueue);
ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT1); ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT1);
......
...@@ -107,9 +107,6 @@ static UINT32 Testcase(VOID) ...@@ -107,9 +107,6 @@ static UINT32 Testcase(VOID)
ret = pthread_create(&newTh, &attr1, PthreadF01, NULL); ret = pthread_create(&newTh, &attr1, PthreadF01, NULL);
ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT1); ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT1);
LosTaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT1);
ret = PosixPthreadInit(&attr1, MQUEUE_PTHREAD_PRIORITY_TEST2); ret = PosixPthreadInit(&attr1, MQUEUE_PTHREAD_PRIORITY_TEST2);
ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT2); ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT2);
...@@ -119,7 +116,7 @@ static UINT32 Testcase(VOID) ...@@ -119,7 +116,7 @@ static UINT32 Testcase(VOID)
ret = LosTaskDelay(10); // 10, Set delay time. ret = LosTaskDelay(10); // 10, Set delay time.
ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT2); ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT2);
ICUNIT_GOTO_EQUAL(g_testCount, 4, g_testCount, EXIT2); // 4, Here, assert the g_testCount. TestAssertWaitDelay(&g_testCount, 4); // 4, Here, assert the g_testCount.
ret = PosixPthreadDestroy(&attr1, newTh2); ret = PosixPthreadDestroy(&attr1, newTh2);
ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT2); ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT2);
......
...@@ -37,10 +37,7 @@ static VOID *PthreadF01(VOID *argument) ...@@ -37,10 +37,7 @@ static VOID *PthreadF01(VOID *argument)
g_testCount = 1; g_testCount = 1;
ret = LosTaskDelay(5); // 5, Set the timeout of task delay; TestAssertWaitDelay(&g_testCount, 3); // 3, Here, assert the g_testCount.
ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT);
ICUNIT_GOTO_EQUAL(g_testCount, 3, g_testCount, EXIT); // 3, Here, assert the g_testCount.
ret = mq_send(g_gqueue, msgptr, strlen(msgptr), 0); ret = mq_send(g_gqueue, msgptr, strlen(msgptr), 0);
ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT);
...@@ -105,8 +102,7 @@ static UINT32 Testcase(VOID) ...@@ -105,8 +102,7 @@ static UINT32 Testcase(VOID)
ret = pthread_create(&newTh1, &attr1, PthreadF01, NULL); ret = pthread_create(&newTh1, &attr1, PthreadF01, NULL);
ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT1); ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT1);
LosTaskDelay(1); TestAssertWaitDelay(&g_testCount, 1);
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT1);
ret = PosixPthreadInit(&attr1, MQUEUE_PTHREAD_PRIORITY_TEST2); ret = PosixPthreadInit(&attr1, MQUEUE_PTHREAD_PRIORITY_TEST2);
ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT2); ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT2);
...@@ -121,7 +117,7 @@ static UINT32 Testcase(VOID) ...@@ -121,7 +117,7 @@ static UINT32 Testcase(VOID)
#endif #endif
ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT2); ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT2);
ICUNIT_GOTO_EQUAL(g_testCount, 4, g_testCount, EXIT2); // 4, Here, assert the g_testCount. TestAssertWaitDelay(&g_testCount, 4); // 4, Here, assert the g_testCount.
ret = PosixPthreadDestroy(&attr1, newTh2); ret = PosixPthreadDestroy(&attr1, newTh2);
ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT2); ICUNIT_GOTO_EQUAL(ret, MQUEUE_NO_ERROR, ret, EXIT2);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册