From patchwork Mon Jan 27 12:30:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gert Doering X-Patchwork-Id: 4086 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:7000:c127:b0:5e7:b9eb:58e8 with SMTP id jm39csp2283511mab; Mon, 27 Jan 2025 04:31:45 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVtfHd7A7WnM7geaItqzoCs+cSSpMN9xAm1EaW25c/zMtK2LVuD5jBU4hKRS7ReOAYgYSh+paVRuS4=@openvpn.net X-Google-Smtp-Source: AGHT+IEhfNABYAys1DWAK7e3A9iZjSHaqfBmVi2yz7br9q//0pLcxOytWND9H6w7i+K1vjEeSr2d X-Received: by 2002:a05:6830:6315:b0:718:3b7:23e4 with SMTP id 46e09a7af769-7249daf9642mr23982532a34.23.1737981105220; Mon, 27 Jan 2025 04:31:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1737981105; cv=none; d=google.com; s=arc-20240605; b=VPyaO6ySg79bNnFYofm9XZ36AVZBrah/s0/ytLMfT99IkppgCbMu+1a2RGyLNOi2up Gb7C91WWhBtj+8ebOZQKc/qB7VG8kTd7vRPro6R4HRvHO6hRvAgIvbjhpOBk6C2Tn39v 8p1L2tunrr9Wflf9iSVcehQJ+jQvqgfgKz0drZ+vhn7EUqImavrrK/q4A8PnV5ra8dRt zXMcI5Sn7JnMOUXqYHb8Y0Fl34b1K8CXV/uTMs9ulj6dCOOAx1wQaR3Np6LPKVunSoW6 KNrMfeIYPJkJpohye/eUkiFkjxqM5PMPa6mCQkTb6GIwxwSCM5miI+jIlhXC8Ta1jZNd Ch4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=errors-to:content-transfer-encoding:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:references:in-reply-to:message-id:date:to:from :dkim-signature:dkim-signature; bh=b97fatihYJI7EC9unwk9walAQq/So5nlS4Za9La+Wk4=; fh=4NbAC/LsuMLI0S0hprUlLSLCiHwg6SCAifhH718Jh0Q=; b=f2h2Y69kpMWzKk4eXOc2JIh551YwBwI5yZ1C/blmn549jBa91zP4M+I0DFfYpYRtmJ u7D9+FvM9yTi6XhOMWLbq0LS1MQu0QbB8hRCEcfTvOYDKWIMWnnwziCxNOcZY5OdUgNk lujBxezNvNzyT0UmdxBdA8NR6fpDRUq+gXr+t0/n+usjoryl6adVOCmFC5Flmi71ZoZp vgERxi8BHzYnTH98dYgP+vsikFdGxo8NFap+0JQrtvyYhYmq6p9BRleIgaAXG0lV5js2 DKaKvkAcqK6SC5WILSZnKPmIjTNF5IBu1+V5PLEpkw1Y6GuZak1nnOBZJHEuRZckgtA5 FvnQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=fXq2cc77; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=GJYmnHv5; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=muc.de Received: from lists.sourceforge.net (lists.sourceforge.net. [216.105.38.7]) by mx.google.com with ESMTPS id 46e09a7af769-724ecfb4a9bsi7144408a34.265.2025.01.27.04.31.45 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 27 Jan 2025 04:31:45 -0800 (PST) Received-SPF: pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) client-ip=216.105.38.7; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=fXq2cc77; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=GJYmnHv5; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=muc.de Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1tcOHF-0005uo-KU; Mon, 27 Jan 2025 12:31:41 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1tcOHD-0005uE-9q for openvpn-devel@lists.sourceforge.net; Mon, 27 Jan 2025 12:31:39 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:To:From:Sender:Reply-To:Cc:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=pmWjtaSSVYhGZkgWxR9WSKQhmeQETMgkZpPNdfC7NSQ=; b=fXq2cc77mRwzSfzrjjw+fSNI9r EeQUabPHdhsp0PfV+lhkRuWiY1Bugmst6s2oHv2Rw1J1OVvfaBtCuMjrterDEIecVbukRPSRa6DoM m4dEFAJWHb12M8uuX6u1telNfzROGEBfELWEH1aYA3dCcHJ7VKIcTzFHppIhKnpAKUkY=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID: Date:Subject:To:From:Sender:Reply-To:Cc:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=pmWjtaSSVYhGZkgWxR9WSKQhmeQETMgkZpPNdfC7NSQ=; b=GJYmnHv5rHC2xStiTjAXVkLAPz /726+uGDoZalgLjx93gFKxVxhsdzSV3ML82tRS8xvBxpOb/XakJ0SMoPFEjr8+2fRJS3C6gTnGYhb /jrtT5r01eQeDoB6ZSAa/4OlSjq/C/os5mbRJULRzavBEB7+d3lT62FgIxj5GEgF5xAs=; Received: from dhcp-174.greenie.muc.de ([193.149.48.174] helo=blue.greenie.muc.de) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1tcOGk-0004CA-LK for openvpn-devel@lists.sourceforge.net; Mon, 27 Jan 2025 12:31:11 +0000 Received: from blue.greenie.muc.de (localhost [127.0.0.1]) by blue.greenie.muc.de (8.17.1.9/8.17.1.9) with ESMTP id 50RCUxK4016513 for ; Mon, 27 Jan 2025 13:30:59 +0100 Received: (from gert@localhost) by blue.greenie.muc.de (8.17.1.9/8.17.1.9/Submit) id 50RCUxxY016512 for openvpn-devel@lists.sourceforge.net; Mon, 27 Jan 2025 13:30:59 +0100 From: Gert Doering To: openvpn-devel@lists.sourceforge.net Date: Mon, 27 Jan 2025 13:30:58 +0100 Message-ID: <20250127123058.16503-1-gert@greenie.muc.de> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Score: -0.0 (/) X-Spam-Report: Spam detection software, running on the system "util-spamd-1.v13.lw.sourceforge.com", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Arne Schwabe Change-Id: Ieee368e325d7f9c367fd91fee0fd3e281ee0855d Signed-off-by: Arne Schwabe Acked-by: Frank Lichtenheld --- Content analysis details: (-0.0 points, 6.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record 0.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. [193.149.48.174 listed in sa-trusted.bondedsender.org] 0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. [193.149.48.174 listed in bl.score.senderscore.com] -0.0 T_SCC_BODY_TEXT_LINE No description available. X-Headers-End: 1tcOGk-0004CA-LK Subject: [Openvpn-devel] [PATCH v1] Add unit tests for atoi parsing options helper X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox X-GMAIL-THRID: =?utf-8?q?1822405275510765463?= X-GMAIL-MSGID: =?utf-8?q?1822405275510765463?= From: Arne Schwabe Change-Id: Ieee368e325d7f9c367fd91fee0fd3e281ee0855d Signed-off-by: Arne Schwabe Acked-by: Frank Lichtenheld --- This change was reviewed on Gerrit and approved by at least one developer. I request to merge it to master. Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/876 This mail reflects revision 1 of this Change. Signed-off-by line for the author was added as per our policy. Acked-by according to Gerrit (reflected above): Frank Lichtenheld diff --git a/tests/unit_tests/openvpn/mock_msg.c b/tests/unit_tests/openvpn/mock_msg.c index a291f8f..99224f8 100644 --- a/tests/unit_tests/openvpn/mock_msg.c +++ b/tests/unit_tests/openvpn/mock_msg.c @@ -37,10 +37,16 @@ #include "errlevel.h" #include "error.h" +#include "mock_msg.h" unsigned int x_debug_level = 0; /* Default to (almost) no debugging output */ +unsigned int print_x_debug_level = 0; + bool fatal_error_triggered = false; +char mock_msg_buf[MOCK_MSG_BUF]; + + void mock_set_debug_level(int level) { @@ -48,6 +54,18 @@ } int +mock_get_debug_level(void) +{ + return x_debug_level; +} + +void +mock_set_print_debug_level(int level) +{ + print_x_debug_level = level; +} + +int get_debug_level(void) { return x_debug_level; @@ -62,8 +80,13 @@ fatal_error_triggered = true; printf("FATAL ERROR:"); } - vprintf(format, arglist); - printf("\n"); + CLEAR(mock_msg_buf); + if ((flags & M_DEBUG_LEVEL) <= print_x_debug_level) + { + vprintf(format, arglist); + printf("\n"); + } + vsnprintf(mock_msg_buf, sizeof(mock_msg_buf), format, arglist); } void diff --git a/tests/unit_tests/openvpn/mock_msg.h b/tests/unit_tests/openvpn/mock_msg.h index be5f2e5..25b7aa2 100644 --- a/tests/unit_tests/openvpn/mock_msg.h +++ b/tests/unit_tests/openvpn/mock_msg.h @@ -31,4 +31,18 @@ */ void mock_set_debug_level(int level); +#define MOCK_MSG_BUF 1024 + +extern bool fatal_error_triggered; +extern char mock_msg_buf[MOCK_MSG_BUF]; + +void +mock_set_debug_level(int level); + +int +mock_get_debug_level(void); + +void +mock_set_print_debug_level(int level); + #endif /* MOCK_MSG */ diff --git a/tests/unit_tests/openvpn/test_misc.c b/tests/unit_tests/openvpn/test_misc.c index 563d4ae..56e9d98 100644 --- a/tests/unit_tests/openvpn/test_misc.c +++ b/tests/unit_tests/openvpn/test_misc.c @@ -38,6 +38,7 @@ #include "options_util.h" #include "test_common.h" #include "list.h" +#include "mock_msg.h" static void test_compat_lzo_string(void **state) @@ -311,13 +312,80 @@ gc_free(&gc); } +static void +test_atoi_variants(void **state) +{ + assert_true(valid_integer("1234", true)); + assert_true(valid_integer("1234", false)); + assert_true(valid_integer("0", false)); + assert_true(valid_integer("0", true)); + assert_true(valid_integer("-777", false)); + assert_false(valid_integer("-777", true)); + + assert_false(valid_integer("-777foo", false)); + assert_false(valid_integer("-777foo", true)); + + assert_false(valid_integer("foo777", true)); + assert_false(valid_integer("foo777", false)); + + /* 2**31 + 5 , just outside of signed int range */ + assert_false(valid_integer("2147483653", true)); + assert_false(valid_integer("2147483653", false)); + assert_false(valid_integer("-2147483653", true)); + assert_false(valid_integer("-2147483653", false)); + + + int msglevel = D_LOW; + int saved_log_level = mock_get_debug_level(); + mock_set_debug_level(D_LOW); + + /* check happy path */ + assert_int_equal(positive_atoi("1234", msglevel), 1234); + assert_int_equal(positive_atoi("0", msglevel), 0); + + assert_int_equal(atoi_warn("1234", msglevel), 1234); + assert_int_equal(atoi_warn("0", msglevel), 0); + assert_int_equal(atoi_warn("-1194", msglevel), -1194); + + CLEAR(mock_msg_buf); + assert_int_equal(positive_atoi("-1234", msglevel), 0); + assert_string_equal(mock_msg_buf, "Cannot parse argument '-1234' as non-negative integer"); + + /* 2**31 + 5 , just outside of signed int range */ + CLEAR(mock_msg_buf); + assert_int_equal(positive_atoi("2147483653", msglevel), 0); + assert_string_equal(mock_msg_buf, "Cannot parse argument '2147483653' as non-negative integer"); + + CLEAR(mock_msg_buf); + assert_int_equal(atoi_warn("2147483653", msglevel), 0); + assert_string_equal(mock_msg_buf, "Cannot parse argument '2147483653' as integer"); + + CLEAR(mock_msg_buf); + assert_int_equal(positive_atoi("foo77", msglevel), 0); + assert_string_equal(mock_msg_buf, "Cannot parse argument 'foo77' as non-negative integer"); + + CLEAR(mock_msg_buf); + assert_int_equal(positive_atoi("77foo", msglevel), 0); + assert_string_equal(mock_msg_buf, "Cannot parse argument '77foo' as non-negative integer"); + + CLEAR(mock_msg_buf); + assert_int_equal(atoi_warn("foo77", msglevel), 0); + assert_string_equal(mock_msg_buf, "Cannot parse argument 'foo77' as integer"); + + CLEAR(mock_msg_buf); + assert_int_equal(atoi_warn("77foo", msglevel), 0); + assert_string_equal(mock_msg_buf, "Cannot parse argument '77foo' as integer"); + + mock_set_debug_level(saved_log_level); +} const struct CMUnitTest misc_tests[] = { cmocka_unit_test(test_compat_lzo_string), cmocka_unit_test(test_auth_fail_temp_no_flags), cmocka_unit_test(test_auth_fail_temp_flags), cmocka_unit_test(test_auth_fail_temp_flags_msg), - cmocka_unit_test(test_list) + cmocka_unit_test(test_list), + cmocka_unit_test(test_atoi_variants) }; int