Skip to content

Commit 0fb5c8d

Browse files
committed
tools/testing/nvdimm: force nfit_test to depend on instrumented modules
The libnvdimm unit tests will fail when they are run against the production / in-tree version of libnvdimm.ko or nfit.ko due to symbols not being mocked per nfit_test's expectation. For example, nfit_test expects acpi_evaluate_dsm() to be replaced by __wrap_acpi_evaluate_dsm() to test how acpi_nfit_ctl() responds to different stimuli. Create a test-only symbol name that nfit_test links against to cause module load failures when the wrong module is present. For example, with this change, attempts to use the wrong module will report: nfit_test: Unknown symbol libnvdimm_test (err 0) Reported-by: Dave Jiang <[email protected]> Reported-by: Vishal Verma <[email protected]> Signed-off-by: Dan Williams <[email protected]>
1 parent 674d8bd commit 0fb5c8d

File tree

7 files changed

+63
-0
lines changed

7 files changed

+63
-0
lines changed

tools/testing/nvdimm/Kbuild

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,12 @@ obj-$(CONFIG_DEV_DAX_PMEM) += dax_pmem.o
3737

3838
nfit-y := $(ACPI_SRC)/core.o
3939
nfit-$(CONFIG_X86_MCE) += $(ACPI_SRC)/mce.o
40+
nfit-y += acpi_nfit_test.o
4041
nfit-y += config_check.o
4142

4243
nd_pmem-y := $(NVDIMM_SRC)/pmem.o
4344
nd_pmem-y += pmem-dax.o
45+
nd_pmem-y += pmem_test.o
4446
nd_pmem-y += config_check.o
4547

4648
nd_btt-y := $(NVDIMM_SRC)/btt.o
@@ -57,6 +59,7 @@ dax-y += config_check.o
5759

5860
device_dax-y := $(DAX_SRC)/device.o
5961
device_dax-y += dax-dev.o
62+
device_dax-y += device_dax_test.o
6063
device_dax-y += config_check.o
6164

6265
dax_pmem-y := $(DAX_SRC)/pmem.o
@@ -75,6 +78,7 @@ libnvdimm-$(CONFIG_ND_CLAIM) += $(NVDIMM_SRC)/claim.o
7578
libnvdimm-$(CONFIG_BTT) += $(NVDIMM_SRC)/btt_devs.o
7679
libnvdimm-$(CONFIG_NVDIMM_PFN) += $(NVDIMM_SRC)/pfn_devs.o
7780
libnvdimm-$(CONFIG_NVDIMM_DAX) += $(NVDIMM_SRC)/dax_devs.o
81+
libnvdimm-y += libnvdimm_test.o
7882
libnvdimm-y += config_check.o
7983

8084
obj-m += test/

tools/testing/nvdimm/acpi_nfit_test.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// SPDX-License-Identifier: GPL-2.0
2+
// Copyright(c) 2018 Intel Corporation. All rights reserved.
3+
4+
#include <linux/module.h>
5+
#include <linux/printk.h>
6+
#include "watermark.h"
7+
8+
nfit_test_watermark(acpi_nfit);
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// SPDX-License-Identifier: GPL-2.0
2+
// Copyright(c) 2018 Intel Corporation. All rights reserved.
3+
4+
#include <linux/module.h>
5+
#include <linux/printk.h>
6+
#include "watermark.h"
7+
8+
nfit_test_watermark(device_dax);

tools/testing/nvdimm/libnvdimm_test.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// SPDX-License-Identifier: GPL-2.0
2+
// Copyright(c) 2018 Intel Corporation. All rights reserved.
3+
4+
#include <linux/module.h>
5+
#include <linux/printk.h>
6+
#include "watermark.h"
7+
8+
nfit_test_watermark(libnvdimm);

tools/testing/nvdimm/pmem_test.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// SPDX-License-Identifier: GPL-2.0
2+
// Copyright(c) 2018 Intel Corporation. All rights reserved.
3+
4+
#include <linux/module.h>
5+
#include <linux/printk.h>
6+
#include "watermark.h"
7+
8+
nfit_test_watermark(pmem);

tools/testing/nvdimm/test/nfit.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <nfit.h>
2828
#include <nd.h>
2929
#include "nfit_test.h"
30+
#include "../watermark.h"
3031

3132
/*
3233
* Generate an NFIT table to describe the following topology:
@@ -2545,6 +2546,11 @@ static __init int nfit_test_init(void)
25452546
{
25462547
int rc, i;
25472548

2549+
pmem_test();
2550+
libnvdimm_test();
2551+
acpi_nfit_test();
2552+
device_dax_test();
2553+
25482554
nfit_test_setup(nfit_test_lookup, nfit_test_evaluate_dsm);
25492555

25502556
nfit_wq = create_singlethread_workqueue("nfit");

tools/testing/nvdimm/watermark.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// SPDX-License-Identifier: GPL-2.0
2+
// Copyright(c) 2018 Intel Corporation. All rights reserved.
3+
#ifndef _TEST_NVDIMM_WATERMARK_H_
4+
#define _TEST_NVDIMM_WATERMARK_H_
5+
int pmem_test(void);
6+
int libnvdimm_test(void);
7+
int acpi_nfit_test(void);
8+
int device_dax_test(void);
9+
10+
/*
11+
* dummy routine for nfit_test to validate it is linking to the properly
12+
* mocked module and not the standard one from the base tree.
13+
*/
14+
#define nfit_test_watermark(x) \
15+
int x##_test(void) \
16+
{ \
17+
pr_debug("%s for nfit_test\n", KBUILD_MODNAME); \
18+
return 0; \
19+
} \
20+
EXPORT_SYMBOL(x##_test)
21+
#endif /* _TEST_NVDIMM_WATERMARK_H_ */

0 commit comments

Comments
 (0)