def test_02__has_option(self, mock_hinfocmd):
     """Test02 ExecutionEngineCommon()._has_option()."""
     mock_hinfocmd.return_value = True
     ex_eng = ExecutionEngineCommon(self.local, self.xmode)
     status = ex_eng._has_option("opt1")
     self.assertTrue(status)
     self.assertTrue(mock_hinfocmd.called)
 def test_22__run_banner(self, mock_base, mock_msg):
     """Test22 ExecutionEngineCommon()._run_banner()."""
     mock_base.return_value = "ls"
     ex_eng = ExecutionEngineCommon(self.local, self.xmode)
     ex_eng._run_banner("/bin/bash")
     ex_eng.container_id = "CONTAINERID"
     self.assertTrue(mock_msg.called)
     self.assertTrue(mock_base.called_once_with("/bin/bash"))
 def test_23__run_env_cleanup_dict(self, mock_osenv, mock_osenvcp):
     """Test23 ExecutionEngineCommon()._run_env_cleanup_dict()."""
     res = {'HOME': '/', }
     Config.conf['valid_host_env'] = ("HOME",)
     Config.conf['invalid_host_env'] = ("USERNAME",)
     mock_osenvcp.return_value = {'HOME': '/', 'USERNAME': '******', }
     mock_osenv.return_value = {'HOME': '/', }
     ex_eng = ExecutionEngineCommon(self.local, self.xmode)
     ex_eng.opt["hostenv"] = {'HOME': '/', }
     ex_eng._run_env_cleanup_dict()
     self.assertEqual(mock_osenv.return_value, res)
 def test_25__run_env_set(self, mock_hiuname):
     """Test25 ExecutionEngineCommon()._run_env_set()."""
     mock_hiuname.return_value = "user1"
     ex_eng = ExecutionEngineCommon(self.local, self.xmode)
     ex_eng.opt["home"] = "/"
     ex_eng.opt["user"] = "******"
     ex_eng.opt["uid"] = "1000"
     ex_eng.container_root = "/croot"
     ex_eng.container_id = "2717add4-e6f6-397c-9019-74fa67be439f"
     ex_eng.container_names = ['cna[]me', ]
     self.xmode.get_mode.return_value = "P1"
     ex_eng._run_env_set()
     self.assertEqual(ex_eng.opt["env"].env["USER"], "user1")
     self.assertEqual(ex_eng.opt["env"].env["LOGNAME"], "user1")
     self.assertEqual(ex_eng.opt["env"].env["USERNAME"], "user1")
     self.assertEqual(ex_eng.opt["env"].env["SHLVL"], "0")
    def test_05__set_cpu_affinity(self, mock_findexec):
        """Test05 ExecutionEngineCommon()._set_cpu_affinity()."""
        mock_findexec.return_value = ""
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._set_cpu_affinity()
        self.assertEqual(status, [])

        mock_findexec.return_value = "taskset"
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._set_cpu_affinity()
        self.assertEqual(status, [])

        mock_findexec.return_value = "numactl"
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["cpuset"] = "1-2"
        status = ex_eng._set_cpu_affinity()
        self.assertEqual(status, ["numactl", "-C", "1-2", "--"])
 def test_20__fill_user(self, mock_auth, mock_hinfo):
     """Test20 ExecutionEngineCommon()._fill_user()."""
     mock_auth.return_value.get_home.return_value = "/home/u1"
     mock_hinfo.uid = 1000
     mock_hinfo.gid = 1000
     ex_eng = ExecutionEngineCommon(self.local, self.xmode)
     ex_eng.opt["user"] = ""
     ex_eng.opt["uid"] = ""
     ex_eng.opt["gid"] = ""
     ex_eng.opt["bindhome"] = True
     ex_eng.opt["shell"] = ""
     ex_eng.opt["gecos"] = ""
     ex_eng._fill_user()
     self.assertEqual(ex_eng.opt["user"], "udoc1000")
     self.assertEqual(ex_eng.opt["uid"], "1000")
     self.assertEqual(ex_eng.opt["gid"], "1000")
     self.assertEqual(ex_eng.opt["shell"], "/bin/sh")
     self.assertEqual(ex_eng.opt["gecos"], "*UDOCKER*")
    def test_10__is_mountpoint(self, mock_uvolsplit, mock_uvolclean):
        """Test10 ExecutionEngineCommon()._is_mountpoint()."""
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["vol"] = list()
        status = ex_eng._is_mountpoint("/tmp")
        self.assertEqual(status, "")

        mock_uvolsplit.return_value = ("/tmp", "/CONTDIR")
        mock_uvolclean.return_value = "/CONTDIR"
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["vol"] = list()
        ex_eng.opt["vol"].append("/tmp:/CONTDIR")
        status = ex_eng._is_mountpoint("/tmp")
        self.assertEqual(status, "/tmp")
    def test_08__get_bindhome(self, mock_gethome):
        """Test08 ExecutionEngineCommon()._get_bindhome()."""
        mock_gethome.return_value = ""
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["bindhome"] = False
        status = ex_eng._get_bindhome()
        self.assertEqual(status, "")

        mock_gethome.return_value = "/home/user"
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["bindhome"] = True
        status = ex_eng._get_bindhome()
        self.assertEqual(status, "/home/user")
        self.assertTrue(mock_gethome.called)
    def test_16__validate_user_str(self):
        """Test16 ExecutionEngineCommon()._validate_user_str()."""
        userstr = ""
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._validate_user_str(userstr)
        self.assertEqual(status, dict())

        userstr = "user1"
        res = {"user": userstr}
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._validate_user_str(userstr)
        self.assertEqual(status, res)

        userstr = "1000:1000"
        res = {"uid": "1000", "gid": "1000"}
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._validate_user_str(userstr)
        self.assertEqual(status, res)
 def test_26__run_env_cmdoptions(self, mock_getdata):
     """Test26 ExecutionEngineCommon()._run_env_cmdoptions()."""
     mock_getdata.return_value = "USER=user1\nSHLVL=0"
     ex_eng = ExecutionEngineCommon(self.local, self.xmode)
     ex_eng.opt["envfile"] = ["/dir/env"]
     ex_eng.opt["env"] = Uenv()
     ex_eng._run_env_cmdoptions()
     self.assertEqual(ex_eng.opt["env"].env["USER"], "user1")
    def test_04__check_exposed_ports(self, mock_getports, mock_hinfo, mock_msg):
        """Test04 ExecutionEngineCommon()._check_exposed_ports()."""
        mock_msg.level = 0
        mock_getports.return_value = {22: 22, 2048: 2048}
        mock_hinfo.uid = 1000
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["portsexp"] = ("22", "2048/tcp")
        status = ex_eng._check_exposed_ports()
        self.assertFalse(status)

        mock_getports.return_value = {22: 22, 2048: 2048}
        mock_hinfo.uid = 0
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["portsexp"] = ("22", "2048/tcp")
        status = ex_eng._check_exposed_ports()
        self.assertTrue(status)
 def test_24__run_env_cleanup_list(self, mock_osenv):
     """Test24 ExecutionEngineCommon()._run_env_cleanup_list()."""
     Config.conf['valid_host_env'] = ("HOME",)
     Config.conf['invalid_host_env'] = ("USERNAME",)
     mock_osenv.return_value = {'HOME': '/', 'USERNAME': '******', }
     ex_eng = ExecutionEngineCommon(self.local, self.xmode)
     ex_eng.opt["hostenv"] = "HOME"
     ex_eng.opt["env"] = Uenv()
     ex_eng._run_env_cleanup_list()
     self.assertEqual(ex_eng.opt["env"].env, dict())
    def test_15__select_auth_files(self, mock_ismpoint, mock_fbind, mock_islink,
                                   mock_isfile):
        """Test15 ExecutionEngineCommon()._select_auth_files()."""
        resp = "/fbdir/#etc#passwd"
        resg = "/fbdir/#etc#group"
        mock_fbind.return_value.orig_dir = "/fbdir"
        mock_islink.side_effect = [True, True]
        mock_isfile.side_effect = [True, True]
        mock_ismpoint.side_effect = ["", "", "", ""]
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._select_auth_files()
        self.assertTrue(mock_islink.call_count, 2)
        self.assertTrue(mock_isfile.call_count, 2)
        self.assertTrue(mock_ismpoint.call_count, 2)
        # self.assertEqual(status, resp)

        resp = "/etc/passwd"
        resg = "/etc/group"
        mock_fbind.orig_dir.side_effect = ["/fbdir", "/fbdir"]
        mock_islink.side_effect = [False, False]
        mock_isfile.side_effect = [False, False]
        mock_ismpoint.side_effect = ["", "", "", ""]
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._select_auth_files()
        self.assertEqual(status, (resp, resg))

        resp = "/d/etc/passwd"
        resg = "/d/etc/group"
        mock_fbind.orig_dir.side_effect = ["/fbdir", "/fbdir"]
        mock_islink.side_effect = [False, False]
        mock_isfile.side_effect = [False, False]
        mock_ismpoint.side_effect = ["/d/etc/passwd", "/d/etc/passwd",
                                     "/d/etc/group", "/d/etc/group"]
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._select_auth_files()
        self.assertTrue(mock_ismpoint.call_count, 4)
        self.assertEqual(status, (resp, resg))
 def test_01_init(self):
     """Test01 ExecutionEngineCommon() constructor"""
     ex_eng = ExecutionEngineCommon(self.local, self.xmode)
     self.assertEqual(ex_eng.container_id, "")
     self.assertEqual(ex_eng.container_root, "")
     self.assertEqual(ex_eng.container_names, [])
     self.assertEqual(ex_eng.localrepo, self.local)
     self.assertEqual(ex_eng.exec_mode, self.xmode)
     self.assertEqual(ex_eng.opt["nometa"], False)
     self.assertEqual(ex_eng.opt["nosysdirs"], False)
     self.assertEqual(ex_eng.opt["dri"], False)
     self.assertEqual(ex_eng.opt["bindhome"], False)
     self.assertEqual(ex_eng.opt["hostenv"], False)
     self.assertEqual(ex_eng.opt["hostauth"], False)
     self.assertEqual(ex_eng.opt["novol"], [])
     self.assertEqual(ex_eng.opt["vol"], [])
     self.assertEqual(ex_eng.opt["cpuset"], "")
     self.assertEqual(ex_eng.opt["user"], "")
     self.assertEqual(ex_eng.opt["cwd"], "")
     self.assertEqual(ex_eng.opt["entryp"], "")
     self.assertEqual(ex_eng.opt["hostname"], "")
     self.assertEqual(ex_eng.opt["domain"], "")
     self.assertEqual(ex_eng.opt["volfrom"], [])
    def test_17__user_from_str(self):
        """Test17 ExecutionEngineCommon()._user_from_str()."""
        userstr = ""
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._user_from_str(userstr)
        self.assertEqual(status, (False, dict()))

        userstr = "user1"
        res = {"user": userstr}
        str_exmode = 'udocker.helper.nixauth.NixAuthentication'
        nixauth = patch(str_exmode)
        auth = nixauth.start()
        mock_auth = Mock()
        auth.return_value = mock_auth
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["hostauth"] = True
        auth.get_user.return_value = ("user1", "1000", "1000", "usr",
                                      "/home/user", "/bin/bash")
        status = ex_eng._user_from_str(userstr, host_auth=auth)
        self.assertEqual(status, (True, res))
        auth = nixauth.stop()

        userstr = "user1"
        res = {"user": userstr}
        str_exmode = 'udocker.helper.nixauth.NixAuthentication'
        nixauth = patch(str_exmode)
        auth = nixauth.start()
        mock_auth = Mock()
        auth.return_value = mock_auth
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["hostauth"] = False
        auth.get_user.return_value = ("user1", "1000", "1000", "usr",
                                      "/home/user", "/bin/bash")
        status = ex_eng._user_from_str(userstr, container_auth=auth)
        self.assertEqual(status, (True, res))
        auth = nixauth.stop()

        userstr = "1000:1000"
        res = {"uid": "1000", "gid": "1000"}
        str_exmode = 'udocker.helper.nixauth.NixAuthentication'
        nixauth = patch(str_exmode)
        auth = nixauth.start()
        mock_auth = Mock()
        auth.return_value = mock_auth
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["hostauth"] = True
        auth.get_user.return_value = ("user1", "1000", "1000", "usr",
                                      "/home/user", "/bin/bash")
        status = ex_eng._user_from_str(userstr, host_auth=auth)
        self.assertEqual(status, (True, res))
        auth = nixauth.stop()
    def test_27__run_init(self, mock_loadmeta, mock_envcmd,
                          mock_setupuser,
                          mock_chkpaths, mock_chkexec, mock_setvol,
                          mock_chkports, mock_mpoint):
        """Test27 ExecutionEngineCommon()._run_init()."""
        # mock_getcname.return_value = "cname"
        Config.conf['location'] = ""
        mock_loadmeta.return_value = ("", "dummy",)
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._run_init("2717add4-e6f6-397c-9019-74fa67be439f")
        self.assertEqual(status, "")
        self.assertTrue(mock_loadmeta.called)

        Config.conf['location'] = "/container_dir"
        mock_loadmeta.return_value = ("/container_dir", "dummy",)
        mock_envcmd.return_value = None
        mock_chkports.return_value = None
        mock_setupuser.return_value = False
        self.local.get_container_name.return_value = "cont_name"
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._run_init("2717add4-e6f6-397c-9019-74fa67be439f")
        self.assertEqual(status, "")
        self.assertTrue(mock_envcmd.called)
        self.assertTrue(self.local.get_container_name.called)
        self.assertTrue(mock_chkports.called)

        Config.conf['location'] = "/container_dir"
        mock_loadmeta.return_value = ("/container_dir", "dummy",)
        mock_envcmd.return_value = None
        mock_chkports.return_value = None
        mock_setupuser.return_value = True
        mock_mpoint.return_value = None
        mock_setvol.return_value = False
        self.local.get_container_name.return_value = "cont_name"
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._run_init("2717add4-e6f6-397c-9019-74fa67be439f")
        self.assertEqual(status, "")
        self.assertTrue(mock_chkports.called)
        self.assertTrue(mock_mpoint.called)
        self.assertTrue(mock_setvol.called)

        Config.conf['location'] = "/container_dir"
        mock_loadmeta.return_value = ("/container_dir", "dummy",)
        mock_envcmd.return_value = None
        mock_chkports.return_value = None
        mock_setupuser.return_value = True
        mock_mpoint.return_value = None
        mock_setvol.return_value = True
        mock_chkpaths.return_value = False
        self.local.get_container_name.return_value = "cont_name"
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._run_init("2717add4-e6f6-397c-9019-74fa67be439f")
        self.assertEqual(status, "")
        self.assertTrue(mock_chkpaths.called)

        Config.conf['location'] = "/container_dir"
        mock_loadmeta.return_value = ("/container_dir", "dummy",)
        mock_envcmd.return_value = None
        mock_chkports.return_value = None
        mock_setupuser.return_value = True
        mock_mpoint.return_value = None
        mock_setvol.return_value = True
        mock_chkpaths.return_value = True
        mock_chkexec.return_value = "/bin/ls"
        self.local.get_container_name.return_value = "cont_name"
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._run_init("2717add4-e6f6-397c-9019-74fa67be439f")
        self.assertEqual(status, "/bin/ls")
        self.assertTrue(mock_chkexec.called)
    def test_07__check_volumes(self, mock_uvolsplit, mock_exists,
                               mock_crmpoint, mock_msg):
        """Test07 ExecutionEngineCommon()._check_volumes()."""
        mock_msg.level = 0
        mock_uvolsplit.return_value = ("HOSTDIR", "CONTDIR")
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["vol"] = list()
        ex_eng.opt["vol"].append("HOSTDIR:CONTDIR")
        status = ex_eng._check_volumes()
        self.assertFalse(status)
        self.assertTrue(mock_uvolsplit.called)

        mock_uvolsplit.return_value = ("/HOSTDIR", "CONTDIR")
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["vol"] = list()
        ex_eng.opt["vol"].append("/HOSTDIR:CONTDIR")
        status = ex_eng._check_volumes()
        self.assertFalse(status)

        Config.conf['sysdirs_list'] = ["/HOSTDIR"]
        mock_exists.return_value = False
        mock_uvolsplit.return_value = ("/HOSTDIR", "/CONTDIR")
        mock_crmpoint.return_value = False
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["vol"] = list()
        ex_eng.opt["vol"].append("/HOSTDIR:/CONTDIR")
        status = ex_eng._check_volumes()
        self.assertTrue(status)
        self.assertEqual(ex_eng.opt["vol"], list())
        self.assertTrue(mock_exists.called)

        Config.conf['sysdirs_list'] = ["/sys"]
        mock_exists.return_value = False
        mock_uvolsplit.return_value = ("/HOSTDIR", "/CONTDIR")
        mock_crmpoint.return_value = False
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["vol"] = list()
        ex_eng.opt["vol"].append("/HOSTDIR:/CONTDIR")
        status = ex_eng._check_volumes()
        self.assertFalse(status)
        self.assertTrue(mock_exists.called)

        Config.conf['sysdirs_list'] = ["/sys"]
        mock_exists.return_value = True
        mock_uvolsplit.return_value = ("/HOSTDIR", "/CONTDIR")
        mock_crmpoint.return_value = True
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["vol"] = list()
        ex_eng.opt["vol"].append("/HOSTDIR:/CONTDIR")
        status = ex_eng._check_volumes()
        self.assertTrue(status)
 def test_03__get_portsmap(self):
     """Test03 ExecutionEngineCommon()._get_portsmap()."""
     ex_eng = ExecutionEngineCommon(self.local, self.xmode)
     ex_eng.opt["portsmap"] = ["1024:1024", "2048:2048"]
     status = ex_eng._get_portsmap()
     self.assertEqual(status, {1024: 1024, 2048: 2048})
    def test_11__set_volume_bindings(self, mock_bindhome, mock_chkvol):
        """Test11 ExecutionEngineCommon()._set_volume_bindings()."""
        Config.conf['sysdirs_list'] = ["/sys"]
        Config.conf['dri_list'] = ["/dri"]
        mock_bindhome.return_value = "/home/user"
        mock_chkvol.return_value = False
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["vol"] = list()
        ex_eng.opt["hostauth"] = "/etc/passwd"
        ex_eng.opt["nosysdirs"] = False
        ex_eng.opt["dri"] = True
        ex_eng.opt["novol"] = list()
        status = ex_eng._set_volume_bindings()
        self.assertFalse(status)
        self.assertTrue(mock_bindhome.called)
        self.assertTrue(mock_chkvol.called)

        Config.conf['sysdirs_list'] = ["/sys"]
        Config.conf['dri_list'] = ["/dri"]
        mock_bindhome.return_value = "/home/user"
        mock_chkvol.return_value = True
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["vol"] = list()
        ex_eng.opt["hostauth"] = "/etc/passwd"
        ex_eng.opt["nosysdirs"] = False
        ex_eng.opt["dri"] = True
        ex_eng.opt["novol"] = ["/sys", "/dri", "/home/user"]
        status = ex_eng._set_volume_bindings()
        self.assertTrue(status)
    def test_12__check_paths(self, mock_fuc2h, mock_isdir, mock_uenv,
                             mock_msg):
        """Test12 ExecutionEngineCommon()._check_paths()."""
        Config.conf['root_path'] = "/sbin"
        Config.conf['user_path'] = "/bin"
        mock_msg.level = 0
        mock_fuc2h.return_value = "/container/bin"
        mock_isdir.return_value = False
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["uid"] = "0"
        ex_eng.opt["cwd"] = ""
        ex_eng.opt["home"] = "/home/user"
        ex_eng.opt["env"] = mock_uenv
        ex_eng.opt["env"].getenv.return_value = "/sbin"
        status = ex_eng._check_paths()
        self.assertFalse(status)
        self.assertEqual(ex_eng.opt["cwd"], ex_eng.opt["home"])

        Config.conf['root_path'] = "/sbin"
        Config.conf['user_path'] = "/bin"
        mock_fuc2h.return_value = "/container/bin"
        mock_isdir.return_value = True
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["uid"] = "0"
        ex_eng.opt["cwd"] = "/home/user"
        ex_eng.opt["home"] = "/home/user"
        ex_eng.opt["env"] = mock_uenv
        ex_eng.opt["env"].getenv.return_value = ""
        status = ex_eng._check_paths()
        self.assertTrue(status)
        self.assertTrue(mock_fuc2h.called)
        self.assertTrue(mock_isdir.called)
    def test_13__check_executable(self, mock_uenv, mock_fufindexe, mock_msg):
        """Test13 ExecutionEngineCommon()._check_executable()."""
        Config.conf['cmd'] = "/bin/ls"
        mock_msg.level = 0
        mock_fufindexe.return_value = ""
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["env"] = mock_uenv
        ex_eng.opt["env"].getenv.return_value = ""
        ex_eng.opt["entryp"] = "/bin/ls -a -l"
        ex_eng.container_root = "/containers/123/ROOT"
        status = ex_eng._check_executable()
        self.assertEqual(status, "")
        self.assertTrue(mock_fufindexe.called)

        Config.conf['cmd'] = "/bin/ls"
        mock_fufindexe.return_value = "/bin/ls"
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["env"] = mock_uenv
        ex_eng.opt["env"].getenv.return_value = ""
        ex_eng.opt["entryp"] = "/bin/ls -a -l"
        ex_eng.container_root = "/containers/123/ROOT"
        status = ex_eng._check_executable()
        self.assertEqual(status, "/containers/123/ROOT//bin/ls")

        Config.conf['cmd'] = "/bin/ls"
        mock_fufindexe.return_value = "/bin/ls"
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["env"] = mock_uenv
        ex_eng.opt["env"].getenv.return_value = ""
        ex_eng.opt["entryp"] = ["/bin/ls", "-a", "-l"]
        ex_eng.container_root = "/containers/123/ROOT"
        status = ex_eng._check_executable()
        self.assertEqual(status, "/containers/123/ROOT//bin/ls")
    def test_14__run_load_metadata(self, mock_attr, mock_meta):
        """Test14 ExecutionEngineCommon()._run_load_metadata()."""
        Config().conf['location'] = "/tmp/container"
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._run_load_metadata("123")
        self.assertEqual(status, ("", []))

        Config().conf['location'] = ""
        mock_attr.return_value = (None, None)
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._run_load_metadata("123")
        self.assertEqual(status, (None, None))
        self.assertTrue(mock_attr.called)

        Config().conf['location'] = ""
        mock_attr.return_value = ("/x", [])
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["nometa"] = True
        status = ex_eng._run_load_metadata("123")
        self.assertEqual(status, ("/x", []))

        Config().conf['location'] = ""
        mock_attr.return_value = ("/x", [])
        mock_meta.side_effects = ["user1", "cont/ROOT", "host1", "mydomain",
                                  "ls", "/bin/sh", "vol1", "8443", None]
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["nometa"] = False
        ex_eng.opt["portsexp"] = list()
        status = ex_eng._run_load_metadata("123")
        self.assertEqual(status, ("/x", []))
        self.assertTrue(mock_meta.call_count, 9)
    def test_21__create_user(self, mock_nix, mock_umask, mock_mktmp,
                             mock_cpto, mock_getgrp, mock_fillu):
        """Test21 ExecutionEngineCommon()._create_user()."""
        cont_auth = mock_nix
        host_auth = mock_nix
        cont_auth.passwd_file.return_value = "/c/etc/passwd"
        cont_auth.group_file.return_value = "/c/etc/grpup"
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["containerauth"] = True
        status = ex_eng._create_user(cont_auth, host_auth)
        self.assertTrue(status)
        self.assertFalse(ex_eng.opt["hostauth"])

        cont_auth = mock_nix
        host_auth = mock_nix
        res = ("/tmp/passwd:/etc/passwd","/tmp/group:/etc/group")
        cont_auth.passwd_file.return_value = "/c/etc/passwd"
        cont_auth.group_file.return_value = "/c/etc/group"
        mock_umask.side_effect = [None, None]
        mock_mktmp.side_effect = ["/tmp/passwd", "/tmp/group"]
        mock_cpto.side_effect = [None, None]
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["containerauth"] = False
        ex_eng.opt["hostauth"] = True
        status = ex_eng._create_user(cont_auth, host_auth)
        self.assertTrue(status)
        self.assertTrue(ex_eng.opt["hostauth"])
        self.assertEqual(ex_eng.hostauth_list, res)

        cont_auth = mock_nix
        host_auth = mock_nix
        res = ("/tmp/passwd:/etc/passwd","/tmp/group:/etc/group")
        cont_auth.passwd_file.return_value = "/c/etc/passwd"
        cont_auth.group_file.return_value = "/c/etc/group"
        mock_umask.side_effect = [None, None]
        mock_mktmp.side_effect = ["/tmp/passwd", "/tmp/group"]
        mock_cpto.side_effect = [None, None]
        mock_fillu.return_value = None
        mock_nix.add_user.return_value = None
        host_auth.get_group.return_value = ("", "x1", "x2")
        mock_nix.add_group.return_value = None
        mock_getgrp.return_value = [1000]
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["containerauth"] = False
        ex_eng.opt["hostauth"] = False
        status = ex_eng._create_user(cont_auth, host_auth)
        self.assertTrue(status)
        self.assertTrue(ex_eng.opt["hostauth"])
        self.assertEqual(ex_eng.hostauth_list, res)
    def test_19__set_cont_user_noroot(self, mock_selauth, mock_ustr,
                                      mock_ismpoint, mock_cruser, mock_auth,
                                      mock_hinfo, mock_msg):
        """Test19 ExecutionEngineCommon()._setup_container_user_noroot()."""
        user = "******"
        mock_msg.level = 0
        mock_selauth.return_value = ("/etc/passwd", "/etc/group")
        mock_ustr.return_value = (False, {"uid": "100", "gid": "50"})
        mock_auth.side_effect = [None, None]
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._setup_container_user_noroot(user)
        self.assertFalse(status)

        user = ""
        mock_selauth.return_value = ("/etc/passwd", "/etc/group")
        mock_ustr.return_value = (True, {"uid": "1000", "gid": "1000"})
        mock_auth.side_effect = [None, None]
        mock_hinfo.return_value.username.return_value = "u1"
        mock_hinfo.uid = 0
        mock_hinfo.gid = 0
        mock_ismpoint.side_effect = [True, True]
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._setup_container_user_noroot(user)
        self.assertTrue(status)

        user = ""
        mock_selauth.return_value = ("/etc/passwd", "/etc/group")
        mock_ustr.return_value = (True, {"uid": "1000", "gid": "1000"})
        mock_auth.side_effect = [None, None]
        mock_hinfo.return_value.username.return_value = "u1"
        mock_hinfo.uid = 0
        mock_hinfo.gid = 0
        mock_ismpoint.side_effect = [False, False]
        mock_cruser.return_value = None
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["user"] = ""
        ex_eng.opt["hostauth"] = True
        status = ex_eng._setup_container_user_noroot(user)
        self.assertFalse(status)
        self.assertFalse(mock_cruser.called)

        user = ""
        mock_selauth.return_value = ("/etc/passwd", "/etc/group")
        mock_ustr.return_value = (True, {"uid": "1000", "gid": "1000"})
        mock_auth.side_effect = [None, None]
        mock_hinfo.return_value.username.return_value = "u1"
        mock_hinfo.uid = 0
        mock_hinfo.gid = 0
        mock_ismpoint.side_effect = [False, False]
        mock_cruser.return_value = None
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.opt["user"] = ""
        ex_eng.opt["hostauth"] = False
        ex_eng.opt["containerauth"] = False
        status = ex_eng._setup_container_user_noroot(user)
        self.assertTrue(status)
        self.assertTrue(mock_cruser.called)
    def test_06__create_mountpoint(self, mock_isdir, mock_mpoint):
        """Test06 ExecutionEngineCommon()._create_mountpoint()."""
        hpath = "/bin"
        cpath = "/ROOT/bin"
        mock_isdir.return_value = False
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        status = ex_eng._create_mountpoint(hpath, cpath, True)
        self.assertTrue(status)
        self.assertTrue(mock_isdir.called)

        hpath = "/bin"
        cpath = "/ROOT/bin"
        mock_isdir.return_value = True
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.mountp = mock_mpoint
        ex_eng.mountp.create.return_value = True
        ex_eng.mountp.save.return_value = None
        status = ex_eng._create_mountpoint(hpath, cpath, True)
        self.assertTrue(status)
        self.assertTrue(ex_eng.mountp.save.called)

        hpath = "/bin"
        cpath = "/ROOT/bin"
        mock_isdir.return_value = True
        ex_eng = ExecutionEngineCommon(self.local, self.xmode)
        ex_eng.mountp = mock_mpoint
        ex_eng.mountp.create.return_value = False
        ex_eng.mountp.save.return_value = None
        status = ex_eng._create_mountpoint(hpath, cpath, True)
        self.assertFalse(status)