From 7fe41480749c795dfb79daeba7b058cece2dfdd2 Mon Sep 17 00:00:00 2001 From: Mike Fleetwood Date: Sun, 11 Mar 2018 21:11:04 +0000 Subject: [PATCH] Use /dev/disk/by-id/ to get device symlink in test_BlockSpecial Found that older but still supported distributions Debian 8 and Ubuntu 14.04 LTS don't have directory /dev/disk/by-path/. This is used by the BlockSpecial unit test as a source of a symbolic link to a block special device. This causes the unit test to fail like this: $ cd tests $ ./test_BlockSpecial ... [ RUN ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches test_BlockSpecial.cc:137: Failure Failed get_link_name(): Failed to open directory '/dev/disk/by-path' test_BlockSpecial.cc:168: Failure Failed follow_link_name(): Failed to resolve symbolic link '' test_BlockSpecial.cc:255: Failure Expected: (lnk.m_name.c_str()) != (bs.m_name.c_str()), actual: "" vs "" [ FAILED ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches (0 ms) ... [ FAILED ] 1 test, listed below: [ FAILED ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches 1 FAILED TEST Which in turn causes make check and make distcheck to fail. Use directory /dev/disk/by-id/ instead as it always exists. --- tests/test_BlockSpecial.cc | 40 +++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/tests/test_BlockSpecial.cc b/tests/test_BlockSpecial.cc index de9eb529..8b46019c 100644 --- a/tests/test_BlockSpecial.cc +++ b/tests/test_BlockSpecial.cc @@ -22,21 +22,21 @@ * names and symbolic link name. The following files are explicitly * needed for the tests: * - * Name Access Note - * ------------------------- ------- ----- - * / Stat - * /proc/partitions Stat - * Read To find any two block - * devices - * /dev/BLOCK0 Stat First entry from - * /proc/partitions - * /dev/BLOCK1 stat Second entry from - * /proc/partitions - * /dev/disk/by-path/ Readdir To find any symlink to a - * block device - * /dev/disk/by-path/SYMLINK Stat First directory entry - * /dev/RBLOCK Stat Device to which SYMLINK - * refers + * Name Access Note + * ----------------------- ------- ----- + * / Stat + * /proc/partitions Stat + * Read To find any two block + * devices + * /dev/BLOCK0 Stat First entry from + * /proc/partitions + * /dev/BLOCK1 stat Second entry from + * /proc/partitions + * /dev/disk/by-id/ Readdir To find any symlink to a + * block device + * /dev/disk/by-id/SYMLINK Stat First directory entry + * /dev/RBLOCK Stat Device to which SYMLINK + * refers * * Other dummy names are pre-loaded into the internal BlockSpecial cache * and never queried from the file system. @@ -128,13 +128,13 @@ static std::string get_block_name( unsigned want ) } // Return symbolic link to a block device by reading the first entry in the directory -// /dev/disk/by-path/. +// /dev/disk/by-id/. static std::string get_link_name() { - DIR * dir = opendir( "/dev/disk/by-path" ); + DIR * dir = opendir( "/dev/disk/by-id" ); if ( dir == NULL ) { - ADD_FAILURE() << __func__ << "(): Failed to open directory '/dev/disk/by-path'"; + ADD_FAILURE() << __func__ << "(): Failed to open directory '/dev/disk/by-id'"; return ""; } @@ -153,9 +153,9 @@ static std::string get_link_name() closedir( dir ); if ( found ) - return std::string( "/dev/disk/by-path/" ) + dentry->d_name; + return std::string( "/dev/disk/by-id/" ) + dentry->d_name; - ADD_FAILURE() << __func__ << "(): No entries found in directory '/dev/disk/by-path'"; + ADD_FAILURE() << __func__ << "(): No entries found in directory '/dev/disk/by-id'"; return ""; }