| import os |
| import tempfile |
| from contextlib import ExitStack |
| |
| import pytest |
| |
| from buildstream.sandbox._mounter import Mounter |
| |
| |
| @pytest.mark.skipif(not os.geteuid() == 0, reason="requires root permissions") |
| def test_bind_mount(): |
| with ExitStack() as stack: |
| src = stack.enter_context(tempfile.TemporaryDirectory()) |
| target = stack.enter_context(tempfile.TemporaryDirectory()) |
| |
| with open(os.path.join(src, 'test'), 'a') as test: |
| test.write('Test') |
| |
| with Mounter.bind_mount(target, src) as dest: |
| # Ensure we get the correct path back |
| assert dest == target |
| |
| # Ensure we can access files from src from target |
| with open(os.path.join(target, 'test'), 'r') as test: |
| assert test.read() == 'Test' |
| |
| # Ensure the files from src are gone from target |
| with pytest.raises(FileNotFoundError): |
| with open(os.path.join(target, 'test'), 'r') as test: |
| # Actual contents don't matter |
| pass |
| |
| # Ensure the files in src are still in src |
| with open(os.path.join(src, 'test'), 'r') as test: |
| assert test.read() == 'Test' |
| |
| |
| @pytest.mark.skipif(not os.geteuid() == 0, reason="requires root permissions") |
| def test_mount_proc(): |
| with ExitStack() as stack: |
| src = '/proc' |
| target = stack.enter_context(tempfile.TemporaryDirectory()) |
| |
| with Mounter.mount(target, src, mount_type='proc', ro=True) as dest: |
| # Ensure we get the correct path back |
| assert dest == target |
| |
| # Ensure /proc is actually mounted |
| assert os.listdir(src) == os.listdir(target) |
| |
| # Ensure /proc is unmounted correctly |
| assert os.listdir(target) == [] |