Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp5018620rdb; Tue, 12 Dec 2023 17:02:55 -0800 (PST) X-Google-Smtp-Source: AGHT+IFTcE/qAqCqb68o4oq2anovTkGbdQqI0tQ4pW6M3HWZI2oPNc9yXtEXNHPoCZB+mdvy4XfD X-Received: by 2002:a05:6e02:1c2f:b0:35f:656f:3751 with SMTP id m15-20020a056e021c2f00b0035f656f3751mr1828343ilh.22.1702429375035; Tue, 12 Dec 2023 17:02:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702429374; cv=none; d=google.com; s=arc-20160816; b=RUm8uAdQ1xJfAfEe0G5VZ3oXyhLm+d7AFbAjMKh6nDCCyMMsQdIoMXfzQkZbahh9o7 NpFSwzi4WLh/jIYCf7Xjw2ejAmg29dmKwl187icX298DSohzlI6yZ0bG/Sxg4s0rPCTj 5n4AGm56UQKkhiFJL9YQSFoCQ79b+Z202nfhAxAsdA+eZA6Rpp7qnEXiivDAnRK1hHWv hfH1OP/HUMorxfcJdNxEORm6A2T/nHHVDCyXKkLTIOuqwkcgbkr0jLPBABmyHROWxcBE v7FWO8sQCBLbXeqSn67ndnOL0b0ystiOQe92kQWqtD30fF8dI8HHEFHhA91S7AjhbirK 2erw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=LfjrfaL0BTdFLEXX617pYnIT5bq+UfvN0h2MwzqxRag=; fh=6RrXC9a42eRtUq33jTxbdw6zXjl3feewHokQkvv5rHU=; b=W+i0eplhyaM8wdIbUQxyxBK3T+y6k/kiFIs1IqVjteCE/zJVsrm//RsaQvtO55EeQT XrtoUpEF7WBhHLbNLa7DrxuQoeAwV8E2bOlZg9HkgM69bkfwCE7WKH4sqzTPx3poZCF3 mvJdp4rARlxuaRGJD0LdJ4O5tWD4ZODnkXO46Jb9gZHa6E7sX2Dy5WkRpMB2mjkrf7AD CaWy/j8tbm1vgim8gZD/9dSF2ObpzoXjbZCzYL1yf0H2SDcFrXc63bPWtKwBfqunM+sL e3IvT/9h+HoDsSqO+/F126ADYb3kUMgDyqI0/s8alVUj10J/GMgoIFT3uw6PqqE3sMAW 0iJA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=012TB4M3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id q14-20020a170902dace00b001cfcd2e1294si8913919plx.241.2023.12.12.17.02.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 17:02:54 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=012TB4M3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 5919E80ACCF0; Tue, 12 Dec 2023 17:02:52 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378056AbjLMBCV (ORCPT + 99 others); Tue, 12 Dec 2023 20:02:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39402 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235185AbjLMBCR (ORCPT ); Tue, 12 Dec 2023 20:02:17 -0500 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BCAE3B9 for ; Tue, 12 Dec 2023 17:02:22 -0800 (PST) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-5d064f9e2a1so71858187b3.1 for ; Tue, 12 Dec 2023 17:02:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1702429342; x=1703034142; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=LfjrfaL0BTdFLEXX617pYnIT5bq+UfvN0h2MwzqxRag=; b=012TB4M3JqhrqJe3aHxlkb3DMPWqzzglnP9QkBZ5E6tkX5Ga/5UwMR8tegmkxDJr7j ybxLsL/Ba1HRYyxcAb1S5mN3drKEOt2u/fulzw5Vvp5xDPAraFGDp1VcMd1aM0rg3pnO SmE4Dv/mkn0J0+ZGOehRzhThlFU0VEUsOXzELdZoqJaRicgTxtnmodTpiQFlU8WGW6rz QJogVYIbTXMYcbfEkH+utGIJz/ELDGODJab5AKy8BAzO0OqNB0Cjcl/QydzBKAzhU9a8 i4pQxWVzvPnvSDIWJSPlBNvDocqIiBfdfTCBwEh2kGMVJWVTBCrJ0Wl6k+Rscln0WUEt wgSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702429342; x=1703034142; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=LfjrfaL0BTdFLEXX617pYnIT5bq+UfvN0h2MwzqxRag=; b=L4RwN6SCgZ9Tn0d8I7W12LGoxuqCmu8Ej/CiRB+/JJrQokGS7ugqhfDvxkt9RIwB96 OSkD7Wc3ijOLvD3FBZjGE1mOZKWv21CCDhXyObJtWXk6JVCCYKsvy9OO0UOcwfmTjeGq qFEIPOLlO+6k6CWLLQs/COILuKOcWZlpxeB3uDojufQVOzrm6RxtrYxCiX7jNkZKkOdz YEDIXRyT6FoeddRCsvmN21LbUCq6uf29Kwctox7Xp9iLdvpZU4SBryGpsHorMGy5Ed3N 8D2qxIQrKXZb9xV8LUkqLer06PN5qUf8h+fAjNB4VYi7n42zkqSNAW2aF7KM4V5MgZFQ AKHQ== X-Gm-Message-State: AOJu0YzCHPXdVVnQ0BFqHAswwbn7SJ74hevCDmuYPVOYpUaUd6Sa14Cy NNk9mi1ELczEyUN+H9Bzh2nq2CYOBQ== X-Received: from rmoar-specialist.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:45d3]) (user=rmoar job=sendgmr) by 2002:a05:690c:fd5:b0:5d6:daf7:b53b with SMTP id dg21-20020a05690c0fd500b005d6daf7b53bmr60192ywb.9.1702429341847; Tue, 12 Dec 2023 17:02:21 -0800 (PST) Date: Wed, 13 Dec 2023 01:01:59 +0000 In-Reply-To: <20231213010201.1802507-1-rmoar@google.com> Mime-Version: 1.0 References: <20231213010201.1802507-1-rmoar@google.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Message-ID: <20231213010201.1802507-4-rmoar@google.com> Subject: [PATCH v4 4/6] kunit: add is_init test attribute From: Rae Moar To: shuah@kernel.org, davidgow@google.com, dlatypov@google.com, brendan.higgins@linux.dev, sadiyakazi@google.com Cc: keescook@chromium.org, arnd@arndb.de, linux-kselftest@vger.kernel.org, linux-arch@vger.kernel.org, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, Rae Moar Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Tue, 12 Dec 2023 17:02:52 -0800 (PST) Add is_init test attribute of type bool. Add to_string, get, and filter methods to lib/kunit/attributes.c. Mark each of the tests in the init section with the is_init=true attribute. Add is_init to the attributes documentation. Signed-off-by: Rae Moar --- Changes since v3: - Move the attribute from kunit_attributes to a suite field. .../dev-tools/kunit/running_tips.rst | 7 +++ include/kunit/test.h | 1 + lib/kunit/attributes.c | 60 +++++++++++++++++++ lib/kunit/executor.c | 6 +- 4 files changed, 73 insertions(+), 1 deletion(-) diff --git a/Documentation/dev-tools/kunit/running_tips.rst b/Documentation/dev-tools/kunit/running_tips.rst index 766f9cdea0fa..024e9ad1d1e9 100644 --- a/Documentation/dev-tools/kunit/running_tips.rst +++ b/Documentation/dev-tools/kunit/running_tips.rst @@ -428,3 +428,10 @@ This attribute indicates the name of the module associated with the test. This attribute is automatically saved as a string and is printed for each suite. Tests can also be filtered using this attribute. + +``is_init`` + +This attribute indicates whether the test uses init data or functions. + +This attribute is automatically saved as a boolean and tests can also be +filtered using this attribute. diff --git a/include/kunit/test.h b/include/kunit/test.h index fe79cd736e94..b163b9984b33 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -253,6 +253,7 @@ struct kunit_suite { struct dentry *debugfs; struct string_stream *log; int suite_init_err; + bool is_init; }; /* Stores an array of suites, end points one past the end */ diff --git a/lib/kunit/attributes.c b/lib/kunit/attributes.c index 1b512f7e1838..2cf04cc09372 100644 --- a/lib/kunit/attributes.c +++ b/lib/kunit/attributes.c @@ -58,6 +58,16 @@ static const char *attr_enum_to_string(void *attr, const char * const str_list[] return str_list[val]; } +static const char *attr_bool_to_string(void *attr, bool *to_free) +{ + bool val = (bool)attr; + + *to_free = false; + if (val) + return "true"; + return "false"; +} + static const char *attr_speed_to_string(void *attr, bool *to_free) { return attr_enum_to_string(attr, speed_str_list, to_free); @@ -166,6 +176,37 @@ static int attr_string_filter(void *attr, const char *input, int *err) return false; } +static int attr_bool_filter(void *attr, const char *input, int *err) +{ + int i, input_int = -1; + long val = (long)attr; + const char *input_str = NULL; + + for (i = 0; input[i]; i++) { + if (!strchr(op_list, input[i])) { + input_str = input + i; + break; + } + } + + if (!input_str) { + *err = -EINVAL; + pr_err("kunit executor: filter value not found: %s\n", input); + return false; + } + + if (!strcmp(input_str, "true")) + input_int = (int)true; + else if (!strcmp(input_str, "false")) + input_int = (int)false; + else { + *err = -EINVAL; + pr_err("kunit executor: invalid filter input: %s\n", input); + return false; + } + + return int_filter(val, input, input_int, err); +} /* Get Attribute Methods */ @@ -194,6 +235,17 @@ static void *attr_module_get(void *test_or_suite, bool is_test) return (void *) ""; } +static void *attr_is_init_get(void *test_or_suite, bool is_test) +{ + struct kunit_suite *suite = is_test ? NULL : test_or_suite; + struct kunit_case *test = is_test ? test_or_suite : NULL; + + if (test) + return ((void *) NULL); + else + return ((void *) suite->is_init); +} + /* List of all Test Attributes */ static struct kunit_attr kunit_attr_list[] = { @@ -212,6 +264,14 @@ static struct kunit_attr kunit_attr_list[] = { .filter = attr_string_filter, .attr_default = (void *)"", .print = PRINT_SUITE, + }, + { + .name = "is_init", + .get_attr = attr_is_init_get, + .to_string = attr_bool_to_string, + .filter = attr_bool_filter, + .attr_default = (void *)false, + .print = PRINT_SUITE, } }; diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c index 847329c51e91..717b9599036b 100644 --- a/lib/kunit/executor.c +++ b/lib/kunit/executor.c @@ -300,6 +300,7 @@ struct kunit_suite_set kunit_merge_suite_sets(struct kunit_suite_set init_suite_ struct kunit_suite_set total_suite_set = {NULL, NULL}; struct kunit_suite **total_suite_start = NULL; size_t init_num_suites, num_suites, suite_size; + int i = 0; init_num_suites = init_suite_set.end - init_suite_set.start; num_suites = suite_set.end - suite_set.start; @@ -310,8 +311,11 @@ struct kunit_suite_set kunit_merge_suite_sets(struct kunit_suite_set init_suite_ if (!total_suite_start) return total_suite_set; - /* Append init suites and then all other kunit suites */ + /* Append and mark init suites and then append all other kunit suites */ memcpy(total_suite_start, init_suite_set.start, init_num_suites * suite_size); + for (i = 0; i < init_num_suites; i++) + total_suite_start[i]->is_init = true; + memcpy(total_suite_start + init_num_suites, suite_set.start, num_suites * suite_size); /* Set kunit suite set start and end */ -- 2.43.0.472.g3155946c3a-goog