Re-write again in case test cases receive write ack with TRY AGAIN
error
---
 src/log/apitest/logutil.c                    | 11 +++++++++
 src/log/apitest/logutil.h                    |  3 +++
 src/log/apitest/tet_saLogStreamOpen_2.c      |  1 -
 src/log/apitest/tet_saLogWriteLogCallbackT.c | 34 ++++++++++++++++++++++------
 4 files changed, 41 insertions(+), 8 deletions(-)

diff --git a/src/log/apitest/logutil.c b/src/log/apitest/logutil.c
index efc39204b..fc8886549 100644
--- a/src/log/apitest/logutil.c
+++ b/src/log/apitest/logutil.c
@@ -15,6 +15,7 @@
  *
  */
 
+#include <time.h>
 #include "base/saf_error.h"
 #include "logtest.h"
 
@@ -63,6 +64,16 @@ int systemCall(const char *command)
        return rc;
 }
 
+/**
+ * Sleep in milliseconds
+ */
+void msleep(uint64_t ms) {
+       struct timespec req, rem;
+       req.tv_sec = (int)(ms / 1000);
+       req.tv_nsec = (ms - ((long)req.tv_sec * 1000)) * 1000000;
+       nanosleep(&req , &rem);
+}
+
 /*
  * Wrapper function for 'saLogInitialize'
  */
diff --git a/src/log/apitest/logutil.h b/src/log/apitest/logutil.h
index fafadcb2e..5dc879856 100644
--- a/src/log/apitest/logutil.h
+++ b/src/log/apitest/logutil.h
@@ -42,6 +42,9 @@ struct LogProfile {
 /* Same as system() but returns WEXITSTATUS if not -1 */
 int systemCall(const char *command);
 
+// Sleep in milliseconds
+void msleep(uint64_t ms);
+
 // Common interfaces
 const char *hostname(void);
 bool is_test_done_on_pl(void);
diff --git a/src/log/apitest/tet_saLogStreamOpen_2.c 
b/src/log/apitest/tet_saLogStreamOpen_2.c
index 248b7d380..ada98a4c8 100644
--- a/src/log/apitest/tet_saLogStreamOpen_2.c
+++ b/src/log/apitest/tet_saLogStreamOpen_2.c
@@ -1125,7 +1125,6 @@ extern void saLogWriteLogAsync_18(void);
 extern void saLogWriteLogAsync_19(void);
 extern void saLogWriteLogCallbackT_01(void);
 extern void saLogWriteLogCallbackT_02(void);
-extern void saLogWriteLogCallbackT_03(void);
 extern void saLogStreamClose_01(void);
 
 __attribute__((constructor)) static void saLibraryLifeCycle_constructor(void)
diff --git a/src/log/apitest/tet_saLogWriteLogCallbackT.c 
b/src/log/apitest/tet_saLogWriteLogCallbackT.c
index 184ece521..ee05e3031 100644
--- a/src/log/apitest/tet_saLogWriteLogCallbackT.c
+++ b/src/log/apitest/tet_saLogWriteLogCallbackT.c
@@ -39,7 +39,7 @@ SaAisErrorT logWrite(SaInvocationT invocation, SaLogAckFlagsT 
ackFlags,
                                            ackFlags, logRecord);
        unsigned int nTries = 1;
        while (rc == SA_AIS_ERR_TRY_AGAIN && nTries < logProfile.nTries) {
-               usleep(logProfile.retryInterval * 1000);
+               msleep(logProfile.retryInterval);
                rc = saLogWriteLogAsync(logStreamHandle, invocation, ackFlags,
                                        logRecord);
                nTries++;
@@ -55,7 +55,7 @@ void saLogWriteLogCallbackT_01(void)
 {
        SaInvocationT invocation;
        struct pollfd fds[1];
-       int ret;
+       int ret, nTries = 1;
 
        invocation = random();
        logCallbacks.saLogWriteLogCallback = logWriteLogCallbackT;
@@ -76,9 +76,11 @@ void saLogWriteLogCallbackT_01(void)
                test_validate(rc, SA_AIS_OK);
                goto done;
        }
-       cb_index = 0;
        strcpy((char *)genLogRecord.logBuffer->logBuf, __FUNCTION__);
        genLogRecord.logBuffer->logBufSize = strlen(__FUNCTION__);
+
+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);
@@ -100,6 +102,13 @@ void saLogWriteLogCallbackT_01(void)
                goto done;
        }
 
+       if (cb_error[0] == SA_AIS_ERR_TRY_AGAIN && nTries < logProfile.nTries) {
+         nTries++;
+         msleep(100);
+         printf("Get try again error, re-write %d times\n", nTries);
+         goto write_log;
+       }
+
        if (cb_invocation[0] == invocation)
                test_validate(cb_error[0], SA_AIS_OK);
        else
@@ -113,7 +122,7 @@ void saLogWriteLogCallbackT_02(void)
 {
        SaInvocationT invocation[3];
        struct pollfd fds[1];
-       int ret, i;
+       int ret, i, nTries = 1;
 
        invocation[0] = random();
        invocation[1] = random();
@@ -138,9 +147,11 @@ void saLogWriteLogCallbackT_02(void)
                goto done;
        }
 
-       cb_index = 0;
        strcpy((char *)genLogRecord.logBuffer->logBuf, __FUNCTION__);
        genLogRecord.logBuffer->logBufSize = strlen(__FUNCTION__);
+
+write_log:
+       cb_index = 0;
        rc = logWrite(invocation[0], SA_LOG_RECORD_WRITE_ACK, &genLogRecord);
        if (rc == SA_AIS_OK)
                rc = logWrite(invocation[1], SA_LOG_RECORD_WRITE_ACK,
@@ -171,15 +182,24 @@ void saLogWriteLogCallbackT_02(void)
        }
 
        if (cb_index != 3) {
-               printf("cb_index = %u\n", cb_index);
+               printf("cb_index = %d\n", cb_index);
                test_validate(SA_AIS_ERR_LIBRARY, SA_AIS_OK);
                return;
        }
 
        for (i = 0; i < 3; i++) {
+               if (cb_error[i] == SA_AIS_ERR_TRY_AGAIN &&
+                   nTries < logProfile.nTries) {
+                       nTries++;
+                       msleep(100);
+                       printf("Get try again error, re-write %d times\n",
+                              nTries);
+                       goto write_log;
+               }
+
                if ((cb_invocation[i] != invocation[i]) ||
                    (cb_error[i] != SA_AIS_OK)) {
-                       printf("%llu expected %llu, %u\n", cb_invocation[i],
+                       printf("%llu expected %llu, %d\n", cb_invocation[i],
                               invocation[i], cb_error[i]);
                        test_validate(cb_error[i], SA_AIS_OK);
                        return;
-- 
2.11.0


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to