Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp1131356pxb; Wed, 4 Nov 2020 00:22:56 -0800 (PST) X-Google-Smtp-Source: ABdhPJxj+twvsmQAWwYkgWNsnNoLzXSnjXxdVhlQVx0BjyKT5TZ/bbu3eAKiiVaKNAb8MmWwStSC X-Received: by 2002:a17:906:3553:: with SMTP id s19mr24863877eja.195.1604478176341; Wed, 04 Nov 2020 00:22:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604478176; cv=none; d=google.com; s=arc-20160816; b=gJJMk1oik/3rQdV/QboM+55JL+d2kZq4XVvv59taadqUsm7YJ8VLRphV1s68N32dxz a9uFSq2a7MVFYZUSChpmtJcA8xQxpjzE3nlzPoCkbZEk9kqqO9HnSN6jrp1BRwdMZJlj ++0z2T6QztDHpeMxgh1lb4mYqlgVsiotKWDCIJL/0D3vphWKCFEhI+lSO7b7Q50iuvzq 0FMZUFq6jJDmVs02kheAJVVSHzF0dD3lotRWal0ee0sFVrnmFkAQZBvmKhNibiYFUkme HJF2ruBCFzkm7W1AS8FbRhOCKFs8wXLF9HNy3mllaC/AV1ottzCEt1M+SRZ5WsO8zIQ3 O4vA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature; bh=jYqIyFwSLs/OqBhyAWSk+CtF1X1B/qrYVtgT1gy73dM=; b=d+r1wBkeog4PYFDdsG8Drb+paL+dw9WMo835A3BUTjqyJNeT250NMkE+H7bQ0ye9ZG IQKdYoi4E6/Rg0E6z0lf4pskjssDP9Q0as8ZB/WT8xUo3lXg7w4brCaMIl8y8hFZIMFe eEvtpkWTML7eEwaR8BWYRY5Eogj3XzDLazw3G5iVO8D/o3RNk4whQyfkmn27S9ffbnfr SmG9IMUOlUTZpfSQtaF1HGnlMTDrp626iTYYL5lDjDWLMZltgxj+b20EXt/k6ibl4yrb WPrPwyXqg7xaNlu9Q0Jmn/jnC7ZcCyujqwrMN4LEvJl8XFtJyUq84ihz8dGJ4O5t5tak VqdQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rasmusvillemoes.dk header.s=google header.b=B4prvxYn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 32si813538edq.92.2020.11.04.00.22.33; Wed, 04 Nov 2020 00:22:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@rasmusvillemoes.dk header.s=google header.b=B4prvxYn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726564AbgKDISU (ORCPT + 99 others); Wed, 4 Nov 2020 03:18:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43678 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726029AbgKDISM (ORCPT ); Wed, 4 Nov 2020 03:18:12 -0500 Received: from mail-ej1-x642.google.com (mail-ej1-x642.google.com [IPv6:2a00:1450:4864:20::642]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 43427C061A4D for ; Wed, 4 Nov 2020 00:18:12 -0800 (PST) Received: by mail-ej1-x642.google.com with SMTP id o9so26425903ejg.1 for ; Wed, 04 Nov 2020 00:18:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rasmusvillemoes.dk; s=google; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=jYqIyFwSLs/OqBhyAWSk+CtF1X1B/qrYVtgT1gy73dM=; b=B4prvxYny/32AA88zpBcKKVgbvsVev60ocMH7KQlGR+u75q1xnTsiGtdZSZSQNslsZ +Y79fuAh0MAShhOY3e3XQDp0aLJHX2pbVLYcfBOpEaHkR0kH5FP8JjEJQxpqxi+ZIgt4 8+kicUWLyA4EtLw6XFPlYCp8wE1jJ/+aF+SrQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=jYqIyFwSLs/OqBhyAWSk+CtF1X1B/qrYVtgT1gy73dM=; b=tBBjyTacrMuh5mo9RIOWpL0Ose7VsjCllMAjyr6rQfowKzdG3smdqFUgjAaXm4BKvj VrICapTbxCzCqdeqTU/vUNZnDLQRw+ZTPR+pk0JTHLzsTUsmtnnvjR+MZ22lwfAL4SCs INufqJhPs7LBiexbfjK3BJuaYEY/mhU8DwM031DvnjkwYhBfcm92R/pO1Bh66KtcgFzM NcINwIbgLeBOml/nG42Iquu/jXAJ9fXNlsL/8NFhT38vDj6St5/r41kJES2MjivKpmGT nSIsTr4bQ3M9osgp46GWpjVidZxAGlPA4ElfaECWuYlONIuk08RMh+z2fAMK5ZiNSHQF puRg== X-Gm-Message-State: AOAM530tnP9XcLSMD7gkONKXtZSMIEPhCK0p1edd4St8L5q81Rk3vlHf 6sv50zQMlKJzFjahhppYzye1Lw== X-Received: by 2002:a17:906:d8b3:: with SMTP id qc19mr17103695ejb.222.1604477890884; Wed, 04 Nov 2020 00:18:10 -0800 (PST) Received: from [172.16.11.132] ([81.216.59.226]) by smtp.gmail.com with ESMTPSA id rp28sm566074ejb.77.2020.11.04.00.18.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Nov 2020 00:18:10 -0800 (PST) Subject: Re: [PATCH v3] lib: Convert test_printf.c to KUnit To: Petr Mladek , Greg KH Cc: Andy Shevchenko , Arpitha Raghunandan <98.arpi@gmail.com>, brendanhiggins@google.com, skhan@linuxfoundation.org, rostedt@goodmis.org, sergey.senozhatsky@gmail.com, alexandre.belloni@bootlin.com, rdunlap@infradead.org, idryomov@gmail.com, kunit-dev@googlegroups.com, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linuxfoundation.org References: <20201103111049.51916-1-98.arpi@gmail.com> <20201103113353.GC4077@smile.fi.intel.com> <20201103115223.GA268796@kroah.com> <20201103160728.GQ20201@alley> From: Rasmus Villemoes Message-ID: <57976ff4-7845-d721-ced1-1fe439000a9b@rasmusvillemoes.dk> Date: Wed, 4 Nov 2020 09:18:08 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20201103160728.GQ20201@alley> Content-Type: text/plain; charset=windows-1252 Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/11/2020 17.11, Petr Mladek wrote: > On Tue 2020-11-03 12:52:23, Greg KH wrote: >> On Tue, Nov 03, 2020 at 01:33:53PM +0200, Andy Shevchenko wrote: >>> On Tue, Nov 03, 2020 at 04:40:49PM +0530, Arpitha Raghunandan wrote: >>>> Convert test lib/test_printf.c to KUnit. More information about >>>> KUnit can be found at: >>>> https://www.kernel.org/doc/html/latest/dev-tools/kunit/index.html. >>>> KUnit provides a common framework for unit tests in the kernel. >>>> KUnit and kselftest are standardizing around KTAP, converting this >>>> test to KUnit makes this test output in KTAP which we are trying to >>>> make the standard test result format for the kernel. More about >>>> the KTAP format can be found at: >>>> https://lore.kernel.org/linux-kselftest/CY4PR13MB1175B804E31E502221BC8163FD830@CY4PR13MB1175.namprd13.prod.outlook.com/. >>>> I ran both the original and converted tests as is to produce the >>>> output for success of the test in the two cases. I also ran these >>>> tests with a small modification to show the difference in the output >>>> for failure of the test in both cases. The modification I made is: >>>> - test("127.000.000.001|127.0.0.1", "%pi4|%pI4", &sa.sin_addr, &sa.sin_addr); >>>> + test("127-000.000.001|127.0.0.1", "%pi4|%pI4", &sa.sin_addr, &sa.sin_addr); >>>> >>>> Original test success: >>>> [ 0.540860] test_printf: loaded. >>>> [ 0.540863] test_printf: random seed = 0x5c46c33837bc0619 >>>> [ 0.541022] test_printf: all 388 tests passed >>>> >>>> Original test failure: >>>> [ 0.537980] test_printf: loaded. >>>> [ 0.537983] test_printf: random seed = 0x1bc1efd881954afb >>>> [ 0.538029] test_printf: vsnprintf(buf, 256, "%pi4|%pI4", ...) wrote '127.000.000.001|127.0.0.1', expected '127-000.000.001|127.0.0.1' >>>> [ 0.538030] test_printf: kvasprintf(..., "%pi4|%pI4", ...) returned '127.000.000.001|127.0.0.1', expected '127-000.000.001|127.0.0.1' >>>> [ 0.538124] test_printf: failed 2 out of 388 tests >>>> [ 0.538125] test_printf: random seed used was 0x1bc1efd881954afb >>>> >>>> Converted test success: >>>> ? ? # Subtest: printf >>>> ? ? 1..25 >>>> ? ? ok 1 - test_basic >>>> ? ? ok 2 - test_number >>>> ? ? ok 3 - test_string >>>> ? ? ok 4 - plain >>>> ? ? ok 5 - null_pointer >>>> ? ? ok 6 - error_pointer >>>> ? ? ok 7 - invalid_pointer >>>> ? ? ok 8 - symbol_ptr >>>> ? ? ok 9 - kernel_ptr >>>> ? ? ok 10 - struct_resource >>>> ? ? ok 11 - addr >>>> ? ? ok 12 - escaped_str >>>> ? ? ok 13 - hex_string >>>> ? ? ok 14 - mac >>>> ? ? ok 15 - ip >>>> ? ? ok 16 - uuid >>>> ? ? ok 17 - dentry >>>> ? ? ok 18 - struct_va_format >>>> ? ? ok 19 - time_and_date >>>> ? ? ok 20 - struct_clk >>>> ? ? ok 21 - bitmap >>>> ? ? ok 22 - netdev_features >>>> ? ? ok 23 - flags >>>> ? ? ok 24 - errptr >>>> ? ? ok 25 - fwnode_pointer >>>> ok 1 - printf >>>> >>>> Converted test failure: >>>> ? ? # Subtest: printf >>>> ? ? 1..25 >>>> ? ? ok 1 - test_basic >>>> ? ? ok 2 - test_number >>>> ? ? ok 3 - test_string >>>> ? ? ok 4 - plain >>>> ? ? ok 5 - null_pointer >>>> ? ? ok 6 - error_pointer >>>> ? ? ok 7 - invalid_pointer >>>> ? ? ok 8 - symbol_ptr >>>> ? ? ok 9 - kernel_ptr >>>> ? ? ok 10 - struct_resource >>>> ? ? ok 11 - addr >>>> ? ? ok 12 - escaped_str >>>> ? ? ok 13 - hex_string >>>> ? ? ok 14 - mac >>>> ? ? # ip: EXPECTATION FAILED at lib/printf_kunit.c:82 >>>> vsnprintf(buf, 256, "%pi4|%pI4", ...) wrote '127.000.000.001|127.0.0.1', expected '127-000.000.001|127.0.0.1' >>>> ? ? # ip: EXPECTATION FAILED at lib/printf_kunit.c:124 >>>> kvasprintf(..., "%pi4|%pI4", ...) returned '127.000.000.001|127.0.0.1', expected '127-000.000.001|127.0.0.1' >>>> ? ? not ok 15 - ip >>>> ? ? ok 16 - uuid >>>> ? ? ok 17 - dentry >>>> ? ? ok 18 - struct_va_format >>>> ? ? ok 19 - time_and_date >>>> ? ? ok 20 - struct_clk >>>> ? ? ok 21 - bitmap >>>> ? ? ok 22 - netdev_features >>>> ? ? ok 23 - flags >>>> ? ? ok 24 - errptr >>>> ? ? ok 25 - fwnode_pointer >>>> not ok 1 - printf >>> >>> Better, indeed. >>> >>> But can be this improved to have a cumulative statistics, like showing only >>> number of total, succeeded, failed with details of the latter ones? >> >> Is that the proper test output format? We have a standard... Actually more like xkcd#927. > > What is the standard, please? > > The original module produced: > > [ 48.577739] test_printf: loaded. > [ 48.578046] test_printf: all 388 tests passed > > It comes from KSTM_MODULE_LOADERS() macro that has been created > by the commit eebf4dd452377921e3a26 ("kselftest: Add test module > framework header"). That's a bit of a simplification. That code was clearly lifted directly from the original test_printf.c code (707cc7280f452a162c52bc240eae62568b9753c2). test_bitmap.c cloned test_printf.c (including a "Test cases for printf facility" comment...). Later both were converted to use the KSTM header. As the one coming up with that originally, I certainly endorse its use as a standard way of producing a final, free-form, summary, and I prefer to keep that total tally (i.e. 388) being printed for the reasons I've previously stated. [*] That said, I have absolutely nothing against _also_ producing machine-parsable TAP output. And the above looks to be a good compromise between spitting out one TAP line for each of the 388 test cases (or checks, or atoms, whatever the indiviual parts are to be called) and treating all of test_printf.c as one single PASS/FAIL test. [*] If I add some test cases to the time_and_date and run the kernel under virtme, I want to see 388 becoming something else, so that I know that I actually ran the code I just added and not some stale vmlinux - maybe I only did "make lib/test_printf.o" and didn't recreate vmlinux, maybe I did "make vmlinux" but failed to notice the build was broken. BTDT. And those summary lines are even more important to keep given my "deterministic random testing" series - the seed used _must_ be reported (preferably also in the "all good" case, but certainly in the "some failed" case). Arpitha, thank you for taking that series into account. Is there some way to keep the print of the total number of "atoms" as well as the reporting of the random seed? Or should the "deterministic random testing" be done in the context of KUNIT rather than KSTM? I'm really not sure why we have both nor which one one is supposed to write against. But I would prefer that the framework, whichever one, provides a means to get a deterministic sequence of random numbers, so that I won't have to eventually copy-paste the boilerplate to test_sort.c and test_list_sort.c - it's also much nicer if all test modules have a somewhat consistent interface in terms of the module parameters they accept. Rasmus