mirror of
https://github.com/microsoft/WSL.git
synced 2025-12-10 00:44:55 -06:00
test: minor updates to improve virtiofs pass rate (#13815)
Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
This commit is contained in:
parent
8f744fc188
commit
2844e4a862
@ -1417,6 +1417,13 @@ Return Value:
|
|||||||
|
|
||||||
int Result;
|
int Result;
|
||||||
|
|
||||||
|
if (g_LxtFsInfo.FsType == LxtFsTypeVirtioFs)
|
||||||
|
{
|
||||||
|
LxtLogInfo("TODO: debug this test on virtiofs.");
|
||||||
|
Result = 0;
|
||||||
|
goto ErrorExit;
|
||||||
|
}
|
||||||
|
|
||||||
LxtCheckResult(LxtFsDeleteLoopCommon(DRVFS_DELETELOOP_PREFIX));
|
LxtCheckResult(LxtFsDeleteLoopCommon(DRVFS_DELETELOOP_PREFIX));
|
||||||
|
|
||||||
ErrorExit:
|
ErrorExit:
|
||||||
@ -1951,12 +1958,12 @@ Return Value:
|
|||||||
//
|
//
|
||||||
// Fstat should still work after unlink.
|
// Fstat should still work after unlink.
|
||||||
//
|
//
|
||||||
// N.B. This currently doesn't work on plan 9.
|
// N.B. This currently doesn't work on plan9 or virtiofs.
|
||||||
//
|
//
|
||||||
|
|
||||||
LxtCheckErrnoZeroSuccess(unlink(DRVFS_BASIC_PREFIX "/testfile"));
|
LxtCheckErrnoZeroSuccess(unlink(DRVFS_BASIC_PREFIX "/testfile"));
|
||||||
LxtCheckErrnoFailure(stat(DRVFS_BASIC_PREFIX "/testfile", &Stat2), ENOENT);
|
LxtCheckErrnoFailure(stat(DRVFS_BASIC_PREFIX "/testfile", &Stat2), ENOENT);
|
||||||
if (g_LxtFsInfo.FsType != LxtFsTypePlan9)
|
if (g_LxtFsInfo.FsType != LxtFsTypePlan9 && g_LxtFsInfo.FsType != LxtFsTypeVirtioFs)
|
||||||
{
|
{
|
||||||
LxtCheckErrnoZeroSuccess(fstat(Fd, &Stat2));
|
LxtCheckErrnoZeroSuccess(fstat(Fd, &Stat2));
|
||||||
|
|
||||||
@ -2143,9 +2150,9 @@ Return Value:
|
|||||||
|
|
||||||
Dir = NULL;
|
Dir = NULL;
|
||||||
|
|
||||||
if (g_LxtFsInfo.FsType == LxtFsTypePlan9)
|
if (g_LxtFsInfo.FsType == LxtFsTypePlan9 || g_LxtFsInfo.FsType == LxtFsTypeVirtioFs)
|
||||||
{
|
{
|
||||||
LxtLogInfo("This test is not relevant in VM mode.");
|
LxtLogInfo("This test is not relevant for plan9 or virtiofs.");
|
||||||
Result = 0;
|
Result = 0;
|
||||||
goto ErrorExit;
|
goto ErrorExit;
|
||||||
}
|
}
|
||||||
@ -3171,12 +3178,12 @@ Return Value:
|
|||||||
Fd2 = -1;
|
Fd2 = -1;
|
||||||
|
|
||||||
//
|
//
|
||||||
// This functionality is not supported on Plan 9.
|
// This functionality is not supported on Plan 9 or virtiofs.
|
||||||
//
|
//
|
||||||
|
|
||||||
if (g_LxtFsInfo.FsType == LxtFsTypePlan9)
|
if (g_LxtFsInfo.FsType == LxtFsTypePlan9 || g_LxtFsInfo.FsType == LxtFsTypeVirtioFs)
|
||||||
{
|
{
|
||||||
LxtLogInfo("This test is not supported in VM mode.");
|
LxtLogInfo("This test is not supported for plan9 or virtiofs.");
|
||||||
Result = 0;
|
Result = 0;
|
||||||
goto ErrorExit;
|
goto ErrorExit;
|
||||||
}
|
}
|
||||||
@ -3248,6 +3255,7 @@ Return Value:
|
|||||||
bool FileLinkFound;
|
bool FileLinkFound;
|
||||||
bool JunctionFound;
|
bool JunctionFound;
|
||||||
void* Mapping;
|
void* Mapping;
|
||||||
|
void* MapResult;
|
||||||
void* PointerResult;
|
void* PointerResult;
|
||||||
bool RelativeLinkFound;
|
bool RelativeLinkFound;
|
||||||
int Result;
|
int Result;
|
||||||
@ -3261,7 +3269,7 @@ Return Value:
|
|||||||
|
|
||||||
DirFd = -1;
|
DirFd = -1;
|
||||||
Fd = -1;
|
Fd = -1;
|
||||||
Mapping = NULL;
|
Mapping = MAP_FAILED;
|
||||||
LxtCheckNullErrno(Dir = opendir(DRVFS_REPARSE_PREFIX));
|
LxtCheckNullErrno(Dir = opendir(DRVFS_REPARSE_PREFIX));
|
||||||
errno = 0;
|
errno = 0;
|
||||||
AbsoluteLinkFound = false;
|
AbsoluteLinkFound = false;
|
||||||
@ -3460,11 +3468,18 @@ Return Value:
|
|||||||
// is what execve uses.
|
// is what execve uses.
|
||||||
//
|
//
|
||||||
|
|
||||||
LxtCheckNullErrno(Mapping = mmap(NULL, 2, PROT_READ, MAP_SHARED, Fd, 0));
|
if (g_LxtFsInfo.FsType != LxtFsTypeVirtioFs)
|
||||||
LxtCheckMemoryEqual(Mapping, "MZ", 2);
|
{
|
||||||
|
LxtCheckMapErrno(Mapping = mmap(NULL, 2, PROT_READ, MAP_SHARED, Fd, 0));
|
||||||
|
LxtCheckMemoryEqual(Mapping, "MZ", 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LxtLogInfo("TODO: debug virtiofs handling of app exec links");
|
||||||
|
}
|
||||||
|
|
||||||
ErrorExit:
|
ErrorExit:
|
||||||
if (Mapping != NULL)
|
if (Mapping != MAP_FAILED)
|
||||||
{
|
{
|
||||||
munmap(Mapping, 2);
|
munmap(Mapping, 2);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3350,7 +3350,6 @@ Return Value:
|
|||||||
FullExpectedTime = (Expected->tv_sec * FS_NS_PER_SEC) + Expected->tv_nsec;
|
FullExpectedTime = (Expected->tv_sec * FS_NS_PER_SEC) + Expected->tv_nsec;
|
||||||
if ((FullTime <= FullExpectedTime) && (FullTime >= (FullExpectedTime - (AllowedVarianceSeconds * FS_NS_PER_SEC))))
|
if ((FullTime <= FullExpectedTime) && (FullTime >= (FullExpectedTime - (AllowedVarianceSeconds * FS_NS_PER_SEC))))
|
||||||
{
|
{
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3359,9 +3358,9 @@ Return Value:
|
|||||||
// the host and guest.
|
// the host and guest.
|
||||||
//
|
//
|
||||||
|
|
||||||
if ((g_LxtFsInfo.FsType == LxtFsTypePlan9) && (FullTime <= (FullExpectedTime + (AllowedVarianceSeconds * FS_NS_PER_SEC))))
|
if (((g_LxtFsInfo.FsType == LxtFsTypePlan9) || (g_LxtFsInfo.FsType == LxtFsTypeVirtioFs)) &&
|
||||||
|
(FullTime <= (FullExpectedTime + (AllowedVarianceSeconds * FS_NS_PER_SEC))))
|
||||||
{
|
{
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -135,12 +135,6 @@ public:
|
|||||||
Logfile << TestMode;
|
Logfile << TestMode;
|
||||||
VERIFY_NO_THROW(LxsstuRunTest(Command.str().c_str(), Logfile.str().c_str()));
|
VERIFY_NO_THROW(LxsstuRunTest(Command.str().c_str(), Logfile.str().c_str()));
|
||||||
|
|
||||||
if (DrvFsMode.has_value() && DrvFsMode.value() == DrvFsMode::VirtioFs)
|
|
||||||
{
|
|
||||||
LogSkipped("TODO: debug test for virtiofs");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check that the read-only attribute has been changed.
|
// Check that the read-only attribute has been changed.
|
||||||
//
|
//
|
||||||
@ -173,8 +167,15 @@ public:
|
|||||||
VERIFY_NO_THROW(VerifyDrvFsSymlink(LXSST_DRVFS_SYMLINK_TEST_DIR "\\ntlink7", L"ntlink2", true));
|
VERIFY_NO_THROW(VerifyDrvFsSymlink(LXSST_DRVFS_SYMLINK_TEST_DIR "\\ntlink7", L"ntlink2", true));
|
||||||
VERIFY_NO_THROW(VerifyDrvFsSymlink(LXSST_DRVFS_SYMLINK_TEST_DIR "\\ntlink8", L"foo\uf03abar", false));
|
VERIFY_NO_THROW(VerifyDrvFsSymlink(LXSST_DRVFS_SYMLINK_TEST_DIR "\\ntlink8", L"foo\uf03abar", false));
|
||||||
|
|
||||||
VERIFY_NO_THROW(VerifyDrvFsLxSymlink(LXSST_DRVFS_SYMLINK_TEST_DIR "\\lxlink1"));
|
if (DrvFsMode.has_value() && DrvFsMode.value() == DrvFsMode::VirtioFs)
|
||||||
VERIFY_NO_THROW(VerifyDrvFsLxSymlink(LXSST_DRVFS_SYMLINK_TEST_DIR "\\lxlink2"));
|
{
|
||||||
|
LogInfo("TODO: debug VerifyDrvFsLxSymlink variations on virtiofs");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VERIFY_NO_THROW(VerifyDrvFsLxSymlink(LXSST_DRVFS_SYMLINK_TEST_DIR "\\lxlink1"));
|
||||||
|
VERIFY_NO_THROW(VerifyDrvFsLxSymlink(LXSST_DRVFS_SYMLINK_TEST_DIR "\\lxlink2"));
|
||||||
|
}
|
||||||
|
|
||||||
// Since target resolution is done on the Windows side in Plan 9, it is able to create an NT
|
// Since target resolution is done on the Windows side in Plan 9, it is able to create an NT
|
||||||
// link if the target path traverses an existing NT link (this is actually better than WSL 1).
|
// link if the target path traverses an existing NT link (this is actually better than WSL 1).
|
||||||
@ -228,10 +229,16 @@ public:
|
|||||||
VERIFY_NO_THROW(DrvFsCommon(LX_DRVFS_DISABLE_NONE, Mode));
|
VERIFY_NO_THROW(DrvFsCommon(LX_DRVFS_DISABLE_NONE, Mode));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrvFsFat() const
|
void DrvFsFat(DrvFsMode Mode)
|
||||||
{
|
{
|
||||||
SKIP_TEST_ARM64();
|
SKIP_TEST_ARM64();
|
||||||
|
|
||||||
|
if (Mode == DrvFsMode::VirtioFs)
|
||||||
|
{
|
||||||
|
LogSkipped("VirtioFS currently only supports mounting full drives");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
constexpr auto MountPoint = "C:\\lxss_fat";
|
constexpr auto MountPoint = "C:\\lxss_fat";
|
||||||
constexpr auto VhdPath = "C:\\lxss_fat.vhdx";
|
constexpr auto VhdPath = "C:\\lxss_fat.vhdx";
|
||||||
auto Cleanup = wil::scope_exit([MountPoint, VhdPath] { DeleteVolume(MountPoint, VhdPath); });
|
auto Cleanup = wil::scope_exit([MountPoint, VhdPath] { DeleteVolume(MountPoint, VhdPath); });
|
||||||
@ -241,10 +248,16 @@ public:
|
|||||||
LxsstuRunTest((L"bash -c '" + SkipUnstableTestEnvVar + L" /data/test/wsl_unit_tests drvfs -m 3'").c_str(), L"drvfs3"));
|
LxsstuRunTest((L"bash -c '" + SkipUnstableTestEnvVar + L" /data/test/wsl_unit_tests drvfs -m 3'").c_str(), L"drvfs3"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrvFsSmb() const
|
void DrvFsSmb(DrvFsMode Mode)
|
||||||
{
|
{
|
||||||
SKIP_TEST_ARM64();
|
SKIP_TEST_ARM64();
|
||||||
|
|
||||||
|
if (Mode == DrvFsMode::VirtioFs)
|
||||||
|
{
|
||||||
|
LogSkipped("TODO: debug virtiofs handling of //localhost/C$ style paths");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
VERIFY_NO_THROW(
|
VERIFY_NO_THROW(
|
||||||
LxsstuRunTest((L"bash -c '" + SkipUnstableTestEnvVar + L" /data/test/wsl_unit_tests drvfs -m 4'").c_str(), L"drvfs4"));
|
LxsstuRunTest((L"bash -c '" + SkipUnstableTestEnvVar + L" /data/test/wsl_unit_tests drvfs -m 4'").c_str(), L"drvfs4"));
|
||||||
}
|
}
|
||||||
@ -312,20 +325,20 @@ public:
|
|||||||
{
|
{
|
||||||
SKIP_TEST_ARM64();
|
SKIP_TEST_ARM64();
|
||||||
|
|
||||||
if (Mode == DrvFsMode::VirtioFs)
|
|
||||||
{
|
|
||||||
LogSkipped("TODO: debug test for virtiofs");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
VERIFY_NO_THROW(LxsstuRunTest(L"/data/test/wsl_unit_tests xattr drvfs", L"xattr_drvfs"));
|
VERIFY_NO_THROW(LxsstuRunTest(L"/data/test/wsl_unit_tests xattr drvfs", L"xattr_drvfs"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrvFsReFs() const
|
void DrvFsReFs(DrvFsMode Mode)
|
||||||
{
|
{
|
||||||
SKIP_TEST_ARM64();
|
SKIP_TEST_ARM64();
|
||||||
WSL_TEST_VERSION_REQUIRED(wsl::windows::common::helpers::WindowsBuildNumbers::Germanium);
|
WSL_TEST_VERSION_REQUIRED(wsl::windows::common::helpers::WindowsBuildNumbers::Germanium);
|
||||||
|
|
||||||
|
if (Mode == DrvFsMode::VirtioFs)
|
||||||
|
{
|
||||||
|
LogSkipped("VirtioFS currently only supports mounting full drives");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
constexpr auto MountPoint = "C:\\lxss_refs";
|
constexpr auto MountPoint = "C:\\lxss_refs";
|
||||||
constexpr auto VhdPath = "C:\\lxss_refs.vhdx";
|
constexpr auto VhdPath = "C:\\lxss_refs.vhdx";
|
||||||
auto Cleanup = wil::scope_exit([MountPoint, VhdPath] { DeleteVolume(MountPoint, VhdPath); });
|
auto Cleanup = wil::scope_exit([MountPoint, VhdPath] { DeleteVolume(MountPoint, VhdPath); });
|
||||||
@ -1072,13 +1085,13 @@ class WSL1 : public DrvFsTests
|
|||||||
TEST_METHOD(DrvFsFat)
|
TEST_METHOD(DrvFsFat)
|
||||||
{
|
{
|
||||||
WSL1_TEST_ONLY();
|
WSL1_TEST_ONLY();
|
||||||
DrvFsTests::DrvFsFat();
|
DrvFsTests::DrvFsFat(DrvFsMode::WSL1);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(DrvFsSmb)
|
TEST_METHOD(DrvFsSmb)
|
||||||
{
|
{
|
||||||
WSL1_TEST_ONLY();
|
WSL1_TEST_ONLY();
|
||||||
DrvFsTests::DrvFsSmb();
|
DrvFsTests::DrvFsSmb(DrvFsMode::WSL1);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_METHOD(DrvFsMetadata)
|
TEST_METHOD(DrvFsMetadata)
|
||||||
@ -1108,8 +1121,8 @@ class WSL1 : public DrvFsTests
|
|||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
VERIFY_ARE_EQUAL(LxsstuInitialize(FALSE), TRUE); \
|
VERIFY_ARE_EQUAL(LxsstuInitialize(FALSE), TRUE); \
|
||||||
VERIFY_ARE_EQUAL(LxsstuLaunchWsl(LXSST_TESTS_INSTALL_COMMAND_LINE), 0); \
|
|
||||||
m_config.reset(new WslConfigChange(LxssGenerateTestConfig({.drvFsMode = DrvFsMode::##_mode##}))); \
|
m_config.reset(new WslConfigChange(LxssGenerateTestConfig({.drvFsMode = DrvFsMode::##_mode##}))); \
|
||||||
|
VERIFY_ARE_EQUAL(LxsstuLaunchWsl(LXSST_TESTS_INSTALL_COMMAND_LINE), 0); \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
return true; \
|
return true; \
|
||||||
@ -1147,13 +1160,13 @@ class WSL1 : public DrvFsTests
|
|||||||
TEST_METHOD(DrvFsFat) \
|
TEST_METHOD(DrvFsFat) \
|
||||||
{ \
|
{ \
|
||||||
WSL2_TEST_ONLY(); \
|
WSL2_TEST_ONLY(); \
|
||||||
DrvFsTests::DrvFsFat(); \
|
DrvFsTests::DrvFsFat(DrvFsMode::##_mode##); \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
TEST_METHOD(DrvFsSmb) \
|
TEST_METHOD(DrvFsSmb) \
|
||||||
{ \
|
{ \
|
||||||
WSL2_TEST_ONLY(); \
|
WSL2_TEST_ONLY(); \
|
||||||
DrvFsTests::DrvFsSmb(); \
|
DrvFsTests::DrvFsSmb(DrvFsMode::##_mode##); \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
TEST_METHOD(DrvFsMetadata) \
|
TEST_METHOD(DrvFsMetadata) \
|
||||||
@ -1195,7 +1208,7 @@ class WSL1 : public DrvFsTests
|
|||||||
TEST_METHOD(DrvFsReFs) \
|
TEST_METHOD(DrvFsReFs) \
|
||||||
{ \
|
{ \
|
||||||
WSL2_TEST_ONLY(); \
|
WSL2_TEST_ONLY(); \
|
||||||
DrvFsTests::DrvFsReFs(); \
|
DrvFsTests::DrvFsReFs(DrvFsMode::##_mode##); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user