class SymLinkNestTests(TestCase): """ Tests for SymLinkNest class """ NEST_DIR = "nest" def setUp(self): self.nest = SymLinkNest(self.NEST_DIR) def test_init(self): """ verify that SymLinkNest.__init__() stores its argument """ self.assertEqual(self.nest._dirname, self.NEST_DIR) def test_add_provider(self): """ verify that add_provider() adds each executable """ provider = mock.Mock(name='provider', spec=Provider1) provider.get_all_executables.return_value = ['exec1', 'exec2'] with mock.patch.object(self.nest, 'add_executable'): self.nest.add_provider(provider) self.nest.add_executable.assert_has_calls([(('exec1', ), {}), (('exec2', ), {})]) provider.get_all_executables.assert_called_once() @mock.patch('os.symlink') def test_add_executable(self, mock_symlink): self.nest.add_executable('/usr/lib/foo/exec') mock_symlink.assert_called_with('/usr/lib/foo/exec', 'nest/exec')
class SymLinkNestTests(TestCase): """ Tests for SymLinkNest class """ NEST_DIR = "nest" def setUp(self): self.nest = SymLinkNest(self.NEST_DIR) def test_init(self): """ verify that SymLinkNest.__init__() stores its argument """ self.assertEqual(self.nest._dirname, self.NEST_DIR) def test_add_provider(self): """ verify that add_provider() adds each executable """ provider = mock.Mock(name='provider', spec=Provider1) provider.get_all_executables.return_value = ['exec1', 'exec2'] with mock.patch.object(self.nest, 'add_executable'): self.nest.add_provider(provider) self.nest.add_executable.assert_has_calls([ (('exec1',), {}), (('exec2',), {})]) provider.get_all_executables.assert_called_once() @mock.patch('os.symlink') def test_add_executable(self, mock_symlink): self.nest.add_executable('/usr/lib/foo/exec') mock_symlink.assert_called_with( '/usr/lib/foo/exec', 'nest/exec')
def configured_filesystem(self, job): """ Context manager for handling filesystem aspects of job execution. :param job: The JobDefinition to execute :returns: Pathname of the executable symlink nest directory. """ # Create a nest for all the private executables needed for execution prefix = 'nest-' suffix = '.{}'.format(job.checksum) with tempfile.TemporaryDirectory(suffix, prefix) as nest_dir: os.chmod(nest_dir, 0o777) logger.debug(_("Symlink nest for executables: %s"), nest_dir) from plainbox.impl.ctrl import SymLinkNest nest = SymLinkNest(nest_dir) # Add all providers sharing namespace with the current job to PATH for provider in self._provider_list: if job.provider.namespace == provider.namespace: nest.add_provider(provider) yield nest_dir