Esempio n. 1
0
    def test_pulse_extension(self):
        plugins = list_plugins()
        pulse_plugin = plugins['pulse']
        self.assertEqual(pulse_plugin.get_name(), 'pulse')

        p = pulse_plugin()
        self.assertTrue(plugin_load_parser_correctly(pulse_plugin))
        
        mock_cliargs = {}
        snippet = p.get_snippet(mock_cliargs)
        #first line
        self.assertIn('RUN mkdir -p /etc/pulse', snippet)
        self.assertIn('default-server = unix:/run/user/', snippet) #skipping user id that's system dependent
        self.assertIn('autospawn = no', snippet)
        self.assertIn('daemon-binary = /bin/true', snippet)
        #last line
        self.assertIn('> /etc/pulse/client.conf', snippet)
        self.assertEqual(p.get_preamble(mock_cliargs), '')
        docker_args = p.get_docker_args(mock_cliargs)
        self.assertIn('-v /run/user/', docker_args)
        self.assertIn('/pulse:/run/user/', docker_args)
        self.assertIn('/pulse --device /dev/snd ', docker_args)
        self.assertIn(' -e PULSE_SERVER=unix', docker_args)
        self.assertIn('/pulse/native -v', docker_args)
        self.assertIn('/pulse/native:', docker_args)
        self.assertIn('/pulse/native --group-add', docker_args)
Esempio n. 2
0
    def test_user_extension(self):
        plugins = list_plugins()
        user_plugin = plugins['user']
        self.assertEqual(user_plugin.get_name(), 'user')

        p = user_plugin()
        self.assertTrue(plugin_load_parser_correctly(user_plugin))

        env_subs = p.get_environment_subs()
        self.assertEqual(env_subs['gid'], os.getgid())
        self.assertEqual(env_subs['uid'], os.getuid())
        self.assertEqual(env_subs['name'],  getpass.getuser())
        self.assertEqual(env_subs['dir'],  str(Path.home()))
        self.assertEqual(env_subs['gecos'],  pwd.getpwuid(os.getuid()).pw_gecos)
        self.assertEqual(env_subs['shell'],  pwd.getpwuid(os.getuid()).pw_shell)

        mock_cliargs = {}
        snippet = p.get_snippet(mock_cliargs).splitlines()

        passwd_line = [l for l in snippet if 'chpasswd' in l][0]
        self.assertTrue(getpass.getuser() in passwd_line)

        uid_line = [l for l in snippet if '--uid' in l][0]
        self.assertTrue(str(os.getuid()) in uid_line)

        self.assertEqual(p.get_preamble(mock_cliargs), '')
        self.assertEqual(p.get_docker_args(mock_cliargs), '')
Esempio n. 3
0
 def test_list_plugins(self):
     plugins_found = list_plugins()
     plugin_names = plugins_found.keys()
     self.assertTrue('nvidia' in plugin_names)
     self.assertTrue('pulse' in plugin_names)
     self.assertTrue('user' in plugin_names)
     self.assertTrue('home' in plugin_names)
Esempio n. 4
0
    def test_git_extension(self):
        plugins = list_plugins()
        git_plugin = plugins['git']
        self.assertEqual(git_plugin.get_name(), 'git')

        p = git_plugin()
        self.assertTrue(plugin_load_parser_correctly(git_plugin))

        mock_cliargs = {}
        self.assertEqual(p.get_snippet(mock_cliargs), '')
        self.assertEqual(p.get_preamble(mock_cliargs), '')
        args = p.get_docker_args(mock_cliargs)
        # self.assertFalse(args)
        system_gitconfig = '/etc/gitconfig'
        user_gitconfig = os.path.expanduser('~/.gitconfig')
        user_gitconfig_target = '/root/.gitconfig'
        if os.path.exists(system_gitconfig):
            # TODO(tfoote) This isn't exercised on most systems, it would need to be mocked
            self.assertIn('-v %s:%s' % (system_gitconfig, system_gitconfig),
                          args)
        if os.path.exists(user_gitconfig):
            self.assertIn('-v %s:%s' % (user_gitconfig, user_gitconfig_target),
                          args)

        # Test with user "enabled"
        mock_cliargs = {'user': True}
        user_args = p.get_docker_args(mock_cliargs)
        if os.path.exists(user_gitconfig):
            self.assertIn('-v %s:%s' % (user_gitconfig, user_gitconfig),
                          user_args)
