History

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)

Dan Williams committed 8 years ago

Commit 0fb5c8d1 parent 674d8bd7 files · +63 −0Browse files

Unified · Split

7 files
  1. tools/testing/nvdimm/Kbuild +4 −0
  2. tools/testing/nvdimm/acpi_nfit_test.c +8 −0
  3. tools/testing/nvdimm/device_dax_test.c +8 −0
  4. tools/testing/nvdimm/libnvdimm_test.c +8 −0
  5. tools/testing/nvdimm/pmem_test.c +8 −0
  6. tools/testing/nvdimm/test/nfit.c +6 −0
  7. tools/testing/nvdimm/watermark.h +21 −0
tools/testing/nvdimm/Kbuild+4−0
@@ -37,10 +37,12 @@ obj-$(CONFIG_DEV_DAX_PMEM) += dax_pmem.o · 36 unmodified lines
37 37
38nfit-y := $(ACPI_SRC)/core.o38nfit-y := $(ACPI_SRC)/core.o
39nfit-$(CONFIG_X86_MCE) += $(ACPI_SRC)/mce.o39nfit-$(CONFIG_X86_MCE) += $(ACPI_SRC)/mce.o
40nfit-y += acpi_nfit_test.o
40nfit-y += config_check.o41nfit-y += config_check.o
41 42
42nd_pmem-y := $(NVDIMM_SRC)/pmem.o43nd_pmem-y := $(NVDIMM_SRC)/pmem.o
43nd_pmem-y += pmem-dax.o44nd_pmem-y += pmem-dax.o
45nd_pmem-y += pmem_test.o
44nd_pmem-y += config_check.o46nd_pmem-y += config_check.o
45 47
46nd_btt-y := $(NVDIMM_SRC)/btt.o48nd_btt-y := $(NVDIMM_SRC)/btt.o
@@ -57,6 +59,7 @@ dax-y += config_check.o · 10 unmodified lines
57 59
58device_dax-y := $(DAX_SRC)/device.o60device_dax-y := $(DAX_SRC)/device.o
59device_dax-y += dax-dev.o61device_dax-y += dax-dev.o
62device_dax-y += device_dax_test.o
60device_dax-y += config_check.o63device_dax-y += config_check.o
61 64
62dax_pmem-y := $(DAX_SRC)/pmem.o65dax_pmem-y := $(DAX_SRC)/pmem.o
@@ -75,6 +78,7 @@ libnvdimm-$(CONFIG_ND_CLAIM) += $(NVDIMM_SRC)/claim.o · 12 unmodified lines
75libnvdimm-$(CONFIG_BTT) += $(NVDIMM_SRC)/btt_devs.o78libnvdimm-$(CONFIG_BTT) += $(NVDIMM_SRC)/btt_devs.o
76libnvdimm-$(CONFIG_NVDIMM_PFN) += $(NVDIMM_SRC)/pfn_devs.o79libnvdimm-$(CONFIG_NVDIMM_PFN) += $(NVDIMM_SRC)/pfn_devs.o
77libnvdimm-$(CONFIG_NVDIMM_DAX) += $(NVDIMM_SRC)/dax_devs.o80libnvdimm-$(CONFIG_NVDIMM_DAX) += $(NVDIMM_SRC)/dax_devs.o
81libnvdimm-y += libnvdimm_test.o
78libnvdimm-y += config_check.o82libnvdimm-y += config_check.o
79 83
80obj-m += test/84obj-m += test/
tools/testing/nvdimm/acpi_nfit_test.c+8−0
@@ -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
8nfit_test_watermark(acpi_nfit);
tools/testing/nvdimm/device_dax_test.c+8−0
@@ -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
8nfit_test_watermark(device_dax);
tools/testing/nvdimm/libnvdimm_test.c+8−0
@@ -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
8nfit_test_watermark(libnvdimm);
tools/testing/nvdimm/pmem_test.c+8−0
@@ -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
8nfit_test_watermark(pmem);
tools/testing/nvdimm/test/nfit.c+6−0
@@ -27,6 +27,7 @@ · 26 unmodified lines
27#include <nfit.h>27#include <nfit.h>
28#include <nd.h>28#include <nd.h>
29#include "nfit_test.h"29#include "nfit_test.h"
30#include "../watermark.h"
30 31
31/*32/*
32 * Generate an NFIT table to describe the following topology:33 * Generate an NFIT table to describe the following topology:
@@ -2545,6 +2546,11 @@ static __init int nfit_test_init(void) · 2512 unmodified lines
2545{2546{
2546 int rc, i;2547 int rc, i;
2547 2548
2549 pmem_test();
2550 libnvdimm_test();
2551 acpi_nfit_test();
2552 device_dax_test();
2553
2548 nfit_test_setup(nfit_test_lookup, nfit_test_evaluate_dsm);2554 nfit_test_setup(nfit_test_lookup, nfit_test_evaluate_dsm);
2549 2555
2550 nfit_wq = create_singlethread_workqueue("nfit");2556 nfit_wq = create_singlethread_workqueue("nfit");
tools/testing/nvdimm/watermark.h+21−0
@@ -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_
5int pmem_test(void);
6int libnvdimm_test(void);
7int acpi_nfit_test(void);
8int 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) \
15int x##_test(void) \
16{ \
17 pr_debug("%s for nfit_test\n", KBUILD_MODNAME); \
18 return 0; \
19} \
20EXPORT_SYMBOL(x##_test)
21#endif /* _TEST_NVDIMM_WATERMARK_H_ */