Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp689813pxx; Wed, 28 Oct 2020 14:36:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy9XQzbWmu9aqzD6TjqPizc9gjUEssyAhmFW7bH0PJ8QOMz1mSu/XjUOtRbvFZWOWud+Hnv X-Received: by 2002:a17:906:1f53:: with SMTP id d19mr1041454ejk.255.1603920965931; Wed, 28 Oct 2020 14:36:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603920965; cv=none; d=google.com; s=arc-20160816; b=UPT6Mc1nd14Rabjj8KbOFnCvSqYET8N0om1c+U5KNL9YOLFigquLUtj27p/QJ/+Qd9 5AiC+WYw8KVUTu1VMuN7bMc6NJpEsVLANcGa4BpbKX1m/zgCCE7/lv6mgHgiQCde1k7O YRe6SC/tmIfomoW2Lt9wuTJwyKS08lSmai6fcLqOnhlStgGSCEqyy0PI9poKz1HSRMBw bIo24gwN82kvAl0NSXMXTUhcPcJC3+Dqk2ShZrYwnxLHuh5UJeRzCPJXL5Tjh12nAs/v F2fmYmisTZtOlmEK8i0x2E4c3ckhgTF1779agslUMlUqyfz0S//01E0uJHElmd7qEbJK SYvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=aF9va2QZsHh2vu5VaWf9nZ0V6xX3aUGX6zWSbAgTfeU=; b=OBYXJY4Z8CBxacxubX+j7lr04293D1eT1pzMMD4hv7nUumCUc3h42D3Q7A7tu/3Gly oMfrkjfmnGlMTX2qI/eHFqGTsMTswZigIiRq4+l2KQFjyeJm+KDmiIoHCvaEPTJsziHK Rl3jgGKo1jjHJGlrCqIHbqJfSZ6WUyBW2P5cSp6XpeZ/WoAYtFHzEjmKOxuX7hCDyS55 NBAx91ozrOl0aJK+NbXQKq8U0+Xk/jvmKbzWQgrPKEDkTf+AojNnV3jbKAUS9l1v5Lqu 8oNj0sGHv3hnX0yGBuaRkXyxnO3QBmaO3mP6GtRB/8O/WmaDzevd8lhx8E7/+eExCnnC MMKw== ARC-Authentication-Results: i=1; mx.google.com; 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 k20si586369eds.233.2020.10.28.14.35.43; Wed, 28 Oct 2020 14:36:05 -0700 (PDT) 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; 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 S373154AbgJ0UoD (ORCPT + 99 others); Tue, 27 Oct 2020 16:44:03 -0400 Received: from mout.kundenserver.de ([217.72.192.73]:46067 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2505096AbgJ0Unz (ORCPT ); Tue, 27 Oct 2020 16:43:55 -0400 Received: from weisslap.m4st3rnet.de ([178.27.102.19]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.183]) with ESMTPSA (Nemesis) id 1M3DFj-1kWgzv3G7p-003ght; Tue, 27 Oct 2020 21:43:22 +0100 From: =?UTF-8?q?Michael=20Wei=C3=9F?= To: Thomas Gleixner , Andrei Vagin , Christian Brauner Cc: Dmitry Safonov <0x7f454c46@gmail.com>, linux-kernel@vger.kernel.org, "J . Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker , =?UTF-8?q?Michael=20Wei=C3=9F?= Subject: [PATCH v5 3/3] selftests/timens: added selftest for /proc/stat btime Date: Tue, 27 Oct 2020 21:42:58 +0100 Message-Id: <20201027204258.7869-4-michael.weiss@aisec.fraunhofer.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201027204258.7869-1-michael.weiss@aisec.fraunhofer.de> References: <20201027204258.7869-1-michael.weiss@aisec.fraunhofer.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K1:9CP25kbZ74AldUWvhVfiGp5J7jAhXx83pCAIIo00hQFDtdaCUXU L0GHWd5P3d5vG0Eir5MtS9LhLr1qezt0fHu/PmpwsvqHRdmsaUzpA15xYEqPbwd6pde442f kz1/32kv3OR4+1gCWTVDyti59J8mTiuhtQ3fzYPOydCaEi+yoo6MovSb3V7BHopjSigvpP6 j6MARluLrVxf0ko9aiH2w== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:BugYU5DyraE=:XAbSuaMT5DwoZ8ODcnhOV5 BRB2BxBUFtxJMhqxh5PXIT1yviqbck7hve0C16/BGBabC0wpgBFyv5ZzIHb8CA29xx4A8XZ8p aV3F9vPtLveuxcKDZLR8Ln/vscTSCrsKxZPccVZcqgm6dN0+RdLb6GreOSsVo+D4bPJAAtuop PI+yIP+1/aSRgGttyGWdb5dmEQGLMSSDuWBQpiRwubVm2ByWv96wJRWewY4s5fCyHE3KTVbv2 K2aYrQxknZG3hEXUhhenKV/Scr/c0O2dovf7J0TA/tNE9lEchSl9slolpCbl9NkVnQapxXfLW R2ez1/vaSEswOXG0S1jZr1jAjw/EuuKXGE/TlxHRLEONcBzy2x6aHq5FmQiJypG2jcITtvx5b IHMB9SYLkbE39GkV+MkKomkr3tWbkIwkhKfm9HkSKSF+BWQcUkih1XLwj7mxiSsMZDIT8houO +bV4rJ03so40gLJkEns3repM/ADwTuc= Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Test that btime value of /proc/stat is as expected in the time namespace using a simple parser to get btime from /proc/stat. Signed-off-by: Michael Weiß Reviewed-by: Andrei Vagin Acked-by: Thomas Gleixner --- tools/testing/selftests/timens/procfs.c | 58 ++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/timens/procfs.c b/tools/testing/selftests/timens/procfs.c index 7f14f0fdac84..f2519154208a 100644 --- a/tools/testing/selftests/timens/procfs.c +++ b/tools/testing/selftests/timens/procfs.c @@ -93,6 +93,33 @@ static int read_proc_uptime(struct timespec *uptime) return 0; } +static int read_proc_stat_btime(unsigned long long *boottime_sec) +{ + FILE *proc; + char line_buf[2048]; + + proc = fopen("/proc/stat", "r"); + if (proc == NULL) { + pr_perror("Unable to open /proc/stat"); + return -1; + } + + while (fgets(line_buf, 2048, proc)) { + if (sscanf(line_buf, "btime %llu", boottime_sec) != 1) + continue; + fclose(proc); + return 0; + } + if (errno) { + pr_perror("fscanf"); + fclose(proc); + return -errno; + } + pr_err("failed to parse /proc/stat"); + fclose(proc); + return -1; +} + static int check_uptime(void) { struct timespec uptime_new, uptime_old; @@ -123,18 +150,47 @@ static int check_uptime(void) return 0; } +static int check_stat_btime(void) +{ + unsigned long long btime_new, btime_old; + unsigned long long btime_expected; + + if (switch_ns(parent_ns)) + return pr_err("switch_ns(%d)", parent_ns); + + if (read_proc_stat_btime(&btime_old)) + return 1; + + if (switch_ns(child_ns)) + return pr_err("switch_ns(%d)", child_ns); + + if (read_proc_stat_btime(&btime_new)) + return 1; + + btime_expected = btime_old - TEN_DAYS_IN_SEC; + if (btime_new != btime_expected) { + pr_fail("btime in /proc/stat: old %llu, new %llu [%llu]", + btime_old, btime_new, btime_expected); + return 1; + } + + ksft_test_result_pass("Passed for /proc/stat btime\n"); + return 0; +} + int main(int argc, char *argv[]) { int ret = 0; nscheck(); - ksft_set_plan(1); + ksft_set_plan(2); if (init_namespaces()) return 1; ret |= check_uptime(); + ret |= check_stat_btime(); if (ret) ksft_exit_fail(); -- 2.20.1