• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *   Copyright (c) International Business Machines  Corp., 2004
3  *
4  *   This program is free software;  you can redistribute it and/or modify
5  *   it under the terms of the GNU General Public License as published by
6  *   the Free Software Foundation; either version 2 of the License, or
7  *   (at your option) any later version.
8  *
9  *   This program is distributed in the hope that it will be useful,
10  *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
12  *   the GNU General Public License for more details.
13  *
14  *   You should have received a copy of the GNU General Public License
15  *   along with this program;  if not, write to the Free Software
16  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 /*
20  * TEST CASE	: session.c
21  *
22  * VARIATIONS	: 35
23  *
24  * API'S TESTED	: dm_create_session
25  * 		  dm_destroy_session
26  * 		  dm_getall_sessions
27  * 		  dm_query_session
28  */
29 #include <string.h>
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include <errno.h>
33 #include "dm_test.h"
34 
35 #define NUM_SESSIONS 8
36 
37 char dmMsgBuf[4096];
38 
LogSessions(dm_sessid_t * sid,u_int nelem)39 void LogSessions(dm_sessid_t * sid, u_int nelem)
40 {
41 	int i;
42 
43 	DMLOG_PRINT(DMLVL_DEBUG, "Sessions:\n");
44 	for (i = 0; i < nelem; i++) {
45 		DMLOG_PRINT(DMLVL_DEBUG, "  element %d: %d\n", i, sid[i]);
46 	}
47 }
48 
main(int argc,char ** argv)49 int main(int argc, char **argv)
50 {
51 
52 	char *szSessionInfo = "dm_test session info";
53 	char *szFuncName;
54 	char *varstr;
55 	int i;
56 	int rc;
57 
58 	DMOPT_PARSE(argc, argv);
59 	DMLOG_START();
60 
61 	/* CANNOT DO ANYTHING WITHOUT SUCCESSFUL INITIALIZATION!!! */
62 	if ((rc = dm_init_service(&varstr)) != 0) {
63 		DMLOG_PRINT(DMLVL_ERR,
64 			    "dm_init_service failed! (rc = %d, errno = %d)\n",
65 			    rc, errno);
66 		DM_EXIT();
67 	} else {
68 		int nexist;
69 		rc = dm_getall_sessions(0, NULL, &nexist);
70 
71 		if (rc == -1 && errno == E2BIG) {
72 			dm_sessid_t *psid;
73 
74 			DMLOG_PRINT(DMLVL_DEBUG, "%d sessions already exist\n",
75 				    nexist);
76 
77 			if ((psid = malloc(nexist * sizeof(dm_sessid_t))) != NULL) {
78 				if ((rc =
79 				     dm_getall_sessions(nexist, psid,
80 							&nexist)) == 0) {
81 					for (rc = 0, i = 0; i < nexist; i++) {
82 						DMLOG_PRINT(DMLVL_DEBUG,
83 							    "destroying session %d\n",
84 							    psid[i]);
85 						rc |=
86 						    dm_destroy_session(psid[i]);
87 					}
88 
89 					if (rc == -1) {
90 						DMLOG_PRINT(DMLVL_ERR,
91 							    "dm_destroy_session failed, unable to destroy existing sessions\n");
92 						DM_EXIT();
93 					}
94 				} else {
95 					DMLOG_PRINT(DMLVL_ERR,
96 						    "dm_getall_sessions failed, unable to destroy existing sessions\n");
97 					DM_EXIT();
98 				}
99 
100 				free(psid);
101 			} else {
102 				DMLOG_PRINT(DMLVL_ERR,
103 					    "malloc failed, unable to destroy existing sessions\n");
104 				DM_EXIT();
105 			}
106 		}
107 	}
108 
109 	DMLOG_PRINT(DMLVL_DEBUG, "Starting DMAPI session tests\n");
110 
111 	szFuncName = "dm_create_session";
112 
113 	/*
114 	 * TEST    : dm_create_session - invalid oldsid
115 	 * EXPECTED: rc = -1, errno = EINVAL
116 	 */
117 	if (DMVAR_EXEC(CREATE_SESSION_BASE + 1)) {
118 		dm_sessid_t newsid;
119 
120 		/* Variation set up */
121 
122 		/* Variation */
123 		DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid oldsid)\n", szFuncName);
124 		rc = dm_create_session(INVALID_ADDR, szSessionInfo, &newsid);
125 		DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
126 
127 		/* Variation clean up */
128 	}
129 
130 	/*
131 	 * TEST    : dm_create_session - NULL sessinfop
132 	 * EXPECTED: rc = 0
133 	 */
134 	if (DMVAR_EXEC(CREATE_SESSION_BASE + 2)) {
135 		dm_sessid_t newsid;
136 
137 		/* Variation set up */
138 
139 		/* Variation */
140 		DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL sessinfop)\n", szFuncName);
141 		rc = dm_create_session(DM_NO_SESSION, NULL, &newsid);
142 		DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
143 
144 		/* Variation clean up */
145 	}
146 
147 	/*
148 	 * TEST    : dm_create_session - invalid sessinfop
149 	 * EXPECTED: rc = -1, errno = EFAULT
150 	 *
151 	 * This variation uncovered XFS BUG #2 (0 return code from strnlen_user
152 	 * ignored, which indicated fault)
153 	 */
154 	if (DMVAR_EXEC(CREATE_SESSION_BASE + 3)) {
155 		dm_sessid_t newsid;
156 
157 		/* Variation set up */
158 
159 		/* Variation */
160 		DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sessinfop)\n", szFuncName);
161 		rc = dm_create_session(DM_NO_SESSION, (char *)INVALID_ADDR,
162 				       &newsid);
163 		DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
164 
165 		/* Variation clean up */
166 	}
167 
168 	/*
169 	 * TEST    : dm_create_session - NULL newsidp
170 	 * EXPECTED: rc = -1, errno = EFAULT
171 	 */
172 	if (DMVAR_EXEC(CREATE_SESSION_BASE + 4)) {
173 		/* Variation set up */
174 
175 		/* Variation */
176 		DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL newsidp)\n", szFuncName);
177 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, NULL);
178 		DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
179 
180 		/* Variation clean up */
181 	}
182 
183 	/*
184 	 * TEST    : dm_create_session - invalid newsidp
185 	 * EXPECTED: rc = -1, errno = EFAULT
186 	 */
187 	if (DMVAR_EXEC(CREATE_SESSION_BASE + 5)) {
188 		/* Variation set up */
189 
190 		/* Variation */
191 		DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid newsidp)\n", szFuncName);
192 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo,
193 				       (dm_sessid_t *) INVALID_ADDR);
194 		DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
195 
196 		/* Variation clean up */
197 	}
198 
199 	/*
200 	 * TEST    : dm_create_session - DM_NO_SESSION oldsid
201 	 * EXPECTED: rc = 0
202 	 */
203 	if (DMVAR_EXEC(CREATE_SESSION_BASE + 6)) {
204 		dm_sessid_t newsid;
205 
206 		/* Variation set up */
207 
208 		/* Variation */
209 		DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION oldsid)\n",
210 			    szFuncName);
211 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
212 		if (rc == 0) {
213 			DMLOG_PRINT(DMLVL_DEBUG, "newsid = %d\n", newsid);
214 		}
215 		DMVAR_ENDPASSEXP(szFuncName, 0, rc);
216 
217 		/* Variation clean up */
218 		rc = dm_destroy_session(newsid);
219 		if (rc == -1) {
220 			DMLOG_PRINT(DMLVL_DEBUG,
221 				    "Unable to clean up variation! (errno = %d)\n",
222 				    errno);
223 		}
224 	}
225 
226 	/*
227 	 * TEST    : dm_create_session - valid oldsid
228 	 * EXPECTED: rc = 0
229 	 */
230 	if (DMVAR_EXEC(CREATE_SESSION_BASE + 7)) {
231 		dm_sessid_t newsid, oldsid;
232 
233 		/* Variation set up */
234 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
235 		if (rc == -1) {
236 			DMLOG_PRINT(DMLVL_DEBUG,
237 				    "Unable to set up variation! (errno = %d)\n",
238 				    errno);
239 			DMVAR_SKIP();
240 		} else {
241 			oldsid = newsid;
242 
243 			/* Variation */
244 			DMLOG_PRINT(DMLVL_DEBUG, "%s(valid oldsid)\n",
245 				    szFuncName);
246 			rc = dm_create_session(oldsid, szSessionInfo, &newsid);
247 			if (rc == 0) {
248 				DMLOG_PRINT(DMLVL_DEBUG, "newsid = %d\n",
249 					    newsid);
250 			}
251 			DMVAR_ENDPASSEXP(szFuncName, 0, rc);
252 
253 			/* Variation clean up */
254 			rc = dm_destroy_session(newsid);
255 			if (rc == -1) {
256 				DMLOG_PRINT(DMLVL_DEBUG,
257 					    "Unable to clean up variation! (errno = %d)\n",
258 					    errno);
259 			}
260 		}
261 	}
262 
263 	/*
264 	 * TEST    : dm_create_session - invalidated oldsid
265 	 * EXPECTED: rc = -1, errno = EINVAL
266 	 */
267 	if (DMVAR_EXEC(CREATE_SESSION_BASE + 8)) {
268 		dm_sessid_t newsid, oldsid, delsid;
269 
270 		/* Variation set up */
271 		if ((rc =
272 		     dm_create_session(DM_NO_SESSION, szSessionInfo,
273 				       &newsid)) == -1) {
274 			/* No clean up */
275 		} else
276 		    if ((rc =
277 			 dm_create_session(oldsid =
278 					   newsid, szSessionInfo,
279 					   &newsid)) == -1) {
280 			dm_destroy_session(oldsid);
281 		}
282 		if (rc == -1) {
283 			DMLOG_PRINT(DMLVL_DEBUG,
284 				    "Unable to set up variation! (errno = %d)\n",
285 				    errno);
286 			DMVAR_SKIP();
287 		} else {
288 			delsid = newsid;
289 
290 			/* Variation */
291 			DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated oldsid)\n",
292 				    szFuncName);
293 			rc = dm_create_session(oldsid, szSessionInfo, &newsid);
294 			DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
295 
296 			/* Variation clean up */
297 			rc = dm_destroy_session(delsid);
298 			if (rc == -1) {
299 				DMLOG_PRINT(DMLVL_DEBUG,
300 					    "Unable to clean up variation! (errno = %d)\n",
301 					    errno);
302 			}
303 		}
304 	}
305 
306 	/*
307 	 * TEST    : dm_create_session - maximum sessinfo
308 	 * EXPECTED: rc = 0
309 	 */
310 	if (DMVAR_EXEC(CREATE_SESSION_BASE + 9)) {
311 		dm_sessid_t newsid;
312 		char *szBig =
313 		    "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345";
314 
315 		/* Variation set up */
316 
317 		/* Variation */
318 		DMLOG_PRINT(DMLVL_DEBUG, "%s(max sessionfo)\n", szFuncName);
319 		rc = dm_create_session(DM_NO_SESSION, szBig, &newsid);
320 		if (rc == 0) {
321 			DMLOG_PRINT(DMLVL_DEBUG, "newsid = %d\n", newsid);
322 		}
323 		DMVAR_ENDPASSEXP(szFuncName, 0, rc);
324 
325 		/* Variation clean up */
326 		rc = dm_destroy_session(newsid);
327 		if (rc == -1) {
328 			DMLOG_PRINT(DMLVL_DEBUG,
329 				    "Unable to clean up variation! (errno = %d)\n",
330 				    errno);
331 		}
332 	}
333 
334 	/*
335 	 * TEST    : dm_create_session - sessinfo too big
336 	 * EXPECTED: rc = -1, errno = E2BIG
337 	 *
338 	 * This variation uncovered XFS BUG #1 (sessinfo simply truncated, API
339 	 * passed)
340 	 */
341 	if (DMVAR_EXEC(CREATE_SESSION_BASE + 10)) {
342 		dm_sessid_t newsid;
343 		char *szTooBig =
344 		    "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456";
345 
346 		/* Variation set up */
347 
348 		/* Variation */
349 		DMLOG_PRINT(DMLVL_DEBUG, "%s(sessinfo too big)\n", szFuncName);
350 		rc = dm_create_session(DM_NO_SESSION, szTooBig, &newsid);
351 		DMVAR_ENDFAILEXP(szFuncName, -1, rc, E2BIG);
352 
353 		/* Variation clean up */
354 	}
355 
356 	/*
357 	 * TEST    : dm_create_session - multiple sessions with same sessinfo
358 	 * EXPECTED: rc = 0
359 	 */
360 	if (DMVAR_EXEC(CREATE_SESSION_BASE + 11)) {
361 		dm_sessid_t newsid1, newsid2;
362 
363 		/* Variation set up */
364 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid1);
365 		if (rc == -1) {
366 			DMLOG_PRINT(DMLVL_DEBUG,
367 				    "Unable to set up variation! (errno = %d)\n",
368 				    errno);
369 			DMVAR_SKIP();
370 		} else {
371 			/* Variation */
372 			DMLOG_PRINT(DMLVL_DEBUG, "%s(same sessinfo)\n",
373 				    szFuncName);
374 			rc = dm_create_session(DM_NO_SESSION, szSessionInfo,
375 					       &newsid2);
376 			if (rc == 0) {
377 				DMLOG_PRINT(DMLVL_DEBUG,
378 					    "1st newsid = %d, 2nd newsid = %d\n",
379 					    newsid1, newsid2);
380 				if (newsid1 != newsid2) {
381 					DMLOG_PRINT(DMLVL_DEBUG,
382 						    "%s passed with expected rc = %d\n",
383 						    szFuncName, 0);
384 					DMVAR_PASS();
385 				} else {
386 					DMLOG_PRINT(DMLVL_ERR,
387 						    "%s failed with expected rc = %d but session IDs same\n",
388 						    szFuncName, 0);
389 					DMVAR_FAIL();
390 				}
391 			} else {
392 				DMLOG_PRINT(DMLVL_ERR,
393 					    "%s failed with unexpected rc = %d (errno = %d)\n",
394 					    szFuncName, rc, errno);
395 				DMVAR_FAIL();
396 			}
397 
398 			/* Variation clean up */
399 			rc = dm_destroy_session(newsid1);
400 			rc |= dm_destroy_session(newsid2);
401 			if (rc == -1) {
402 				DMLOG_PRINT(DMLVL_DEBUG,
403 					    "Unable to clean up variation! (errno = %d)\n",
404 					    errno);
405 			}
406 		}
407 	}
408 
409 	szFuncName = "dm_destroy_session";
410 
411 	/*
412 	 * TEST    : dm_destroy_session - DM_NO_SESSION sid
413 	 * EXPECTED: rc = -1, errno = EINVAL
414 	 */
415 	if (DMVAR_EXEC(DESTROY_SESSION_BASE + 1)) {
416 		/* Variation set up */
417 
418 		/* Variation */
419 		DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", szFuncName);
420 		rc = dm_destroy_session(DM_NO_SESSION);
421 		DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
422 
423 		/* Variation clean up */
424 	}
425 
426 	/*
427 	 * TEST    : dm_destroy_session - invalid sid
428 	 * EXPECTED: rc = -1, errno = EINVAL
429 	 */
430 	if (DMVAR_EXEC(DESTROY_SESSION_BASE + 2)) {
431 		/* Variation set up */
432 
433 		/* Variation */
434 		DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", szFuncName);
435 		rc = dm_destroy_session(INVALID_ADDR);
436 		DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
437 
438 		/* Variation clean up */
439 	}
440 
441 	/*
442 	 * TEST    : dm_destroy_session - invalidated sid
443 	 * EXPECTED: rc = 0
444 	 */
445 	if (DMVAR_EXEC(DESTROY_SESSION_BASE + 3)) {
446 		dm_sessid_t newsid;
447 
448 		/* Variation set up */
449 		if ((rc =
450 		     dm_create_session(DM_NO_SESSION, szSessionInfo,
451 				       &newsid)) != -1) {
452 			rc = dm_destroy_session(newsid);
453 		}
454 		if (rc == -1) {
455 			DMLOG_PRINT(DMLVL_DEBUG,
456 				    "Unable to set up variation! (errno = %d)\n",
457 				    errno);
458 			DMVAR_SKIP();
459 		} else {
460 			/* Variation */
461 			DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated sid)\n",
462 				    szFuncName);
463 			rc = dm_destroy_session(newsid);
464 			DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
465 
466 			/* Variation clean up */
467 		}
468 	}
469 
470 	/*
471 	 * TEST    : dm_destroy_session - valid sid
472 	 * EXPECTED: rc = 0
473 	 */
474 	if (DMVAR_EXEC(DESTROY_SESSION_BASE + 4)) {
475 		dm_sessid_t newsid;
476 
477 		/* Variation set up */
478 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
479 		if (rc == -1) {
480 			DMLOG_PRINT(DMLVL_DEBUG,
481 				    "Unable to set up variation! (errno = %d)\n",
482 				    errno);
483 			DMVAR_SKIP();
484 		} else {
485 			/* Variation */
486 			DMLOG_PRINT(DMLVL_DEBUG, "%s(valid sid)\n", szFuncName);
487 			rc = dm_destroy_session(newsid);
488 			DMVAR_ENDPASSEXP(szFuncName, 0, rc);
489 
490 			/* Variation clean up */
491 		}
492 	}
493 
494 	/*
495 	 * TEST    : dm_destroy_session - sid with oustanding events
496 	 * EXPECTED: rc = -1, erno = EBUSY
497 	 */
498 	if (DMVAR_EXEC(DESTROY_SESSION_BASE + 5)) {
499 		dm_sessid_t newsid;
500 		char buf[MSG_DATALEN];
501 		size_t rlen;
502 
503 		/* Variation set up */
504 		memcpy(buf, MSG_DATA, MSG_DATALEN);
505 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
506 		rc |= dm_send_msg(newsid, DM_MSGTYPE_ASYNC, MSG_DATALEN, buf);
507 		if (rc == -1) {
508 			DMLOG_PRINT(DMLVL_DEBUG,
509 				    "Unable to set up variation! (errno = %d)\n",
510 				    errno);
511 			DMVAR_SKIP();
512 		} else {
513 			/* Variation */
514 			DMLOG_PRINT(DMLVL_DEBUG, "%s(valid sid)\n", szFuncName);
515 			rc = dm_destroy_session(newsid);
516 			DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBUSY);
517 
518 			/* Variation clean up */
519 			rc = dm_get_events(newsid, 1, 0, sizeof(dmMsgBuf),
520 					   dmMsgBuf, &rlen);
521 			rc |= dm_destroy_session(newsid);
522 			if (rc == -1) {
523 				DMLOG_PRINT(DMLVL_DEBUG,
524 					    "Unable to clean up variation! (errno = %d)\n",
525 					    errno);
526 			}
527 		}
528 	}
529 
530 	szFuncName = "dm_getall_sessions";
531 
532 	/*
533 	 * TEST    : dm_getall_sessions - NULL sidbufp
534 	 * EXPECTED: rc = -1, errno EFAULT
535 	 */
536 	if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 1)) {
537 		dm_sessid_t newsid;
538 		int nelem;
539 
540 		/* Variation set up */
541 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
542 		if (rc == -1) {
543 			DMLOG_PRINT(DMLVL_DEBUG,
544 				    "Unable to set up variation! (errno = %d)\n",
545 				    errno);
546 			DMVAR_SKIP();
547 		} else {
548 			/* Variation */
549 			DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL sidbufp)\n",
550 				    szFuncName);
551 			rc = dm_getall_sessions(1, NULL, &nelem);
552 			DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
553 
554 			/* Variation clean up */
555 			rc = dm_destroy_session(newsid);
556 			if (rc == -1) {
557 				DMLOG_PRINT(DMLVL_DEBUG,
558 					    "Unable to clean up variation! (errno = %d)\n",
559 					    errno);
560 			}
561 		}
562 	}
563 
564 	/*
565 	 * TEST    : dm_getall_sessions - invalid sidbufp
566 	 * EXPECTED: rc = -1, errno EFAULT
567 	 */
568 	if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 2)) {
569 		dm_sessid_t newsid;
570 		int nelem;
571 
572 		/* Variation set up */
573 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
574 		if (rc == -1) {
575 			DMLOG_PRINT(DMLVL_DEBUG,
576 				    "Unable to set up variation! (errno = %d)\n",
577 				    errno);
578 			DMVAR_SKIP();
579 		} else {
580 			/* Variation */
581 			DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sidbufp)\n",
582 				    szFuncName);
583 			rc = dm_getall_sessions(1, (dm_sessid_t *) INVALID_ADDR,
584 						&nelem);
585 			DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
586 
587 			/* Variation clean up */
588 			rc = dm_destroy_session(newsid);
589 			if (rc == -1) {
590 				DMLOG_PRINT(DMLVL_DEBUG,
591 					    "Unable to clean up variation! (errno = %d)\n",
592 					    errno);
593 			}
594 		}
595 	}
596 
597 	/*
598 	 * TEST    : dm_getall_sessions - NULL nelemp
599 	 * EXPECTED: rc = -1, errno EFAULT
600 	 */
601 	if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 3)) {
602 		dm_sessid_t newsid, sidArray[1];
603 
604 		/* Variation set up */
605 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
606 		if (rc == -1) {
607 			DMLOG_PRINT(DMLVL_DEBUG,
608 				    "Unable to set up variation! (errno = %d)\n",
609 				    errno);
610 			DMVAR_SKIP();
611 		} else {
612 			/* Variation */
613 			DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL nelemp)\n",
614 				    szFuncName);
615 			rc = dm_getall_sessions(1, sidArray, NULL);
616 			DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
617 
618 			/* Variation clean up */
619 			rc = dm_destroy_session(newsid);
620 			if (rc == -1) {
621 				DMLOG_PRINT(DMLVL_DEBUG,
622 					    "Unable to clean up variation! (errno = %d)\n",
623 					    errno);
624 			}
625 		}
626 	}
627 
628 	/*
629 	 * TEST    : dm_getall_sessions - invalid nelemp
630 	 * EXPECTED: rc = -1, errno EFAULT
631 	 */
632 	if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 4)) {
633 		dm_sessid_t newsid, sidArray[1];
634 
635 		/* Variation set up */
636 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
637 		if (rc == -1) {
638 			DMLOG_PRINT(DMLVL_DEBUG,
639 				    "Unable to set up variation! (errno = %d)\n",
640 				    errno);
641 			DMVAR_SKIP();
642 		} else {
643 			/* Variation */
644 			DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid nelemp)\n",
645 				    szFuncName);
646 			rc = dm_getall_sessions(1, sidArray,
647 						(u_int *) INVALID_ADDR);
648 			DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
649 
650 			/* Variation clean up */
651 			rc = dm_destroy_session(newsid);
652 			if (rc == -1) {
653 				DMLOG_PRINT(DMLVL_DEBUG,
654 					    "Unable to clean up variation! (errno = %d)\n",
655 					    errno);
656 			}
657 		}
658 	}
659 
660 	/*
661 	 * TEST    : dm_getall_sessions - zero nelem, zero sessions
662 	 * EXPECTED: rc = 0
663 	 */
664 	if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 5)) {
665 		dm_sessid_t sidArray[1];
666 		int nelem;
667 
668 		/* Variation set up */
669 
670 		/* Variation */
671 		DMLOG_PRINT(DMLVL_DEBUG, "%s(zero nelem, zero sessions)\n",
672 			    szFuncName);
673 		rc = dm_getall_sessions(0, sidArray, &nelem);
674 		if (rc == 0) {
675 			DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem);
676 			if (nelem == 0) {
677 				DMLOG_PRINT(DMLVL_DEBUG,
678 					    "%s passed with expected rc = %d\n",
679 					    szFuncName, 0);
680 				DMVAR_PASS();
681 			} else {
682 				DMLOG_PRINT(DMLVL_ERR,
683 					    "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n",
684 					    szFuncName, 0, nelem, 0);
685 				DMVAR_FAIL();
686 			}
687 		} else {
688 			DMLOG_PRINT(DMLVL_ERR,
689 				    "%s failed with unexpected rc = %d (errno = %d)\n",
690 				    szFuncName, rc, errno);
691 			DMVAR_FAIL();
692 		}
693 
694 		/* Variation clean up */
695 	}
696 
697 	/*
698 	 * TEST    : dm_getall_sessions - zero nelem, one session
699 	 * EXPECTED: rc = -1, errno = E2BIG
700 	 */
701 	if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 6)) {
702 		dm_sessid_t newsid, sidArray[1];
703 		int nelem;
704 
705 		/* Variation set up */
706 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
707 		if (rc == -1) {
708 			DMLOG_PRINT(DMLVL_DEBUG,
709 				    "Unable to set up variation! (errno = %d)\n",
710 				    errno);
711 			DMVAR_SKIP();
712 		} else {
713 			/* Variation */
714 			DMLOG_PRINT(DMLVL_DEBUG,
715 				    "%s(zero nelem, one session)\n",
716 				    szFuncName);
717 			rc = dm_getall_sessions(0, sidArray, &nelem);
718 
719 			if (rc == -1) {
720 				if (errno == E2BIG) {
721 					DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n",
722 						    nelem);
723 					if (nelem == 1) {
724 						DMLOG_PRINT(DMLVL_DEBUG,
725 							    "%s passed with expected rc = %d and expected errno = %d\n",
726 							    szFuncName, -1,
727 							    E2BIG);
728 						DMVAR_PASS();
729 					} else {
730 						DMLOG_PRINT(DMLVL_ERR,
731 							    "%s failed with expected rc = %d and expected errno = %d but unexpected nelem (%d vs %d)\n",
732 							    szFuncName, -1,
733 							    E2BIG, nelem, 1);
734 						DMVAR_PASS();
735 					}
736 				} else {
737 					DMLOG_PRINT(DMLVL_ERR,
738 						    "%s failed with expected rc = %d but unexpected errno = %d\n",
739 						    szFuncName, -1, errno);
740 					DMVAR_FAIL();
741 				}
742 			} else {
743 				DMLOG_PRINT(DMLVL_ERR,
744 					    "%s failed with unexpected rc = %d\n",
745 					    szFuncName, rc);
746 				DMVAR_FAIL();
747 			}
748 
749 			/* Variation clean up */
750 			rc = dm_destroy_session(newsid);
751 			if (rc == -1) {
752 				DMLOG_PRINT(DMLVL_DEBUG,
753 					    "Unable to clean up variation! (errno = %d)\n",
754 					    errno);
755 			}
756 		}
757 	}
758 
759 	/*
760 	 * TEST    : dm_getall_sessions - one nelem, one session
761 	 * EXPECTED: rc = 0
762 	 */
763 	if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 7)) {
764 		dm_sessid_t newsid, sidArray[1];
765 		int nelem;
766 
767 		/* Variation set up */
768 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
769 		if (rc == -1) {
770 			DMLOG_PRINT(DMLVL_DEBUG,
771 				    "Unable to set up variation! (errno = %d)\n",
772 				    errno);
773 			DMVAR_SKIP();
774 		} else {
775 			/* Variation */
776 			DMLOG_PRINT(DMLVL_DEBUG, "%s(one nelem, one session)\n",
777 				    szFuncName);
778 			rc = dm_getall_sessions(1, sidArray, &nelem);
779 			if (rc == 0) {
780 				DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem);
781 
782 				if (nelem == 1) {
783 					LogSessions(sidArray, nelem);
784 
785 					if (newsid == sidArray[0]) {
786 						DMLOG_PRINT(DMLVL_DEBUG,
787 							    "%s passed with expected rc = %d\n",
788 							    szFuncName, 0);
789 						DMVAR_PASS();
790 					} else {
791 						DMLOG_PRINT(DMLVL_ERR,
792 							    "%s failed with expected rc = %d and nelem = %d but unexpected session ID (%d vs %d)\n",
793 							    szFuncName, 0,
794 							    nelem, newsid,
795 							    sidArray[0]);
796 						DMVAR_FAIL();
797 					}
798 				} else {
799 					DMLOG_PRINT(DMLVL_ERR,
800 						    "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n",
801 						    szFuncName, 0, nelem, 1);
802 					DMVAR_FAIL();
803 				}
804 			} else {
805 				DMLOG_PRINT(DMLVL_ERR,
806 					    "%s failed with unexpected rc = %d (errno = %d)\n",
807 					    szFuncName, rc, errno);
808 				DMVAR_FAIL();
809 			}
810 
811 			/* Variation clean up */
812 			rc = dm_destroy_session(newsid);
813 			if (rc == -1) {
814 				DMLOG_PRINT(DMLVL_DEBUG,
815 					    "Unable to clean up variation! (errno = %d)\n",
816 					    errno);
817 			}
818 		}
819 	}
820 
821 	/*
822 	 * TEST    : dm_getall_sessions - two nelem, one session
823 	 * EXPECTED: rc = 0
824 	 */
825 	if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 8)) {
826 		dm_sessid_t newsid, sidArray[2];
827 		int nelem;
828 
829 		/* Variation set up */
830 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
831 		if (rc == -1) {
832 			DMLOG_PRINT(DMLVL_DEBUG,
833 				    "Unable to set up variation! (errno = %d)\n",
834 				    errno);
835 			DMVAR_SKIP();
836 		} else {
837 			/* Variation */
838 			DMLOG_PRINT(DMLVL_DEBUG, "%s(two nelem, one session)\n",
839 				    szFuncName);
840 			rc = dm_getall_sessions(2, sidArray, &nelem);
841 			if (rc == 0) {
842 				DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem);
843 
844 				if (nelem == 1) {
845 					LogSessions(sidArray, nelem);
846 
847 					if (newsid == sidArray[0]) {
848 						DMLOG_PRINT(DMLVL_DEBUG,
849 							    "%s passed with expected rc = %d\n",
850 							    szFuncName, 0);
851 						DMVAR_PASS();
852 					} else {
853 						DMLOG_PRINT(DMLVL_ERR,
854 							    "%s failed with expected rc = %d and nelem = %d but unexpected session ID (%d vs %d)\n",
855 							    szFuncName, 0,
856 							    nelem, newsid,
857 							    sidArray[0]);
858 						DMVAR_FAIL();
859 					}
860 				} else {
861 					DMLOG_PRINT(DMLVL_ERR,
862 						    "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n",
863 						    szFuncName, 0, nelem, 1);
864 					DMVAR_FAIL();
865 				}
866 			} else {
867 				DMLOG_PRINT(DMLVL_ERR,
868 					    "%s failed with unexpected rc = %d (errno = %d)\n",
869 					    szFuncName, rc, errno);
870 				DMVAR_FAIL();
871 			}
872 
873 			/* Variation clean up */
874 			rc = dm_destroy_session(newsid);
875 			if (rc == -1) {
876 				DMLOG_PRINT(DMLVL_DEBUG,
877 					    "Unable to clean up variation! (errno = %d)\n",
878 					    errno);
879 			}
880 		}
881 	}
882 
883 	/*
884 	 * TEST    : dm_getall_sessions - ten nelem, eight sessions
885 	 * EXPECTED: rc = 0
886 	 */
887 	if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 9)) {
888 		dm_sessid_t sidExpected[NUM_SESSIONS], sidArray[10];
889 		int nelem;
890 
891 		/* Variation set up */
892 		for (i = 0, rc = 0; i < NUM_SESSIONS && rc == 0; i++) {
893 			rc = dm_create_session(DM_NO_SESSION, szSessionInfo,
894 					       &sidExpected[i]);
895 		}
896 		if (rc == -1) {
897 			DMLOG_PRINT(DMLVL_DEBUG,
898 				    "Unable to set up variation! (errno = %d)\n",
899 				    errno);
900 			for (i--; i >= 0; i--) {
901 				dm_destroy_session(sidExpected[i]);
902 			}
903 			DMVAR_SKIP();
904 		} else {
905 			/* Variation */
906 			DMLOG_PRINT(DMLVL_DEBUG, "%s(%d nelem, %d sessions)\n",
907 				    szFuncName,
908 				    sizeof(sidArray) / sizeof(dm_sessid_t),
909 				    NUM_SESSIONS);
910 			rc = dm_getall_sessions(sizeof(sidArray) /
911 						sizeof(dm_sessid_t), sidArray,
912 						&nelem);
913 			if (rc == 0) {
914 				DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem);
915 
916 				if (nelem == NUM_SESSIONS) {
917 					LogSessions(sidArray, nelem);
918 
919 					if (memcmp
920 					    (sidArray, sidExpected,
921 					     NUM_SESSIONS *
922 					     sizeof(dm_sessid_t)) == 0) {
923 						DMLOG_PRINT(DMLVL_DEBUG,
924 							    "%s passed with expected rc = %d\n",
925 							    szFuncName, 0);
926 						DMVAR_PASS();
927 					} else {
928 						DMLOG_PRINT(DMLVL_ERR,
929 							    "%s failed with expected rc = %d and nelem = %d but unexpected session ID(s)\n",
930 							    szFuncName, 0,
931 							    nelem);
932 						DMVAR_FAIL();
933 					}
934 				} else {
935 					DMLOG_PRINT(DMLVL_ERR,
936 						    "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n",
937 						    szFuncName, 0, nelem,
938 						    NUM_SESSIONS);
939 					DMVAR_FAIL();
940 				}
941 			} else {
942 				DMLOG_PRINT(DMLVL_ERR,
943 					    "%s failed with unexpected rc = %d (errno = %d)\n",
944 					    szFuncName, rc, errno);
945 				DMVAR_FAIL();
946 			}
947 
948 			/* Variation clean up */
949 			for (i = 0, rc = 0; i < NUM_SESSIONS; i++) {
950 				rc |= dm_destroy_session(sidExpected[i]);
951 			}
952 			if (rc == -1) {
953 				DMLOG_PRINT(DMLVL_DEBUG,
954 					    "Unable to clean up variation! (errno = %d)\n",
955 					    errno);
956 			}
957 		}
958 	}
959 
960 	szFuncName = "dm_query_session";
961 
962 	/*
963 	 * TEST    : dm_query_session - DM_NO_SESSION sid
964 	 * EXPECTED: rc = -1, errno = EINVAL
965 	 */
966 	if (DMVAR_EXEC(QUERY_SESSION_BASE + 1)) {
967 		char buf[64];
968 		size_t rlen;
969 
970 		/* Variation set up */
971 
972 		/* Variation */
973 		DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", szFuncName);
974 		rc = dm_query_session(DM_NO_SESSION, sizeof(buf), buf, &rlen);
975 		DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
976 
977 		/* Variation clean up */
978 	}
979 
980 	/*
981 	 * TEST    : dm_query_session - invalid sid
982 	 * EXPECTED: rc = -1, errno = EINVAL
983 	 */
984 	if (DMVAR_EXEC(QUERY_SESSION_BASE + 2)) {
985 		char buf[64];
986 		size_t rlen;
987 
988 		/* Variation set up */
989 
990 		/* Variation */
991 		DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", szFuncName);
992 		rc = dm_query_session(INVALID_ADDR, sizeof(buf), buf, &rlen);
993 		DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
994 
995 		/* Variation clean up */
996 	}
997 
998 	/*
999 	 * TEST    : dm_query_session - invalidated sid
1000 	 * EXPECTED: rc = -1, errno = EINVAL
1001 	 */
1002 	if (DMVAR_EXEC(QUERY_SESSION_BASE + 3)) {
1003 		dm_sessid_t newsid;
1004 		char buf[64];
1005 		size_t rlen;
1006 
1007 		/* Variation set up */
1008 		if ((rc =
1009 		     dm_create_session(DM_NO_SESSION, szSessionInfo,
1010 				       &newsid)) != -1) {
1011 			rc = dm_destroy_session(newsid);
1012 		}
1013 		if (rc == -1) {
1014 			DMLOG_PRINT(DMLVL_DEBUG,
1015 				    "Unable to set up variation! (errno = %d)\n",
1016 				    errno);
1017 			DMVAR_SKIP();
1018 		} else {
1019 			/* Variation */
1020 			DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated sid)\n",
1021 				    szFuncName);
1022 			rc = dm_query_session(newsid, sizeof(buf), buf, &rlen);
1023 			DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
1024 
1025 			/* Variation clean up */
1026 		}
1027 	}
1028 
1029 	/*
1030 	 * TEST    : dm_query_session - NULL bufp
1031 	 * EXPECTED: rc = -1, errno EFAULT
1032 	 */
1033 	if (DMVAR_EXEC(QUERY_SESSION_BASE + 4)) {
1034 		dm_sessid_t newsid;
1035 		char buf[64];
1036 		size_t rlen;
1037 
1038 		/* Variation set up */
1039 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
1040 		if (rc == -1) {
1041 			DMLOG_PRINT(DMLVL_DEBUG,
1042 				    "Unable to set up variation! (errno = %d)\n",
1043 				    errno);
1044 			DMVAR_SKIP();
1045 		} else {
1046 			/* Variation */
1047 			DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL bufp)\n", szFuncName);
1048 			rc = dm_query_session(newsid, sizeof(buf), NULL, &rlen);
1049 			DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
1050 
1051 			/* Variation clean up */
1052 			rc = dm_destroy_session(newsid);
1053 			if (rc == -1) {
1054 				DMLOG_PRINT(DMLVL_DEBUG,
1055 					    "Unable to clean up variation! (errno = %d)\n",
1056 					    errno);
1057 			}
1058 		}
1059 	}
1060 
1061 	/*
1062 	 * TEST    : dm_query_session - invalid bufp
1063 	 * EXPECTED: rc = -1, errno EFAULT
1064 	 */
1065 	if (DMVAR_EXEC(QUERY_SESSION_BASE + 5)) {
1066 		dm_sessid_t newsid;
1067 		char buf[64];
1068 		size_t rlen;
1069 
1070 		/* Variation set up */
1071 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
1072 		if (rc == -1) {
1073 			DMLOG_PRINT(DMLVL_DEBUG,
1074 				    "Unable to set up variation! (errno = %d)\n",
1075 				    errno);
1076 			DMVAR_SKIP();
1077 		} else {
1078 			/* Variation */
1079 			DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid bufp)\n",
1080 				    szFuncName);
1081 			rc = dm_query_session(newsid, sizeof(buf),
1082 					      (void *)INVALID_ADDR, &rlen);
1083 			DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
1084 
1085 			/* Variation clean up */
1086 			rc = dm_destroy_session(newsid);
1087 			if (rc == -1) {
1088 				DMLOG_PRINT(DMLVL_DEBUG,
1089 					    "Unable to clean up variation! (errno = %d)\n",
1090 					    errno);
1091 			}
1092 		}
1093 	}
1094 
1095 	/*
1096 	 * TEST    : dm_query_session - NULL rlenp
1097 	 * EXPECTED: rc = -1, errno EFAULT
1098 	 */
1099 	if (DMVAR_EXEC(QUERY_SESSION_BASE + 6)) {
1100 		dm_sessid_t newsid;
1101 		char buf[64];
1102 
1103 		/* Variation set up */
1104 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
1105 		if (rc == -1) {
1106 			DMLOG_PRINT(DMLVL_DEBUG,
1107 				    "Unable to set up variation! (errno = %d)\n",
1108 				    errno);
1109 			DMVAR_SKIP();
1110 		} else {
1111 			/* Variation */
1112 			DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL rlenp)\n",
1113 				    szFuncName);
1114 			rc = dm_query_session(newsid, sizeof(buf), buf, NULL);
1115 			DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
1116 
1117 			/* Variation clean up */
1118 			rc = dm_destroy_session(newsid);
1119 			if (rc == -1) {
1120 				DMLOG_PRINT(DMLVL_DEBUG,
1121 					    "Unable to clean up variation! (errno = %d)\n",
1122 					    errno);
1123 			}
1124 		}
1125 	}
1126 
1127 	/*
1128 	 * TEST    : dm_query_session - invalid rlenp
1129 	 * EXPECTED: rc = -1, errno EFAULT
1130 	 */
1131 	if (DMVAR_EXEC(QUERY_SESSION_BASE + 7)) {
1132 		dm_sessid_t newsid;
1133 		char buf[64];
1134 
1135 		/* Variation set up */
1136 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
1137 		if (rc == -1) {
1138 			DMLOG_PRINT(DMLVL_DEBUG,
1139 				    "Unable to set up variation! (errno = %d)\n",
1140 				    errno);
1141 			DMVAR_SKIP();
1142 		} else {
1143 			/* Variation */
1144 			DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid rlenp)\n",
1145 				    szFuncName);
1146 			rc = dm_query_session(newsid, sizeof(buf), buf,
1147 					      (size_t *) INVALID_ADDR);
1148 			DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
1149 
1150 			/* Variation clean up */
1151 			rc = dm_destroy_session(newsid);
1152 			if (rc == -1) {
1153 				DMLOG_PRINT(DMLVL_DEBUG,
1154 					    "Unable to clean up variation! (errno = %d)\n",
1155 					    errno);
1156 			}
1157 		}
1158 	}
1159 
1160 	/*
1161 	 * TEST    : dm_query_session - zero buflen
1162 	 * EXPECTED: rc = -1, errno = E2BIG
1163 	 */
1164 	if (DMVAR_EXEC(QUERY_SESSION_BASE + 8)) {
1165 		dm_sessid_t newsid;
1166 		char buf[64];
1167 		size_t rlen;
1168 
1169 		/* Variation set up */
1170 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
1171 		if (rc == -1) {
1172 			DMLOG_PRINT(DMLVL_DEBUG,
1173 				    "Unable to set up variation! (errno = %d)\n",
1174 				    errno);
1175 			DMVAR_SKIP();
1176 		} else {
1177 			/* Variation */
1178 			DMLOG_PRINT(DMLVL_DEBUG, "%s(buflen zero)\n",
1179 				    szFuncName);
1180 			rc = dm_query_session(newsid, 0, buf, &rlen);
1181 			if (rc == -1) {
1182 				if (errno == E2BIG) {
1183 					DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n",
1184 						    rlen);
1185 
1186 					if (rlen == strlen(szSessionInfo) + 1) {
1187 						DMLOG_PRINT(DMLVL_DEBUG,
1188 							    "%s passed with expected rc = %d and expected errno = %d\n",
1189 							    szFuncName, -1,
1190 							    E2BIG);
1191 						DMVAR_PASS();
1192 					} else {
1193 						DMLOG_PRINT(DMLVL_ERR,
1194 							    "%s failed with expected rc = %d and expected errno = %d but unexpected rlen (%d vs %d)\n",
1195 							    szFuncName, -1,
1196 							    E2BIG, rlen,
1197 							    strlen
1198 							    (szSessionInfo) +
1199 							    1);
1200 						DMVAR_FAIL();
1201 					}
1202 				} else {
1203 					DMLOG_PRINT(DMLVL_ERR,
1204 						    "%s failed with expected rc = %d but unexpected errno = %d\n",
1205 						    szFuncName, -1, errno);
1206 					DMVAR_FAIL();
1207 				}
1208 			} else {
1209 				DMLOG_PRINT(DMLVL_ERR,
1210 					    "%s failed with unexpected rc = %d\n",
1211 					    szFuncName, rc);
1212 				DMVAR_FAIL();
1213 			}
1214 
1215 			/* Variation clean up */
1216 			rc = dm_destroy_session(newsid);
1217 			if (rc == -1) {
1218 				DMLOG_PRINT(DMLVL_DEBUG,
1219 					    "Unable to clean up variation! (errno = %d)\n",
1220 					    errno);
1221 			}
1222 		}
1223 	}
1224 
1225 	/*
1226 	 * TEST    : dm_query_session - valid
1227 	 * EXPECTED: rc = 0
1228 	 */
1229 	if (DMVAR_EXEC(QUERY_SESSION_BASE + 9)) {
1230 		dm_sessid_t newsid;
1231 		char buf[64];
1232 		size_t rlen;
1233 
1234 		/* Variation set up */
1235 		rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid);
1236 		if (rc == -1) {
1237 			DMLOG_PRINT(DMLVL_DEBUG,
1238 				    "Unable to set up variation! (errno = %d)\n",
1239 				    errno);
1240 			DMVAR_SKIP();
1241 		} else {
1242 			/* Variation */
1243 			DMLOG_PRINT(DMLVL_DEBUG, "%s(valid)\n", szFuncName,
1244 				    sizeof(buf));
1245 			rc = dm_query_session(newsid, sizeof(buf), buf, &rlen);
1246 			if (rc == 0) {
1247 				DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
1248 
1249 				if (rlen == strlen(szSessionInfo) + 1) {
1250 					DMLOG_PRINT(DMLVL_DEBUG,
1251 						    "buf = \"%s\"\n", buf);
1252 
1253 					if (strcmp(buf, szSessionInfo) == 0) {
1254 						DMLOG_PRINT(DMLVL_DEBUG,
1255 							    "%s passed with expected rc = %d\n",
1256 							    szFuncName, 0);
1257 						DMVAR_PASS();
1258 					} else {
1259 						DMLOG_PRINT(DMLVL_ERR,
1260 							    "%s failed with expected rc = %d and rlen = %d but unexpected session info (\"%s\" vs \"%s\")\n",
1261 							    szFuncName, 0, rlen,
1262 							    buf, szSessionInfo);
1263 						DMVAR_FAIL();
1264 					}
1265 				} else {
1266 					DMLOG_PRINT(DMLVL_ERR,
1267 						    "%s failed with expected rc = %d but unexpected rlen (%d vs %d)\n",
1268 						    szFuncName, 0, rlen,
1269 						    strlen(szSessionInfo) + 1);
1270 					DMVAR_FAIL();
1271 				}
1272 			} else {
1273 				DMLOG_PRINT(DMLVL_ERR,
1274 					    "%s failed with unexpected rc = %d (errno = %d)\n",
1275 					    szFuncName, rc, errno);
1276 				DMVAR_FAIL();
1277 			}
1278 
1279 			/* Variation clean up */
1280 			rc = dm_destroy_session(newsid);
1281 			if (rc == -1) {
1282 				DMLOG_PRINT(DMLVL_DEBUG,
1283 					    "Unable to clean up variation! (errno = %d)\n",
1284 					    errno);
1285 			}
1286 		}
1287 	}
1288 
1289 	/*
1290 	 * TEST    : dm_query_session - maximum sessionfo
1291 	 *           sessioninfo
1292 	 * EXPECTED: rc = 0
1293 	 */
1294 	if (DMVAR_EXEC(QUERY_SESSION_BASE + 10)) {
1295 		dm_sessid_t newsid;
1296 		char buf[512];
1297 		size_t rlen;
1298 		char *szBig =
1299 		    "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345";
1300 
1301 		/* Variation set up */
1302 		rc = dm_create_session(DM_NO_SESSION, szBig, &newsid);
1303 		if (rc == -1) {
1304 			DMLOG_PRINT(DMLVL_DEBUG,
1305 				    "Unable to set up variation! (errno = %d)\n",
1306 				    errno);
1307 			DMVAR_SKIP();
1308 		} else {
1309 			/* Variation */
1310 			DMLOG_PRINT(DMLVL_DEBUG, "%s(max sessinfo)\n",
1311 				    szFuncName, sizeof(buf));
1312 			rc = dm_query_session(newsid, sizeof(buf), buf, &rlen);
1313 			if (rc == 0) {
1314 				DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
1315 
1316 				if (rlen == DM_SESSION_INFO_LEN) {
1317 					DMLOG_PRINT(DMLVL_DEBUG,
1318 						    "buf = \"%s\"\n", buf);
1319 
1320 					if (strncmp
1321 					    (buf, szBig,
1322 					     DM_SESSION_INFO_LEN - 1) == 0) {
1323 						DMLOG_PRINT(DMLVL_DEBUG,
1324 							    "%s passed with expected rc = %d\n",
1325 							    szFuncName, 0);
1326 						DMVAR_PASS();
1327 					} else {
1328 						DMLOG_PRINT(DMLVL_ERR,
1329 							    "%s failed with expected rc = %d and rlen = %d but unexpected session info (\"%s\" vs \"%s\")\n",
1330 							    szFuncName, 0, rlen,
1331 							    buf, szSessionInfo);
1332 						DMVAR_FAIL();
1333 					}
1334 				} else {
1335 					DMLOG_PRINT(DMLVL_ERR,
1336 						    "%s failed with expected rc = %d but unexpected rlen (%d vs %d)\n",
1337 						    szFuncName, 0, rlen,
1338 						    DM_SESSION_INFO_LEN);
1339 					DMVAR_FAIL();
1340 				}
1341 			} else {
1342 				DMLOG_PRINT(DMLVL_ERR,
1343 					    "%s failed with unexpected rc = %d (errno = %d)\n",
1344 					    szFuncName, rc, errno);
1345 				DMVAR_FAIL();
1346 			}
1347 
1348 			/* Variation clean up */
1349 			rc = dm_destroy_session(newsid);
1350 			if (rc == -1) {
1351 				DMLOG_PRINT(DMLVL_DEBUG,
1352 					    "Unable to clean up variation! (errno = %d)\n",
1353 					    errno);
1354 			}
1355 		}
1356 	}
1357 
1358 	DMLOG_STOP();
1359 
1360 	tst_exit();
1361 
1362 }
1363