Blob Blame History Raw
From 7270604440268bb17b39ae734ff33003a67c8343 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
Date: Tue, 20 Jul 2021 19:34:42 +0200
Subject: [PATCH] Check parsed resconf values

Add 'attempts' check, fix 'ndots' data. Create a bunch of verification
functions and check parsed values, not just return codes.
---
 lib/irs/tests/resconf_test.c                 | 46 ++++++++++++++++++--
 lib/irs/tests/testdata/options-attempts.conf | 10 +++++
 lib/irs/tests/testdata/options-ndots.conf    |  2 +-
 3 files changed, 54 insertions(+), 4 deletions(-)
 create mode 100644 lib/irs/tests/testdata/options-attempts.conf

diff --git a/lib/irs/tests/resconf_test.c b/lib/irs/tests/resconf_test.c
index 6951758..ce94345 100644
--- a/lib/irs/tests/resconf_test.c
+++ b/lib/irs/tests/resconf_test.c
@@ -45,6 +45,43 @@ setup_test() {
 	assert_return_code(chdir(TESTS), 0);
 }
 
+static isc_result_t
+check_number(unsigned int n, unsigned int expected) {
+	return ((n == expected) ? ISC_R_SUCCESS : ISC_R_BADNUMBER);
+}
+
+static isc_result_t
+check_attempts(irs_resconf_t *resconf) {
+	return (check_number(irs_resconf_getattempts(resconf), 4));
+}
+
+static isc_result_t
+check_timeout(irs_resconf_t *resconf) {
+	return (check_number(irs_resconf_gettimeout(resconf), 1));
+}
+
+static isc_result_t
+check_ndots(irs_resconf_t *resconf) {
+	return (check_number(irs_resconf_getndots(resconf), 2));
+}
+
+static isc_result_t
+check_options(irs_resconf_t *resconf) {
+	if (irs_resconf_getattempts(resconf) != 3) {
+		return ISC_R_BADNUMBER; /* default value only */
+	}
+
+	if (irs_resconf_getndots(resconf) != 2) {
+		return ISC_R_BADNUMBER;
+	}
+
+	if (irs_resconf_gettimeout(resconf) != 1) {
+		return ISC_R_BADNUMBER;
+	}
+
+	return (ISC_R_SUCCESS);
+}
+
 /* test irs_resconf_load() */
 static void
 irs_resconf_load_test(void **state) {
@@ -64,15 +101,18 @@ irs_resconf_load_test(void **state) {
 		  ISC_R_SUCCESS },
 		{ "testdata/nameserver-v6-scoped.conf", ISC_R_SUCCESS, NULL,
 		  ISC_R_SUCCESS },
+		{ "testdata/options-attempts.conf", ISC_R_SUCCESS,
+		  check_attempts, ISC_R_SUCCESS },
 		{ "testdata/options-debug.conf", ISC_R_SUCCESS, NULL,
 		  ISC_R_SUCCESS },
-		{ "testdata/options-ndots.conf", ISC_R_SUCCESS, NULL,
+		{ "testdata/options-ndots.conf", ISC_R_SUCCESS, check_ndots,
 		  ISC_R_SUCCESS },
-		{ "testdata/options-timeout.conf", ISC_R_SUCCESS, NULL,
+		{ "testdata/options-timeout.conf", ISC_R_SUCCESS, check_timeout,
 		  ISC_R_SUCCESS },
 		{ "testdata/options-unknown.conf", ISC_R_SUCCESS, NULL,
 		  ISC_R_SUCCESS },
-		{ "testdata/options.conf", ISC_R_SUCCESS, NULL, ISC_R_SUCCESS },
+		{ "testdata/options.conf", ISC_R_SUCCESS, check_options,
+		  ISC_R_SUCCESS },
 		{ "testdata/options-bad-ndots.conf", ISC_R_RANGE, NULL,
 		  ISC_R_SUCCESS },
 		{ "testdata/options-empty.conf", ISC_R_UNEXPECTEDEND, NULL,
diff --git a/lib/irs/tests/testdata/options-attempts.conf b/lib/irs/tests/testdata/options-attempts.conf
new file mode 100644
index 0000000..4538643
--- /dev/null
+++ b/lib/irs/tests/testdata/options-attempts.conf
@@ -0,0 +1,10 @@
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+options attempts:4
diff --git a/lib/irs/tests/testdata/options-ndots.conf b/lib/irs/tests/testdata/options-ndots.conf
index 5d18d26..f37c712 100644
--- a/lib/irs/tests/testdata/options-ndots.conf
+++ b/lib/irs/tests/testdata/options-ndots.conf
@@ -9,4 +9,4 @@
 # See the COPYRIGHT file distributed with this work for additional
 # information regarding copyright ownership.
 
-option ndots:2
+options ndots:2
-- 
2.35.3