diff --git a/testsuites/unittest/signal/full/It_ipc_fdclr_001.cpp b/testsuites/unittest/signal/full/It_ipc_fdclr_001.cpp index 0a1f189719a2efcdd5dbda16a0aaad96e7da5486..13fd61a427816f713b4488deb0d1ff5d3507903a 100644 --- a/testsuites/unittest/signal/full/It_ipc_fdclr_001.cpp +++ b/testsuites/unittest/signal/full/It_ipc_fdclr_001.cpp @@ -46,7 +46,7 @@ static UINT32 Testcase(VOID) ret = pipe(pipeFd[i]); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); fdmax = pipeFd[i][1] > fdmax ? pipeFd[i][1] : fdmax; - ret = write(pipeFd[i][1], "hello world", TAR_STR_LEN); + ret = write(pipeFd[i][1], "aloha world", TAR_STR_LEN); printf("write first status: %d\n", ret); ICUNIT_GOTO_EQUAL(ret, TAR_STR_LEN, ret, EXIT); } diff --git a/testsuites/unittest/signal/full/It_ipc_fdset_001.cpp b/testsuites/unittest/signal/full/It_ipc_fdset_001.cpp index f244971bf29f1a3a44149054d2dde790e37993fc..dda0395b0a87abdaf7dd1c97016f77d6b0a3bb0c 100644 --- a/testsuites/unittest/signal/full/It_ipc_fdset_001.cpp +++ b/testsuites/unittest/signal/full/It_ipc_fdset_001.cpp @@ -49,7 +49,7 @@ static UINT32 Testcase(VOID) ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); fdmax = pipeFd[i][1] > fdmax ? pipeFd[i][1] : fdmax; fdmax = pipeFd[i][0] > fdmax ? pipeFd[i][0] : fdmax; - ret = write(pipeFd[i][1], "hello world", TAR_STR_LEN); + ret = write(pipeFd[i][1], "Aloha World", TAR_STR_LEN); printf("write first status: %d\n", ret); ICUNIT_GOTO_EQUAL(ret, TAR_STR_LEN, ret, EXIT); } diff --git a/testsuites/unittest/signal/full/It_ipc_fdzero_001.cpp b/testsuites/unittest/signal/full/It_ipc_fdzero_001.cpp index 34d14f83b0c6592d30037eb0d5400da3ebbdcb30..33a45823ba35c0af53d4f3b148ba7fd09a6af380 100644 --- a/testsuites/unittest/signal/full/It_ipc_fdzero_001.cpp +++ b/testsuites/unittest/signal/full/It_ipc_fdzero_001.cpp @@ -48,7 +48,7 @@ static UINT32 Testcase(VOID) ret = pipe(pipeFd[i]); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); fdmax = pipeFd[i][1] > fdmax ? pipeFd[i][1] : fdmax; - ret = write(pipeFd[i][1], "hello world", TAR_STR_LEN); + ret = write(pipeFd[i][1], "Aloha world", TAR_STR_LEN); printf("write first status: %d\n", ret); ICUNIT_GOTO_EQUAL(ret, TAR_STR_LEN, ret, EXIT); } diff --git a/testsuites/unittest/signal/full/It_ipc_pipe_002.cpp b/testsuites/unittest/signal/full/It_ipc_pipe_002.cpp index f5dfbc214e00a46667fbd3c6f1b238c7f732cb28..be0e257895ce91b939ef5a3fd5567b7d4a7a12b9 100644 --- a/testsuites/unittest/signal/full/It_ipc_pipe_002.cpp +++ b/testsuites/unittest/signal/full/It_ipc_pipe_002.cpp @@ -29,28 +29,41 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "it_test_signal.h" - +#include "sys/shm.h" static UINT32 Testcase(VOID) { int pipeFd[2], ret, spid; // 2, pipe return 2 file descripter char buffer[20]; // 20, target buffer size + int *sharedflag = NULL; + int shmid; + ret = pipe(pipeFd); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1); + shmid = shmget((key_t)IPC_PRIVATE, sizeof(int), 0666 | IPC_CREAT); // 0666 the authority of the shm + ICUNIT_ASSERT_NOT_EQUAL(shmid, -1, shmid); + sharedflag = (int *)shmat(shmid, NULL, 0); + *sharedflag = 0; + spid = fork(); ICUNIT_GOTO_NOT_EQUAL(spid, -1, spid, EXIT1); if (spid == 0) { + sharedflag = (int *)shmat(shmid, NULL, 0); close(pipeFd[0]); - sleep(10); // 10, sleep 10 second. ret = write(pipeFd[1], "hello world", 12); // 12, "hello world" length and '\0' printf("write first status: %d\n", ret); if (ret != 12) { // 12, "hello world" length and '\0' exit(11); // 11, the value of son process unexpect exit, convenient to debug } + *sharedflag = 1; close(pipeFd[1]); exit(RED_FLAG); } close(pipeFd[1]); + // waitting for the sub process has written the sentence + while (*sharedflag != 1) { + usleep(1); + } ret = read(pipeFd[0], buffer, 12); // 12, "hello world" length and '\0' ICUNIT_GOTO_EQUAL(ret, 12, ret, EXIT); // 12, "hello world" length and '\0' ret = strcmp(buffer, "hello world"); diff --git a/testsuites/unittest/signal/full/It_ipc_pipe_003.cpp b/testsuites/unittest/signal/full/It_ipc_pipe_003.cpp index d4e697a1fa1a6d2bfebacaad88153ac53d06ae94..e19417f8e564e212c6103d50694d7c1eed1493a7 100644 --- a/testsuites/unittest/signal/full/It_ipc_pipe_003.cpp +++ b/testsuites/unittest/signal/full/It_ipc_pipe_003.cpp @@ -29,7 +29,7 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "it_test_signal.h" - +#include "sys/shm.h" static const int TAR_STR_LEN = 12; @@ -37,25 +37,38 @@ static UINT32 Testcase(VOID) { int pipeFd[2], ret, spid; // 2, pipe return 2 file descripter char buffer[20]; // 20, target buffer size + int *sharedflag = NULL; + int shmid; + ret = pipe(pipeFd); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1); + shmid = shmget((key_t)IPC_PRIVATE, sizeof(int), 0666 | IPC_CREAT); // 0666 the authority of the shm + ICUNIT_ASSERT_NOT_EQUAL(shmid, -1, shmid); + sharedflag = (int *)shmat(shmid, NULL, 0); + *sharedflag = 0; + spid = fork(); ICUNIT_GOTO_NOT_EQUAL(spid, -1, spid, EXIT1); if (spid == 0) { + sharedflag = (int *)shmat(shmid, NULL, 0); close(pipeFd[0]); - ret = write(pipeFd[1], "hello world", TAR_STR_LEN); + ret = write(pipeFd[1], "Hello world", TAR_STR_LEN); printf("write first status: %d\n", ret); if (ret != TAR_STR_LEN) { exit(11); // 11, the value of son process unexpect exit, convenient to debug } + *sharedflag = 1; close(pipeFd[1]); exit(RED_FLAG); } close(pipeFd[1]); - sleep(2); // 2, sleep 2 second + // waitting for the sub process has written the sentence + while (*sharedflag != 1) { + usleep(1); + } ret = read(pipeFd[0], buffer, TAR_STR_LEN); ICUNIT_GOTO_EQUAL(ret, TAR_STR_LEN, ret, EXIT); - ret = strcmp(buffer, "hello world"); + ret = strcmp(buffer, "Hello world"); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); printf("read pipe success: %s\n", buffer); wait(&ret); diff --git a/testsuites/unittest/signal/full/pipe_test_005.cpp b/testsuites/unittest/signal/full/pipe_test_005.cpp index f17964ef00bdeb7227f0494131b25cce10d712c7..9b490529dad9dbf7da2dd0c3e700ceb162ed23b5 100644 --- a/testsuites/unittest/signal/full/pipe_test_005.cpp +++ b/testsuites/unittest/signal/full/pipe_test_005.cpp @@ -28,6 +28,7 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "sys/shm.h" #include "it_test_signal.h" #include "signal.h" @@ -41,58 +42,59 @@ static int PipecommonWrite() int pipefd[2]; // 2, array subscript pid_t pid; int retValue = -1; - retValue = pipe(pipefd); - ICUNIT_ASSERT_EQUAL(retValue, 0, retValue); - - signal(SIGPIPE, SigPrint); - + int *sharedflag = NULL; + int shmid; int *readFd = &pipefd[0]; int *writeFd = &pipefd[1]; - char sentence[] = "Hello World"; char readbuffer[100]; int status, ret; + retValue = pipe(pipefd); + ICUNIT_ASSERT_EQUAL(retValue, 0, retValue); + if (signal(SIGPIPE, SigPrint) == SIG_ERR) { + printf("signal error\n"); + } + + shmid = shmget((key_t)IPC_PRIVATE, sizeof(int), 0666 | IPC_CREAT); // 0666 the authority of the shm + ICUNIT_ASSERT_NOT_EQUAL(shmid, -1, shmid); + sharedflag = (int *)shmat(shmid, NULL, 0); + *sharedflag = 0; + pid = fork(); if (pid == -1) { printf("Fork Error!\n"); return -1; } else if (pid == 0) { - for (int i = 0; i < 3; i++) { // 3, Number of cycles - close(*readFd); - retValue = write(*writeFd, sentence, strlen(sentence) + 1); - - if (i == 0) { - if (retValue != strlen(sentence) + 1) { - exit(retValue); - } - } else { - if (retValue != -1) { - exit(retValue); - } - if (errno != EPIPE) { - exit(errno); - } - } - usleep(150000); // 150000, Used to calculate the delay time. + sharedflag = (int *)shmat(shmid, NULL, 0); + close(*readFd); + retValue = write(*writeFd, sentence, strlen(sentence) + 1); + ICUNIT_ASSERT_EQUAL(retValue, strlen(sentence) + 1, retValue); + *sharedflag = 1; + // 2 waitting for the father process close the pipe's read port + while (*sharedflag != 2) { + usleep(1); } + retValue = write(*writeFd, sentence, strlen(sentence) + 1); + ICUNIT_ASSERT_EQUAL(retValue, -1, retValue); + ICUNIT_ASSERT_EQUAL(errno, EPIPE, errno); exit(0); } else { - usleep(10000); // 10000, Used to calculate the delay time. - for (int i = 0; i < 3; i++) { // 3, Number of cycles - close(*readFd); + close(*writeFd); + // 1 waitting for the sub process has written the sentence first + while (*sharedflag != 1) { + usleep(1); } + close(*readFd); + // 2 father process close the pipe's read port + *sharedflag = 2; ret = waitpid(pid, &status, 0); ICUNIT_ASSERT_EQUAL(ret, pid, ret); ICUNIT_ASSERT_EQUAL(WEXITSTATUS(status), 0, WEXITSTATUS(status)); } - - close(*readFd); - close(*writeFd); return 0; } - void ItPosixPipe005(void) { TEST_ADD_CASE(__FUNCTION__, PipecommonWrite, TEST_POSIX, TEST_MEM, TEST_LEVEL0, TEST_FUNCTION); diff --git a/testsuites/unittest/signal/signal_test.cpp b/testsuites/unittest/signal/signal_test.cpp index 959457a5509647622bd4cdc68dc46e2bbae884db..7ddd1a970356d15b0349c54dfbb8e738d7f23bc6 100644 --- a/testsuites/unittest/signal/signal_test.cpp +++ b/testsuites/unittest/signal/signal_test.cpp @@ -627,6 +627,17 @@ HWTEST_F(SignalTest, ItPosixPipe003, TestSize.Level0) ItPosixPipe003(); } +/* * + * @tc.name: ItPosixPipe004 + * @tc.desc: function for SignalTest + * @tc.type: FUNC + * @tc.require: AR000EEMQ9 + */ +HWTEST_F(SignalTest, ItPosixPipe004, TestSize.Level0) +{ + ItPosixPipe004(); +} + /* * * @tc.name: ItPosixPipe005 * @tc.desc: function for SignalTest diff --git a/testsuites/unittest/signal/smoke/It_ipc_fdisset_001.cpp b/testsuites/unittest/signal/smoke/It_ipc_fdisset_001.cpp index 212053909b8100ae471254e2522d2df1e9018a62..806f38d024ac1e488a4b2cfbc0a1832b3ee8cd1e 100644 --- a/testsuites/unittest/signal/smoke/It_ipc_fdisset_001.cpp +++ b/testsuites/unittest/signal/smoke/It_ipc_fdisset_001.cpp @@ -39,7 +39,7 @@ static UINT32 Testcase(VOID) fd_set reads; ret = pipe(pipeFd); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); - ret = write(pipeFd[1], "hello world", TAR_STR_LEN); + ret = write(pipeFd[1], "Hello World", TAR_STR_LEN); printf("write first status: %d\n", ret); ICUNIT_GOTO_EQUAL(ret, TAR_STR_LEN, ret, EXIT); FD_ZERO(&reads); diff --git a/testsuites/unittest/signal/smoke/pipe_test_002.cpp b/testsuites/unittest/signal/smoke/pipe_test_002.cpp index ccbcfbc67085fa352a27e4958236a81b23f9d05b..fafa5f3bf6686949cd670e91b1e1f864cb02f859 100644 --- a/testsuites/unittest/signal/smoke/pipe_test_002.cpp +++ b/testsuites/unittest/signal/smoke/pipe_test_002.cpp @@ -31,6 +31,7 @@ #include "it_test_signal.h" #include "signal.h" #include "fcntl.h" +#include "sys/shm.h" static int TestPipeMultiProcess() { @@ -42,46 +43,62 @@ static int TestPipeMultiProcess() int *readFd = &pipefd[0]; int *writeFd = &pipefd[1]; - - char readbuffer[100]; + char readbuffer[100] = {0}; int status, ret; int totalNum = 3; + int *sharedflag = NULL; + int shmid; int flag = fcntl(*readFd, F_GETFL); fcntl(*readFd, F_SETFL, flag | O_NONBLOCK); + shmid = shmget((key_t)IPC_PRIVATE, sizeof(int), 0666 | IPC_CREAT); // 0666 the authority of the shm + ICUNIT_ASSERT_NOT_EQUAL(shmid, -1, shmid); + sharedflag = (int *)shmat(shmid, NULL, 0); + *sharedflag = 0; pid = fork(); if (pid == -1) { printf("Fork Error!\n"); return -1; } else if (pid == 0) { + sharedflag = (int *)shmat(shmid, NULL, 0); + close(pipefd[0]); for (int i = 0; i < totalNum; i++) { errno = 0; char sentence1[15] = "Hello World"; - char a[4] = {0}; + char a[2] = {0}; sprintf(a, "%d", i); strcat(sentence1, a); int ret = write(*writeFd, sentence1, strlen(sentence1) + 1); + ICUNIT_ASSERT_EQUAL(ret, strlen(sentence1) + 1, ret); usleep(10000); // 10000, Used to calculate the delay time. } + *sharedflag = 1; + ret = close(pipefd[1]); + ICUNIT_ASSERT_EQUAL(ret, 0, ret); exit(0); } else { + close(pipefd[1]); + // waitting for the sub process has written the sentence first + while (*sharedflag != 1) { + usleep(1); + } for (int i = 0; i < totalNum; i++) { printf("read\n"); char sentence1[15] = "Hello World"; - char a[4] = {0}; + char a[2] = {0}; + sprintf(a, "%d", i); + strcat(sentence1, a); memset(readbuffer, 0, sizeof(readbuffer)); - retValue = read(*readFd, readbuffer, sizeof(readbuffer)); - printf("Receive %d bytes data : %s,%d\n", retValue, readbuffer, errno); - ICUNIT_ASSERT_SIZE_STRING_EQUAL(readbuffer, readbuffer, strlen(sentence1), errno); + retValue = read(*readFd, readbuffer, strlen(sentence1) + 1); + printf("Receive %d bytes data : %s, errno : %d\n", retValue, readbuffer, errno); + ICUNIT_ASSERT_SIZE_STRING_EQUAL(readbuffer, sentence1, strlen(sentence1), errno); } } ret = waitpid(pid, &status, 0); ICUNIT_ASSERT_EQUAL(ret, pid, ret); ret = close(pipefd[0]); ICUNIT_ASSERT_EQUAL(ret, 0, ret); - ret = close(pipefd[1]); - ICUNIT_ASSERT_EQUAL(ret, 0, ret); return 0; }