Hi Hieu,
Ack.
-----Original Message-----
From: Hieu Hong Hoang <[email protected]>
Sent: Friday, November 11, 2022 6:13 PM
To: Thang Duc Nguyen <[email protected]>; Minh Hon Chau
<[email protected]>; Thien Minh Huynh <[email protected]>
Cc: [email protected]; Hieu Hong Hoang
<[email protected]>
Subject: [PATCH 2/2] log: Create a test case for forked processes [#3322]
Create a test case that the process running log agent is forked to a new
process.
---
src/log/apitest/tet_saLogStreamOpen_2.c | 3 +
src/log/apitest/tet_saLogWriteLogCallbackT.c | 86 ++++++++++++++++++++
2 files changed, 89 insertions(+)
diff --git a/src/log/apitest/tet_saLogStreamOpen_2.c
b/src/log/apitest/tet_saLogStreamOpen_2.c
index 7f0e74f69..037ce8188 100644
--- a/src/log/apitest/tet_saLogStreamOpen_2.c
+++ b/src/log/apitest/tet_saLogStreamOpen_2.c
@@ -1141,6 +1141,7 @@ extern void saLogStreamOpenCallbackT_01(void);
extern void saLogWriteLog_01(void);
extern void saLogWriteLogCallbackT_01(void); extern void
saLogWriteLogCallbackT_02(void);
+extern void saLogWriteLogCallbackT_03(void);
__attribute__((constructor)) static void saLibraryLifeCycle_constructor(void)
{
@@ -1206,6 +1207,8 @@ __attribute__((constructor)) static void
saLibraryLifeCycle_constructor(void)
"saLogWriteLogCallbackT() SA_DISPATCH_ONE");
test_case_add(2, saLogWriteLogCallbackT_02,
"saLogWriteLogCallbackT() SA_DISPATCH_ALL");
+ test_case_add(2, saLogWriteLogCallbackT_03,
+ "saLogWriteLogCallbackT() forked process");
test_case_add(2, saLogStreamOpen_2_46,
"saLogStreamOpen_2 with maxFilesRotated = 0, ERR");
test_case_add(2, saLogStreamOpen_2_47, diff --git
a/src/log/apitest/tet_saLogWriteLogCallbackT.c
b/src/log/apitest/tet_saLogWriteLogCallbackT.c
index 738507256..bd565c46e 100644
--- a/src/log/apitest/tet_saLogWriteLogCallbackT.c
+++ b/src/log/apitest/tet_saLogWriteLogCallbackT.c
@@ -216,3 +216,89 @@ write_log:
done:
logFinalize();
}
+
+void saLogWriteLogCallbackT_03(void)
+{
+ SaInvocationT invocation;
+ struct pollfd fds[1];
+ int ret;
+
+ invocation = random();
+ logCallbacks.saLogWriteLogCallback = logWriteLogCallbackT;
+ rc = logInitialize();
+ if (rc != SA_AIS_OK) {
+ test_validate(rc, SA_AIS_OK);
+ return;
+ }
+ pid_t pid = fork();
+ if (fork < 0) {
+ fprintf(stderr, "fork failed: %s \n", strerror(errno));
+ test_validate(SA_AIS_ERR_LIBRARY, SA_AIS_OK);
+ } else if (pid == 0) {
+ // While exiting this process, the destructor of log agent
+ // will be called.
+ exit(0);
+ } else {
+ sleep(2); /* Sleep to make sure the child process exited. */
+ rc = saLogSelectionObjectGet(logHandle, &selectionObject);
+ if (rc != SA_AIS_OK) {
+ fprintf(stderr,
+ "saLogSelectionObjectGet failed: %d \n",
+ (int)rc);
+ test_validate(rc, SA_AIS_OK);
+ goto done;
+ }
+ rc = logStreamOpen(&systemStreamName);
+ if (rc != SA_AIS_OK) {
+ test_validate(rc, SA_AIS_OK);
+ goto done;
+ }
+ strcpy((char *)genLogRecord.logBuffer->logBuf, __FUNCTION__);
+ genLogRecord.logBuffer->logBufSize = strlen(__FUNCTION__) + 1;
+
+ struct timespec timeout_time;
+ osaf_set_millis_timeout(2 * kWaitTime, &timeout_time);
+
+ write_log:
+ cb_index = 0;
+ rc = logWrite(invocation, SA_LOG_RECORD_WRITE_ACK,
+ &genLogRecord);
+ if (rc != SA_AIS_OK) {
+ test_validate(rc, SA_AIS_OK);
+ goto done;
+ }
+
+ fds[0].fd = (int)selectionObject;
+ fds[0].events = POLLIN;
+ ret = poll(fds, 1, 6000);
+ if (ret != 1) {
+ fprintf(stderr, "poll log callback failed: %d \n",
+ ret);
+ test_validate(ret, 1);
+ goto done;
+ }
+ rc = saLogDispatch(logHandle, SA_DISPATCH_ONE);
+ if (rc != SA_AIS_OK) {
+ fprintf(stderr, "saLogDispatch failed: %d \n",
+ (int)rc);
+ test_validate(rc, SA_AIS_OK);
+ goto done;
+ }
+
+ if (cb_error[0] == SA_AIS_ERR_TRY_AGAIN &&
+ !osaf_is_timeout(&timeout_time)) {
+ osaf_nanosleep(&kHundredMilliseconds);
+ printf("Get try again error, re-write \n");
+ goto write_log;
+ }
+
+ if (cb_invocation[0] == invocation) {
+ test_validate(cb_error[0], SA_AIS_OK);
+ } else {
+ test_validate(SA_AIS_ERR_LIBRARY, SA_AIS_OK);
+ }
+
+ done:
+ logFinalize();
+ }
+}
--
2.25.1
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel