예제 #1
0
 def test_do_search(self, mock_msg, mock_utools, mock_dockioapi):
     """Test udocker search command"""
     udocker.Msg = mock_msg
     udocker.conf = udocker.Config()
     t_argv = ['./udocker.py', "search", "-a", "iscampos"]
     with mock.patch.object(sys, 'argv', t_argv):
         mock_dockioapi.return_value.is_v2.return_value = False
         mock_dockioapi.return_value.set_v2_login_token.return_value = None
         mock_dockioapi.return_value.search_get_page.side_effect = [
             {u'num_results': 2, u'results': [
                 {u'is_automated': False, u'name': u'iscampos/openqcd',
                  u'star_count': 0, u'is_trusted': False,
                  u'is_official': False,
                  u'description': u'Containers for openQCD v1.4'},
                 {u'is_automated': False, u'name': u'iscampos/codemaster',
                  u'star_count': 0, u'is_trusted': False,
                  u'is_official': False, u'description': u''}],
              u'page_size': 25, u'query': u'iscampos',
              u'num_pages': '1', u'page': u'0'},
             {u'num_results': 2, u'results': [
                 {u'is_automated': False, u'name': u'iscampos/openqcd',
                  u'star_count': 0, u'is_trusted': False,
                  u'is_official': False,
                  u'description': u'Containers for openQCD v1.4'},
                 {u'is_automated': False, u'name': u'iscampos/codemaster',
                  u'star_count': 0, u'is_trusted': False,
                  u'is_official': False, u'description': u''}],
              u'page_size': 25, u'query': u'iscampos',
              u'num_pages': '1', u'page': u'1'},
             {}]
         main = udocker.Main()
         main.execute()
         find_str(self, "iscampos/codemaster",
                  mock_msg.return_value.out.call_args)
예제 #2
0
 def test_do_images(self, mock_msg, mock_utools, mock_localrepo):
     """Test udocker images command"""
     udocker.Msg = mock_msg
     udocker.conf = udocker.Config()
     mock_localrepo.return_value.cd_imagerepo.return_value = \
         "/home/user/.udocker/repos/X/latest"
     mock_localrepo.return_value.get_imagerepos.return_value = [
         ('iscampos/openqcd', 'latest'), ('busybox', 'latest')]
     t_argv = ['./udocker.py', "images"]
     with mock.patch.object(sys, 'argv', t_argv):
         # Unprotected
         mock_localrepo.return_value.isprotected_imagerepo\
             .return_value = False
         main = udocker.Main()
         main.execute()
         msg_out = ("busybox:latest"
                    "                                               .")
         find_str(self, msg_out, mock_msg.return_value.out.call_args)
         # Protected
         mock_localrepo.return_value.isprotected_imagerepo\
             .return_value = True
         main.execute()
         msg_out = ("busybox:latest"
                    "                                               P")
         find_str(self, msg_out, mock_msg.return_value.out.call_args)
     t_argv = ['./udocker.py', "images", "-l"]
     with mock.patch.object(sys, 'argv', t_argv):
         main = udocker.Main()
         main.execute()
         msg_out = "  /home/user/.udocker/repos/X/latest"
         find_str(self, msg_out, mock_msg.return_value.out.call_args)
         #
         mock_localrepo.return_value.get_imagerepos.return_value = [
             ('busybox', 'latest')]
         mock_localrepo.return_value.get_layers.return_value = [
             ('/home/jorge/.udocker/repos/busybox/latest/' +
              'sha256:385e281300cc6d88bdd155e0931fbdfbb1801c2b' +
              '0265340a40481ee2b733ae66', 675992),
             ('/home/jorge/.udocker/repos/busybox/latest/' +
              '56ed16bd6310cca65920c653a9bb22de6b235990dcaa174' +
              '2ff839867aed730e5.layer', 675992),
             ('/home/jorge/.udocker/repos/busybox/latest/' +
              '56ed16bd6310cca65920c653a9bb22de6b235990dcaa174' +
              '2ff839867aed730e5.json', 1034),
             ('/home/jorge/.udocker/repos/busybox/latest/' +
              'bc744c4ab376115cc45c610d53f529dd2d4249ae6b35e5d' +
              '6e7a96e58863545aa.json', 1155),
             ('/home/jorge/.udocker/repos/busybox/latest/' +
              'bc744c4ab376115cc45c610d53f529dd2d4249ae6b35e5d' +
              '6e7a96e58863545aa.layer', 32),
             ('/home/jorge/.udocker/repos/busybox/latest/' +
              'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633c' +
              'b16422d00e8a7c22955b46d4', 32)]
         main.execute()
         msg_out = '    /home/jorge/.udocker/repos/busybox/latest/' +\
             'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16' +\
             '422d00e8a7c22955b46d4 ('
         find_str(self, msg_out, mock_msg.return_value.out.call_args)
