b553db5a110234c2e3bdc43a11e8296a044191f0
[ipc/ipcdev.git] / qnx / src / tests / NameServerApp / NameServerApp.c
1 /*
2  * Copyright (c) 2013-2015, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * *  Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * *  Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * *  Neither the name of Texas Instruments Incorporated nor the names of
17  *    its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 /* =============================================================================
33  *  @file   NameServerApp.c
34  *
35  *  @brief  Sample application for NameServer module between MPU and Remote Proc
36  *
37  *  ============================================================================
38  */
40 /* Standard headers */
41 #include <stdio.h>
43 /* Ipc Standard header */
44 #include <ti/ipc/Std.h>
46 #include <ti/ipc/Ipc.h>
47 #include <_NameServer.h>
49 /* Module level headers */
50 #include <ti/ipc/NameServer.h>
53 /** ============================================================================
54  *  Macros and types
55  *  ============================================================================
56  */
57 #define NSNAME "MyNS"
58 #define NSNAME2 "MyNS2"
59 #define NSLONGNAME "LongNameabcdefghijklmnopqrstuvwxyz1234567890abcdefghi" \
60     "jklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890"
62 /** ============================================================================
63  *  Globals
64  *  ============================================================================
65  */
66 Int nameLenTest()
67 {
68     NameServer_Params params;
69     NameServer_Handle nsHandle;
70     Int32 status = 0;
71     Ptr ptr;
72     UInt32 val;
74     printf("Testing long names...\n");
76     NameServer_Params_init(&params);
78     params.maxValueLen = sizeof(UInt32);
79     params.maxNameLen = 32;
81     nsHandle = NameServer_create(NSLONGNAME, &params);
82     if (nsHandle == NULL) {
83         printf("Failed to create NameServer '%s'\n", NSLONGNAME);
84         return -1;
85     }
86     else {
87         printf("Created NameServer '%s'\n", NSLONGNAME);
88     }
90     /* This name should be too long for creation params and results in error */
91     printf("Trying to add a name that exceeds maxNameLen...\n");
92     ptr = NameServer_addUInt32(nsHandle, NSLONGNAME, 0xdeadbeef);
93     if (ptr == NULL) {
94         printf("    ...got expected Failure from NameServer_addUInt32()\n");
95     }
96     else {
97         printf("    Error: NameServer_addUInt32() returned non-NULL %p (but "
98             "was expected to fail)\n", ptr);
99         NameServer_delete(&nsHandle);
100         return -1;
101     }
103     printf("Deleting nsHandle...\n");
104     NameServer_delete(&nsHandle);
106     NameServer_Params_init(&params);
108     params.maxValueLen = sizeof(UInt32);
109     params.maxNameLen = 180;
111     nsHandle = NameServer_create(NSLONGNAME, &params);
112     if (nsHandle == NULL) {
113         printf("Failed to create NameServer '%s'\n", NSLONGNAME);
114         return -1;
115     }
116     else {
117         printf("Created NameServer '%s'\n", NSLONGNAME);
118     }
120     /* This name is too long for remote to handle and results in error */
121     printf("Trying to get a name that the remote cannot handle...\n");
122     val = 0x00c0ffee;
123     status = NameServer_getUInt32(nsHandle, NSLONGNAME, &val, NULL);
124     if (status == NameServer_E_NAMETOOLONG) {
125         printf("    ...got expected Failure from NameServer_getUInt32()\n");
126     }
127     else {
128         printf("    Error: NameServer_getUint32() returned unexpected "
129             "result: %d\n", status);
130         return -1;
131     }
133     printf("Deleting nsHandle...\n");
134     NameServer_delete(&nsHandle);
136     NameServer_Params_init(&params);
138     params.maxValueLen = sizeof(UInt32);
139     params.maxNameLen = 32;
141     nsHandle = NameServer_create(NSLONGNAME, &params);
142     if (nsHandle == NULL) {
143         printf("Failed to create NameServer '%s'\n", NSLONGNAME);
144         return -1;
145     }
146     else {
147         printf("Created NameServer '%s'\n", NSLONGNAME);
148     }
150     /* The instance name is too long for remote and results in error */
151     printf("Trying to use an instance name that the remote cannot "
152         "handle...\n");
153     val = 0x00c0ffee;
154     status = NameServer_getUInt32(nsHandle, "Key", &val, NULL);
155     if (status == NameServer_E_NAMETOOLONG) {
156         printf("    ...got expected Failure from NameServer_getUInt32()\n");
157     }
158     else {
159         printf("    Error: NameServer_getUint32() returned unexpected "
160             "result: %d\n", status);
161         return -1;
162     }
164     printf("Deleting nsHandle...\n");
165     NameServer_delete(&nsHandle);
167     return 0;
170 Int testNS(NameServer_Handle nsHandle, String name)
172     Int32 status = 0;
173     Ptr ptr;
174     UInt32 val;
175     char key[16];
176     Int i;
178     ptr = NameServer_addUInt32(nsHandle, name, 0xdeadbeef);
179     if (ptr == NULL) {
180         printf("Failed to NameServer_addUInt32()\n");
181         return -1;
182     }
183     else {
184         printf("NameServer_addUInt32() returned %p\n", ptr);
185     }
187     printf("Trying to add same key (should fail)...\n");
188     ptr = NameServer_addUInt32(nsHandle, name, 0xdeadc0de);
189     if (ptr == NULL) {
190         printf("    ...got expected Failure from NameServer_addUInt32()\n");
191     }
192     else {
193         printf("    Error: NameServer_addUInt32() returned non-NULL %p (but was expected to fail)\n", ptr);
194         return -1;
195     }
197     val = 0x00c0ffee;
198     status = NameServer_getUInt32(nsHandle, name, &val, NULL);
199     printf("NameServer_getUInt32() returned %d, val=0x%x (was 0x00c0ffee)\n", status, val);
201     printf("Removing 0xdeadbeef w/ NameServer_remove()...\n");
202     status = NameServer_remove(nsHandle, name);
203     if (status < 0) {
204         printf("NameServer_remove() failed: %d\n", status);
205         return -1;
206     }
208     ptr = NameServer_addUInt32(nsHandle, name, 0xdeadc0de);
209     if (ptr == NULL) {
210         printf("Error: NameServer_addUInt32() failed\n");
211         return -1;
212     }
213     else {
214         printf("NameServer_addUInt32(0xdeadc0de) succeeded\n");
215     }
217     val = 0x00c0ffee;
218     status = NameServer_getUInt32(nsHandle, name, &val, NULL);
219     printf("NameServer_getUInt32() returned %d, val=0x%x (was 0x00c0ffee)\n", status, val);
221     printf("Removing 0xdeadc0de w/ NameServer_removeEntry()...\n");
222     status = NameServer_removeEntry(nsHandle, ptr);
223     if (status < 0) {
224         printf("NameServer_remove() failed: %d\n", status);
225         return -1;
226     }
228     ptr = NameServer_addUInt32(nsHandle, name, 0x0badc0de);
229     if (ptr == NULL) {
230         printf("Error: NameServer_addUInt32() failed\n");
231         return -1;
232     }
233     else {
234         printf("NameServer_addUInt32(0x0badc0de) succeeded\n");
235     }
237     val = 0x00c0ffee;
238     status = NameServer_getUInt32(nsHandle, name, &val, NULL);
239     printf("NameServer_getUInt32() returned %d, val=0x%x (was 0x00c0ffee)\n", status, val);
241     status = NameServer_remove(nsHandle, name);
242     if (status < 0) {
243         printf("Error: NameServer_remove() failed\n");
244         return -1;
245     }
246     else {
247         printf("NameServer_remove(%s) succeeded\n", name);
248     }
250     for (i = 0; i < 10; i++) {
251         sprintf(key, "foobar%d", i);
253         ptr = NameServer_addUInt32(nsHandle, key, 0x0badc0de + i);
254         if (ptr == NULL) {
255             printf("Error: NameServer_addUInt32() failed\n");
256             return -1;
257         }
258         else {
259             printf("NameServer_addUInt32(%s, 0x%x) succeeded\n", key, 0x0badc0de + i);
260         }
262         val = 0x00c0ffee;
263         status = NameServer_getUInt32(nsHandle, key, &val, NULL);
264         printf("NameServer_getUInt32(%s) returned %d, val=0x%x (was 0x00c0ffee)\n", key, status, val);
266         if (val != (0x0badc0de + i)) {
267             printf("get val (0x%x) != add val (0x%x)!\n", val, 0x0badc0de + i);
268         }
269     }
271     for (i = 0; i < 10; i++) {
272         sprintf(key, "foobar%d", i);
274         status = NameServer_remove(nsHandle, key);
275         if (status < 0) {
276             printf("Error: NameServer_remove() failed\n");
277             return -1;
278         }
279         else {
280             printf("NameServer_remove(%s) succeeded\n", key);
281         }
282     }
284     return 0;
287 /** ============================================================================
288  *  Functions
289  *  ============================================================================
290  */
291 Int
292 NameServerApp_startup()
294     Int32 status = 0;
295     NameServer_Params params;
296     NameServer_Handle nsHandle;
297     NameServer_Handle nsHandleAlias;
298     NameServer_Handle nsHandle2;
299     Int iteration = 0;
301     printf ("Entered NameServerApp_startup\n");
303     status = Ipc_start();
305     if (status < 0) {
306         printf("Ipc_start failed: status = %d\n", status);
307         return -1;
308     }
310     printf("Calling NameServer_setup()...\n");
311     NameServer_setup();
313 again:
314     NameServer_Params_init(&params);
316     params.maxValueLen = sizeof(UInt32);
317     params.maxNameLen = 32;
319     printf("params.maxValueLen=%d\n", params.maxValueLen);
320     printf("params.maxNameLen=%d\n", params.maxNameLen);
321     printf("params.checkExisting=%d\n", params.checkExisting);
323     nsHandle = NameServer_create(NSNAME, &params);
324     if (nsHandle == NULL) {
325         printf("Failed to create NameServer '%s'\n", NSNAME);
326         return -1;
327     }
328     else {
329         printf("Created NameServer '%s'\n", NSNAME);
330     }
332     nsHandleAlias = NameServer_create(NSNAME, &params);
333     if (nsHandleAlias == NULL) {
334         printf("Failed to get handle to NameServer '%s'\n", NSNAME);
335         return -1;
336     }
337     else {
338         printf("Got another handle to NameServer '%s'\n", NSNAME);
339     }
341     NameServer_Params_init(&params);
343     params.maxValueLen = sizeof(UInt32);
344     params.maxNameLen = 32;
345     nsHandle2 = NameServer_create(NSNAME2, &params);
346     if (nsHandle2 == NULL) {
347         printf("Failed to create NameServer '%s'\n", NSNAME2);
348         return -1;
349     }
350     else {
351         printf("Created NameServer '%s'\n", NSNAME2);
352     }
354     printf("Testing nsHandle\n");
355     status = testNS(nsHandle, "Key");
356     if (status != 0) {
357         printf("test failed on nsHandle\n");
358         return status;
359     }
360     printf("Testing nsHandle2\n");
361     status = testNS(nsHandle2, "Key");
362     if (status != 0) {
363         printf("test failed on nsHandle2\n");
364         return status;
365     }
367     printf("Deleting nsHandle and nsHandle2...\n");
368     NameServer_delete(&nsHandle);
369     NameServer_delete(&nsHandle2);
371     /*
372      * Verify that we can still use the alias handle after deleting the
373      * initial handle
374      */
375     printf("Testing nsHandleAlias\n");
376     status = testNS(nsHandleAlias, "Key");
377     if (status != 0) {
378         printf("test failed on nsHandleAlias\n");
379         return status;
380     }
381     printf("Deleting nsHandleAlias...\n");
382     NameServer_delete(&nsHandleAlias);
384     iteration++;
385     if (iteration < 2) {
386         goto again;
387     }
389     status = nameLenTest();
390     if (status != 0) {
391         printf("Name Length test failed\n");
392         return status;
393     }
395     printf("Calling NameServer_destroy()...\n");
396     NameServer_destroy();
398     printf ("Leaving NameServerApp_startup: status = 0x%x\n", status);
400     return status;
404 Int
405 NameServerApp_execute()
407     Int32 status = 0;
409     printf ("Entered NameServerApp_execute\n");
411     printf ("Leaving NameServerApp_execute\n\n");
413     return status;
416 Int
417 NameServerApp_shutdown()
419     Int32 status = 0;
421     printf ("Entered NameServerApp_shutdown()\n");
423     status = Ipc_stop();
424     if (status < 0) {
425         printf("Ipc_stop failed: status = %d\n", status);
426     }
428     printf ("Leave NameServerApp_shutdown()\n");
430     return status;
433 int
434 main (int argc, char ** argv)
436     int status = 0;
438     status = NameServerApp_startup();
439     if (status < 0) {
440         return -1;
441     }
443     status = NameServerApp_execute();
444     if (status < 0) {
445         return -1;
446     }
448     status = NameServerApp_shutdown();
449     if (status < 0) {
450         return -1;
451     }
453     return(0);