91 lines
3.7 KiB
C++
91 lines
3.7 KiB
C++
#include <common/toolkit/StorageTk.h>
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
// full set of characters allowed in path components, properly escaped as by /proc/mounts
|
|
#define FULL_SET "\001\002\003\004\005\006\007\010\\011\\012\013\014\015\016\017\020\021" \
|
|
"\022\023\024\025\026\027\030\031\032\033\034\035\036\037\\040!\"#$%&'()*+,-.0123456789:;<=>?" \
|
|
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\134]^_`abcdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204" \
|
|
"\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233" \
|
|
"\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262" \
|
|
"\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311" \
|
|
"\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340" \
|
|
"\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367" \
|
|
"\370\371\372\373\374\375\376\377"
|
|
#define FULL_SET_RAW "\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021" \
|
|
"\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040!\"#$%&'()*+,-.0123456789:;<=>?" \
|
|
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\134]^_`abcdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204" \
|
|
"\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233" \
|
|
"\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262" \
|
|
"\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311" \
|
|
"\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340" \
|
|
"\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367" \
|
|
"\370\371\372\373\374\375\376\377"
|
|
|
|
TEST(StorageTk, findMountedPrefix)
|
|
{
|
|
static const char* inputFile =
|
|
"/dev/root / tmpfs rw 0 0\n"
|
|
"/dev/sda1 /test/foo/bar xfs rw 0 0\n"
|
|
"/dev/sda1 /test/fo ext4 rw 0 0\n"
|
|
"/dev/sda1 /test/" FULL_SET " ext4 rw 0 0\n"
|
|
"/dev/sda1 /test/foo ext4 rw 0 0\n";
|
|
|
|
{
|
|
std::stringstream file;
|
|
ASSERT_FALSE(StorageTk::findLongestMountedPrefix("", file).first);
|
|
}
|
|
|
|
{
|
|
std::stringstream file;
|
|
ASSERT_FALSE(StorageTk::findLongestMountedPrefix("relative", file).first);
|
|
}
|
|
|
|
{
|
|
std::stringstream file;
|
|
file.setstate(std::stringstream::failbit);
|
|
ASSERT_FALSE(StorageTk::findLongestMountedPrefix("/", file).first);
|
|
}
|
|
|
|
{
|
|
std::stringstream file;
|
|
auto res = StorageTk::findLongestMountedPrefix("/test", file);
|
|
ASSERT_FALSE(res.first);
|
|
}
|
|
|
|
{
|
|
std::stringstream file(inputFile);
|
|
auto res = StorageTk::findLongestMountedPrefix("/test/foo1", file);
|
|
ASSERT_TRUE(res.first);
|
|
ASSERT_EQ(res.second, (Mount{"/dev/root", "/", "tmpfs"}));
|
|
}
|
|
|
|
{
|
|
std::stringstream file(inputFile);
|
|
auto res = StorageTk::findLongestMountedPrefix("/test/foo/bar/baz", file);
|
|
ASSERT_TRUE(res.first);
|
|
ASSERT_EQ(res.second, (Mount{"/dev/sda1", "/test/foo/bar", "xfs"}));
|
|
}
|
|
|
|
{
|
|
std::stringstream file(inputFile);
|
|
auto res = StorageTk::findLongestMountedPrefix("/test/foo", file);
|
|
ASSERT_TRUE(res.first);
|
|
ASSERT_EQ(res.second, (Mount{"/dev/sda1", "/test/foo", "ext4"}));
|
|
}
|
|
|
|
{
|
|
std::stringstream file(inputFile);
|
|
auto res = StorageTk::findLongestMountedPrefix("/test/" FULL_SET_RAW, file);
|
|
ASSERT_TRUE(res.first);
|
|
ASSERT_EQ(res.second, (Mount{"/dev/sda1", "/test/" FULL_SET_RAW, "ext4"}));
|
|
}
|
|
|
|
{
|
|
std::stringstream file(inputFile);
|
|
auto res = StorageTk::findLongestMountedPrefix("/test/" FULL_SET_RAW "/sub", file);
|
|
ASSERT_TRUE(res.first);
|
|
ASSERT_EQ(res.second, (Mount{"/dev/sda1", "/test/" FULL_SET_RAW, "ext4"}));
|
|
}
|
|
}
|