]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - ipc/ipcdev.git/blobdiff - qnx/src/tests/NameServerApp/NameServerApp.c
QNX: Tests: Add error/cleanup tests to NameServer test
[ipc/ipcdev.git] / qnx / src / tests / NameServerApp / NameServerApp.c
index ff05ea47a5b1c1a74a70a4b0a9ab90208aedd655..6fb6027239478962d613467ba8688fd5946ca344 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Texas Instruments Incorporated
+ * Copyright (c) 2013-2015, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  */
 #define NSNAME "MyNS"
 #define NSNAME2 "MyNS2"
+#define NSLONGNAME "LongNameabcdefghijklmnopqrstuvwxyz1234567890abcdefghi" \
+    "jklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890"
 
 /** ============================================================================
  *  Globals
  *  ============================================================================
  */
+Int cleanupTest()
+{
+    NameServer_Params params;
+    NameServer_Handle nsHandle;
+    Ptr ptr;
+
+    printf("Testing lazy cleanup...\n");
+
+    NameServer_Params_init(&params);
+
+    params.maxValueLen = sizeof(UInt32);
+    params.maxNameLen = 32;
+
+    nsHandle = NameServer_create(NSNAME, &params);
+    if (nsHandle == NULL) {
+        printf("Failed to create NameServer '%s'\n", NSNAME);
+        return -1;
+    }
+    else {
+        printf("Created NameServer '%s'\n", NSNAME);
+    }
+
+    ptr = NameServer_addUInt32(nsHandle, NSNAME2, 0xdeadbeef);
+    if (ptr == NULL) {
+        printf("    Error: NameServer_addUInt32() returned NULL\n");
+        NameServer_delete(&nsHandle);
+        return -1;
+    }
+    else {
+        printf("Added '%s' of value '0x%x' to instance '%s'\n", NSNAME2, 0xdeadbeef, NSNAME);
+    }
+
+    printf("Deleting nsHandle that still has an entry...\n");
+    NameServer_delete(&nsHandle);
+
+    printf("Creating an nsHandle with the same name again...\n");
+    nsHandle = NameServer_create(NSNAME, &params);
+    if (nsHandle == NULL) {
+        printf("Failed to create NameServer '%s'\n", NSNAME);
+        return -1;
+    }
+    else {
+        printf("Created NameServer '%s'\n", NSNAME);
+    }
+
+    ptr = NameServer_addUInt32(nsHandle, NSNAME2, 0xbadc0ffe);
+    if (ptr == NULL) {
+        printf("    Error: NameServer_addUInt32() returned NULL\n");
+        NameServer_delete(&nsHandle);
+        return -1;
+    }
+    else {
+        printf("Added '%s' of value '0x%x' to instance '%s'\n", NSNAME2, 0xbadc0ffe, NSNAME);
+    }
+
+    NameServer_delete(&nsHandle);
+
+    return 0;
+}
+
+Int nameLenTest()
+{
+    NameServer_Params params;
+    NameServer_Handle nsHandle;
+    Int32 status = 0;
+    Ptr ptr;
+    UInt32 val;
+
+    printf("Testing long names...\n");
+
+    NameServer_Params_init(&params);
+
+    params.maxValueLen = sizeof(UInt32);
+    params.maxNameLen = 32;
+
+    nsHandle = NameServer_create(NSLONGNAME, &params);
+    if (nsHandle == NULL) {
+        printf("Failed to create NameServer '%s'\n", NSLONGNAME);
+        return -1;
+    }
+    else {
+        printf("Created NameServer '%s'\n", NSLONGNAME);
+    }
+
+    /* This name should be too long for creation params and results in error */
+    printf("Trying to add a name that exceeds maxNameLen...\n");
+    ptr = NameServer_addUInt32(nsHandle, NSLONGNAME, 0xdeadbeef);
+    if (ptr == NULL) {
+        printf("    ...got expected Failure from NameServer_addUInt32()\n");
+    }
+    else {
+        printf("    Error: NameServer_addUInt32() returned non-NULL %p (but "
+            "was expected to fail)\n", ptr);
+        NameServer_delete(&nsHandle);
+        return -1;
+    }
+
+    printf("Deleting nsHandle...\n");
+    NameServer_delete(&nsHandle);
+
+    NameServer_Params_init(&params);
+
+    params.maxValueLen = sizeof(UInt32);
+    params.maxNameLen = 180;
+
+    nsHandle = NameServer_create(NSLONGNAME, &params);
+    if (nsHandle == NULL) {
+        printf("Failed to create NameServer '%s'\n", NSLONGNAME);
+        return -1;
+    }
+    else {
+        printf("Created NameServer '%s'\n", NSLONGNAME);
+    }
+
+    /* This name is too long for remote to handle and results in error */
+    printf("Trying to get a name that the remote cannot handle...\n");
+    val = 0x00c0ffee;
+    status = NameServer_getUInt32(nsHandle, NSLONGNAME, &val, NULL);
+    if (status == NameServer_E_NAMETOOLONG) {
+        printf("    ...got expected Failure from NameServer_getUInt32()\n");
+    }
+    else {
+        printf("    Error: NameServer_getUint32() returned unexpected "
+            "result: %d\n", status);
+        return -1;
+    }
+
+    printf("Deleting nsHandle...\n");
+    NameServer_delete(&nsHandle);
+
+    NameServer_Params_init(&params);
+
+    params.maxValueLen = sizeof(UInt32);
+    params.maxNameLen = 32;
+
+    nsHandle = NameServer_create(NSLONGNAME, &params);
+    if (nsHandle == NULL) {
+        printf("Failed to create NameServer '%s'\n", NSLONGNAME);
+        return -1;
+    }
+    else {
+        printf("Created NameServer '%s'\n", NSLONGNAME);
+    }
+
+    /* The instance name is too long for remote and results in error */
+    printf("Trying to use an instance name that the remote cannot "
+        "handle...\n");
+    val = 0x00c0ffee;
+    status = NameServer_getUInt32(nsHandle, "Key", &val, NULL);
+    if (status == NameServer_E_NAMETOOLONG) {
+        printf("    ...got expected Failure from NameServer_getUInt32()\n");
+    }
+    else {
+        printf("    Error: NameServer_getUint32() returned unexpected "
+            "result: %d\n", status);
+        return -1;
+    }
+
+    printf("Deleting nsHandle...\n");
+    NameServer_delete(&nsHandle);
+
+    return 0;
+}
 
 Int testNS(NameServer_Handle nsHandle, String name)
 {
@@ -189,6 +354,7 @@ NameServerApp_startup()
     Int32 status = 0;
     NameServer_Params params;
     NameServer_Handle nsHandle;
+    NameServer_Handle nsHandleAlias;
     NameServer_Handle nsHandle2;
     Int iteration = 0;
 
@@ -206,12 +372,14 @@ NameServerApp_startup()
 
 again:
     NameServer_Params_init(&params);
+
+    params.maxValueLen = sizeof(UInt32);
+    params.maxNameLen = 32;
+
     printf("params.maxValueLen=%d\n", params.maxValueLen);
     printf("params.maxNameLen=%d\n", params.maxNameLen);
     printf("params.checkExisting=%d\n", params.checkExisting);
 
-    params.maxValueLen = sizeof(UInt32);
-    params.maxNameLen = 32;
     nsHandle = NameServer_create(NSNAME, &params);
     if (nsHandle == NULL) {
         printf("Failed to create NameServer '%s'\n", NSNAME);
@@ -221,6 +389,15 @@ again:
         printf("Created NameServer '%s'\n", NSNAME);
     }
 
+    nsHandleAlias = NameServer_create(NSNAME, &params);
+    if (nsHandleAlias == NULL) {
+        printf("Failed to get handle to NameServer '%s'\n", NSNAME);
+        return -1;
+    }
+    else {
+        printf("Got another handle to NameServer '%s'\n", NSNAME);
+    }
+
     NameServer_Params_init(&params);
 
     params.maxValueLen = sizeof(UInt32);
@@ -234,18 +411,53 @@ again:
         printf("Created NameServer '%s'\n", NSNAME2);
     }
 