Esempio n. 5
0
 def test_return_code_multiple_extensions(self):
     plugins = list_plugins()
     desired_plugins = ['home', 'user']
     active_extensions = [
         e() for e in plugins.values() if e.get_name() in desired_plugins
     ]
     dig = DockerImageGenerator(active_extensions, {}, 'ubuntu:bionic')
     self.assertEqual(dig.build(), 0)
     self.assertEqual(dig.run('true'), 0)
     self.assertEqual(dig.run('false'), 1)
Esempio n. 6
0
 def test_x11_xpdyinfo(self):
     plugins = list_plugins()
     desired_plugins = ['x11']
     active_extensions = [
         e() for e in plugins.values() if e.get_name() in desired_plugins
     ]
     for tag in self.dockerfile_tags:
         dig = DockerImageGenerator(active_extensions, {}, tag)
         self.assertEqual(dig.build(), 0)
         self.assertEqual(dig.run(), 0)
Esempio n. 7
0
    def test_pulse_extension(self):
        plugins = list_plugins()
        dev_helper_plugin = plugins['dev_helpers']
        self.assertEqual(dev_helper_plugin.get_name(), 'dev_helpers')

        p = dev_helper_plugin()
        self.assertTrue(plugin_load_parser_correctly(dev_helper_plugin))
        
        mock_cliargs = {}

        self.assertEqual(p.get_snippet(mock_cliargs), EXPECTED_DEV_HELPERS_SNIPPET)
        self.assertEqual(p.get_preamble(mock_cliargs), '')
Esempio n. 8
0
 def test_nvidia_glmark2(self):
     plugins = list_plugins()
     desired_plugins = [
         'x11', 'nvidia', 'user'
     ]  #TODO(Tfoote) encode the x11 dependency into the plugin and remove from test here
     active_extensions = [
         e() for e in plugins.values() if e.get_name() in desired_plugins
     ]
     for tag in self.dockerfile_tags:
         dig = DockerImageGenerator(active_extensions, {}, tag)
         self.assertEqual(dig.build(), 0)
         self.assertEqual(dig.run(), 0)
Esempio n. 9
0
    def test_home_extension(self):
        plugins = list_plugins()
        home_plugin = plugins['home']
        self.assertEqual(home_plugin.get_name(), 'home')

        p = home_plugin()
        self.assertTrue(plugin_load_parser_correctly(home_plugin))
        
        mock_cliargs = {}
        self.assertEqual(p.get_snippet(mock_cliargs), '')
        self.assertEqual(p.get_preamble(mock_cliargs), '')
        args = p.get_docker_args(mock_cliargs)
        self.assertTrue('-v %s:%s' % (Path.home(), Path.home()) in args)
Esempio n. 10
0
    def test_env_extension(self):
        plugins = list_plugins()
        env_plugin = plugins['env']
        self.assertEqual(env_plugin.get_name(), 'env')

        p = env_plugin()
        self.assertTrue(plugin_load_parser_correctly(env_plugin))
        
        mock_cliargs = {'env': ['ENVVARNAME=envvar_value', 'ENV2=val2']}

        self.assertEqual(p.get_snippet(mock_cliargs), '')
        self.assertEqual(p.get_preamble(mock_cliargs), '')
        self.assertEqual(p.get_docker_args(mock_cliargs), ' -e ENVVARNAME=envvar_value -e ENV2=val2')
Esempio n. 11
0
    def test_x11_extension_basic(self):
        plugins = list_plugins()
        x11_plugin = plugins['x11']
        self.assertEqual(x11_plugin.get_name(), 'x11')
        self.assertTrue(plugin_load_parser_correctly(x11_plugin))

        p = x11_plugin()
        mock_cliargs = {'base_image': 'ubuntu:xenial'}

        docker_args = p.get_docker_args(mock_cliargs)
        self.assertIn(' -e DISPLAY -e TERM', docker_args)
        self.assertIn(' -e QT_X11_NO_MITSHM=1', docker_args)
        self.assertIn(' -e XAUTHORITY=', docker_args)
        self.assertIn(' -v /tmp/.X11-unix:/tmp/.X11-unix ', docker_args)
        self.assertIn(' -v /etc/localtime:/etc/localtime:ro ', docker_args)
