Skip to content

Commit ec4a7f8

Browse files
Add tests
1 parent f35d01a commit ec4a7f8

File tree

5 files changed

+308
-1
lines changed

5 files changed

+308
-1
lines changed

dkms.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1543,7 +1543,7 @@ do_build()
15431543
rm -rf "${build_dir:?}"
15441544

15451545
# After successful build, save dependency versions
1546-
if [[ $BUILD_DEPENDS_REBUILD ]]; then
1546+
if [[ $BUILD_DEPENDS_REBUILD ]] && [[ ! $force ]]; then
15471547
mkdir -p "$base_dir"
15481548
for bd in "${BUILD_DEPENDS[@]}"; do
15491549
local dep_version

run_test.sh

Lines changed: 269 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ tmpdir=$(mktemp -d)
3131
TEST_MODULES=(
3232
"dkms_test"
3333
"dkms_dependencies_test"
34+
"dkms_dependencies_rebuild_test"
3435
"dkms_circular_dependencies_test"
3536
"dkms_replace_test"
3637
"dkms_noautoinstall_test"
@@ -54,7 +55,9 @@ TEST_MODULES=(
5455
)
5556
TEST_TMPDIRS=(
5657
"/usr/src/dkms_test-1.0"
58+
"/usr/src/dkms_test-2.0"
5759
"/usr/src/dkms_dependencies_test-1.0"
60+
"/usr/src/dkms_dependencies_rebuild_test-1.0"
5861
"/usr/src/dkms_circular_dependencies_test-1.0"
5962
"/usr/src/dkms_replace_test-2.0"
6063
"/usr/src/dkms_noautoinstall_test-1.0"
@@ -1809,6 +1812,272 @@ check_no_dkms_test
18091812

18101813
fi # dependencies tests
18111814

1815+
if [[ ! $only || $only = rebuild_dependencies ]]; then
1816+
1817+
############################################################################
1818+
echo '*** Testing dkms modules with dependencies and rebuild requirements'
1819+
############################################################################
1820+
1821+
set_signing_message "dkms_dependencies_rebuild_test" "1.0"
1822+
SIGNING_MESSAGE_dependencies="$SIGNING_MESSAGE"
1823+
set_signing_message "dkms_test" "1.0"
1824+
1825+
echo 'Adding the prerequisite test module'
1826+
run_with_expected_output dkms add test/dkms_test-1.0 << EOF
1827+
Creating symlink /var/lib/dkms/dkms_test/1.0/source -> /usr/src/dkms_test-1.0
1828+
EOF
1829+
check_module_source_tree_created /usr/src/dkms_test-1.0
1830+
run_status_with_expected_output 'dkms_test' << EOF
1831+
dkms_test/1.0: added
1832+
EOF
1833+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
1834+
EOF
1835+
1836+
echo 'Running dkms autoinstall'
1837+
run_with_expected_output dkms autoinstall -k "${KERNEL_VER}" << EOF
1838+
${SIGNING_PROLOGUE}
1839+
Autoinstall of module dkms_test/1.0 for kernel ${KERNEL_VER} (${KERNEL_ARCH})
1840+
Building module(s)... done.${SIGNING_MESSAGE}
1841+
Installing /lib/modules/${KERNEL_VER}/${expected_dest_loc}/dkms_test.ko${mod_compression_ext}
1842+
Running depmod... done.
1843+
1844+
Autoinstall on ${KERNEL_VER} succeeded for module(s) dkms_test.
1845+
EOF
1846+
run_status_with_expected_output 'dkms_test' << EOF
1847+
dkms_test/1.0, ${KERNEL_VER}, ${KERNEL_ARCH}: installed
1848+
EOF
1849+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
1850+
EOF
1851+
1852+
echo 'Adding test module with dependencies'
1853+
run_with_expected_output dkms add test/dkms_dependencies_rebuild_test-1.0 << EOF
1854+
Creating symlink /var/lib/dkms/dkms_dependencies_rebuild_test/1.0/source -> /usr/src/dkms_dependencies_rebuild_test-1.0
1855+
EOF
1856+
check_module_source_tree_created /usr/src/dkms_dependencies_rebuild_test-1.0
1857+
run_status_with_expected_output 'dkms_test' << EOF
1858+
dkms_test/1.0, ${KERNEL_VER}, ${KERNEL_ARCH}: installed
1859+
EOF
1860+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
1861+
dkms_dependencies_rebuild_test/1.0: added
1862+
EOF
1863+
1864+
echo 'Running dkms autoinstall'
1865+
run_with_expected_output dkms autoinstall -k "${KERNEL_VER}" << EOF
1866+
${SIGNING_PROLOGUE}
1867+
Autoinstall of module dkms_dependencies_rebuild_test/1.0 for kernel ${KERNEL_VER} (${KERNEL_ARCH})
1868+
Building module(s)... done.${SIGNING_MESSAGE_dependencies}
1869+
Installing /lib/modules/${KERNEL_VER}/${expected_dest_loc}/dkms_dependencies_rebuild_test.ko${mod_compression_ext}
1870+
Running depmod... done.
1871+
1872+
Autoinstall on ${KERNEL_VER} succeeded for module(s) dkms_test dkms_dependencies_rebuild_test.
1873+
EOF
1874+
run_status_with_expected_output 'dkms_test' << EOF
1875+
dkms_test/1.0, ${KERNEL_VER}, ${KERNEL_ARCH}: installed
1876+
EOF
1877+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
1878+
dkms_dependencies_rebuild_test/1.0, ${KERNEL_VER}, ${KERNEL_ARCH}: installed
1879+
EOF
1880+
run_with_expected_output cat /var/lib/dkms/dkms_dependencies_rebuild_test/kernel-${KERNEL_VER}-${KERNEL_ARCH}/.dep_dkms_test << EOF
1881+
1.0
1882+
EOF
1883+
1884+
echo 'Running dkms kernel_prerm'
1885+
run_with_expected_output dkms kernel_prerm -k "${KERNEL_VER}" << EOF
1886+
dkms: removing module dkms_dependencies_rebuild_test/1.0 for kernel ${KERNEL_VER} (${KERNEL_ARCH})
1887+
Module dkms_dependencies_rebuild_test/1.0 for kernel ${KERNEL_VER} (${KERNEL_ARCH}):
1888+
Before uninstall, this module version was ACTIVE on this kernel.
1889+
Deleting /lib/modules/${KERNEL_VER}/${expected_dest_loc}/dkms_dependencies_rebuild_test.ko${mod_compression_ext}
1890+
1891+
dkms: removing module dkms_test/1.0 for kernel ${KERNEL_VER} (${KERNEL_ARCH})
1892+
Module dkms_test/1.0 for kernel ${KERNEL_VER} (${KERNEL_ARCH}):
1893+
Before uninstall, this module version was ACTIVE on this kernel.
1894+
Deleting /lib/modules/${KERNEL_VER}/${expected_dest_loc}/dkms_test.ko${mod_compression_ext}
1895+
1896+
Running depmod... done.
1897+
EOF
1898+
run_status_with_expected_output 'dkms_test' << EOF
1899+
dkms_test/1.0: added
1900+
EOF
1901+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
1902+
dkms_dependencies_rebuild_test/1.0: added
1903+
EOF
1904+
1905+
echo 'Running dkms kernel_prerm again'
1906+
run_with_expected_output dkms kernel_prerm -k "${KERNEL_VER}" << EOF
1907+
EOF
1908+
run_status_with_expected_output 'dkms_test' << EOF
1909+
dkms_test/1.0: added
1910+
EOF
1911+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
1912+
dkms_dependencies_rebuild_test/1.0: added
1913+
EOF
1914+
1915+
echo 'Running dkms autoinstall'
1916+
run_with_expected_output dkms autoinstall -k "${KERNEL_VER}" << EOF
1917+
${SIGNING_PROLOGUE}
1918+
Autoinstall of module dkms_test/1.0 for kernel ${KERNEL_VER} (${KERNEL_ARCH})
1919+
Building module(s)... done.${SIGNING_MESSAGE}
1920+
Installing /lib/modules/${KERNEL_VER}/${expected_dest_loc}/dkms_test.ko${mod_compression_ext}
1921+
Running depmod... done.
1922+
1923+
Autoinstall of module dkms_dependencies_rebuild_test/1.0 for kernel ${KERNEL_VER} (${KERNEL_ARCH})
1924+
Building module(s)... done.${SIGNING_MESSAGE_dependencies}
1925+
Installing /lib/modules/${KERNEL_VER}/${expected_dest_loc}/dkms_dependencies_rebuild_test.ko${mod_compression_ext}
1926+
Running depmod... done.
1927+
1928+
Autoinstall on ${KERNEL_VER} succeeded for module(s) dkms_test dkms_dependencies_rebuild_test.
1929+
EOF
1930+
run_status_with_expected_output 'dkms_test' << EOF
1931+
dkms_test/1.0, ${KERNEL_VER}, ${KERNEL_ARCH}: installed
1932+
EOF
1933+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
1934+
dkms_dependencies_rebuild_test/1.0, ${KERNEL_VER}, ${KERNEL_ARCH}: installed
1935+
EOF
1936+
1937+
echo 'Running dkms autoinstall again'
1938+
run_with_expected_output dkms autoinstall -k "${KERNEL_VER}" << EOF
1939+
EOF
1940+
run_status_with_expected_output 'dkms_test' << EOF
1941+
dkms_test/1.0, ${KERNEL_VER}, ${KERNEL_ARCH}: installed
1942+
EOF
1943+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
1944+
dkms_dependencies_rebuild_test/1.0, ${KERNEL_VER}, ${KERNEL_ARCH}: installed
1945+
EOF
1946+
1947+
echo 'Removing the test module with dependencies'
1948+
run_with_expected_output dkms remove -k "${KERNEL_VER}" -m dkms_dependencies_rebuild_test -v 1.0 << EOF
1949+
Module dkms_dependencies_rebuild_test/1.0 for kernel ${KERNEL_VER} (${KERNEL_ARCH}):
1950+
Before uninstall, this module version was ACTIVE on this kernel.
1951+
Deleting /lib/modules/${KERNEL_VER}/${expected_dest_loc}/dkms_dependencies_rebuild_test.ko${mod_compression_ext}
1952+
Running depmod... done.
1953+
1954+
Deleting module dkms_dependencies_rebuild_test/1.0 completely from the DKMS tree.
1955+
EOF
1956+
run_status_with_expected_output 'dkms_test' << EOF
1957+
dkms_test/1.0, ${KERNEL_VER}, ${KERNEL_ARCH}: installed
1958+
EOF
1959+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
1960+
EOF
1961+
1962+
echo 'Removing the prerequisite test module'
1963+
run_with_expected_output dkms remove -k "${KERNEL_VER}" -m dkms_test -v 1.0 << EOF
1964+
Module dkms_test/1.0 for kernel ${KERNEL_VER} (${KERNEL_ARCH}):
1965+
Before uninstall, this module version was ACTIVE on this kernel.
1966+
Deleting /lib/modules/${KERNEL_VER}/${expected_dest_loc}/dkms_test.ko${mod_compression_ext}
1967+
Running depmod... done.
1968+
1969+
Deleting module dkms_test/1.0 completely from the DKMS tree.
1970+
EOF
1971+
run_status_with_expected_output 'dkms_test' << EOF
1972+
EOF
1973+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
1974+
EOF
1975+
1976+
remove_module_source_tree /usr/src/dkms_test-1.0 /usr/src/dkms_dependencies_rebuild_test-1.0
1977+
1978+
echo 'Adding test module with unsatisfied dependencies'
1979+
run_with_expected_output dkms add test/dkms_dependencies_rebuild_test-1.0 << EOF
1980+
Creating symlink /var/lib/dkms/dkms_dependencies_rebuild_test/1.0/source -> /usr/src/dkms_dependencies_rebuild_test-1.0
1981+
EOF
1982+
check_module_source_tree_created /usr/src/dkms_dependencies_rebuild_test-1.0
1983+
run_status_with_expected_output 'dkms_test' << EOF
1984+
EOF
1985+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
1986+
dkms_dependencies_rebuild_test/1.0: added
1987+
EOF
1988+
1989+
echo 'Building the test module with unsatisfied dependencies (expected error)'
1990+
run_with_expected_error 13 dkms build -k "${KERNEL_VER}" -m dkms_dependencies_rebuild_test -v 1.0 << EOF
1991+
${SIGNING_PROLOGUE}
1992+
1993+
Error! Aborting build of module dkms_dependencies_rebuild_test/1.0 for kernel ${KERNEL_VER} (${KERNEL_ARCH}) due to missing BUILD_DEPENDS: dkms_test.
1994+
You may override by specifying --force.
1995+
EOF
1996+
run_status_with_expected_output 'dkms_test' << EOF
1997+
EOF
1998+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
1999+
dkms_dependencies_rebuild_test/1.0: added
2000+
EOF
2001+
2002+
############ WIP
2003+
2004+
echo 'Building the test module with unsatisfied dependencies by force'
2005+
run_with_expected_output dkms build -k "${KERNEL_VER}" -m dkms_dependencies_rebuild_test -v 1.0 --force << EOF
2006+
${SIGNING_PROLOGUE}
2007+
Warning: Trying to build module dkms_dependencies_rebuild_test/1.0 for kernel ${KERNEL_VER} (${KERNEL_ARCH}) despite of missing BUILD_DEPENDS: dkms_test.
2008+
Building module(s)... done.${SIGNING_MESSAGE_dependencies}
2009+
EOF
2010+
run_status_with_expected_output 'dkms_test' << EOF
2011+
EOF
2012+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
2013+
dkms_dependencies_rebuild_test/1.0, ${KERNEL_VER}, ${KERNEL_ARCH}: built
2014+
EOF
2015+
2016+
echo 'Installing the test module with unsatisfied dependencies'
2017+
run_with_expected_output dkms install -k "${KERNEL_VER}" -m dkms_dependencies_rebuild_test -v 1.0 << EOF
2018+
Installing /lib/modules/${KERNEL_VER}/${expected_dest_loc}/dkms_dependencies_rebuild_test.ko${mod_compression_ext}
2019+
Running depmod... done.
2020+
EOF
2021+
run_status_with_expected_output 'dkms_test' << EOF
2022+
EOF
2023+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
2024+
dkms_dependencies_rebuild_test/1.0, ${KERNEL_VER}, ${KERNEL_ARCH}: installed
2025+
EOF
2026+
2027+
echo "Running dkms autoinstall"
2028+
run_with_expected_output dkms autoinstall -k "${KERNEL_VER}" << EOF
2029+
EOF
2030+
run_status_with_expected_output 'dkms_test' << EOF
2031+
EOF
2032+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
2033+
dkms_dependencies_rebuild_test/1.0, ${KERNEL_VER}, ${KERNEL_ARCH}: installed
2034+
EOF
2035+
2036+
echo 'Unbuilding the test module with unsatisfied dependencies'
2037+
run_with_expected_output dkms unbuild -k "${KERNEL_VER}" -m dkms_dependencies_rebuild_test -v 1.0 << EOF
2038+
Module dkms_dependencies_rebuild_test/1.0 for kernel ${KERNEL_VER} (${KERNEL_ARCH}):
2039+
Before uninstall, this module version was ACTIVE on this kernel.
2040+
Deleting /lib/modules/${KERNEL_VER}/${expected_dest_loc}/dkms_dependencies_rebuild_test.ko${mod_compression_ext}
2041+
Running depmod... done.
2042+
EOF
2043+
run_status_with_expected_output 'dkms_test' << EOF
2044+
EOF
2045+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
2046+
dkms_dependencies_rebuild_test/1.0: added
2047+
EOF
2048+
2049+
echo "Running dkms autoinstall (expected error)"
2050+
run_with_expected_error 11 dkms autoinstall -k "${KERNEL_VER}" << EOF
2051+
dkms_dependencies_rebuild_test/1.0 autoinstall failed due to missing dependencies: dkms_test.
2052+
2053+
Error! One or more modules failed to install during autoinstall.
2054+
Refer to previous errors for more information.
2055+
EOF
2056+
run_status_with_expected_output 'dkms_test' << EOF
2057+
EOF
2058+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
2059+
dkms_dependencies_rebuild_test/1.0: added
2060+
EOF
2061+
2062+
echo 'Removing the test module with unsatisfied dependencies'
2063+
run_with_expected_output dkms remove -k "${KERNEL_VER}" -m dkms_dependencies_rebuild_test -v 1.0 << EOF
2064+
Module dkms_dependencies_rebuild_test/1.0 is not installed for kernel ${KERNEL_VER} (${KERNEL_ARCH}). Skipping...
2065+
Module dkms_dependencies_rebuild_test/1.0 is not built for kernel ${KERNEL_VER} (${KERNEL_ARCH}). Skipping...
2066+
2067+
Deleting module dkms_dependencies_rebuild_test/1.0 completely from the DKMS tree.
2068+
EOF
2069+
run_status_with_expected_output 'dkms_test' << EOF
2070+
EOF
2071+
run_status_with_expected_output 'dkms_dependencies_rebuild_test' << EOF
2072+
EOF
2073+
2074+
remove_module_source_tree /usr/src/dkms_dependencies_rebuild_test-1.0
2075+
2076+
echo 'Checking that the environment is clean again'
2077+
check_no_dkms_test
2078+
2079+
fi # rebuild_dependencies tests
2080+
18122081
if [[ ! $only || $only = replace ]]; then
18132082

18142083
############################################################################
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
obj-m += dkms_dependencies_rebuild_test.o
2+
3+
all:
4+
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
5+
6+
clean:
7+
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
PACKAGE_NAME="dkms_dependencies_rebuild_test"
2+
PACKAGE_VERSION="1.0"
3+
BUILT_MODULE_NAME[0]="dkms_dependencies_rebuild_test"
4+
DEST_MODULE_LOCATION[0]="/kernel/extra"
5+
AUTOINSTALL="yes"
6+
7+
BUILD_DEPENDS="dkms_test"
8+
BUILD_DEPENDS_REBUILD="yes"
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include <linux/module.h>
2+
#include <linux/kernel.h>
3+
#include <linux/init.h>
4+
5+
#define DKMS_TEST_VER "1.0"
6+
7+
MODULE_LICENSE("GPL");
8+
MODULE_DESCRIPTION("A Simple dkms test module with rebuild dependencies");
9+
10+
static int __init dkms_dependencies_rebuild_test_init(void)
11+
{
12+
printk(KERN_INFO "DKMS Test Module with rebuild dependencies -%s Loaded\n",DKMS_TEST_VER);
13+
return 0;
14+
}
15+
16+
static void __exit dkms_dependencies_rebuild_test_cleanup(void)
17+
{
18+
printk(KERN_INFO "Cleaning up after dkms test module with rebuild dependencies.\n");
19+
}
20+
21+
module_init(dkms_dependencies_rebuild_test_init);
22+
module_exit(dkms_dependencies_rebuild_test_cleanup);
23+
MODULE_VERSION(DKMS_TEST_VER);

0 commit comments

Comments
 (0)