diff options
| author | Dan Williams <dan.j.williams@intel.com> | 2018-02-01 15:28:54 -0500 |
|---|---|---|
| committer | Dan Williams <dan.j.williams@intel.com> | 2018-02-01 19:49:54 -0500 |
| commit | 0fb5c8df609eaca3cb7c24e7f91470f8dd5984ec (patch) | |
| tree | 3a8fa84cc1a5c6c432e7a8572616f33bb5bafaaf | |
| parent | 674d8bdec770d40288574534eab27d82bdf16b0e (diff) | |
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 <dave.jiang@intel.com>
Reported-by: Vishal Verma <vishal.l.verma@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
| -rw-r--r-- | tools/testing/nvdimm/Kbuild | 4 | ||||
| -rw-r--r-- | tools/testing/nvdimm/acpi_nfit_test.c | 8 | ||||
| -rw-r--r-- | tools/testing/nvdimm/device_dax_test.c | 8 | ||||
| -rw-r--r-- | tools/testing/nvdimm/libnvdimm_test.c | 8 | ||||
| -rw-r--r-- | tools/testing/nvdimm/pmem_test.c | 8 | ||||
| -rw-r--r-- | tools/testing/nvdimm/test/nfit.c | 6 | ||||
| -rw-r--r-- | tools/testing/nvdimm/watermark.h | 21 |
7 files changed, 63 insertions, 0 deletions
diff --git a/tools/testing/nvdimm/Kbuild b/tools/testing/nvdimm/Kbuild index db33b28c5ef3..0392153a0009 100644 --- a/tools/testing/nvdimm/Kbuild +++ b/tools/testing/nvdimm/Kbuild | |||
| @@ -37,10 +37,12 @@ obj-$(CONFIG_DEV_DAX_PMEM) += dax_pmem.o | |||
| 37 | 37 | ||
| 38 | nfit-y := $(ACPI_SRC)/core.o | 38 | nfit-y := $(ACPI_SRC)/core.o |
| 39 | nfit-$(CONFIG_X86_MCE) += $(ACPI_SRC)/mce.o | 39 | nfit-$(CONFIG_X86_MCE) += $(ACPI_SRC)/mce.o |
| 40 | nfit-y += acpi_nfit_test.o | ||
| 40 | nfit-y += config_check.o | 41 | nfit-y += config_check.o |
| 41 | 42 | ||
| 42 | nd_pmem-y := $(NVDIMM_SRC)/pmem.o | 43 | nd_pmem-y := $(NVDIMM_SRC)/pmem.o |
| 43 | nd_pmem-y += pmem-dax.o | 44 | nd_pmem-y += pmem-dax.o |
| 45 | nd_pmem-y += pmem_test.o | ||
| 44 | nd_pmem-y += config_check.o | 46 | nd_pmem-y += config_check.o |
| 45 | 47 | ||
| 46 | nd_btt-y := $(NVDIMM_SRC)/btt.o | 48 | nd_btt-y := $(NVDIMM_SRC)/btt.o |
| @@ -57,6 +59,7 @@ dax-y += config_check.o | |||
| 57 | 59 | ||
| 58 | device_dax-y := $(DAX_SRC)/device.o | 60 | device_dax-y := $(DAX_SRC)/device.o |
| 59 | device_dax-y += dax-dev.o | 61 | device_dax-y += dax-dev.o |
| 62 | device_dax-y += device_dax_test.o | ||
| 60 | device_dax-y += config_check.o | 63 | device_dax-y += config_check.o |
| 61 | 64 | ||
| 62 | dax_pmem-y := $(DAX_SRC)/pmem.o | 65 | dax_pmem-y := $(DAX_SRC)/pmem.o |
| @@ -75,6 +78,7 @@ libnvdimm-$(CONFIG_ND_CLAIM) += $(NVDIMM_SRC)/claim.o | |||
| 75 | libnvdimm-$(CONFIG_BTT) += $(NVDIMM_SRC)/btt_devs.o | 78 | libnvdimm-$(CONFIG_BTT) += $(NVDIMM_SRC)/btt_devs.o |
| 76 | libnvdimm-$(CONFIG_NVDIMM_PFN) += $(NVDIMM_SRC)/pfn_devs.o | 79 | libnvdimm-$(CONFIG_NVDIMM_PFN) += $(NVDIMM_SRC)/pfn_devs.o |
| 77 | libnvdimm-$(CONFIG_NVDIMM_DAX) += $(NVDIMM_SRC)/dax_devs.o | 80 | libnvdimm-$(CONFIG_NVDIMM_DAX) += $(NVDIMM_SRC)/dax_devs.o |
| 81 | libnvdimm-y += libnvdimm_test.o | ||
| 78 | libnvdimm-y += config_check.o | 82 | libnvdimm-y += config_check.o |
| 79 | 83 | ||
| 80 | obj-m += test/ | 84 | obj-m += test/ |
diff --git a/tools/testing/nvdimm/acpi_nfit_test.c b/tools/testing/nvdimm/acpi_nfit_test.c new file mode 100644 index 000000000000..43521512e577 --- /dev/null +++ b/tools/testing/nvdimm/acpi_nfit_test.c | |||
| @@ -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); | ||
diff --git a/tools/testing/nvdimm/device_dax_test.c b/tools/testing/nvdimm/device_dax_test.c new file mode 100644 index 000000000000..24b17bf42429 --- /dev/null +++ b/tools/testing/nvdimm/device_dax_test.c | |||
| @@ -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); | ||
diff --git a/tools/testing/nvdimm/libnvdimm_test.c b/tools/testing/nvdimm/libnvdimm_test.c new file mode 100644 index 000000000000..00ca30b23932 --- /dev/null +++ b/tools/testing/nvdimm/libnvdimm_test.c | |||
| @@ -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); | ||
diff --git a/tools/testing/nvdimm/pmem_test.c b/tools/testing/nvdimm/pmem_test.c new file mode 100644 index 000000000000..fd38f92275cf --- /dev/null +++ b/tools/testing/nvdimm/pmem_test.c | |||
| @@ -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); | ||
diff --git a/tools/testing/nvdimm/test/nfit.c b/tools/testing/nvdimm/test/nfit.c index 42ee1798971d..450b4cbba6b6 100644 --- a/tools/testing/nvdimm/test/nfit.c +++ b/tools/testing/nvdimm/test/nfit.c | |||
| @@ -27,6 +27,7 @@ | |||
| 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) | |||
| 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"); |
diff --git a/tools/testing/nvdimm/watermark.h b/tools/testing/nvdimm/watermark.h new file mode 100644 index 000000000000..ed0528757bd4 --- /dev/null +++ b/tools/testing/nvdimm/watermark.h | |||
| @@ -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_ */ | ||
