Handle windows volume paths
When a relative path is expanded and we're on a windows platform, it expands to include the drive, eg C:\ , which was causing a ConfigError as we split on ":" in parse_volume_spec and that was giving too many parts. Use os.path.splitdrive instead of manually calculating the drive. This should help us deal with windows drives as part of the volume path better than us doing it manually. Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
This commit is contained in:
parent
c673ce37c7
commit
f4cd5b1d45
5 changed files with 51 additions and 5 deletions
|
|
@ -1124,6 +1124,21 @@ class ExpandPathTest(unittest.TestCase):
|
|||
self.assertEqual(result, user_path + 'otherdir/somefile')
|
||||
|
||||
|
||||
class VolumePathTest(unittest.TestCase):
|
||||
|
||||
@pytest.mark.xfail((not IS_WINDOWS_PLATFORM), reason='does not have a drive')
|
||||
def test_split_path_mapping_with_windows_path(self):
|
||||
windows_volume_path = "c:\\Users\\msamblanet\\Documents\\anvil\\connect\\config:/opt/connect/config:ro"
|
||||
expected_mapping = (
|
||||
"/opt/connect/config:ro",
|
||||
"c:\\Users\\msamblanet\\Documents\\anvil\\connect\\config"
|
||||
)
|
||||
|
||||
mapping = config.split_path_mapping(windows_volume_path)
|
||||
|
||||
self.assertEqual(mapping, expected_mapping)
|
||||
|
||||
|
||||
@pytest.mark.xfail(IS_WINDOWS_PLATFORM, reason='paths use slash')
|
||||
class BuildPathTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
|
|
|
|||
|
|
@ -466,6 +466,21 @@ class ServiceVolumesTest(unittest.TestCase):
|
|||
with self.assertRaises(ConfigError):
|
||||
parse_volume_spec('one:two:three:four')
|
||||
|
||||
@pytest.mark.xfail((not IS_WINDOWS_PLATFORM), reason='does not have a drive')
|
||||
def test_parse_volume_windows_relative_path(self):
|
||||
windows_relative_path = "c:\\Users\\msamblanet\\Documents\\anvil\\connect\\config:\\opt\\connect\\config:ro"
|
||||
|
||||
spec = parse_volume_spec(windows_relative_path)
|
||||
|
||||
self.assertEqual(
|
||||
spec,
|
||||
(
|
||||
"c:\\Users\\msamblanet\\Documents\\anvil\\connect\\config",
|
||||
"\\opt\\connect\\config",
|
||||
"ro"
|
||||
)
|
||||
)
|
||||
|
||||
def test_build_volume_binding(self):
|
||||
binding = build_volume_binding(parse_volume_spec('/outside:/inside'))
|
||||
self.assertEqual(binding, ('/inside', '/outside:/inside:rw'))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue