def setup_internal_bindmount_test(self, exec_mock): """Test OSTree mount target prepare task _setup_internal_bindmount()""" exec_mock.return_value = 0 data = _make_config_data() task = PrepareOSTreeMountTargetsTask("/sysroot", "/physroot", data) self.assertEqual(len(task._internal_mounts), 0) # everything left out task._setup_internal_bindmount("/src") exec_mock.assert_called_once_with( "mount", ["--rbind", "/physroot/src", "/sysroot/src"]) self.assertListEqual(task._internal_mounts, ["/sysroot/src"]) task._internal_mounts.clear() exec_mock.reset_mock() # all equal to defaults but present - same as above but dest is used task._setup_internal_bindmount("/src", "/dest", True, False, True) exec_mock.assert_called_once_with( "mount", ["--rbind", "/physroot/src", "/sysroot/dest"]) self.assertListEqual(task._internal_mounts, ["/sysroot/dest"]) task._internal_mounts.clear() exec_mock.reset_mock() # src_physical off - makes it sysroot->sysroot task._setup_internal_bindmount("/src", "/dest", False, False, True) exec_mock.assert_called_once_with( "mount", ["--rbind", "/sysroot/src", "/sysroot/dest"]) self.assertListEqual(task._internal_mounts, ["/sysroot/dest"]) task._internal_mounts.clear() exec_mock.reset_mock() # bind_ro requires two calls task._setup_internal_bindmount("/src", "/dest", True, True, True) exec_mock.assert_has_calls([ call("mount", ["--bind", "/physroot/src", "/physroot/src"]), call("mount", [ "--bind", "-o", "remount,ro", "/physroot/src", "/physroot/src" ]) ]) self.assertEqual(len(exec_mock.mock_calls), 2) self.assertListEqual(task._internal_mounts, ["/physroot/src"]) task._internal_mounts.clear() exec_mock.reset_mock() # recurse off - bind instead of rbind task._setup_internal_bindmount("/src", "/dest", True, False, False) exec_mock.assert_called_once_with( "mount", ["--bind", "/physroot/src", "/sysroot/dest"]) self.assertListEqual(task._internal_mounts, ["/sysroot/dest"]) task._internal_mounts.clear() exec_mock.reset_mock()
def test_setup_internal_bindmount(self, exec_mock, mkdir_mock, exists_mock): """Test OSTree mount target prepare task _setup_internal_bindmount()""" exec_mock.return_value = 0 exists_mock.return_value = True data = _make_config_data() task = PrepareOSTreeMountTargetsTask("/sysroot", "/physroot", data) assert len(task._internal_mounts) == 0 # everything left out task._setup_internal_bindmount("/src") exec_mock.assert_called_once_with("mount", ["--rbind", "/physroot/src", "/sysroot/src"]) assert task._internal_mounts == ["/sysroot/src"] mkdir_mock.assert_not_called() task._internal_mounts.clear() exec_mock.reset_mock() # all equal to defaults but present - same as above but dest is used task._setup_internal_bindmount("/src", "/dest", True, False, True) exec_mock.assert_called_once_with("mount", ["--rbind", "/physroot/src", "/sysroot/dest"]) assert task._internal_mounts == ["/sysroot/dest"] mkdir_mock.assert_not_called() task._internal_mounts.clear() exec_mock.reset_mock() # src_physical off - makes it sysroot->sysroot task._setup_internal_bindmount("/src", "/dest", False, False, True) exec_mock.assert_called_once_with("mount", ["--rbind", "/sysroot/src", "/sysroot/dest"]) assert task._internal_mounts == ["/sysroot/dest"] mkdir_mock.assert_not_called() task._internal_mounts.clear() exec_mock.reset_mock() # bind_ro requires two calls task._setup_internal_bindmount("/src", "/dest", True, True, True) exec_mock.assert_has_calls([ call("mount", ["--bind", "/physroot/src", "/physroot/src"]), call("mount", ["--bind", "-o", "remount,ro", "/physroot/src", "/physroot/src"]) ]) assert len(exec_mock.mock_calls) == 2 assert task._internal_mounts == ["/physroot/src"] mkdir_mock.assert_not_called() task._internal_mounts.clear() exec_mock.reset_mock() # recurse off - bind instead of rbind task._setup_internal_bindmount("/src", "/dest", True, False, False) exec_mock.assert_called_once_with("mount", ["--bind", "/physroot/src", "/sysroot/dest"]) assert task._internal_mounts == ["/sysroot/dest"] mkdir_mock.assert_not_called() task._internal_mounts.clear() exec_mock.reset_mock() # with user defined mount point # directory for the mount point doesn't exists yet, we should create it exists_mock.return_value = False task._setup_internal_bindmount("/src", "/dest", True, False, False) exec_mock.assert_called_once_with("mount", ["--bind", "/physroot/src", "/sysroot/dest"]) assert task._internal_mounts == ["/sysroot/dest"] mkdir_mock.assert_called_with("/sysroot/dest") task._internal_mounts.clear() exec_mock.reset_mock() exists_mock.return_value = True