예제 #3
0
 def test_init(self, mock_msg, mock_images, mock_user_init, mock_utools,
               mock_localrepo):
     """Test udocker global command line options"""
     set_msglevels(mock_msg)
     udocker.Msg = mock_msg
     t_argv = ['./udocker.py', "images"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main().start()
         self.assertTrue(mock_images.called)
     t_argv = ['./udocker.py', "--config=/myconf"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main().start()
         self.assertTrue(mock_user_init.called_with("/myconf"))
     t_argv = ['./udocker.py', "--cofig=/myconf"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main().start()
         self.assertTrue(mock_user_init.called_with(False))
     udocker.Config().verbose_level = 0
     t_argv = ['./udocker.py', "-D", "images"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main().start()
         self.assertEqual(udocker.Config().verbose_level, mock_msg.DBG)
     udocker.Config().verbose_level = 0
     t_argv = ['./udocker.py', "--debug"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main().start()
         self.assertEqual(udocker.Config().verbose_level, mock_msg.DBG)
     udocker.Config().verbose_level = 0
     t_argv = ['./udocker.py', "-q"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main().start()
         self.assertEqual(udocker.Config().verbose_level, mock_msg.MSG)
     udocker.Config().verbose_level = 0
     t_argv = ['./udocker.py', "--quiet"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main().start()
         self.assertEqual(udocker.Config().verbose_level, mock_msg.MSG)
     t_argv = ['./udocker.py', "--insecure"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main().start()
         self.assertEqual(udocker.Config().http_insecure, True)
     t_argv = ['./udocker.py', "--repo=/tmp"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main().start()
         self.assertEqual(udocker.Config().topdir, "/tmp")
예제 #4
0
 def test_execute_help(self, mock_msg, mock_utools):
     """Test udocker help command"""
     udocker.msg = mock_msg
     udocker.conf = udocker.Config()
     t_argv = ['./udocker.py', "--help"]
     with mock.patch.object(sys, 'argv', t_argv):
         main = udocker.Main()
         main.execute()
         find_str(self, "Examples", mock_msg.return_value.out.call_args)
예제 #5
0
 def test_04_user_init_bad(self, mock_fileutil, mock_msg):
     """Test Config.user_init() with bad config data"""
     udocker.msg = mock_msg
     conf = udocker.Config()
     conf_data = 'hh +=* ffhdklfh\n'
     mock_fileutil.return_value.size.return_value = 10
     mock_fileutil.return_value.getdata.return_value = conf_data
     status = conf.user_init("filename.conf")
     self.assertFalse(status, "Config.user_init bad config")
예제 #6
0
def do_action(t_argv):
    """Execute an action not part of a test i.e. setup and cleanup"""
    with mock.patch('udocker.Msg') as mock_msg:
        set_msglevels(mock_msg)
        udocker.Msg = mock_msg
        udocker.Config()
        with mock.patch.object(sys, 'argv', t_argv):
            main = udocker.Main()
            udocker.Msg.level = 3
            udocker.Config.verbose_level = 3
            return main.start()
예제 #7
0
 def test_03_user_init_good(self, mock_fileutil, mock_msg):
     """Test Config.user_init() with good data"""
     udocker.msg = mock_msg
     conf = udocker.Config()
     mock_fileutil.return_value.size.return_value = 10
     conf_data = '# comment\nverbose_level = 100\n'
     conf_data += 'tmpdir = "/xpto"\ncmd = ["/bin/ls", "-l"]\n'
     mock_fileutil.return_value.getdata.return_value = conf_data
     status = conf.user_init("filename.conf")
     self.assertTrue(status, "Config.user_init good config")
     self._verify_config(conf)
예제 #8
0
 def test_02_platform(self, mock_platform):
     """Test Config.platform()"""
     conf = udocker.Config()
     mock_platform.machine.return_value = "x86_64"
     arch = conf._sysarch()
     self.assertEqual("amd64", arch, "Config._sysarch x86_64")
     mock_platform.machine.return_value = "i586"
     arch = conf._sysarch()
     self.assertEqual("i386", arch, "Config._sysarchi i586")
     mock_platform.machine.return_value = "xpto"
     arch = conf._sysarch()
     self.assertEqual("", arch, "Config._sysarchi i586")
예제 #9
0
 def test_init(self, mock_msg, mock_import_modules, mock_user_init,
               mock_utools, mock_localrepo):
     """Test udocker global command line options"""
     udocker.msg = mock_msg
     udocker.conf = udocker.Config()
     t_argv = ['./udocker.py']
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main()
         self.assertTrue(mock_import_modules.called)
     t_argv = ['./udocker.py', "images"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main()
         self.assertTrue(mock_import_modules.called)
     t_argv = ['./udocker.py', "--config=/myconf"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main()
         self.assertTrue(mock_import_modules.called)
         self.assertTrue(mock_user_init.called_with("/myconf"))
     t_argv = ['./udocker.py', "--cofig=/myconf"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main()
         self.assertTrue(mock_import_modules.called)
         self.assertTrue(mock_user_init.called_with(False))
     udocker.conf.verbose_level = 0
     t_argv = ['./udocker.py', "-D"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main()
         self.assertTrue(mock_import_modules.called)
         self.assertEqual(udocker.conf.verbose_level, 3)
     udocker.conf.verbose_level = 0
     t_argv = ['./udocker.py', "--debug"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main()
         self.assertTrue(mock_import_modules.called)
         self.assertEqual(udocker.conf.verbose_level, 3)
     t_argv = ['./udocker.py', "--insecure"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main()
         self.assertTrue(mock_import_modules.called)
         self.assertEqual(udocker.conf.http_insecure, True)
     t_argv = ['./udocker.py', "--repo=/home/user/.udocker"]
     with mock.patch.object(sys, 'argv', t_argv):
         udocker.Main()
         self.assertTrue(mock_import_modules.called)
         self.assertEqual(udocker.conf.def_topdir, "/home/user/.udocker")
예제 #10
0
def do_cmd(self, mock_msg, t_argv, expect_msg=None, outfile=None):
    """Execute a udocker command as called in the command line"""
    set_msglevels(mock_msg)
    udocker.Msg = mock_msg
    udocker.Config()
    with mock.patch.object(sys, 'argv', t_argv):
        main = udocker.Main()
        udocker.Msg.chlderr = DEVNULL
        udocker.Msg.chldout = DEVNULL
        udocker.Msg.chldnul = DEVNULL
        udocker.Msg.level = 3
        udocker.Config.verbose_level = 3
        if outfile:
            (orig_stdout_fd, orig_stderr_fd) = open_outfile(outfile)
        status = main.start()  # start
        if outfile:
            close_outfile(orig_stdout_fd, orig_stderr_fd)
        if expect_msg is None and outfile is None:
            # print "out:" + str(mock_msg.return_value.out.call_args_list)
            # print "err:" + str(mock_msg.return_value.err.call_args_list)
            self.assertFalse(status, str(t_argv))
            return False
        elif expect_msg:
            find = choose_find(expect_msg[:1])
            if (find(expect_msg[1:], mock_msg.return_value.out.call_args_list)
                    or find(expect_msg[1:],
                            mock_msg.return_value.err.call_args_list)):
                self.assertTrue(True, str(t_argv))
                return True
            else:
                # print "out:" + str(mock_msg.return_value.out.call_args_list)
                # print "err:" + str(mock_msg.return_value.err.call_args_list)
                self.assertTrue(False, str(t_argv))
                return False
        else:
            self.assertTrue(True, str(t_argv))
            return True
예제 #11
0
 def test_01_init(self):
     """Test Config() constructor"""
     conf = udocker.Config()
     self._verify_config(conf)