def test_from_string_conversion_failure(self):
        config["jobtype_ignore_id_mapping_errors"] = True
        system = System()
        username = os.urandom(8).encode("hex")

        with patch.object(logger, "error") as error:
            value = system._get_uid_gid_value(
                username, None, "foo_bar", "getpwnam", "pwd"
            )

        error.assert_called_with(
            "Failed to convert %s to a %s", username, "bar")
        self.assertIsNone(value)

        config["jobtype_ignore_id_mapping_errors"] = False
        username = os.urandom(8).encode("hex")

        with patch.object(logger, "error") as error:
            with self.assertRaises(KeyError):
                value = system._get_uid_gid_value(
                    username, None, "foo_bar", "getpwnam", "pwd"
                )

        error.assert_called_with(
            "Failed to convert %s to a %s", username, "bar")
        self.assertIsNone(value)
    def test_module_not_implemented(self):
        system = System()

        with patch.object(logger, "warning") as warning:
            system._get_uid_gid_value(
                "", None, "function", NotImplemented, "module")

        warning.assert_called_with(
            "This platform does not implement the %r module, skipping %s()",
            "module", "function"
        )
 def test_get_pwd_from_string(self):
     system = System()
     username = user.username()
     self.assertEqual(
         pwd.getpwnam(username).pw_uid,
         system._get_uid_gid_value(
             username, None, None, "getpwnam", "pwd"
         )
     )
    def test_from_integer_pwd_no_such_value(self):
        config["jobtype_ignore_id_mapping_errors"] = False
        system = System()
        all_ids = set(user.pw_uid for user in pwd.getpwall())

        bad_id = 0
        while True:
            if bad_id not in all_ids:
                break
            bad_id += 1

        with self.assertRaises(KeyError):
            system._get_uid_gid_value(
                bad_id, None, None, "getpwuid", "pwd"
            )

        config["jobtype_ignore_id_mapping_errors"] = True
        value = system._get_uid_gid_value(
            bad_id, None, None, "getpwuid", "pwd"
        )
        self.assertIsNone(value)
    def test_from_integer_grp_no_such_value(self):
        config["jobtype_ignore_id_mapping_errors"] = False
        system = System()
        all_ids = set(group.gr_gid for group in grp.getgrall())

        bad_id = 0
        while True:
            if bad_id not in all_ids:
                break
            bad_id += 1

        with self.assertRaises(KeyError):
            system._get_uid_gid_value(
                bad_id, None, None, "getgrgid", "grp"
            )

        config["jobtype_ignore_id_mapping_errors"] = True
        value = system._get_uid_gid_value(
            bad_id, None, None, "getgrgid", "grp"
        )
        self.assertIsNone(value)
    def test_get_grp_from_integer(self):
        system = System()
        success = True
        for group_id in os.getgroups():
            try:
                self.assertEqual(
                    group_id,
                    system._get_uid_gid_value(
                        group_id, None, None, "getgrnam", "grp"
                    )
                )
                success = True

            # There's numerous ways this could happen including
            # the user being a part of the group however the group
            # itself is undefined.
            except KeyError:
                pass

        self.failUnless(success, "Expected at least one successful resolution")
 def test_from_integer_no_such_module(self):
     system = System()
     with self.assertRaises(ValueError):
         system._get_uid_gid_value(
             0, None, None, "getpwnam", "foo"
         )
 def test_value_type(self):
     system = System()
     for entry in (None, [], tuple(), dict(), 1.0):
         with self.assertRaises(TypeError):
             system._get_uid_gid_value(entry, None, None, None, None)