Blame testing/fulltests/unit-tests/T021binary_array_oid_duplicates_clib.c

Packit fcad23
/* HEADER Testing duplicate handling in binary OID array */
Packit fcad23
Packit fcad23
/* Much copied from T012 */
Packit fcad23
static const char test_name[] = "binary-array-of-OIDs-duplicate-test";
Packit fcad23
oid o1 = 1;
Packit fcad23
oid o2 = 2;
Packit fcad23
oid o3 = 6;
Packit fcad23
oid o4 = 8;
Packit fcad23
oid o5 = 9;
Packit fcad23
oid ox = 7;
Packit fcad23
oid oy = 10;
Packit fcad23
netsnmp_index i1, i2, i3, i4, i5, ix, iy, *ip;
Packit fcad23
netsnmp_index *b[] = { &i4, &i2, &i3, &i1, &i5 };
Packit fcad23
netsnmp_container *c;
Packit fcad23
int i;
Packit fcad23
Packit fcad23
init_snmp(test_name);
Packit fcad23
Packit fcad23
c = netsnmp_container_get_binary_array();
Packit fcad23
c->compare = netsnmp_compare_netsnmp_index;
Packit fcad23
netsnmp_binary_array_options_set(c, 1,
Packit fcad23
				 CONTAINER_KEY_ALLOW_DUPLICATES);
Packit fcad23
Packit fcad23
i1.oids = &o1;
Packit fcad23
i2.oids = &o2;
Packit fcad23
i3.oids = &o3;
Packit fcad23
i4.oids = &o4;
Packit fcad23
i5.oids = &o5;
Packit fcad23
ix.oids = &ox;
Packit fcad23
iy.oids = &oy;
Packit fcad23
i1.len = i2.len = i3.len = i4.len = i5.len = ix.len = iy.len = 1;
Packit fcad23
Packit fcad23
for (i = 0; i < sizeof(b)/sizeof(b[0]); ++i)
Packit fcad23
    CONTAINER_INSERT(c, b[i]);
Packit fcad23
Packit fcad23
#define MAX_ROUNDS 6
Packit fcad23
/* Insert some duplicates of i4; also insert a duplicate of
Packit fcad23
 * i1 to move the contents of the array around. */
Packit fcad23
for (i = 0; i < MAX_ROUNDS; ++i) {
Packit fcad23
    switch (i) {
Packit fcad23
	case 0:
Packit fcad23
	    /* First round: no insert */
Packit fcad23
	    break;
Packit fcad23
	case 1:
Packit fcad23
	case 2:
Packit fcad23
	case 4:
Packit fcad23
	case 5:
Packit fcad23
	    /* Insert another duplicate of our target object */
Packit fcad23
	    CONTAINER_INSERT(c, &i4;;
Packit fcad23
	    break;
Packit fcad23
	case 3:
Packit fcad23
	    /* Insert a dulicate of an earlier OID, so that it
Packit fcad23
	     * changes the binary search behavior */
Packit fcad23
	    CONTAINER_INSERT(c, &i1;;
Packit fcad23
	    break;
Packit fcad23
    }
Packit fcad23
    /* Primary requirement: getnext returns the next value! */
Packit fcad23
    ip = CONTAINER_FIND(c, &i4;;
Packit fcad23
    OKF(ip, ("FIND returned a value"));
Packit fcad23
    OKF(c->compare(&i4, ip) == 0,
Packit fcad23
        ("FIND returned oid %" NETSNMP_PRIo "d", ip->oids[0]));
Packit fcad23
    ip = CONTAINER_NEXT(c, &i4;;
Packit fcad23
    OKF(ip, ("NEXT returned a value"));
Packit fcad23
    OKF(c->compare(&i5, ip) == 0,
Packit fcad23
        ("NEXT returned index 5 = %" NETSNMP_PRIo "d", i5.oids[0]));
Packit fcad23
}
Packit fcad23
Packit fcad23
while ((ip = CONTAINER_FIRST(c)))
Packit fcad23
  CONTAINER_REMOVE(c, ip);
Packit fcad23
CONTAINER_FREE(c);
Packit fcad23
Packit fcad23
snmp_shutdown(test_name);