kernel: Move get_mount_point from VMUtils to KPartition.
There's nothing VM-specific about it; it just builds paths that partitions should be mounted at. Also move the tests.
This commit is contained in:
@@ -115,15 +115,14 @@ public:
|
|||||||
virtual status_t GetPath(KPath *path) const;
|
virtual status_t GetPath(KPath *path) const;
|
||||||
// no setter (see BDiskDevice) -- built on the fly
|
// no setter (see BDiskDevice) -- built on the fly
|
||||||
|
|
||||||
|
status_t GetMountPoint(KPath* mountPoint) const;
|
||||||
|
|
||||||
void SetVolumeID(dev_t volumeID);
|
void SetVolumeID(dev_t volumeID);
|
||||||
dev_t VolumeID() const;
|
dev_t VolumeID() const;
|
||||||
|
|
||||||
void SetMountCookie(void *cookie);
|
void SetMountCookie(void *cookie);
|
||||||
void *MountCookie() const;
|
void *MountCookie() const;
|
||||||
|
|
||||||
virtual status_t Mount(uint32 mountFlags, const char *parameters);
|
|
||||||
virtual status_t Unmount();
|
|
||||||
|
|
||||||
// Parameters
|
// Parameters
|
||||||
|
|
||||||
status_t SetParameters(const char *parameters);
|
status_t SetParameters(const char *parameters);
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#include <Errors.h>
|
#include <Errors.h>
|
||||||
#include <fs_volume.h>
|
#include <fs_volume.h>
|
||||||
#include <KernelExport.h>
|
#include <KernelExport.h>
|
||||||
|
#include <StackOrHeapArray.h>
|
||||||
|
|
||||||
#include <ddm_userland_interface.h>
|
#include <ddm_userland_interface.h>
|
||||||
#include <fs/devfs.h>
|
#include <fs/devfs.h>
|
||||||
@@ -729,6 +730,52 @@ KPartition::GetPath(KPath* path) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
KPartition::GetMountPoint(KPath* mountPoint) const
|
||||||
|
{
|
||||||
|
if (!mountPoint || !ContainsFileSystem())
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
ASSERT(!IsMounted());
|
||||||
|
// fetching the actual mounted point isn't implemented (yet)
|
||||||
|
|
||||||
|
int nameLength = 0;
|
||||||
|
const char* volumeName = ContentName();
|
||||||
|
if (volumeName != NULL)
|
||||||
|
nameLength = strlen(volumeName);
|
||||||
|
if (nameLength == 0) {
|
||||||
|
volumeName = Name();
|
||||||
|
if (volumeName != NULL)
|
||||||
|
nameLength = strlen(volumeName);
|
||||||
|
if (nameLength == 0) {
|
||||||
|
volumeName = "unnamed volume";
|
||||||
|
nameLength = strlen(volumeName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BStackOrHeapArray<char, 128> basePath(nameLength + 2);
|
||||||
|
if (!basePath.IsValid())
|
||||||
|
return B_NO_MEMORY;
|
||||||
|
int32 len = snprintf(basePath, nameLength + 2, "/%s", volumeName);
|
||||||
|
for (int32 i = 1; i < len; i++)
|
||||||
|
if (basePath[i] == '/')
|
||||||
|
basePath[i] = '-';
|
||||||
|
char* path = mountPoint->LockBuffer();
|
||||||
|
int32 pathLen = mountPoint->BufferSize();
|
||||||
|
strncpy(path, basePath, pathLen);
|
||||||
|
|
||||||
|
struct stat dummy;
|
||||||
|
for (int i = 1; ; i++) {
|
||||||
|
if (stat(path, &dummy) != 0)
|
||||||
|
break;
|
||||||
|
snprintf(path, pathLen, "%s%d", (char*)basePath, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
mountPoint->UnlockBuffer();
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
KPartition::SetVolumeID(dev_t volumeID)
|
KPartition::SetVolumeID(dev_t volumeID)
|
||||||
{
|
{
|
||||||
@@ -781,22 +828,6 @@ KPartition::MountCookie() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
|
||||||
KPartition::Mount(uint32 mountFlags, const char* parameters)
|
|
||||||
{
|
|
||||||
// not implemented
|
|
||||||
return B_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
status_t
|
|
||||||
KPartition::Unmount()
|
|
||||||
{
|
|
||||||
// not implemented
|
|
||||||
return B_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
KPartition::SetParameters(const char* parameters)
|
KPartition::SetParameters(const char* parameters)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ KernelMergeObject kernel_vm.o :
|
|||||||
VMTranslationMap.cpp
|
VMTranslationMap.cpp
|
||||||
VMUserAddressSpace.cpp
|
VMUserAddressSpace.cpp
|
||||||
VMUserArea.cpp
|
VMUserArea.cpp
|
||||||
VMUtils.cpp
|
|
||||||
|
|
||||||
: $(TARGET_KERNEL_PIC_CCFLAGS)
|
: $(TARGET_KERNEL_PIC_CCFLAGS)
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -58,7 +58,6 @@
|
|||||||
#include <vm/VMAddressSpace.h>
|
#include <vm/VMAddressSpace.h>
|
||||||
|
|
||||||
#include "IORequest.h"
|
#include "IORequest.h"
|
||||||
#include "VMUtils.h"
|
|
||||||
|
|
||||||
|
|
||||||
#if ENABLE_SWAP_SUPPORT
|
#if ENABLE_SWAP_SUPPORT
|
||||||
@@ -1691,7 +1690,7 @@ swap_init_post_modules()
|
|||||||
else {
|
else {
|
||||||
KPath devPath, mountPoint;
|
KPath devPath, mountPoint;
|
||||||
visitor.fBestPartition->GetPath(&devPath);
|
visitor.fBestPartition->GetPath(&devPath);
|
||||||
get_mount_point(visitor.fBestPartition, &mountPoint);
|
visitor.fBestPartition->GetMountPoint(&mountPoint);
|
||||||
const char* mountPath = mountPoint.Path();
|
const char* mountPath = mountPoint.Path();
|
||||||
mkdir(mountPath, S_IRWXU | S_IRWXG | S_IRWXO);
|
mkdir(mountPath, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||||
swapDeviceID = _kern_mount(mountPath, devPath.Path(),
|
swapDeviceID = _kern_mount(mountPath, devPath.Path(),
|
||||||
|
|||||||
@@ -1,58 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2011-2012 Haiku, Inc. All rights reserved.
|
|
||||||
* Distributed under the terms of the MIT License.
|
|
||||||
*
|
|
||||||
* Authors:
|
|
||||||
* Hamish Morrison, hamish@lavabit.com
|
|
||||||
* Alexander von Gluck IV, kallisti5@unixzen.com
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "VMUtils.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include <StackOrHeapArray.h>
|
|
||||||
|
|
||||||
|
|
||||||
status_t
|
|
||||||
get_mount_point(KPartition* partition, KPath* mountPoint)
|
|
||||||
{
|
|
||||||
if (!mountPoint || !partition->ContainsFileSystem())
|
|
||||||
return B_BAD_VALUE;
|
|
||||||
|
|
||||||
int nameLength = 0;
|
|
||||||
const char* volumeName = partition->ContentName();
|
|
||||||
if (volumeName != NULL)
|
|
||||||
nameLength = strlen(volumeName);
|
|
||||||
if (nameLength == 0) {
|
|
||||||
volumeName = partition->Name();
|
|
||||||
if (volumeName != NULL)
|
|
||||||
nameLength = strlen(volumeName);
|
|
||||||
if (nameLength == 0) {
|
|
||||||
volumeName = "unnamed volume";
|
|
||||||
nameLength = strlen(volumeName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BStackOrHeapArray<char, 128> basePath(nameLength + 2);
|
|
||||||
if (!basePath.IsValid())
|
|
||||||
return B_NO_MEMORY;
|
|
||||||
int32 len = snprintf(basePath, nameLength + 2, "/%s", volumeName);
|
|
||||||
for (int32 i = 1; i < len; i++)
|
|
||||||
if (basePath[i] == '/')
|
|
||||||
basePath[i] = '-';
|
|
||||||
char* path = mountPoint->LockBuffer();
|
|
||||||
int32 pathLen = mountPoint->BufferSize();
|
|
||||||
strncpy(path, basePath, pathLen);
|
|
||||||
|
|
||||||
struct stat dummy;
|
|
||||||
for (int i = 1; ; i++) {
|
|
||||||
if (stat(path, &dummy) != 0)
|
|
||||||
break;
|
|
||||||
snprintf(path, pathLen, "%s%d", (char*)basePath, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
mountPoint->UnlockBuffer();
|
|
||||||
return B_OK;
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2018 Kacper Kasper <kacperkasper@gmail.com>
|
|
||||||
* All rights reserved. Distributed under the terms of the MIT license.
|
|
||||||
*/
|
|
||||||
#ifndef _KERNEL_VM_UTILS_H
|
|
||||||
#define _KERNEL_VM_UTILS_H
|
|
||||||
|
|
||||||
|
|
||||||
#include <disk_device_manager/KPartition.h>
|
|
||||||
#include <fs/KPath.h>
|
|
||||||
|
|
||||||
|
|
||||||
status_t
|
|
||||||
get_mount_point(KPartition* partition, KPath* mountPoint);
|
|
||||||
|
|
||||||
|
|
||||||
#endif // _KERNEL_VM_UTILS_H
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#include <TestSuite.h>
|
||||||
|
#include <TestSuiteAddon.h>
|
||||||
|
|
||||||
|
#include "KPartitionTest.h"
|
||||||
|
|
||||||
|
|
||||||
|
BTestSuite*
|
||||||
|
getTestSuite()
|
||||||
|
{
|
||||||
|
BTestSuite *suite = new BTestSuite("DiskDeviceManager");
|
||||||
|
suite->addTest("KPartitionGetMountPointTest", KPartitionGetMountPointTest::Suite());
|
||||||
|
return suite;
|
||||||
|
}
|
||||||
@@ -44,6 +44,12 @@ SharedLibrary test_disk_device_manager.so :
|
|||||||
: be libkernelland_emu.so [ TargetLibsupc++ ]
|
: be libkernelland_emu.so [ TargetLibsupc++ ]
|
||||||
;
|
;
|
||||||
|
|
||||||
|
UnitTestLib libkerneldiskdevicemanagertest.so :
|
||||||
|
DiskDeviceManagerTestAddon.cpp
|
||||||
|
KPartitionTest.cpp
|
||||||
|
: test_disk_device_manager.so [ TargetLibstdc++ ]
|
||||||
|
;
|
||||||
|
|
||||||
SimpleTest DiskDeviceManagerTest :
|
SimpleTest DiskDeviceManagerTest :
|
||||||
DiskDeviceManagerTest.cpp
|
DiskDeviceManagerTest.cpp
|
||||||
: test_disk_device_manager.so be
|
: test_disk_device_manager.so be
|
||||||
|
|||||||
@@ -0,0 +1,153 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018 Kacper Kasper <kacperkasper@gmail.com>
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "KPartitionTest.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <fs/KPath.h>
|
||||||
|
#include <disk_device_manager/KPartition.h>
|
||||||
|
|
||||||
|
#include <cppunit/TestCaller.h>
|
||||||
|
#include <cppunit/TestSuite.h>
|
||||||
|
#include <TestUtils.h>
|
||||||
|
|
||||||
|
|
||||||
|
struct stat;
|
||||||
|
|
||||||
|
extern "C" int
|
||||||
|
stat(const char* path, struct stat* s)
|
||||||
|
{
|
||||||
|
if(strcmp(path, "/testduplicate") == 0)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
using BPrivate::DiskDevice::KPartition;
|
||||||
|
|
||||||
|
|
||||||
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
|
KPartitionGetMountPointTest::KPartitionGetMountPointTest(std::string name)
|
||||||
|
: BTestCase(name)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ADD_TEST(s, cls, m) \
|
||||||
|
s->addTest(new CppUnit::TestCaller<cls>(#cls "::" #m, &cls::m));
|
||||||
|
|
||||||
|
|
||||||
|
CppUnit::Test*
|
||||||
|
KPartitionGetMountPointTest::Suite()
|
||||||
|
{
|
||||||
|
CppUnit::TestSuite *suite = new CppUnit::TestSuite("KPartitionGetMountPointTest");
|
||||||
|
|
||||||
|
ADD_TEST(suite, KPartitionGetMountPointTest, TestPartitionWithoutFilesystemReturnsBadValue);
|
||||||
|
ADD_TEST(suite, KPartitionGetMountPointTest, TestPartitionContentNameUsedFirst);
|
||||||
|
ADD_TEST(suite, KPartitionGetMountPointTest, TestPartitionNameUsedSecond);
|
||||||
|
ADD_TEST(suite, KPartitionGetMountPointTest, TestPartitionWithoutAnyNameIsNotRoot);
|
||||||
|
ADD_TEST(suite, KPartitionGetMountPointTest, TestPartitionNameWithSlashesRemoved);
|
||||||
|
ADD_TEST(suite, KPartitionGetMountPointTest, TestPartitionMountPointExists);
|
||||||
|
|
||||||
|
return suite;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
KPartitionGetMountPointTest::TestPartitionWithoutFilesystemReturnsBadValue()
|
||||||
|
{
|
||||||
|
KPartition partition;
|
||||||
|
partition.SetName("");
|
||||||
|
partition.SetContentName("");
|
||||||
|
partition.SetFlags(0);
|
||||||
|
|
||||||
|
KPath path;
|
||||||
|
status_t status = partition.GetMountPoint(&path);
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(status, B_BAD_VALUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
KPartitionGetMountPointTest::TestPartitionContentNameUsedFirst()
|
||||||
|
{
|
||||||
|
KPartition partition;
|
||||||
|
partition.SetName("test1");
|
||||||
|
partition.SetContentName("test2");
|
||||||
|
partition.SetFlags(B_PARTITION_FILE_SYSTEM);
|
||||||
|
|
||||||
|
KPath path;
|
||||||
|
status_t status = partition.GetMountPoint(&path);
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(status, B_OK);
|
||||||
|
CPPUNIT_ASSERT(strcmp(path.Path(), "/test2") == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
KPartitionGetMountPointTest::TestPartitionNameUsedSecond()
|
||||||
|
{
|
||||||
|
KPartition partition;
|
||||||
|
partition.SetName("test1");
|
||||||
|
partition.SetContentName("");
|
||||||
|
partition.SetFlags(B_PARTITION_FILE_SYSTEM);
|
||||||
|
|
||||||
|
KPath path;
|
||||||
|
status_t status = partition.GetMountPoint(&path);
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(status, B_OK);
|
||||||
|
CPPUNIT_ASSERT(strcmp(path.Path(), "/test1") == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
KPartitionGetMountPointTest::TestPartitionWithoutAnyNameIsNotRoot()
|
||||||
|
{
|
||||||
|
KPartition partition;
|
||||||
|
partition.SetName("");
|
||||||
|
partition.SetContentName("");
|
||||||
|
partition.SetFlags(B_PARTITION_FILE_SYSTEM);
|
||||||
|
|
||||||
|
KPath path;
|
||||||
|
status_t status = partition.GetMountPoint(&path);
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(status, B_OK);
|
||||||
|
CPPUNIT_ASSERT(strcmp(path.Path(), "/") != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
KPartitionGetMountPointTest::TestPartitionNameWithSlashesRemoved()
|
||||||
|
{
|
||||||
|
KPartition partition;
|
||||||
|
partition.SetName("");
|
||||||
|
partition.SetContentName("testing/slashes");
|
||||||
|
partition.SetFlags(B_PARTITION_FILE_SYSTEM);
|
||||||
|
|
||||||
|
KPath path;
|
||||||
|
status_t status = partition.GetMountPoint(&path);
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(status, B_OK);
|
||||||
|
CPPUNIT_ASSERT(strcmp(path.Path(), "/testing/slashes") != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
KPartitionGetMountPointTest::TestPartitionMountPointExists()
|
||||||
|
{
|
||||||
|
KPartition partition;
|
||||||
|
partition.SetName("");
|
||||||
|
partition.SetContentName("testduplicate");
|
||||||
|
partition.SetFlags(B_PARTITION_FILE_SYSTEM);
|
||||||
|
|
||||||
|
KPath path;
|
||||||
|
status_t status = partition.GetMountPoint(&path);
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(status, B_OK);
|
||||||
|
CPPUNIT_ASSERT(strcmp(path.Path(), "/testduplicate") != 0);
|
||||||
|
}
|
||||||
+5
-6
@@ -2,19 +2,18 @@
|
|||||||
* Copyright 2018 Kacper Kasper <kacperkasper@gmail.com>
|
* Copyright 2018 Kacper Kasper <kacperkasper@gmail.com>
|
||||||
* All rights reserved. Distributed under the terms of the MIT License.
|
* All rights reserved. Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
#ifndef _VM_GET_MOUNT_POINT_TEST_H_
|
#ifndef _KPARTITION_TEST_H_
|
||||||
#define _VM_GET_MOUNT_POINT_TEST_H_
|
#define _KPARTITION_TEST_H_
|
||||||
|
|
||||||
#include <TestCase.h>
|
#include <TestCase.h>
|
||||||
|
|
||||||
|
|
||||||
class VMGetMountPointTest : public BTestCase {
|
class KPartitionGetMountPointTest : public BTestCase {
|
||||||
public:
|
public:
|
||||||
VMGetMountPointTest(std::string name = "");
|
KPartitionGetMountPointTest(std::string name = "");
|
||||||
|
|
||||||
static CppUnit::Test *Suite();
|
static CppUnit::Test *Suite();
|
||||||
|
|
||||||
void TestNullMountPointReturnsBadValue();
|
|
||||||
void TestPartitionWithoutFilesystemReturnsBadValue();
|
void TestPartitionWithoutFilesystemReturnsBadValue();
|
||||||
void TestPartitionContentNameUsedFirst();
|
void TestPartitionContentNameUsedFirst();
|
||||||
void TestPartitionNameUsedSecond();
|
void TestPartitionNameUsedSecond();
|
||||||
@@ -23,4 +22,4 @@ class VMGetMountPointTest : public BTestCase {
|
|||||||
void TestPartitionMountPointExists();
|
void TestPartitionMountPointExists();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* _VM_GET_MOUNT_POINT_TEST_H_ */
|
#endif /* _KPARTITION_TEST_H_ */
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#include <TestSuite.h>
|
|
||||||
#include <TestSuiteAddon.h>
|
|
||||||
|
|
||||||
#include "VMGetMountPointTest.h"
|
|
||||||
|
|
||||||
|
|
||||||
BTestSuite*
|
|
||||||
getTestSuite()
|
|
||||||
{
|
|
||||||
BTestSuite *suite = new BTestSuite("KernelVM");
|
|
||||||
suite->addTest("VMGetMountPointTest", VMGetMountPointTest::Suite());
|
|
||||||
return suite;
|
|
||||||
}
|
|
||||||
@@ -1,218 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2018 Kacper Kasper <kacperkasper@gmail.com>
|
|
||||||
* All rights reserved. Distributed under the terms of the MIT License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "VMGetMountPointTest.h"
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <fs/KPath.h>
|
|
||||||
|
|
||||||
#include <cppunit/TestCaller.h>
|
|
||||||
#include <cppunit/TestSuite.h>
|
|
||||||
#include <TestUtils.h>
|
|
||||||
|
|
||||||
|
|
||||||
// Kernel stubs
|
|
||||||
|
|
||||||
|
|
||||||
extern "C" team_id
|
|
||||||
team_get_kernel_team_id(void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern "C" team_id
|
|
||||||
team_get_current_team_id(void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern "C" status_t
|
|
||||||
vfs_normalize_path(const char* path, char* buffer, size_t bufferSize,
|
|
||||||
bool traverseLink, bool kernel)
|
|
||||||
{
|
|
||||||
return B_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct stat;
|
|
||||||
|
|
||||||
extern "C" int
|
|
||||||
stat(const char* path, struct stat* s)
|
|
||||||
{
|
|
||||||
if(strcmp(path, "/testduplicate") == 0)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace BPrivate {
|
|
||||||
namespace DiskDevice {
|
|
||||||
|
|
||||||
class KPartition {
|
|
||||||
public:
|
|
||||||
KPartition(std::string name, std::string contentName, bool containsFilesystem)
|
|
||||||
: fName(name), fContentName(contentName), fContainsFilesystem(containsFilesystem)
|
|
||||||
{}
|
|
||||||
|
|
||||||
const char *Name() const;
|
|
||||||
const char *ContentName() const;
|
|
||||||
bool ContainsFileSystem() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::string fName;
|
|
||||||
std::string fContentName;
|
|
||||||
bool fContainsFilesystem;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
const char *
|
|
||||||
KPartition::Name() const
|
|
||||||
{
|
|
||||||
return fName.c_str();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const char *
|
|
||||||
KPartition::ContentName() const
|
|
||||||
{
|
|
||||||
return fContentName.c_str();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
KPartition::ContainsFileSystem() const
|
|
||||||
{
|
|
||||||
return fContainsFilesystem;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
using BPrivate::DiskDevice::KPartition;
|
|
||||||
|
|
||||||
|
|
||||||
status_t
|
|
||||||
get_mount_point(KPartition* partition, KPath* mountPoint);
|
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
|
|
||||||
VMGetMountPointTest::VMGetMountPointTest(std::string name)
|
|
||||||
: BTestCase(name)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#define ADD_TEST(s, cls, m) \
|
|
||||||
s->addTest(new CppUnit::TestCaller<cls>(#cls "::" #m, &cls::m));
|
|
||||||
|
|
||||||
|
|
||||||
CppUnit::Test*
|
|
||||||
VMGetMountPointTest::Suite()
|
|
||||||
{
|
|
||||||
CppUnit::TestSuite *suite = new CppUnit::TestSuite("VMGetMountPointTest");
|
|
||||||
|
|
||||||
ADD_TEST(suite, VMGetMountPointTest, TestNullMountPointReturnsBadValue);
|
|
||||||
ADD_TEST(suite, VMGetMountPointTest, TestPartitionWithoutFilesystemReturnsBadValue);
|
|
||||||
ADD_TEST(suite, VMGetMountPointTest, TestPartitionContentNameUsedFirst);
|
|
||||||
ADD_TEST(suite, VMGetMountPointTest, TestPartitionNameUsedSecond);
|
|
||||||
ADD_TEST(suite, VMGetMountPointTest, TestPartitionWithoutAnyNameIsNotRoot);
|
|
||||||
ADD_TEST(suite, VMGetMountPointTest, TestPartitionNameWithSlashesRemoved);
|
|
||||||
ADD_TEST(suite, VMGetMountPointTest, TestPartitionMountPointExists);
|
|
||||||
|
|
||||||
return suite;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
VMGetMountPointTest::TestNullMountPointReturnsBadValue()
|
|
||||||
{
|
|
||||||
status_t status = get_mount_point(NULL, NULL);
|
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL(status, B_BAD_VALUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
VMGetMountPointTest::TestPartitionWithoutFilesystemReturnsBadValue()
|
|
||||||
{
|
|
||||||
KPartition partition("", "", false);
|
|
||||||
KPath path;
|
|
||||||
|
|
||||||
status_t status = get_mount_point(&partition, &path);
|
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL(status, B_BAD_VALUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
VMGetMountPointTest::TestPartitionContentNameUsedFirst()
|
|
||||||
{
|
|
||||||
KPartition partition("test1", "test2", true);
|
|
||||||
KPath path;
|
|
||||||
|
|
||||||
status_t status = get_mount_point(&partition, &path);
|
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL(status, B_OK);
|
|
||||||
CPPUNIT_ASSERT(strcmp(path.Path(), "/test2") == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
VMGetMountPointTest::TestPartitionNameUsedSecond()
|
|
||||||
{
|
|
||||||
KPartition partition("test1", "", true);
|
|
||||||
KPath path;
|
|
||||||
|
|
||||||
status_t status = get_mount_point(&partition, &path);
|
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL(status, B_OK);
|
|
||||||
CPPUNIT_ASSERT(strcmp(path.Path(), "/test1") == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
VMGetMountPointTest::TestPartitionWithoutAnyNameIsNotRoot()
|
|
||||||
{
|
|
||||||
KPartition partition("", "", true);
|
|
||||||
KPath path;
|
|
||||||
|
|
||||||
status_t status = get_mount_point(&partition, &path);
|
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL(status, B_OK);
|
|
||||||
CPPUNIT_ASSERT(strcmp(path.Path(), "/") != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
VMGetMountPointTest::TestPartitionNameWithSlashesRemoved()
|
|
||||||
{
|
|
||||||
KPartition partition("", "testing/slashes", true);
|
|
||||||
KPath path;
|
|
||||||
|
|
||||||
status_t status = get_mount_point(&partition, &path);
|
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL(status, B_OK);
|
|
||||||
CPPUNIT_ASSERT(strcmp(path.Path(), "/testing/slashes") != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
VMGetMountPointTest::TestPartitionMountPointExists()
|
|
||||||
{
|
|
||||||
KPartition partition("", "testduplicate", true);
|
|
||||||
KPath path;
|
|
||||||
|
|
||||||
status_t status = get_mount_point(&partition, &path);
|
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL(status, B_OK);
|
|
||||||
CPPUNIT_ASSERT(strcmp(path.Path(), "/testduplicate") != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user