Esempio n. 12
0
    def test_nvidia_extension_basic(self):
        plugins = list_plugins()
        nvidia_plugin = plugins['nvidia']
        self.assertEqual(nvidia_plugin.get_name(), 'nvidia')
        self.assertTrue(plugin_load_parser_correctly(nvidia_plugin))

        p = nvidia_plugin()
        mock_cliargs = {'base_image': 'ubuntu:xenial'}
        snippet = p.get_snippet(mock_cliargs)

        self.assertIn(
            'COPY --from=glvnd /usr/local/lib/x86_64-linux-gnu /usr/local/lib/x86_64-linux-gnu',
            snippet)
        self.assertIn(
            'COPY --from=glvnd /usr/local/lib/i386-linux-gnu /usr/local/lib/i386-linux-gnu',
            snippet)
        self.assertIn(
            'ENV LD_LIBRARY_PATH /usr/local/lib/x86_64-linux-gnu:/usr/local/lib/i386-linux-gnu',
            snippet)
        self.assertIn('NVIDIA_VISIBLE_DEVICES', snippet)
        self.assertIn('NVIDIA_DRIVER_CAPABILITIES', snippet)

        mock_cliargs = {'base_image': 'ubuntu:bionic'}
        snippet = p.get_snippet(mock_cliargs)
        self.assertIn(
            'RUN apt-get update && apt-get install -y --no-install-recommends',
            snippet)
        self.assertIn(' libglvnd0 ', snippet)
        self.assertIn(' libgles2 ', snippet)
        self.assertIn(
            'COPY --from=glvnd /usr/share/glvnd/egl_vendor.d/10_nvidia.json /usr/share/glvnd/egl_vendor.d/10_nvidia.json',
            snippet)

        self.assertIn('NVIDIA_VISIBLE_DEVICES', snippet)
        self.assertIn('NVIDIA_DRIVER_CAPABILITIES', snippet)

        preamble = p.get_preamble(mock_cliargs)
        self.assertIn('FROM nvidia/opengl:1.0-glvnd-devel-', preamble)

        docker_args = p.get_docker_args(mock_cliargs)
        #TODO(tfoote) restore with #37 self.assertIn(' -e DISPLAY -e TERM', docker_args)
        #TODO(tfoote) restore with #37 self.assertIn(' -e QT_X11_NO_MITSHM=1', docker_args)
        #TODO(tfoote) restore with #37 self.assertIn(' -e XAUTHORITY=', docker_args)
        #TODO(tfoote) restore with #37 self.assertIn(' -v /tmp/.X11-unix:/tmp/.X11-unix ', docker_args)
        #TODO(tfoote) restore with #37 self.assertIn(' -v /etc/localtime:/etc/localtime:ro ', docker_args)
        self.assertIn(' --runtime=nvidia ', docker_args)
        self.assertIn(' --security-opt seccomp=unconfined', docker_args)
Esempio n. 13
0
    def test_ssh_extension(self):
        plugins = list_plugins()
        ssh_plugin = plugins['ssh']
        self.assertEqual(ssh_plugin.get_name(), 'ssh')

        p = ssh_plugin()
        self.assertTrue(plugin_load_parser_correctly(ssh_plugin))

        mock_cliargs = {}
        self.assertEqual(p.get_snippet(mock_cliargs), '')
        self.assertEqual(p.get_preamble(mock_cliargs), '')
        # with SSH_AUTH_SOCK set
        os.environ['SSH_AUTH_SOCK'] = 'foo'
        args = p.get_docker_args(mock_cliargs)
        self.assertIn(
            '-e SSH_AUTH_SOCK -v ' + shlex.quote(
                '{SSH_AUTH_SOCK}:{SSH_AUTH_SOCK}'.format(**os.environ)), args)

        #without it set
        del os.environ['SSH_AUTH_SOCK']
        args = p.get_docker_args(mock_cliargs)
        self.assertNotIn('SSH_AUTH_SOCK', args)