| sed -e "s|$TS_LODEV|DEVICE|" \
>> "$TS_OUTPUT" 2>> "$TS_ERRLOG"
-cat "$BLKID_FILE" \
+cat "$BLKID_FILE" | grep "$TS_LODEV" \
| sed -e 's/DEVNO="[^"]*"/DEVNO=""/' \
-e 's/TIME="[^"]*"/TIME=""/' \
-e "s|$TS_LODEV|DEVICE|" \
>> "$TS_OUTPUT"
+# Test the cache garbage collection by detaching a newly registered
+# loop device before garbage collection.
+# We expect $TS_LODEV (/dev/loopX) to not be present in $BLKID_FILE
+# anymore after the operation.
+
+# Initialize another loop device to keep at least the previously
+# attached one in the cache. We do this because otherwise the list of
+# block devices (blkid_cache->bic_devs) will be empty and that will
+# prevent an update of the cache.
+# See libblkid/src/save.c::blkid_flush_cache()
+ts_device_init
+
+"$TS_CMD_MKSWAP" --quiet --pagesize 4096 --endianness little \
+ --uuid 221ffb62-649b-4f86-87ae-0ebd15daf169 \
+ "$TS_LODEV" &>/dev/null
+
+# Update the cache with new loop device
+"$TS_CMD_BLKID" &>/dev/null
+
+ts_device_deinit "$TS_LODEV"
+
+"$TS_CMD_BLKID" --garbage-collect &>/dev/null
+
+if grep "$TS_LODEV" "$BLKID_FILE" &>/dev/null ; then
+ ts_failed "cache garbage collection failed"
+fi
+
+
ts_finalize