From patchwork Sat Oct 28 05:24:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yuran Pereira X-Patchwork-Id: 13439366 X-Patchwork-Delegate: bpf@iogearbox.net Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A1A5C139D for ; Sat, 28 Oct 2023 05:25:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com header.b="nXMYgTFX" Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01olkn2081.outbound.protection.outlook.com [40.92.64.81]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2F6DE10A; Fri, 27 Oct 2023 22:25:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Zk5tVOCnZ9Kvf2CX5Ss9Cn1X1EuI8gjiHv38JoWbq1Aba87P1u7vaZ8S4bXc2I7No71XWbl9YuO3Xb8ub9niaQ5n6mWdnBA1d9uOW9Y5ZNnsksQvYNfPeH3rvOLR/q0fnVFtydjzEF//SRR1ta8Pb72ghcjeEnxf9LauTZdRBzxSSljvYCPmqiGdRPdArSedvzUjAqWmZyW59NGxyyIbSkyXZNfKdBjL+k2LpzLDq337CisPxHV2kzQaV6yMXY5i5BmI9uHO44hmAhHiH2mydN9zsW2FnqFrFWBE7HZsalmOdCWtJAQNXO8Mqn6AvxCM2ExLbHfWZcLvnnCgpElRog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=rkMMJIKLLa9scNNNpEqFq8LsXi/MEpLqvzyrhZptJ/I=; b=j+peqdTzcfe2sfrFeUewAyh5YRpJmKOR7kb1a2gT9OPpou2BETLlGOYV/m5I31V3r3V0ZOrzSIHG171SupYMUsNKvtureABcjWKgtJyxkxmYtti2IyvjXRi49GjiwhVTCuv+WsyGZ1GkwmD9tk0PUoe8yHWmFrtXlm9+f5K2I5+D6BfubMv8gtkgLunB0M7fC7C6NNx52Ui4PRY80MUNZNGDTDD1ncb3fXCODVRmuNoNa6lPoOxYAISvRGr0k0vGW/wt44hI8ULtCEWk/feahg17WrkyUmsREKibUkGgWpeZcB0m38dZP5k9tYQi+dyI8+P8meSxMLWcGfjYom6mEA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rkMMJIKLLa9scNNNpEqFq8LsXi/MEpLqvzyrhZptJ/I=; b=nXMYgTFXYHosUoQTqEkUndiOdqCcLcUwVuaZAvgrx/g6X5cpPUg4KMlrpOe/BhW12Cn0s/gFlklw7WuMxz4/5FCUS2993Uz4ASk1cMQSgshMngRg4hWfD2ovUFxAZBMmDtgNrfl697ZWk+NIhePyivGtlHYCbGqu/1lJELf/s3gxNNs0+BZvpN3nQtZH7WIJwhJnWSclFut+tREpI5GrRMRcBhyJ3BPRQdiso9fgQVMwf2XfKdvHx5rpKdoxCxpxYCWZNcUUj5ZYPrO7HhBSJYd4DBgX3sTOo3FdWfFx7b0v6OWr8VwoBMe/13MLnKzsmyW0poUSBksv23bGdZJFFQ== Received: from DB3PR10MB6835.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:42a::7) by DU0PR10MB6367.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:40d::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6933.22; Sat, 28 Oct 2023 05:24:58 +0000 Received: from DB3PR10MB6835.EURPRD10.PROD.OUTLOOK.COM ([fe80::e2b0:8d7e:e293:bd97]) by DB3PR10MB6835.EURPRD10.PROD.OUTLOOK.COM ([fe80::e2b0:8d7e:e293:bd97%7]) with mapi id 15.20.6933.024; Sat, 28 Oct 2023 05:24:58 +0000 From: Yuran Pereira To: bpf@vger.kernel.org, yonghong.song@linux.dev Cc: sinquersw@gmail.com, ast@kernel.org, brauner@kernel.org, daniel@iogearbox.net, haoluo@google.com, iii@linux.ibm.com, john.fastabend@gmail.com, jolsa@kernel.org, kpsingh@kernel.org, kuifeng@meta.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, mykolal@fb.com, sdf@google.com, shuah@kernel.org, song@kernel.org, linux-kernel-mentees@lists.linuxfoundation.org, Yuran Pereira Subject: [PATCH bpf-next v3 1/2] selftests/bpf: Convert CHECK macros to ASSERT_* macros in bpf_iter Date: Sat, 28 Oct 2023 10:54:13 +0530 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: References: X-TMN: [c8mzXXAkR16MnI/vr+kLqDt/5BpbCkl+] X-ClientProxiedBy: JN3P275CA0002.ZAFP275.PROD.OUTLOOK.COM (2603:1086:0:70::6) To DB3PR10MB6835.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:42a::7) X-Microsoft-Original-Message-ID: <602a18b1ff49bb8cc32f0d8de6e4bcaf5d404eed.1698461732.git.yuran.pereira@hotmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB3PR10MB6835:EE_|DU0PR10MB6367:EE_ X-MS-Office365-Filtering-Correlation-Id: e78cc38e-20af-4fd1-9147-08dbd7763a23 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nQeBAWUp0JqcYPOoLufCSWKsxkAVX8lGnmAxiLbzYxn/IF5ASdTECN1gxJWGq5EnGEH8Zqmq2vnHVxt+bJlvGaH3aIdkTALnHgonN1BXhENNjkv3nOnIf+bYNGfE7em+h4TbuL+qfs/SAM1bcP8IlpBCN3w/nwunM5D0A9J6X23xUssdA7hSO1EO+WJvC2vrenZizN7dWrqn+29302+/BX3jQ13XBTZ+CZ2CNbPdyC0k1zbuOZn/ob+Zmh+n2ja94w//4s4GimF7Yw03OMOUttLLnjZhglsmv0IEstA+10UQwPUhjJr/DmsmK2qa3/+2xa9+O9aSwqactJWU7wVsn3IL3E5QhU+LD1AvkT3gx41cWyHxoBViugqppQ5YzUBIgjnZLmoTVtWGLAoNThDikFz4fP8FStqlBgXprloF0SlDbCM9Rx31OLu8KqUpTqKJExb8TM6b/eKdsgOJHLHo9yVtC5Mvdnjihog7hCMPUX4oA6u+bMuEicfkL9GP8JAdcJbFztIkwdYj8lNDi7Eqik2gCKpf2SBIXZJVvEz0VOnp7VDbXFt1htIt+uPLpLjFbuT2hyS3V5Bmj4bsLmO6LDwMccALhrfFs6BKFp4lcXSy7nuic7JG/ETcSasfQacp X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: qSSZSs8EN2DJk27fG0J4ZaLUICdrRYf/e/x/roSrlJiD/OvOXU2mBBLwFI5Bi3R01ni6bQJQhyosu1Xe7cprYVZRQRO2AFoPiZqugia8QK4pz0Uz/4l8AfXxe1m3zyTy4AyvH+lSkgr2Q0YhC4ABKvq84vMy+UKxTT+6kJKobYhfZueNdWbIiFumYQmQUF92i/b9UPEniD3mqP5ZAVcBbUnTpzev811WM4zmqrgZUDDkh+4tmtymi96KZa8Rs+m7PXGiPWEuu9l45w/H5qUC+x3LeLshiA0Kvmr7DtoYQh9V7RWCNYJrMBMNnsCvTEeWDM3KaFuCEUyLej87GYsl250v/qfRdR+Y//h5f764fSkSauWouOT+xKwU0+Pn7ZeF5YzdkeePc6BLOOmGTA9A04MozzEwgmMAG+Tuiu4jZVqghKqkQtWgSKb1yxiVeRJE5bCuVClEjSM4dAsruEiTLhITxdXOKPTCF13s41TqcH1IUPVzZt4r3wlk8Yp3/XRo1F7+xMkot4ukapFiQTtZR35QSyoLuMD0DvYZT2FGtEMGc6WtlEVOIKNCwhdPjEI1iBQHjzGN0MTQx+ITsNPZk9WOvRh2v9cNT4PKjZwK4ArXkaQwyW/XvgrundSieOQfafRv+I4jQNihDwMM85qxACwJywU9wjrid05sftWpcCXNgQF41RtHV9KAeFFbdVrkl9PRKb19ExuQQyfQULA+43FdtjRGM4CzoxbjSLaSZW1mOcustleLwQgRO6HCz/iBUKXd2rHMKjRsGmzq7jYg2FyqZiF6MKBFy/mnuoNst/B7YSD0v4F5eWWnIkVAQtTHiZjUvXWJYNEqVsnPKmObbDSg5o43RxeQPlOtcW8xK7vs2dmRNIkEEuvameBIuAzRNQ7uNN+aczNfDfkACwzR7h51tbO99T1rAsz/WGxevBqVWeHkDjfvylj1n3gLYZYNJ5GrT1xmZXJGReS6Zi1gjB445QKYzKHSwrfmCFdBNcu8yhvsOo7IxYIeNf1QzriACsZSTj6WnuwPy3Pce4H3rBFjoGUK5BAw7+3KSYDBE7e0CI3mGNbPduvUbvPdeQDMeisQSbNAzboEB6tpq4fIX+54XYVQKYjHJ+GIF68v44liOjinwP47lfr8z4AWv/xB0mg0q+Qc8jJo6NRR6y/p4isSMKhF0kU0q24kSFGUuJn+mzdeOO5kPWkgGaEnStlMnH4JzIjYrAtDaixWTonNNvYEiCW13tOHp39FGTY/O7Y= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-6b909.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: e78cc38e-20af-4fd1-9147-08dbd7763a23 X-MS-Exchange-CrossTenant-AuthSource: DB3PR10MB6835.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2023 05:24:58.7414 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR10MB6367 X-Patchwork-Delegate: bpf@iogearbox.net As it was pointed out by Yonghong Song [1], in the bpf selftests the use of the ASSERT_* series of macros is preferred over the CHECK macro. This patch replaces all CHECK calls in bpf_iter with the appropriate ASSERT_* macros. [1] https://lore.kernel.org/lkml/0a142924-633c-44e6-9a92-2dc019656bf2@linux.dev Suggested-by: Yonghong Song Signed-off-by: Yuran Pereira Acked-by: Yonghong Song Acked-by: Kui-Feng Lee --- .../selftests/bpf/prog_tests/bpf_iter.c | 79 ++++++++----------- 1 file changed, 35 insertions(+), 44 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_iter.c b/tools/testing/selftests/bpf/prog_tests/bpf_iter.c index 1f02168103dd..123a3502b8f0 100644 --- a/tools/testing/selftests/bpf/prog_tests/bpf_iter.c +++ b/tools/testing/selftests/bpf/prog_tests/bpf_iter.c @@ -34,8 +34,6 @@ #include "bpf_iter_ksym.skel.h" #include "bpf_iter_sockmap.skel.h" -static int duration; - static void test_btf_id_or_null(void) { struct bpf_iter_test_kern3 *skel; @@ -64,7 +62,7 @@ static void do_dummy_read_opts(struct bpf_program *prog, struct bpf_iter_attach_ /* not check contents, but ensure read() ends without error */ while ((len = read(iter_fd, buf, sizeof(buf))) > 0) ; - CHECK(len < 0, "read", "read failed: %s\n", strerror(errno)); + ASSERT_GE(len, 0, "read"); close(iter_fd); @@ -413,7 +411,7 @@ static int do_btf_read(struct bpf_iter_task_btf *skel) goto free_link; } - if (CHECK(err < 0, "read", "read failed: %s\n", strerror(errno))) + if (!ASSERT_GE(err, 0, "read")) goto free_link; ASSERT_HAS_SUBSTR(taskbuf, "(struct task_struct)", @@ -526,11 +524,11 @@ static int do_read_with_fd(int iter_fd, const char *expected, start = 0; while ((len = read(iter_fd, buf + start, read_buf_len)) > 0) { start += len; - if (CHECK(start >= 16, "read", "read len %d\n", len)) + if (!ASSERT_LT(start, 16, "read")) return -1; read_buf_len = read_one_char ? 1 : 16 - start; } - if (CHECK(len < 0, "read", "read failed: %s\n", strerror(errno))) + if (!ASSERT_GE(len, 0, "read")) return -1; if (!ASSERT_STREQ(buf, expected, "read")) @@ -571,8 +569,7 @@ static int do_read(const char *path, const char *expected) int err, iter_fd; iter_fd = open(path, O_RDONLY); - if (CHECK(iter_fd < 0, "open", "open %s failed: %s\n", - path, strerror(errno))) + if (!ASSERT_GE(iter_fd, 0, "open")) return -1; err = do_read_with_fd(iter_fd, expected, false); @@ -600,7 +597,7 @@ static void test_file_iter(void) unlink(path); err = bpf_link__pin(link, path); - if (CHECK(err, "pin_iter", "pin_iter to %s failed: %d\n", path, err)) + if (!ASSERT_OK(err, "pin_iter")) goto free_link; err = do_read(path, "abcd"); @@ -651,12 +648,10 @@ static void test_overflow(bool test_e2big_overflow, bool ret1) * overflow and needs restart. */ map1_fd = bpf_map_create(BPF_MAP_TYPE_ARRAY, NULL, 4, 8, 1, NULL); - if (CHECK(map1_fd < 0, "bpf_map_create", - "map_creation failed: %s\n", strerror(errno))) + if (!ASSERT_GE(map1_fd, 0, "bpf_map_create")) goto out; map2_fd = bpf_map_create(BPF_MAP_TYPE_ARRAY, NULL, 4, 8, 1, NULL); - if (CHECK(map2_fd < 0, "bpf_map_create", - "map_creation failed: %s\n", strerror(errno))) + if (!ASSERT_GE(map2_fd, 0, "bpf_map_create")) goto free_map1; /* bpf_seq_printf kernel buffer is 8 pages, so one map @@ -685,14 +680,12 @@ static void test_overflow(bool test_e2big_overflow, bool ret1) /* setup filtering map_id in bpf program */ map_info_len = sizeof(map_info); err = bpf_map_get_info_by_fd(map1_fd, &map_info, &map_info_len); - if (CHECK(err, "get_map_info", "get map info failed: %s\n", - strerror(errno))) + if (!ASSERT_OK(err, "get_map_info")) goto free_map2; skel->bss->map1_id = map_info.id; err = bpf_map_get_info_by_fd(map2_fd, &map_info, &map_info_len); - if (CHECK(err, "get_map_info", "get map info failed: %s\n", - strerror(errno))) + if (!ASSERT_OK(err, "get_map_info")) goto free_map2; skel->bss->map2_id = map_info.id; @@ -714,16 +707,14 @@ static void test_overflow(bool test_e2big_overflow, bool ret1) while ((len = read(iter_fd, buf, expected_read_len)) > 0) total_read_len += len; - CHECK(len != -1 || errno != E2BIG, "read", - "expected ret -1, errno E2BIG, but get ret %d, error %s\n", - len, strerror(errno)); + ASSERT_EQ(len, -1, "read"); + ASSERT_EQ(errno, E2BIG, "read"); goto free_buf; } else if (!ret1) { while ((len = read(iter_fd, buf, expected_read_len)) > 0) total_read_len += len; - if (CHECK(len < 0, "read", "read failed: %s\n", - strerror(errno))) + if (!ASSERT_GE(len, 0, "read")) goto free_buf; } else { do { @@ -732,8 +723,7 @@ static void test_overflow(bool test_e2big_overflow, bool ret1) total_read_len += len; } while (len > 0 || len == -EAGAIN); - if (CHECK(len < 0, "read", "read failed: %s\n", - strerror(errno))) + if (!ASSERT_GE(len, 0, "read")) goto free_buf; } @@ -836,7 +826,7 @@ static void test_bpf_hash_map(void) /* do some tests */ while ((len = read(iter_fd, buf, sizeof(buf))) > 0) ; - if (CHECK(len < 0, "read", "read failed: %s\n", strerror(errno))) + if (!ASSERT_GE(len, 0, "read")) goto close_iter; /* test results */ @@ -917,7 +907,7 @@ static void test_bpf_percpu_hash_map(void) /* do some tests */ while ((len = read(iter_fd, buf, sizeof(buf))) > 0) ; - if (CHECK(len < 0, "read", "read failed: %s\n", strerror(errno))) + if (!ASSERT_GE(len, 0, "read")) goto close_iter; /* test results */ @@ -983,17 +973,14 @@ static void test_bpf_array_map(void) start = 0; while ((len = read(iter_fd, buf + start, sizeof(buf) - start)) > 0) start += len; - if (CHECK(len < 0, "read", "read failed: %s\n", strerror(errno))) + if (!ASSERT_GE(len, 0, "read")) goto close_iter; /* test results */ res_first_key = *(__u32 *)buf; res_first_val = *(__u64 *)(buf + sizeof(__u32)); - if (CHECK(res_first_key != 0 || res_first_val != first_val, - "bpf_seq_write", - "seq_write failure: first key %u vs expected 0, " - " first value %llu vs expected %llu\n", - res_first_key, res_first_val, first_val)) + if (!ASSERT_EQ(res_first_key, 0, "bpf_seq_write") || + !ASSERT_EQ(res_first_val, first_val, "bpf_seq_write")) goto close_iter; if (!ASSERT_EQ(skel->bss->key_sum, expected_key, "key_sum")) @@ -1092,7 +1079,7 @@ static void test_bpf_percpu_array_map(void) /* do some tests */ while ((len = read(iter_fd, buf, sizeof(buf))) > 0) ; - if (CHECK(len < 0, "read", "read failed: %s\n", strerror(errno))) + if (!ASSERT_GE(len, 0, "read")) goto close_iter; /* test results */ @@ -1131,6 +1118,7 @@ static void test_bpf_sk_storage_delete(void) sock_fd = socket(AF_INET6, SOCK_STREAM, 0); if (!ASSERT_GE(sock_fd, 0, "socket")) goto out; + err = bpf_map_update_elem(map_fd, &sock_fd, &val, BPF_NOEXIST); if (!ASSERT_OK(err, "map_update")) goto out; @@ -1151,14 +1139,19 @@ static void test_bpf_sk_storage_delete(void) /* do some tests */ while ((len = read(iter_fd, buf, sizeof(buf))) > 0) ; - if (CHECK(len < 0, "read", "read failed: %s\n", strerror(errno))) + if (!ASSERT_GE(len, 0, "read")) goto close_iter; /* test results */ err = bpf_map_lookup_elem(map_fd, &sock_fd, &val); - if (CHECK(!err || errno != ENOENT, "bpf_map_lookup_elem", - "map value wasn't deleted (err=%d, errno=%d)\n", err, errno)) - goto close_iter; + + /* Note: The following assertions serve to ensure + * the value was deleted. It does so by asserting + * that bpf_map_lookup_elem has failed. This might + * seem counterintuitive at first. + */ + ASSERT_ERR(err, "bpf_map_lookup_elem"); + ASSERT_EQ(errno, ENOENT, "bpf_map_lookup_elem"); close_iter: close(iter_fd); @@ -1203,17 +1196,15 @@ static void test_bpf_sk_storage_get(void) do_dummy_read(skel->progs.fill_socket_owner); err = bpf_map_lookup_elem(map_fd, &sock_fd, &val); - if (CHECK(err || val != getpid(), "bpf_map_lookup_elem", - "map value wasn't set correctly (expected %d, got %d, err=%d)\n", - getpid(), val, err)) + if (!ASSERT_OK(err, "bpf_map_lookup_elem") || + !ASSERT_EQ(val, getpid(), "bpf_map_lookup_elem")) goto close_socket; do_dummy_read(skel->progs.negate_socket_local_storage); err = bpf_map_lookup_elem(map_fd, &sock_fd, &val); - CHECK(err || val != -getpid(), "bpf_map_lookup_elem", - "map value wasn't set correctly (expected %d, got %d, err=%d)\n", - -getpid(), val, err); + ASSERT_OK(err, "bpf_map_lookup_elem"); + ASSERT_EQ(val, -getpid(), "bpf_map_lookup_elem"); close_socket: close(sock_fd); @@ -1290,7 +1281,7 @@ static void test_bpf_sk_storage_map(void) /* do some tests */ while ((len = read(iter_fd, buf, sizeof(buf))) > 0) ; - if (CHECK(len < 0, "read", "read failed: %s\n", strerror(errno))) + if (!ASSERT_GE(len, 0, "read")) goto close_iter; /* test results */