summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorIngo Huerner <ingo_huerner@mentor.com>2017-02-10 09:41:13 +0100
committerIngo Huerner <ingo_huerner@mentor.com>2017-02-10 09:41:13 +0100
commit0817d5a68726e3afc63a6696062027c467af419f (patch)
tree7d2d4ae68c12571d60082ddded3d3bc8c20b51c1 /test
parentb433f9686017ac0e9009957034100759b7f0aa6d (diff)
downloadpersistence-client-library-0817d5a68726e3afc63a6696062027c467af419f.tar.gz
Fixed a array out of bounds access (results in mutex deadlock).
Improved mutex handling. Removed valgrind warning GENIVI JIRA issue PCL-3. Delete remaining semaphores and shared memory in case of app crash.
Diffstat (limited to 'test')
-rw-r--r--test/data/PAS_data.tar.gzbin6843 -> 6843 bytes
-rw-r--r--test/persistence_client_library_test.c29
-rw-r--r--test/persistence_client_library_test_file.c729
3 files changed, 647 insertions, 111 deletions
diff --git a/test/data/PAS_data.tar.gz b/test/data/PAS_data.tar.gz
index 99e863b..16a291b 100644
--- a/test/data/PAS_data.tar.gz
+++ b/test/data/PAS_data.tar.gz
Binary files differ
diff --git a/test/persistence_client_library_test.c b/test/persistence_client_library_test.c
index 146e41a..ebcf54b 100644
--- a/test/persistence_client_library_test.c
+++ b/test/persistence_client_library_test.c
@@ -742,11 +742,14 @@ END_TEST
START_TEST(test_InitDeinit)
{
- int i = 0, rval = -1, handle = 0;
int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
+ int i = 0, rval = -1, handle = 0;
+
+
DLT_LOG(gPcltDLTContext, DLT_LOG_INFO, DLT_STRING("PCL_TEST test_InitDeinit"));
+
for(i=0; i<5; i++)
{
// initialize and deinitialize 1. time
@@ -1591,7 +1594,6 @@ static Suite * persistencyClientLib_suite()
tcase_add_test(tc_MultiThreadedWrite, test_MultiThreadedWrite);
tcase_set_timeout(tc_MultiThreadedWrite, 20);
-
suite_add_tcase(s, tc_persSetData);
tcase_add_checked_fixture(tc_persSetData, data_setup, data_teardown);
@@ -1641,24 +1643,27 @@ static Suite * persistencyClientLib_suite()
suite_add_tcase(s, tc_InvalidPluginfConf);
- suite_add_tcase(s, tc_InitDeinit);
-
- //suite_add_tcase(s, tc_NoPluginFunc);
-
- // suite_add_tcase(s, tc_SharedData);
- // tcase_add_checked_fixture(tc_SharedData, data_setup, data_teardown);
-
suite_add_tcase(s, tc_MultiThreadedRead);
tcase_add_checked_fixture(tc_MultiThreadedRead, data_setup, data_teardown);
suite_add_tcase(s, tc_MultiThreadedWrite);
tcase_add_checked_fixture(tc_MultiThreadedWrite, data_setup, data_teardown);
+ suite_add_tcase(s, tc_NoRct);
+ tcase_add_checked_fixture(tc_NoRct, data_setup_norct, data_teardown);
+
+ suite_add_tcase(s, tc_InitDeinit);
+
+ //suite_add_tcase(s, tc_NoPluginFunc);
+
+ //suite_add_tcase(s, tc_SharedData);
+ //tcase_add_checked_fixture(tc_SharedData, data_setup, data_teardown);
+
+
#if USE_APPCHECK
suite_add_tcase(s, tc_ValidApplication);
#else
- suite_add_tcase(s, tc_NoRct);
- tcase_add_checked_fixture(tc_NoRct, data_setup_norct, data_teardown);
+
#endif
#if 0
@@ -1685,7 +1690,7 @@ int main(int argc, char *argv[])
gTheAppId[MaxAppNameLen-1] = '\0';
/// debug log and trace (DLT) setup
- DLT_REGISTER_APP("PCLT", "PCL test");
+ DLT_REGISTER_APP("PCLTk", "PCL test");
DLT_REGISTER_CONTEXT(gPcltDLTContext, "PCLt", "Context for PCL testing");
diff --git a/test/persistence_client_library_test_file.c b/test/persistence_client_library_test_file.c
index 3e3fffd..5d96696 100644
--- a/test/persistence_client_library_test_file.c
+++ b/test/persistence_client_library_test_file.c
@@ -28,6 +28,7 @@
#include <dlt.h>
#include <dlt_common.h>
#include <pthread.h>
+#include <string.h>
#include <check.h>
@@ -40,8 +41,8 @@
#define READ_SIZE 1024
#define MaxAppNameLen 256
-#define NUM_THREADS 100
-#define NUM_OF_WRITES 350
+#define NUM_THREADS 10
+#define NUM_OF_WRITES 500
#define NAME_LEN 24
typedef struct s_threadData
@@ -477,81 +478,146 @@ END_TEST
*/
START_TEST(test_DataHandle)
{
- int handle1 = 0, handle2 = 0;
- int handleArray[4] = {0};
- int ret = 0;
+ int handleArray[1024] = {0};
unsigned char buffer[READ_SIZE] = {0};
+ {
+ int ret = 0;
+ int handle1 = 0, handle2 = 0;
+
+ // test multiple handles
+ handleArray[0] = pclFileOpen(PCL_LDBID_LOCAL, "media/mediaDB_write_01.db", 1, 1);
+ fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB_write_01.db");
+
+ handleArray[1] = pclFileOpen(PCL_LDBID_LOCAL, "media/mediaDB_write_02.db", 1, 1);
+ fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB_write_02.db");
+
+ handleArray[2] = pclFileOpen(PCL_LDBID_LOCAL, "media/mediaDB_write_03.db", 1, 1);
+ fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB_write_03.db");
+
+ handleArray[3] = pclFileOpen(PCL_LDBID_LOCAL, "media/mediaDB_write_04.db", 1, 1);
+ fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB_write_04.db");
+
+ memset(buffer, 0, READ_SIZE);
+ ret = pclFileReadData(handleArray[0], buffer, READ_SIZE);
+ fail_unless(ret >= 0, "Failed to read handle idx \"0\"!!");
+ fail_unless(strncmp((char*)buffer, "/user/1/seat/1/media/mediaDB_write_01.db",
+ strlen("/user/1/seat/1/media/mediaDB_write_01.db"))
+ == 0, "Buffer not correctly read => mediaDB_write_01.db");
- // test multiple handles
- handleArray[0] = pclFileOpen(PCL_LDBID_LOCAL, "media/mediaDB_write_01.db", 1, 1);
- fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB_write_01.db");
+ memset(buffer, 0, READ_SIZE);
+ ret = pclFileReadData(handleArray[1], buffer, READ_SIZE);
+ fail_unless(strncmp((char*)buffer, "/user/1/seat/1/media/mediaDB_write_02.db",
+ strlen("/user/1/seat/1/media/mediaDB_write_02.db"))
+ == 0, "Buffer not correctly read => mediaDB_write_02.db");
- handleArray[1] = pclFileOpen(PCL_LDBID_LOCAL, "media/mediaDB_write_02.db", 1, 1);
- fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB_write_02.db");
+ memset(buffer, 0, READ_SIZE);
+ ret = pclFileReadData(handleArray[2], buffer, READ_SIZE);
+ fail_unless(strncmp((char*)buffer, "/user/1/seat/1/media/mediaDB_write_03.db",
+ strlen("/user/1/seat/1/media/mediaDB_write_03.db"))
+ == 0, "Buffer not correctly read => mediaDB_write_03.db");
- handleArray[2] = pclFileOpen(PCL_LDBID_LOCAL, "media/mediaDB_write_03.db", 1, 1);
- fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB_write_03.db");
+ memset(buffer, 0, READ_SIZE);
+ (void)pclFileReadData(handleArray[3], buffer, READ_SIZE);
+ fail_unless(strncmp((char*)buffer, "/user/1/seat/1/media/mediaDB_write_04.db",
+ strlen("/user/1/seat/1/media/mediaDB_write_04.db"))
+ == 0, "Buffer not correctly read => mediaDB_write_04.db");
- handleArray[3] = pclFileOpen(PCL_LDBID_LOCAL, "media/mediaDB_write_04.db", 1, 1);
- fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB_write_04.db");
+ ret = pclKeyHandleClose(handleArray[0]);
+ fail_unless(ret != -1, "Failed to close handle idx \"0\"!!");
- memset(buffer, 0, READ_SIZE);
- ret = pclFileReadData(handleArray[0], buffer, READ_SIZE);
- fail_unless(ret >= 0, "Failed to read handle idx \"0\"!!");
- fail_unless(strncmp((char*)buffer, "/user/1/seat/1/media/mediaDB_write_01.db",
- strlen("/user/1/seat/1/media/mediaDB_write_01.db"))
- == 0, "Buffer not correctly read => mediaDB_write_01.db");
+ ret = pclKeyHandleClose(handleArray[1]);
+ fail_unless(ret != -1, "Failed to close handle idx \"1\"!!");
- memset(buffer, 0, READ_SIZE);
- ret = pclFileReadData(handleArray[1], buffer, READ_SIZE);
- fail_unless(strncmp((char*)buffer, "/user/1/seat/1/media/mediaDB_write_02.db",
- strlen("/user/1/seat/1/media/mediaDB_write_02.db"))
- == 0, "Buffer not correctly read => mediaDB_write_02.db");
+ ret = pclKeyHandleClose(handleArray[2]);
+ fail_unless(ret != -1, "Failed to close handle idx \"2\"!!");
- memset(buffer, 0, READ_SIZE);
- ret = pclFileReadData(handleArray[2], buffer, READ_SIZE);
- fail_unless(strncmp((char*)buffer, "/user/1/seat/1/media/mediaDB_write_03.db",
- strlen("/user/1/seat/1/media/mediaDB_write_03.db"))
- == 0, "Buffer not correctly read => mediaDB_write_03.db");
+ ret = pclKeyHandleClose(handleArray[3]);
+ fail_unless(ret != -1, "Failed to close handle idx \"3\"!!");
- memset(buffer, 0, READ_SIZE);
- (void)pclFileReadData(handleArray[3], buffer, READ_SIZE);
- fail_unless(strncmp((char*)buffer, "/user/1/seat/1/media/mediaDB_write_04.db",
- strlen("/user/1/seat/1/media/mediaDB_write_04.db"))
- == 0, "Buffer not correctly read => mediaDB_write_04.db");
+ // test key handles
+ handle2 = pclKeyHandleOpen(PCL_LDBID_LOCAL, "statusHandle/open_document", 3, 2);
+ fail_unless(handle2 >= 0, "Failed to open handle /statusHandle/open_document");
- ret = pclKeyHandleClose(handleArray[0]);
- fail_unless(ret != -1, "Failed to close handle idx \"0\"!!");
+ ret = pclKeyHandleClose(handle2);
+ fail_unless(ret != -1, "Failed to close handle!!");
- ret = pclKeyHandleClose(handleArray[1]);
- fail_unless(ret != -1, "Failed to close handle idx \"1\"!!");
+ ret = pclKeyHandleClose(1024);
+ fail_unless(ret == EPERS_MAXHANDLE, "Max handle!!");
- ret = pclKeyHandleClose(handleArray[2]);
- fail_unless(ret != -1, "Failed to close handle idx \"2\"!!");
- ret = pclKeyHandleClose(handleArray[3]);
- fail_unless(ret != -1, "Failed to close handle idx \"3\"!!");
+ // test file handles
+ handle1 = pclFileOpen(PCL_LDBID_LOCAL, "media/mediaDB.db", 1, 1);
+ fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB.db");
- // test key handles
- handle2 = pclKeyHandleOpen(PCL_LDBID_LOCAL, "statusHandle/open_document", 3, 2);
- fail_unless(handle2 >= 0, "Failed to open handle /statusHandle/open_document");
+ ret = pclFileClose(handle1);
+ fail_unless(handle1 != -1, "Could not closefile ==> /media/mediaDB.db");
- ret = pclKeyHandleClose(handle2);
- fail_unless(ret != -1, "Failed to close handle!!");
+ ret = pclFileClose(1024);
+ fail_unless(ret == EPERS_MAXHANDLE, "1. Could close file, but should not!!");
+ }
+
+ {
+ char writeBuffer[256] = {0};
+ char fileNameBuf[1024] = {0};
+ int i = 0, size = 0;
+
+ memset(handleArray, -1, 1024);
- ret = pclKeyHandleClose(1024);
- fail_unless(ret == EPERS_MAXHANDLE, "Max handle!!");
+ for(i=0; i<1024; i++)
+ {
+ memset(fileNameBuf,0,1024);
+ snprintf(fileNameBuf, 1024, "media/threeAnotherFileTestData.db_%d", i);
+ //printf("\n\nOpen - %d\n", i);
+ handleArray[i] = pclFileOpen(PCL_LDBID_LOCAL, fileNameBuf, 4, 12);
+ }
+ // now write data
+ for(i=0; i<1024; i++)
+ {
+ if(handleArray[i] >=0 )
+ {
+ memset(writeBuffer,0,256);
+ snprintf(writeBuffer, 256, "START_TEST(test_DataHandle)_media/some_test_data_to_show_read and write is working_%d", i);
- // test file handles
- handle1 = pclFileOpen(PCL_LDBID_LOCAL, "media/mediaDB.db", 1, 1);
- fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB.db");
+ pclFileSeek(handleArray[i], 0, SEEK_SET);
+ size = pclFileWriteData(handleArray[i], writeBuffer, (int)strlen(writeBuffer));
+ fail_unless(size == (int)strlen(writeBuffer), "Wrong size written - %d", i);
+ }
- ret = pclFileClose(handle1);
- fail_unless(handle1 != -1, "Could not closefile ==> /media/mediaDB.db");
+ }
+
+ // now read data
+ for(i=0; i<1024; i++)
+ {
+ if(handleArray[i] >=0 )
+ {
+ memset(buffer, 0, READ_SIZE);
+ memset(writeBuffer,0, 256);
+ snprintf(writeBuffer, 256, "START_TEST(test_DataHandle)_media/some_test_data_to_show_read and write is working_%d", i);
+ pclFileSeek(handleArray[i], 0, SEEK_SET);
+ size = pclFileReadData(handleArray[i], buffer, READ_SIZE);
+#if 0
+ if(strncmp((const char*)buffer, (const char*)writeBuffer, 256) != 0)
+ {
+ printf("ERROR Read: \"%s\" - \"%s\"\n", buffer, writeBuffer);
+ }
+ else
+ {
+ printf("ERROR Read: \"%s\" - \"%s\"\n", buffer, writeBuffer);
+ }
+#endif
+ fail_unless(strncmp((const char*)buffer, (const char*)writeBuffer, 256) == 0);
+ }
+ }
+
+ // now close data
+ for(i=0; i<1024; i++)
+ {
+ if(handleArray[i] >=0 )
+ (void)pclFileClose(handleArray[i]);
+ }
+ }
- ret = pclFileClose(1024);
- fail_unless(ret == EPERS_MAXHANDLE, "1. Could close file, but should not!!");
}
END_TEST
@@ -793,47 +859,74 @@ void* fileWriteThread(void* userData)
{
t_threadData* threadData = (t_threadData*)userData;
- static int i = 0;
+ int i = 0;
size_t bufferSize = strlen(gWriteBuffer);
size_t bufferSize2 = strlen(gWriteBuffer2);
unsigned char* readbuffer = malloc(bufferSize);
unsigned char* readbuffer2 = malloc(bufferSize2);
+ unsigned char* keyBuffer = malloc(1024);
- if(readbuffer != NULL && readbuffer2 != NULL)
+ if(readbuffer != NULL && readbuffer2 != NULL && keyBuffer != NULL)
{
+ //printf("\"%s\"\n", threadData->threadName);
pthread_barrier_wait(&gBarrierOne);
usleep(5000);
+ printf("\"%s\" r u n \n", threadData->threadName);
for(i=0; i<NUM_OF_WRITES; i++)
{
- int wsize = 0, rsize = 0;
+ int wsize = 0, rsize = 0, ret = 0;
int wsize2 = 0, rsize2 = 0;
- memset(readbuffer, 0, bufferSize);
-
wsize = pclFileWriteData(threadData->fd1, gWriteBuffer, (int)bufferSize);
ck_assert_int_ge(wsize, 0);
pclFileSeek(threadData->fd1, 0, SEEK_SET);
- rsize = pclFileReadData(threadData->fd1, readbuffer, (int)bufferSize);
- ck_assert_int_eq(rsize, (int)bufferSize);
-
- usleep( (useconds_t)(50 * i * threadData->index)); // do some "random" sleep
+ ret = pclKeyWriteData(PCL_LDBID_LOCAL, "status/open_document", 3, 2, (unsigned char*)"WT_ /var/opt/user_manual_climateControl.pdf", strlen("WT_ /var/opt/user_manual_climateControl.pdf"));
+ fail_unless(ret == strlen("WT_ /var/opt/user_manual_climateControl.pdf"), "Wrong write size");
- memset(readbuffer2, 0, bufferSize2);
+ usleep( (useconds_t)(100 * i * threadData->index)); // do some "random" sleep
wsize2 = pclFileWriteData(threadData->fd2, gWriteBuffer2, (int)bufferSize2);
ck_assert_int_ge(wsize2, 0);
pclFileSeek(threadData->fd2, 0, SEEK_SET);
+
+ memset(readbuffer, 0, bufferSize);
+ rsize = pclFileReadData(threadData->fd1, readbuffer, (int)bufferSize);
+ ck_assert_int_eq(rsize, (int)bufferSize);
+
+ memset(keyBuffer, 0, 1024);
+ ret = pclKeyReadData(PCL_LDBID_LOCAL, "pos/last_position", 1, 1, keyBuffer, 1024);
+ ck_assert_str_eq( (char*)keyBuffer, "CACHE_ +48 10' 38.95, +8 44' 39.06");
+ ck_assert_int_eq( ret, (int)strlen("CACHE_ +48 10' 38.95, +8 44' 39.06") );
+
+ memset(readbuffer2, 0, bufferSize2);
rsize2 = pclFileReadData(threadData->fd2, readbuffer2, (int)bufferSize2);
ck_assert_int_eq(rsize2, (int)bufferSize2);
+
+ memset(keyBuffer, 0, 1024);
+ ret = pclKeyReadData(0x20, "address/home_address", 4, 0, keyBuffer, READ_SIZE);
+ ck_assert_str_eq( (char*)keyBuffer, "WT_ 55327 Heimatstadt, Wohnstrasse 31");
+ ck_assert_int_eq(ret, (int)strlen("WT_ 55327 Heimatstadt, Wohnstrasse 31"));
+
+ usleep(75000);
+
+ printf("\"%s\" %d\n", threadData->threadName, i);
}
- free(readbuffer);
- free(readbuffer2);
+ printf("\"%s\" e n d \n", threadData->threadName);
+
+ if(keyBuffer != 0)
+ free(keyBuffer);
+
+ if(readbuffer != 0)
+ free(readbuffer);
+
+ if(readbuffer2 != 0)
+ free(readbuffer2);
}
return NULL;
@@ -844,6 +937,11 @@ START_TEST(test_MultFileReadWrite)
{
int fd1 = -1;
int fd2 = -1;
+ int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
+
+
+ (void)pclInitLibrary(gTheAppId, shutdownReg);
+
fd1 = pclFileOpen(PCL_LDBID_LOCAL, "media/mediaDBWrite.db", 1, 1);
fd2 = pclFileOpen(PCL_LDBID_LOCAL, "media/mediaDBWrite.db", 2, 1);
@@ -895,6 +993,9 @@ START_TEST(test_MultFileReadWrite)
{
printf("Could not open file ==> /media/mediaDBWrite.db\n");
}
+
+
+ pclDeinitLibrary();
}
END_TEST
@@ -949,44 +1050,467 @@ static Suite * persistencyClientLib_suite()
TCase * tc_MultiFileReadWrite = tcase_create("MultFileReadWrite");
tcase_add_test(tc_MultiFileReadWrite, test_MultFileReadWrite);
- tcase_set_timeout(tc_MultiFileReadWrite, 20);
-
+ tcase_set_timeout(tc_MultiFileReadWrite, 200000);
- suite_add_tcase(s, tc_WriteConfDefault);
- tcase_add_checked_fixture(tc_WriteConfDefault, data_setup, data_teardown);
+#if 1
suite_add_tcase(s, tc_persDataFile);
tcase_add_checked_fixture(tc_persDataFile, data_setup, data_teardown);
+ suite_add_tcase(s, tc_WriteConfDefault);
+ tcase_add_checked_fixture(tc_WriteConfDefault, data_setup, data_teardown);
+
suite_add_tcase(s, tc_persDataFileBackupCreation);
- tcase_add_checked_fixture(tc_persDataFileBackupCreation, data_setupBackup, data_teardown);
+ tcase_add_checked_fixture(tc_persDataFileBackupCreation, data_setupBackup, data_teardown);
+
+ suite_add_tcase(s, tc_persDataFileRecovery);
+ tcase_add_checked_fixture(tc_persDataFileRecovery, data_setupRecovery, data_teardown);
+
+ suite_add_tcase(s, tc_GetPath);
+ tcase_add_checked_fixture(tc_GetPath, data_setup, data_teardown);
+
+ suite_add_tcase(s, tc_VerifyROnly);
+ tcase_add_checked_fixture(tc_VerifyROnly, data_setup, data_teardown);
- suite_add_tcase(s, tc_persDataFileRecovery);
- tcase_add_checked_fixture(tc_persDataFileRecovery, data_setupRecovery, data_teardown);
+ suite_add_tcase(s, tc_DataFileConfDefault);
+ tcase_add_checked_fixture(tc_DataFileConfDefault, data_setup, data_teardown);
- suite_add_tcase(s, tc_GetPath);
- tcase_add_checked_fixture(tc_GetPath, data_setup, data_teardown);
+ suite_add_tcase(s, tc_FileTest);
+ tcase_add_checked_fixture(tc_FileTest, data_setup_browser, data_teardown);
- suite_add_tcase(s, tc_VerifyROnly);
- tcase_add_checked_fixture(tc_VerifyROnly, data_setup, data_teardown);
+ suite_add_tcase(s, tc_InitDeinit);
- suite_add_tcase(s, tc_DataFileConfDefault);
- tcase_add_checked_fixture(tc_DataFileConfDefault, data_setup, data_teardown);
+ suite_add_tcase(s, tc_DataHandle);
+ tcase_add_checked_fixture(tc_DataHandle, data_setup, data_teardown);
- suite_add_tcase(s, tc_FileTest);
- tcase_add_checked_fixture(tc_FileTest, data_setup_browser, data_teardown);
- suite_add_tcase(s, tc_InitDeinit);
+#else
+
+
+ //suite_add_tcase(s, tc_MultiFileReadWrite);
+ //tcase_add_checked_fixture(tc_MultiFileReadWrite, data_setup, data_teardown);
+#endif
- suite_add_tcase(s, tc_DataHandle);
- tcase_add_checked_fixture(tc_DataHandle, data_setup, data_teardown);
- suite_add_tcase(s, tc_MultiFileReadWrite);
- tcase_add_checked_fixture(tc_MultiFileReadWrite, data_setup, data_teardown);
return s;
}
+#define NUM_OF_OPEN_FILES 200
+
+void* WriteOneThread(void* userData)
+{
+ int fd1 = -1, fd2 = -1, i = 0, j = 0;
+ int size1 = 0, size2 = 0;
+ int ret = 0;
+ unsigned char keyBuffer[1024] = {0};
+ int fda[NUM_OF_OPEN_FILES] = {0};
+ char fileBuffer[1024] = {0};
+ char writeBuffer[128] = {0};
+
+ int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
+
+ (void)pclInitLibrary(gTheAppId, shutdownReg);
+
+ printf("Thread: %s\n", (const char*)userData);
+
+ size_t bufferSize = strlen(gWriteBuffer);
+ size_t bufferSize2 = strlen(gWriteBuffer2);
+
+ unsigned char* readbuffer = malloc(bufferSize);
+ unsigned char* readbuffer2 = malloc(bufferSize2);
+
+
+ fd1 = pclFileOpen(PCL_LDBID_LOCAL, "media/oneSomeFileTestData.db", 1, 1);
+ printf("fd1: %d\n", fd1);
+
+ fd2 = pclFileOpen(PCL_LDBID_LOCAL, "media/oneAnotherFileTestData.db", 2, 1);
+ printf("fd2: %d\n", fd2);
+
+ for(i=0; i<NUM_OF_OPEN_FILES; i++)
+ {
+ memset(fileBuffer,0,1024);
+ snprintf(fileBuffer, 1024, "media/oneAnotherFileTestData.db_%d", i);
+ printf("One open: %d\n", i);
+ fda[i] = pclFileOpen(PCL_LDBID_LOCAL, fileBuffer, 4, 4);
+ if(fda[i] < 0)
+ {
+ printf("ERROR Invlaid handle: \n");
+ exit(0);
+ }
+ usleep(120000);
+ }
+
+ for(i=0; i< 20000; i++)
+ {
+ printf("loop One: %d\n", i);
+
+ memset(readbuffer, 0, bufferSize);
+ memset(readbuffer2, 0, bufferSize2);
+ memset(keyBuffer, 0, 1024);
+
+ if(i%2)
+ {
+ size1 = pclFileWriteData(fd1, gWriteBuffer2, (int)strlen(gWriteBuffer2));
+ size2 = pclFileWriteData(fd2, gWriteBuffer, (int)strlen(gWriteBuffer));
+
+ size2 = pclFileReadData(fd1, readbuffer2, (int)bufferSize2);
+ size2 = pclFileReadData(fd2, readbuffer, (int)bufferSize);
+
+ printf("Wb\n");
+ for(j=0; j< NUM_OF_OPEN_FILES; j++)
+ {
+ memset(readbuffer, 0, bufferSize);
+ memset(writeBuffer,0,128);
+ snprintf(writeBuffer, 128, "%s_media/oneAnotherFileTestData.db_%d", (const char*)userData, j);
+ pclFileSeek(fda[j], 0, SEEK_SET);
+ size2 = pclFileReadData(fda[j], readbuffer, (int)bufferSize);
+ if(strncmp((const char*)readbuffer, (const char*)writeBuffer, 128) != 0)
+ {
+ printf("ERROR Read: \"%s\" - \"%s\"\n", readbuffer, writeBuffer);
+ pclDeinitLibrary();
+ exit(0);
+ }
+ }
+ }
+ else
+ {
+ size1 = pclFileWriteData(fd1, gWriteBuffer, (int)strlen(gWriteBuffer));
+ size2 = pclFileWriteData(fd2, gWriteBuffer2, (int)strlen(gWriteBuffer2));
+
+ ret = pclKeyReadData(0x20, "address/home_address", 4, 0, keyBuffer, READ_SIZE);
+ if( ret < 0)
+ printf("Failed\n");
+
+ size2 = pclFileReadData(fd1, readbuffer, (int)bufferSize);
+ size2 = pclFileReadData(fd2, readbuffer2, (int)bufferSize2);
+
+ printf("Wa\n");
+ for(j=0; j< NUM_OF_OPEN_FILES; j++)
+ {
+ memset(writeBuffer,0,128);
+ snprintf(writeBuffer, 128, "%s_media/oneAnotherFileTestData.db_%d", (const char*)userData, j);
+ pclFileSeek(fda[j], 0, SEEK_SET);
+ size2 = pclFileWriteData(fda[j], writeBuffer, (int)strlen(writeBuffer));
+ }
+ }
+
+ if(size2 < 0 || size1 < 0)
+ printf("Failed file\n");
+
+ ret = pclKeyWriteData(PCL_LDBID_LOCAL, "status/open_document", 3, 2,
+ (unsigned char*)"WT_ /var/opt/user_manual_climateControl.pdf", strlen("WT_ /var/opt/user_manual_climateControl.pdf"));
+
+ ret = pclKeyReadData(PCL_LDBID_LOCAL, "pos/last_position", 1, 1, keyBuffer, 1024);
+ if( ret < 0)
+ printf("Failed\n");
+
+ if(i%10 == 0)
+ {
+ pclFileSeek(fd1, 0, SEEK_SET);
+ pclFileSeek(fd2, 0, SEEK_SET);
+ }
+
+ memset(keyBuffer, 0, 1024);
+ ret = pclKeyReadData(0x20, "address/home_address", 4, 0, keyBuffer, READ_SIZE);
+ if( ret < 0)
+ printf("Failed\n");
+
+ printf("T1\n");
+
+ usleep(17500);
+ }
+
+ for(i=0; i<NUM_OF_OPEN_FILES; i++)
+ {
+ (void)pclFileClose(fda[i]);
+ }
+
+
+ (void)pclFileClose(fd1);
+ (void)pclFileClose(fd2);
+
+ pclDeinitLibrary();
+
+ return NULL;
+}
+
+void* WriteThreeThread(void* userData)
+{
+ int fd1 = -1, fd2 = -1, i = 0, j = 0;
+ int size1 = 0, size2 = 0;
+ int ret = 0;
+ unsigned char keyBuffer[1024] = {0};
+ int fda[NUM_OF_OPEN_FILES] = {0};
+ char fileBuffer[1024] = {0};
+ char writeBuffer[128] = {0};
+
+ int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
+
+ (void)pclInitLibrary(gTheAppId, shutdownReg);
+
+ printf("Thread: %s\n", (const char*)userData);
+
+ size_t bufferSize = strlen(gWriteBuffer);
+ size_t bufferSize2 = strlen(gWriteBuffer2);
+
+ unsigned char* readbuffer = malloc(bufferSize);
+ unsigned char* readbuffer2 = malloc(bufferSize2);
+
+
+ fd1 = pclFileOpen(PCL_LDBID_LOCAL, "media/oneSomeFileTestData.db", 1, 1);
+ printf("fd1: %d\n", fd1);
+
+ fd2 = pclFileOpen(PCL_LDBID_LOCAL, "media/oneAnotherFileTestData.db", 2, 1);
+ printf("fd2: %d\n", fd2);
+
+ for(i=0; i<NUM_OF_OPEN_FILES; i++)
+ {
+ memset(fileBuffer,0,1024);
+ snprintf(fileBuffer, 1024, "media/threeAnotherFileTestData.db_%d", i);
+ printf("Three open: %d\n", i);
+ fda[i] = pclFileOpen(PCL_LDBID_LOCAL, fileBuffer, 5, 5);
+ if(fda[i] < 0)
+ {
+ printf("ERROR Invlaid handle: \n");
+ pclDeinitLibrary();
+ exit(0);
+ }
+ usleep(120000);
+ }
+
+ for(i=0; i< 20000; i++)
+ {
+ printf("loop Three: %d\n", i);
+
+ memset(readbuffer, 0, bufferSize);
+ memset(readbuffer2, 0, bufferSize2);
+ memset(keyBuffer, 0, 1024);
+
+ if(i%2)
+ {
+ size1 = pclFileWriteData(fd1, gWriteBuffer2, (int)strlen(gWriteBuffer2));
+ size2 = pclFileWriteData(fd2, gWriteBuffer, (int)strlen(gWriteBuffer));
+
+ size2 = pclFileReadData(fd1, readbuffer2, (int)bufferSize2);
+ size2 = pclFileReadData(fd2, readbuffer, (int)bufferSize);
+
+ printf("Wb\n");
+ for(j=0; j< NUM_OF_OPEN_FILES; j++)
+ {
+ memset(readbuffer, 0, bufferSize);
+ memset(writeBuffer,0,128);
+ snprintf(writeBuffer, 128, "%s_media/oneAnotherFileTestData.db_%d", (const char*)userData, j);
+ pclFileSeek(fda[j], 0, SEEK_SET);
+ size2 = pclFileReadData(fda[j], readbuffer, (int)bufferSize);
+ if(strncmp((const char*)readbuffer, (const char*)writeBuffer, 128) != 0)
+ {
+ printf("ERROR Read: \"%s\" - \"%s\"\n", readbuffer, writeBuffer);
+ exit(0);
+ }
+ }
+ }
+ else
+ {
+ size1 = pclFileWriteData(fd1, gWriteBuffer, (int)strlen(gWriteBuffer));
+ size2 = pclFileWriteData(fd2, gWriteBuffer2, (int)strlen(gWriteBuffer2));
+
+ ret = pclKeyReadData(0x20, "address/home_address", 4, 0, keyBuffer, READ_SIZE);
+ if( ret < 0)
+ printf("Failed\n");
+
+
+ size2 = pclFileReadData(fd1, readbuffer, (int)bufferSize);
+ size2 = pclFileReadData(fd2, readbuffer2, (int)bufferSize2);
+
+ printf("Wa\n");
+ for(j=0; j< NUM_OF_OPEN_FILES; j++)
+ {
+ memset(writeBuffer,0,128);
+ snprintf(writeBuffer, 128, "%s_media/oneAnotherFileTestData.db_%d", (const char*)userData, j);
+ pclFileSeek(fda[j], 0, SEEK_SET);
+ size2 = pclFileWriteData(fda[j], writeBuffer, (int)strlen(writeBuffer));
+ }
+ }
+
+ if(size2 < 0 || size1 < 0)
+ printf("Failed file\n");
+
+ ret = pclKeyWriteData(PCL_LDBID_LOCAL, "status/open_document", 3, 2,
+ (unsigned char*)"WT_ /var/opt/user_manual_climateControl.pdf", strlen("WT_ /var/opt/user_manual_climateControl.pdf"));
+
+ ret = pclKeyReadData(PCL_LDBID_LOCAL, "pos/last_position", 1, 1, keyBuffer, 1024);
+ if( ret < 0)
+ printf("Failed\n");
+
+ if(i%10 == 0)
+ {
+ //printf(" * One seek *\n");
+ pclFileSeek(fd1, 0, SEEK_SET);
+ pclFileSeek(fd2, 0, SEEK_SET);
+ }
+
+ memset(keyBuffer, 0, 1024);
+ ret = pclKeyReadData(0x20, "address/home_address", 4, 0, keyBuffer, READ_SIZE);
+ if( ret < 0)
+ printf("Failed\n");
+
+ printf("T3\n");
+
+ usleep(17500);
+ }
+
+ for(i=0; i<NUM_OF_OPEN_FILES; i++)
+ {
+ (void)pclFileClose(fda[i]);
+ }
+
+
+ (void)pclFileClose(fd1);
+ (void)pclFileClose(fd2);
+
+ pclDeinitLibrary();
+
+ return NULL;
+}
+
+
+
+void* WriteTwoThread(void* userData)
+{
+ int fd1 = -1, fd2 = -1, i = 0;
+ int size1 = 0, size2 = 0;
+ int ret = 0;
+ unsigned char keyBuffer[1024] = {0};
+
+ int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
+
+ (void)pclInitLibrary(gTheAppId, shutdownReg);
+
+ printf("Thread: %s\n", (const char*)userData);
+
+ size_t bufferSize = strlen(gWriteBuffer);
+ size_t bufferSize2 = strlen(gWriteBuffer2);
+
+ unsigned char* readbuffer = malloc(bufferSize);
+ unsigned char* readbuffer2 = malloc(bufferSize2);
+
+
+ fd1 = pclFileOpen(PCL_LDBID_LOCAL, "media/oneSomeFileTestData.db", 1, 1);
+ printf("Two fd1: %d\n", fd1);
+
+ fd2 = pclFileOpen(PCL_LDBID_LOCAL, "media/oneAnotherFileTestData.db", 2, 1);
+ printf("Two fd2: %d\n", fd2);
+
+
+ for(i=0; i< 20000; i++)
+ {
+ memset(readbuffer, 0, bufferSize);
+ memset(readbuffer2, 0, bufferSize2);
+ memset(keyBuffer, 0, 1024);
+
+ printf("loop Two: %d\n", i);
+ if(i%2)
+ {
+ size1 = pclFileWriteData(fd1, gWriteBuffer, (int)strlen(gWriteBuffer));
+ size2 = pclFileWriteData(fd2, gWriteBuffer2, (int)strlen(gWriteBuffer2));
+
+
+ ret = pclKeyReadData(0x20, "address/home_address", 4, 0, keyBuffer, READ_SIZE);
+ if( ret < 0)
+ printf("Failed\n");
+
+ size2 = pclFileReadData(fd1, readbuffer, (int)bufferSize);
+ size2 = pclFileReadData(fd2, readbuffer2, (int)bufferSize2);
+ }
+ else
+ {
+ printf("Two write1\n");
+ size1 = pclFileWriteData(fd1, gWriteBuffer2, (int)strlen(gWriteBuffer2));
+ printf("Two write2\n");
+ size2 = pclFileWriteData(fd2, gWriteBuffer, (int)strlen(gWriteBuffer));
+
+ printf("Two read key\n");
+ ret = pclKeyReadData(0x20, "address/home_address", 4, 0, keyBuffer, READ_SIZE);
+ if( ret < 0)
+ printf("Failed\n");
+
+ size2 = pclFileReadData(fd1, readbuffer2, (int)bufferSize2);
+ size2 = pclFileReadData(fd2, readbuffer, (int)bufferSize);
+ }
+
+ if(size2 < 0 || size1 < 0)
+ printf("Failed file\n");
+
+ ret = pclKeyWriteData(PCL_LDBID_LOCAL, "status/open_document", 3, 2,
+ (unsigned char*)"WT_ /var/opt/user_manual_climateControl.pdf", strlen("WT_ /var/opt/user_manual_climateControl.pdf"));
+
+
+ memset(keyBuffer, 0, 1024);
+ ret = pclKeyReadData(PCL_LDBID_LOCAL, "pos/last_position", 1, 1, keyBuffer, 1024);
+ if( ret < 0)
+ printf("Failed\n");
+
+ //printf("Two - write - %d -- %d - %d \n", i, size1, size2);
+
+ if(i%10 == 0)
+ {
+ //printf(" * Two seek *\n");
+ pclFileSeek(fd1, 0, SEEK_SET);
+ pclFileSeek(fd2, 0, SEEK_SET);
+ }
+
+ printf("T2\n");
+
+ usleep(17500);
+ }
+
+ (void)pclFileClose(fd1);
+ (void)pclFileClose(fd2);
+
+ pclDeinitLibrary();
+
+ return NULL;
+}
+
+
+
+void doEndlessWrite()
+{
+ int* retval;
+ pthread_t one, two, three;
+
+
+ if(pthread_create(&one, NULL, WriteOneThread, "One") != -1)
+ {
+ (void)pthread_setname_np(one, "One");
+ }
+
+ if(pthread_create(&two, NULL, WriteTwoThread, "Two") != -1)
+ {
+ (void)pthread_setname_np(two, "Two");
+ }
+
+ if(pthread_create(&three, NULL, WriteThreeThread, "Three") != -1)
+ {
+ (void)pthread_setname_np(three, "Three");
+ }
+
+ pthread_join(one, (void**)&retval); // wait until thread has ended
+ printf("Thread One joined\n");
+
+ pthread_join(two, (void**)&retval); // wait until thread has ended
+ printf("Thread Two joined\n");
+
+ pthread_join(three, (void**)&retval); // wait until thread has ended
+ printf("Thread One2 joined\n");
+
+ printf("End Test\n");
+
+}
+
+
+
int main(int argc, char *argv[])
{
@@ -999,7 +1523,7 @@ int main(int argc, char *argv[])
gTheAppId[MaxAppNameLen-1] = '\0';
/// debug log and trace (DLT) setup
- DLT_REGISTER_APP("PCLT", "PCL tests");
+ DLT_REGISTER_APP("PCLTf", "PCL tests");
DLT_REGISTER_CONTEXT(gPcltDLTContext, "PCLt", "Context for PCL testing");
@@ -1007,19 +1531,26 @@ int main(int argc, char *argv[])
data_setupBlacklist();
- Suite * s = persistencyClientLib_suite();
- SRunner * sr = srunner_create(s);
- srunner_set_fork_status(sr, CK_NOFORK);
+ if(argc == 1)
+ {
+ Suite * s = persistencyClientLib_suite();
+ SRunner * sr = srunner_create(s);
+ srunner_set_fork_status(sr, CK_NOFORK);
- srunner_set_xml(sr, "/tmp/persistenceClientLibraryTestFile.xml");
- srunner_set_log(sr, "/tmp/persistenceClientLibraryTestFile.log");
+ srunner_set_xml(sr, "/tmp/persistenceClientLibraryTestFile.xml");
+ srunner_set_log(sr, "/tmp/persistenceClientLibraryTestFile.log");
- srunner_run_all(sr, CK_VERBOSE /*CK_NORMAL CK_VERBOSE CK_SUBUNIT*/);
+ srunner_run_all(sr, CK_VERBOSE /*CK_NORMAL CK_VERBOSE CK_SUBUNIT*/);
- nr_failed = srunner_ntests_failed(sr);
- srunner_ntests_run(sr);
- srunner_free(sr);
+ nr_failed = srunner_ntests_failed(sr);
+ srunner_ntests_run(sr);
+ srunner_free(sr);
+ }
+ else
+ {
+ doEndlessWrite();
+ }
DLT_LOG(gPcltDLTContext, DLT_LOG_INFO, DLT_STRING("End of PCL test"));