+    printf("Testing nsHandle\n");
     status = testNS(nsHandle, "Key");
+    if (status != 0) {
+        printf("test failed on nsHandle\n");
+        return status;
+    }
+    printf("Testing nsHandle2\n");
     status = testNS(nsHandle2, "Key");
+    if (status != 0) {
+        printf("test failed on nsHandle2\n");
+        return status;
+    }
 
     printf("Deleting nsHandle and nsHandle2...\n");
     NameServer_delete(&nsHandle);
     NameServer_delete(&nsHandle2);
 
+    /*
+     * Verify that we can still use the alias handle after deleting the
+     * initial handle
+     */
+    printf("Testing nsHandleAlias\n");
+    status = testNS(nsHandleAlias, "Key");
+    if (status != 0) {
+        printf("test failed on nsHandleAlias\n");
+        return status;
+    }
+    printf("Deleting nsHandleAlias...\n");
+    NameServer_delete(&nsHandleAlias);
+
     iteration++;
     if (iteration < 2) {
         goto again;
     }
 
+    status = nameLenTest();
+    if (status != 0) {
+        printf("Name Length test failed\n");
+        return status;
+    }
+
+    status = cleanupTest();
+    if (status != 0) {
+        printf("Cleanup test failed\n");
+        return status;
+    }
+
     printf("Calling NameServer_destroy()...\n");
     NameServer_destroy();