Repository: ambari Updated Branches: refs/heads/trunk b45d4706d -> 3b8816564
AMBARI-9512. Kerberos: Keytab content is available through requests endpoint.(vbrodetskyi) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/3b881656 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/3b881656 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/3b881656 Branch: refs/heads/trunk Commit: 3b88165640b33cbf6221fa905f8b659223ca1f90 Parents: b45d470 Author: Vitaly Brodetskyi <vbrodets...@hortonworks.com> Authored: Fri Feb 6 16:32:28 2015 +0200 Committer: Vitaly Brodetskyi <vbrodets...@hortonworks.com> Committed: Fri Feb 6 16:32:28 2015 +0200 ---------------------------------------------------------------------- .../package/scripts/kerberos_common.py | 8 ++++++- .../stacks/2.2/KERBEROS/test_kerberos_client.py | 10 ++++---- .../src/test/python/stacks/utils/RMFTestCase.py | 24 ++++++++++++++++++-- 3 files changed, 34 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/3b881656/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_common.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_common.py b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_common.py index b000c04..6af6d05 100644 --- a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_common.py +++ b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_common.py @@ -382,8 +382,14 @@ class KerberosScript(Script): elif group_access == 'r': mode |= stat.S_IRGRP + keytab_content = base64.b64decode(keytab_content_base64) + + # to hide content in command output + def make_lambda(data): + return lambda: data + File(keytab_file_path, - content=base64.b64decode(keytab_content_base64), + content=make_lambda(keytab_content), mode=mode, owner=owner, group=group) http://git-wip-us.apache.org/repos/asf/ambari/blob/3b881656/ambari-server/src/test/python/stacks/2.2/KERBEROS/test_kerberos_client.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/2.2/KERBEROS/test_kerberos_client.py b/ambari-server/src/test/python/stacks/2.2/KERBEROS/test_kerberos_client.py index 3bda3f9..b87b7ca 100644 --- a/ambari-server/src/test/python/stacks/2.2/KERBEROS/test_kerberos_client.py +++ b/ambari-server/src/test/python/stacks/2.2/KERBEROS/test_kerberos_client.py @@ -24,6 +24,7 @@ import sys import use_cases from stacks.utils.RMFTestCase import * + class TestKerberosClient(RMFTestCase): COMMON_SERVICES_PACKAGE_DIR = "KERBEROS/1.10.3-10/package" STACK_VERSION = "2.2" @@ -65,7 +66,6 @@ class TestKerberosClient(RMFTestCase): target = RMFTestCase.TARGET_COMMON_SERVICES ) - self.assertResourceCalled('Directory', use_cases.get_krb5_conf_dir(json_data), owner='root', group='root', @@ -262,7 +262,7 @@ class TestKerberosClient(RMFTestCase): owner='root', group='hadoop', mode=0440, - content=base64.b64decode("BQIAAABbAAIAC0VYQU1QTEUuQ09NAARIVFRQABdjNjU" + content=CallFunctionMock(call_result=base64.b64decode("BQIAAABbAAIAC0VYQU1QTEUuQ09NAARIVFRQABdjNjU" "wMS5hbWJhcmkuYXBhY2hlLm9yZwAAAAFUodgKAQASAC" "A5N4gKUJsizCzwRD11Q/6sdZhJjlJmuuMeMKw/WefIb" "gAAAFMAAgALRVhBTVBMRS5DT00ABEhUVFAAF2M2NTAx" @@ -274,7 +274,7 @@ class TestKerberosClient(RMFTestCase): "jNjUwMS5hbWJhcmkuYXBhY2hlLm9yZwAAAAFUodgKAQ" "ADAAiov1LleuaMgwAAAEsAAgALRVhBTVBMRS5DT00AB" "EhUVFAAF2M2NTAxLmFtYmFyaS5hcGFjaGUub3JnAAAA" - "AVSh2AoBABEAECBTe9uCaSiPxnoGRldhAks=") + "AVSh2AoBABEAECBTe9uCaSiPxnoGRldhAks=")) ) self.assertResourceCalled('Directory', "/etc/security/keytabs", @@ -287,7 +287,7 @@ class TestKerberosClient(RMFTestCase): owner='ambari-qa', group='hadoop', mode=0400, - content=base64.b64decode("BQIAAABHAAEAC0VYQU1QTEUuQ09NAAlhbWJhcmktcWEAAAA" + content=CallFunctionMock(call_result=base64.b64decode("BQIAAABHAAEAC0VYQU1QTEUuQ09NAAlhbWJhcmktcWEAAAA" "BVKHYCgEAEgAg3OBDOecGoznTHZiPwmlmK4TI6bdRdrl/6q" "TV8Kml2TAAAAA/AAEAC0VYQU1QTEUuQ09NAAlhbWJhcmktc" "WEAAAABVKHYCgEAEAAYzqEjkX/xDoO8ij0cJmc3ZG7Qfzgl" @@ -295,5 +295,5 @@ class TestKerberosClient(RMFTestCase): "AAVSh2AoBABcAEHzLG1kfqxhEoTe4erUldvQAAAAvAAEAC0" "VYQU1QTEUuQ09NAAlhbWJhcmktcWEAAAABVKHYCgEAAwAIO" "PK6UkwyUSMAAAA3AAEAC0VYQU1QTEUuQ09NAAlhbWJhcmkt" - "cWEAAAABVKHYCgEAEQAQVqISRJwXIQnG28lI34mfeA==") + "cWEAAAABVKHYCgEAEQAQVqISRJwXIQnG28lI34mfeA==")) ) http://git-wip-us.apache.org/repos/asf/ambari/blob/3b881656/ambari-server/src/test/python/stacks/utils/RMFTestCase.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/utils/RMFTestCase.py b/ambari-server/src/test/python/stacks/utils/RMFTestCase.py index 85e229a..5f47a28 100644 --- a/ambari-server/src/test/python/stacks/utils/RMFTestCase.py +++ b/ambari-server/src/test/python/stacks/utils/RMFTestCase.py @@ -17,7 +17,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ''' -__all__ = ["RMFTestCase", "Template", "StaticFile", "InlineTemplate", "UnknownConfigurationMock", "FunctionMock"] +__all__ = ["RMFTestCase", "Template", "StaticFile", "InlineTemplate", "UnknownConfigurationMock", "FunctionMock", + "CallFunctionMock"] from unittest import TestCase import json @@ -213,7 +214,7 @@ class RMFTestCase(TestCase): with patch.object(UnknownConfiguration, '__getattr__', return_value=lambda: "UnknownConfiguration()"): self.assertNotEqual(len(RMFTestCase.env.resource_list), 0, "There was no more resources executed!") resource = RMFTestCase.env.resource_list.pop(0) - + self.assertEquals(resource_type, resource.__class__.__name__) self.assertEquals(name, resource.name) self.assertEquals(kwargs, resource.arguments) @@ -264,5 +265,24 @@ class FunctionMock(): def __eq__(self, other): return hasattr(other, '__call__') and hasattr(other, '__name__') and self.name == other.__name__ + +class CallFunctionMock(): + """ + Used to mock callable with specified arguments and expected results. + Callable will be called with arguments and result will be compared. + """ + def __init__(self, call_result=None, *args, **kwargs): + self.call_result = call_result + self.args = args + self.kwargs = kwargs + + def __ne__(self, other): + return not self.__eq__(other) + + def __eq__(self, other): + if hasattr(other, '__call__'): + result = other(*self.args, **self.kwargs) + return self.call_result == result + return False