Hans Leidekker : snmpapi: Add tests for SnmpUtilVarBind{, List}{Cpy,
Free}. Make them pass.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jan 23 06:18:19 CST 2007
Module: wine
Branch: master
Commit: 318a71fddb89656d3e8e79a98062ec6cd16d7f40
URL: http://source.winehq.org/git/wine.git/?a=commit;h=318a71fddb89656d3e8e79a98062ec6cd16d7f40
Author: Hans Leidekker <hans at it.vu.nl>
Date: Mon Jan 22 15:31:50 2007 +0100
snmpapi: Add tests for SnmpUtilVarBind{, List}{Cpy, Free}. Make them pass.
---
dlls/snmpapi/main.c | 8 ++++
dlls/snmpapi/tests/util.c | 79 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 87 insertions(+), 0 deletions(-)
diff --git a/dlls/snmpapi/main.c b/dlls/snmpapi/main.c
index 24a2da1..539c8e1 100644
--- a/dlls/snmpapi/main.c
+++ b/dlls/snmpapi/main.c
@@ -417,6 +417,12 @@ INT WINAPI SnmpUtilVarBindListCpy(SnmpVa
TRACE("(%p, %p)\n", dst, src);
+ if (!src)
+ {
+ dst->list = NULL;
+ dst->len = 0;
+ return SNMPAPI_NOERROR;
+ }
size = src->len * sizeof(SnmpVarBind *);
if (!(dst->list = HeapAlloc(GetProcessHeap(), 0, size)))
{
@@ -456,6 +462,8 @@ void WINAPI SnmpUtilVarBindListFree(Snmp
entry = vb->list;
for (i = 0; i < vb->len; i++) SnmpUtilVarBindFree(entry++);
HeapFree(GetProcessHeap(), 0, vb->list);
+ vb->list = NULL;
+ vb->len = 0;
}
/***********************************************************************
diff --git a/dlls/snmpapi/tests/util.c b/dlls/snmpapi/tests/util.c
index f8411d6..c3540fe 100644
--- a/dlls/snmpapi/tests/util.c
+++ b/dlls/snmpapi/tests/util.c
@@ -347,6 +347,83 @@ static void test_SnmpUtilOidAppend(void)
"SnmpUtilOidAppend failed\n");
}
+static void test_SnmpUtilVarBindCpyFree(void)
+{
+ INT ret;
+ static UINT ids[] = { 1, 3, 6, 1, 4, 1, 311 };
+ static SnmpVarBind dst, src = { { 7, ids }, { ASN_INTEGER, { 1 } } };
+
+ ret = SnmpUtilVarBindCpy(NULL, NULL);
+ ok(!ret, "SnmpUtilVarBindCpy succeeded\n");
+
+ memset(&dst, 0, sizeof(SnmpVarBind));
+ ret = SnmpUtilVarBindCpy(&dst, NULL);
+ ok(ret, "SnmpUtilVarBindCpy failed\n");
+ ok(dst.name.idLength == 0, "SnmpUtilVarBindCpy failed\n");
+ ok(dst.name.ids == NULL, "SnmpUtilVarBindCpy failed\n");
+ ok(dst.value.asnType == ASN_NULL, "SnmpUtilVarBindCpy failed\n");
+ ok(dst.value.asnValue.number == 0, "SnmpUtilVarBindCpy failed\n");
+
+ ret = SnmpUtilVarBindCpy(NULL, &src);
+ ok(!ret, "SnmpUtilVarBindCpy succeeded\n");
+
+ memset(&dst, 0, sizeof(SnmpVarBind));
+ ret = SnmpUtilVarBindCpy(&dst, &src);
+ ok(ret, "SnmpUtilVarBindCpy failed\n");
+ ok(src.name.idLength == dst.name.idLength, "SnmpUtilVarBindCpy failed\n");
+ ok(!memcmp(src.name.ids, dst.name.ids, dst.name.idLength * sizeof(UINT)),
+ "SnmpUtilVarBindCpy failed\n");
+ ok(!memcmp(&src.value, &dst.value, sizeof(AsnObjectSyntax)),
+ "SnmpUtilVarBindCpy failed\n");
+
+ SnmpUtilVarBindFree(NULL);
+ SnmpUtilVarBindFree(&dst);
+ ok(dst.name.idLength == 0, "SnmpUtilVarBindFree failed\n");
+ ok(dst.name.ids == NULL, "SnmpUtilVarBindFree failed\n");
+ ok(dst.value.asnType == ASN_NULL, "SnmpUtilVarBindFree failed\n");
+ ok(dst.value.asnValue.number == 1, "SnmpUtilVarBindFree failed\n");
+}
+
+static void test_SnmpUtilVarBindListCpyFree(void)
+{
+ INT ret;
+ static UINT ids[] = { 1, 3, 6, 1, 4, 1, 311 };
+ static SnmpVarBind src = { { 7, ids }, { ASN_INTEGER, { 1 } } };
+ static SnmpVarBindList dst_list, src_list = { &src, 1 };
+
+ if (0) { /* these crash on XP */
+ ret = SnmpUtilVarBindListCpy(NULL, NULL);
+ ok(!ret, "SnmpUtilVarBindCpy succeeded\n");
+
+ ret = SnmpUtilVarBindListCpy(NULL, &src_list);
+ ok(!ret, "SnmpUtilVarBindListCpy succeeded\n");
+ }
+
+ memset(&dst_list, 0xff, sizeof(SnmpVarBindList));
+ ret = SnmpUtilVarBindListCpy(&dst_list, NULL);
+ ok(ret, "SnmpUtilVarBindListCpy failed\n");
+ ok(dst_list.list == NULL, "SnmpUtilVarBindListCpy failed\n");
+ ok(dst_list.len == 0, "SnmpUtilVarBindListCpy failed\n");
+
+ ret = SnmpUtilVarBindListCpy(&dst_list, &src_list);
+ ok(ret, "SnmpUtilVarBindListCpy failed\n");
+ ok(src_list.len == dst_list.len, "SnmpUtilVarBindListCpy failed\n");
+ ok(src_list.list->name.idLength == dst_list.list->name.idLength,
+ "SnmpUtilVarBindListCpy failed\n");
+ ok(!memcmp(src_list.list->name.ids, dst_list.list->name.ids,
+ dst_list.list->name.idLength * sizeof(UINT)),
+ "SnmpUtilVarBindListCpy failed\n");
+ ok(!memcmp(&src_list.list->value, &dst_list.list->value, sizeof(AsnAny)),
+ "SnmpUtilVarBindListCpy failed\n");
+
+ if (0) { /* crashes on XP */
+ SnmpUtilVarBindListFree(NULL);
+ }
+ SnmpUtilVarBindListFree(&dst_list);
+ ok(dst_list.list == NULL, "SnmpUtilVarBindListFree failed\n");
+ ok(dst_list.len == 0, "SnmpUtilVarBindListFree failed\n");
+}
+
START_TEST(util)
{
test_SnmpUtilOidToA();
@@ -358,4 +435,6 @@ START_TEST(util)
test_SnmpUtilOidCmp();
test_SnmpUtilOidNCmp();
test_SnmpUtilOidAppend();
+ test_SnmpUtilVarBindCpyFree();
+ test_SnmpUtilVarBindListCpyFree();
}
More information about the wine-cvs
mailing list