You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ad...@apache.org on 2017/06/27 07:03:16 UTC
ambari git commit: AMBARI-21268. Remove Upgrade Catalogs For Every
Version Before 2.5 - fix build error: remove leftover Python test
Repository: ambari
Updated Branches:
refs/heads/trunk 6eaabc120 -> 4522cf5a6
AMBARI-21268. Remove Upgrade Catalogs For Every Version Before 2.5 - fix build error: remove leftover Python test
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4522cf5a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4522cf5a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4522cf5a
Branch: refs/heads/trunk
Commit: 4522cf5a6a9389dbb7867938ce72cd2d734dc20d
Parents: 6eaabc1
Author: Attila Doroszlai <ad...@hortonworks.com>
Authored: Tue Jun 27 09:03:02 2017 +0200
Committer: Attila Doroszlai <ad...@hortonworks.com>
Committed: Tue Jun 27 09:03:02 2017 +0200
----------------------------------------------------------------------
.../src/test/python/TestUpgradeHelper.py | 1028 ------------------
1 file changed, 1028 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/4522cf5a/ambari-server/src/test/python/TestUpgradeHelper.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestUpgradeHelper.py b/ambari-server/src/test/python/TestUpgradeHelper.py
deleted file mode 100644
index 6da4507..0000000
--- a/ambari-server/src/test/python/TestUpgradeHelper.py
+++ /dev/null
@@ -1,1028 +0,0 @@
-"""
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-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.
-"""
-
-
-from mock.mock import MagicMock, call
-from mock.mock import patch
-
-from unittest import TestCase
-import sys
-import os
-import unittest
-import upgradeHelper
-import json
-import copy
-from StringIO import StringIO
-
-
-class UpgradeCatalogFactoryMock(upgradeHelper.UpgradeCatalogFactory):
- def __init__(self, data):
- self._load(data)
-
- def _load(self, data):
- fn = StringIO(data)
- with patch("__builtin__.open") as open_mock:
- open_mock.return_value = fn
- super(UpgradeCatalogFactoryMock, self)._load("")
-
-
-class TestUpgradeHelper(TestCase):
- original_curl = None
- out = None
- catalog_from = "1.3"
- catalog_to = "2.2"
- catalog_cfg_type = "my type"
- required_service = "TEST"
- curl_response = "{}"
- test_catalog = """{
- "version": "1.0",
- "stacks": [
- {
- "name": "HDP",
- "old-version": "%s",
- "target-version": "%s",
- "options": {
- "config-types": {
- "%s": {
- "merged-copy": "yes"
- }
- }
- },
- "properties": {
- "%s": {
- "my property": {
- "value": "my value",
- "required-services": [\"%s\"]
- }
- }
- },
- "property-mapping": {
- "my replace property": "my property 2"
- }
- }
- ]
- }
- """
-
- def setUp(self):
- # replace original curl call to mock
- self.test_catalog = self.test_catalog % (self.catalog_from, self.catalog_to,
- self.catalog_cfg_type, self.catalog_cfg_type,
- self.required_service)
-
- self.original_curl = upgradeHelper.curl
- upgradeHelper.curl = self.magic_curl
-
- # mock logging methods
- upgradeHelper.logging.getLogger = MagicMock()
- upgradeHelper.logging.FileHandler = MagicMock()
-
- self.out = StringIO()
- sys.stdout = self.out
-
- def magic_curl(self, *args, **kwargs):
- resp = self.curl_response
- self.curl_response = "{}"
- if "parse" in kwargs and isinstance(resp, str) and kwargs["parse"] == True:
- resp = json.loads(resp)
- return resp
-
- def tearDown(self):
- sys.stdout = sys.__stdout__
-
- @patch("optparse.OptionParser")
- @patch("upgradeHelper.modify_configs")
- @patch("__builtin__.open")
- def test_ParseOptions(self, open_mock, modify_action_mock, option_parser_mock):
- class options(object):
- user = "test_user"
- hostname = "127.0.0.1"
- clustername = "test1"
- password = "test_password"
- upgrade_json = "catalog_file"
- from_stack = "0.0"
- to_stack = "1.3"
- logfile = "test.log"
- report = "report.txt"
- https = False
- port = "8080"
- warnings = []
- printonly = False
-
- args = ["update-configs"]
- modify_action_mock.return_value = MagicMock()
- test_mock = MagicMock()
- test_mock.parse_args = lambda: (options, args)
- option_parser_mock.return_value = test_mock
-
- upgradeHelper.main()
-
- self.assertEqual("8080", upgradeHelper.Options.API_PORT)
- self.assertEqual("http", upgradeHelper.Options.API_PROTOCOL)
- self.assertEqual(1, modify_action_mock.call_count)
- self.assertEqual({"user": options.user, "pass": options.password}, upgradeHelper.Options.API_TOKENS)
- self.assertEqual(options.clustername, upgradeHelper.Options.CLUSTER_NAME)
-
- def test_is_services_exists(self):
- old_services = upgradeHelper.Options.SERVICES
-
- upgradeHelper.Options.SERVICES = set(['TEST1', 'TEST2'])
- actual_result = upgradeHelper.is_services_exists(['TEST1'])
-
- # check for situation with two empty sets
- upgradeHelper.Options.SERVICES = set()
- actual_result_1 = upgradeHelper.is_services_exists([])
-
- upgradeHelper.Options.SERVICES = old_services
-
- self.assertEqual(True, actual_result)
- self.assertEqual(True, actual_result_1)
-
-
- @patch("__builtin__.open")
- @patch.object(os.path, "isfile")
- @patch("os.remove")
- def test_write_mapping(self, remove_mock, isfile_mock, open_mock):
- test_data = {
- "test_field": "test_value"
- }
- test_result = json.dumps(test_data)
- output = StringIO()
- isfile_mock.return_value = True
- open_mock.return_value = output
-
- # execute testing function
- upgradeHelper.write_mapping(test_data)
-
- self.assertEquals(1, isfile_mock.call_count)
- self.assertEquals(1, remove_mock.call_count)
- self.assertEquals(1, open_mock.call_count)
-
- # check for content
- self.assertEquals(test_result, output.getvalue())
-
- @patch("__builtin__.open")
- @patch.object(os.path, "isfile")
- def test_read_mapping(self, isfile_mock, open_mock):
- test_data = {
- "test_field": "test_value"
- }
- test_result = json.dumps(test_data)
- isfile_mock.return_value = True
- output = StringIO(test_result)
- open_mock.return_value = output
-
- # execute testing function
- actual_mapping = upgradeHelper.read_mapping()
-
- self.assertEquals(1, isfile_mock.call_count)
- self.assertEquals(1, open_mock.call_count)
-
- self.assertEquals(test_data, actual_mapping)
-
- @patch.object(upgradeHelper, "curl")
- @patch.object(upgradeHelper, "write_mapping")
- def test_get_mr1_mapping(self, write_mapping_mock, curl_mock):
- return_data = [
- {
- "host_components": [ # MAPREDUCE_CLIENT
- {
- "HostRoles": {
- "host_name": "test.host.vm"
- }
- }
- ]
- },
- {
- "host_components": [ # JOBTRACKER
- {
- "HostRoles": {
- "host_name": "test1.host.vm"
- }
- }
- ]
- },
- {
- "host_components": [ # TASKTRACKER
- {
- "HostRoles": {
- "host_name": "test2.host.vm"
- }
- }
- ]
- },
- {
- "host_components": [ # HISTORYSERVER
- {
- "HostRoles": {
- "host_name": "test3.host.vm"
- }
- }
- ]
- }
- ]
- expect_data = {
- "MAPREDUCE_CLIENT": ["test.host.vm"],
- "JOBTRACKER": ["test1.host.vm"],
- "TASKTRACKER": ["test2.host.vm"],
- "HISTORYSERVER": ["test3.host.vm"]
- }
-
- tricky_mock = MagicMock(side_effect=return_data)
- curl_mock.side_effect = tricky_mock
-
- # execute testing function
- upgradeHelper.get_mr1_mapping()
-
- self.assertEquals(write_mapping_mock.call_count, 1)
- self.assertEquals(expect_data, write_mapping_mock.call_args[0][0])
-
- @patch.object(upgradeHelper, "get_choice_string_input")
- def test_get_YN_input(self, get_choice_string_input_mock):
- yes = set(['yes', 'ye', 'y'])
- no = set(['no', 'n'])
-
- prompt = "test prompt"
- default = "default value"
-
- # execute testing function
- upgradeHelper.get_YN_input(prompt, default)
-
- expect_args = (prompt, default, yes, no)
- self.assertEquals(expect_args, get_choice_string_input_mock.call_args[0])
-
- @patch("__builtin__.raw_input")
- def test_get_choice_string_input(self, raw_input_mock):
- yes = set(['yes', 'ye', 'y'])
- no = set(['no', 'n'])
- input_answers = ["yes", "no", ""]
- tricky_mock = MagicMock(side_effect=input_answers)
- raw_input_mock.side_effect = tricky_mock
- default = "default value"
-
- expect_result = [True, False, default]
- actual_result = []
- for i in range(0, len(input_answers)):
- actual_result.append(upgradeHelper.get_choice_string_input("test prompt", default, yes, no))
-
- self.assertEquals(expect_result, actual_result)
-
- @patch.object(upgradeHelper, "get_YN_input")
- @patch.object(upgradeHelper, "read_mapping")
- @patch.object(upgradeHelper, "curl")
- def test_delete_mr(self, curl_mock, read_mapping_mock, get_YN_mock):
- COMPONENT_URL_FORMAT = upgradeHelper.Options.CLUSTER_URL + '/hosts/%s/host_components/%s'
- SERVICE_URL_FORMAT = upgradeHelper.Options.CLUSTER_URL + '/services/MAPREDUCE'
- NON_CLIENTS = ["JOBTRACKER", "TASKTRACKER", "HISTORYSERVER"]
- PUT_IN_DISABLED = {
- "HostRoles": {
- "state": "DISABLED"
- }
- }
- mr_mapping = {
- "MAPREDUCE_CLIENT": ["test.host.vm"],
- "JOBTRACKER": ["test1.host.vm"],
- "TASKTRACKER": ["test2.host.vm"],
- "HISTORYSERVER": ["test3.host.vm"]
- }
- expected_curl_exec_args = []
- for key, hosts in mr_mapping.items():
- if key in NON_CLIENTS:
- for host in hosts:
- expected_curl_exec_args.append(
- [
- (COMPONENT_URL_FORMAT % (host, key),),
- {
- "request_type": "PUT",
- "data": PUT_IN_DISABLED,
- "validate": True
- }
- ]
- )
-
- expected_curl_exec_args.append(
- [
- (SERVICE_URL_FORMAT,),
- {
- "request_type": "DELETE",
- "validate": True
- }
- ]
- )
-
- get_YN_mock.return_value = True
- read_mapping_mock.return_value = mr_mapping
-
- # execute testing function
- upgradeHelper.delete_mr()
-
- self.assertEqual(expected_curl_exec_args, curl_mock.call_args_list)
-
- pass
-
- @patch.object(upgradeHelper, "curl")
- def test_get_cluster_stackname(self, curl_mock):
- expected_result = "test version"
- actual_result = ""
- curl_mock.return_value = {
- "Clusters": {
- "version": expected_result
- }
- }
-
- # execute testing function
- actual_result = upgradeHelper.get_cluster_stackname()
-
- self.assertEqual(expected_result, actual_result)
-
- @patch.object(upgradeHelper, "curl")
- def test_has_component_in_stack_def(self, curl_mock):
- curl_mock.side_effect = MagicMock(side_effect=["", upgradeHelper.FatalException(1, "some reason")])
-
- # execute testing function
- result_ok = upgradeHelper.has_component_in_stack_def("-", "", "")
- result_fail = upgradeHelper.has_component_in_stack_def("-", "", "")
-
- self.assertEqual(True, result_ok)
- self.assertEqual(False, result_fail)
-
- @patch.object(upgradeHelper, "get_cluster_stackname")
- @patch.object(upgradeHelper, "has_component_in_stack_def")
- @patch.object(upgradeHelper, "read_mapping")
- @patch.object(upgradeHelper, "curl")
- def test_add_services(self, curl_mock, read_mapping_mock, has_component_mock, get_stack_name_mock):
- host_mapping = {
- "MAPREDUCE_CLIENT": ["test.host.vm"],
- "JOBTRACKER": ["test1.host.vm"],
- "TASKTRACKER": ["test2.host.vm"],
- "HISTORYSERVER": ["test3.host.vm"]
- }
- SERVICE_URL_FORMAT = upgradeHelper.Options.CLUSTER_URL + '/services/{0}'
- COMPONENT_URL_FORMAT = SERVICE_URL_FORMAT + '/components/{1}'
- HOST_COMPONENT_URL_FORMAT = upgradeHelper.Options.CLUSTER_URL + '/hosts/{0}/host_components/{1}'
- service_comp = {
- "YARN": ["NODEMANAGER", "RESOURCEMANAGER", "YARN_CLIENT"],
- "MAPREDUCE2": ["HISTORYSERVER", "MAPREDUCE2_CLIENT"]}
- new_old_host_map = {
- "NODEMANAGER": "TASKTRACKER",
- "HISTORYSERVER": "HISTORYSERVER",
- "RESOURCEMANAGER": "JOBTRACKER",
- "YARN_CLIENT": "MAPREDUCE_CLIENT",
- "MAPREDUCE2_CLIENT": "MAPREDUCE_CLIENT"}
- get_stack_name_mock.return_value = ""
- has_component_mock.return_value = False
- read_mapping_mock.return_value = host_mapping
- expected_curl_args = []
-
- for service in service_comp.keys():
- expected_curl_args.append([
- (SERVICE_URL_FORMAT.format(service),),
- {
- "validate": True,
- "request_type": "POST"
- }
- ])
- for component in service_comp[service]:
- expected_curl_args.append([
- (COMPONENT_URL_FORMAT.format(service, component),),
- {
- "validate": True,
- "request_type": "POST"
- }
- ])
- for host in host_mapping[new_old_host_map[component]]:
- expected_curl_args.append([
- (HOST_COMPONENT_URL_FORMAT.format(host, component),),
- {
- "validate": True,
- "request_type": "POST"
- }
- ])
-
- # execute testing function
- upgradeHelper.add_services()
-
- self.assertEqual(expected_curl_args, curl_mock.call_args_list)
-
- @patch.object(upgradeHelper, "get_config_resp_all")
- def test_coerce_tag(self, get_config_resp_all_mock):
- test_catalog = """
- {
- "version": "1.0",
- "stacks": [
- {
- "name": "HDP",
- "old-version": "1.0",
- "target-version": "1.1",
- "options": {
- "config-types":{
- "test": {
- "merged-copy": "yes"
- }
- }
- },
- "properties": {
- "test": {
- "test": "host1.com"
- }
- },
- "property-mapping": {
- "test":{
- "map-to": "test-arr",
- "coerce-to": "yaml-array"
- }
- }
- }
- ]
- }
- """
- old_opt = upgradeHelper.Options.OPTIONS
- options = lambda: ""
- options.from_stack = "1.0"
- options.to_stack = "1.1"
- options.upgrade_json = ""
-
- upgradeHelper.Options.OPTIONS = options
- upgradeHelper.Options.SERVICES = [self.required_service]
- get_config_resp_all_mock.return_value = {
- "test": {
- "properties": {}
- }
- }
-
- ucf = UpgradeCatalogFactoryMock(test_catalog)
- scf = upgradeHelper.ServerConfigFactory()
-
- cfg = scf.get_config("test")
- ucfg = ucf.get_catalog("1.0", "1.1")
-
- cfg.merge(ucfg)
- scf.process_mapping_transformations(ucfg)
-
- upgradeHelper.Options.OPTIONS = old_opt
-
- self.assertEqual(True, "test-arr" in cfg.properties)
- self.assertEqual("['host1.com']", cfg.properties["test-arr"])
-
- @patch.object(upgradeHelper, "get_config_resp_all")
- def test_override_tag(self, get_config_resp_all_mock):
- test_catalog = """
- {
- "version": "1.0",
- "stacks": [
- {
- "name": "HDP",
- "old-version": "1.0",
- "target-version": "1.1",
- "options": {
- "config-types":{
- "test": {
- "merged-copy": "yes"
- }
- }
- },
- "properties": {
- "test": {
- "test_property": {
- "value": "host1.com",
- "override": "no"
- }
-
- }
- },
- "property-mapping": {}
- }
- ]
- }
- """
- old_opt = upgradeHelper.Options.OPTIONS
- options = lambda: ""
- options.from_stack = "1.0"
- options.to_stack = "1.1"
- options.upgrade_json = ""
-
- upgradeHelper.Options.OPTIONS = options
- upgradeHelper.Options.SERVICES = [self.required_service]
- get_config_resp_all_mock.return_value = {
- "test": {
- "properties": {
- "test_property": "test host"
- }
- }
- }
-
- ucf = UpgradeCatalogFactoryMock(test_catalog)
- scf = upgradeHelper.ServerConfigFactory()
-
- cfg = scf.get_config("test")
- ucfg = ucf.get_catalog("1.0", "1.1")
-
- cfg.merge(ucfg)
- scf.process_mapping_transformations(ucfg)
-
- upgradeHelper.Options.OPTIONS = old_opt
-
- self.assertEqual(True, "test_property" in cfg.properties)
- self.assertEqual("test host", cfg.properties["test_property"])
-
- @patch.object(upgradeHelper, "get_config_resp_all")
- def test_replace_tag(self, get_config_resp_all_mock):
- test_catalog = """
- {
- "version": "1.0",
- "stacks": [
- {
- "name": "HDP",
- "old-version": "1.0",
- "target-version": "1.1",
- "options": {
- "config-types":{
- "test": {
- "merged-copy": "yes"
- }
- }
- },
- "properties": {
- "test": {
- "test": "host1.com"
- }
- },
- "property-mapping": {
- "test":{
- "map-to": "test-arr",
- "replace-from": "com",
- "replace-to": "org"
- }
- }
- }
- ]
- }
- """
- old_opt = upgradeHelper.Options.OPTIONS
- options = lambda: ""
- options.from_stack = "1.0"
- options.to_stack = "1.1"
- options.upgrade_json = ""
-
- upgradeHelper.Options.OPTIONS = options
- upgradeHelper.Options.SERVICES = [self.required_service]
- get_config_resp_all_mock.return_value = {
- "test": {
- "properties": {}
- }
- }
-
- ucf = UpgradeCatalogFactoryMock(test_catalog)
- scf = upgradeHelper.ServerConfigFactory()
-
- cfg = scf.get_config("test")
- ucfg = ucf.get_catalog("1.0", "1.1")
-
- cfg.merge(ucfg)
- scf.process_mapping_transformations(ucfg)
-
- upgradeHelper.Options.OPTIONS = old_opt
-
- self.assertEqual(True, "test-arr" in cfg.properties)
- self.assertEqual("host1.org", cfg.properties["test-arr"])
-
- @patch.object(upgradeHelper, "curl")
- @patch("time.time")
- def test_update_config(self, time_mock, curl_mock):
- time_pass = 2
- config_type = "test config"
- properties = {
- "test property": "test value"
- }
- attributes = {
- "test attribute": "attribute value"
- }
- expected_tag = "version" + str(int(time_pass * 1000))
- properties_payload = {"Clusters": {"desired_config": {"type": config_type, "tag": expected_tag, "properties": properties}}}
- time_mock.return_value = time_pass
-
- expected_simple_result = (
- (upgradeHelper.Options.CLUSTER_URL,),
- {
- "request_type": "PUT",
- "data": copy.deepcopy(properties_payload),
- "validate": True,
- "soft_validation": True
- }
- )
-
- properties_payload["Clusters"]["desired_config"]["properties_attributes"] = attributes
- expected_complex_result = (
- (upgradeHelper.Options.CLUSTER_URL,),
- {
- "request_type": "PUT",
- "data": copy.deepcopy(properties_payload),
- "validate": True,
- "soft_validation": True
- }
- )
-
- # execute testing function
- upgradeHelper.update_config(properties, config_type)
- simple_result = tuple(curl_mock.call_args)
-
- upgradeHelper.update_config(properties, config_type, attributes)
- complex_result = tuple(curl_mock.call_args)
-
- self.assertEqual(expected_simple_result, simple_result)
- self.assertEqual(expected_complex_result, complex_result)
-
- @patch.object(upgradeHelper, "curl")
- def test_get_zookeeper_quorum(self, curl_mock):
- zoo_def_port = "2181"
- return_curl_data = {
- "host_components": [
- {
- "HostRoles": {
- "host_name": "test.host.vm"
- }
- },
- {
- "HostRoles": {
- "host_name": "test.host.vm"
- }
- }
- ]
- }
-
- curl_mock.return_value = copy.deepcopy(return_curl_data)
-
- # build zookeeper quorum string from return_curl_data and remove trailing comas
- expected_result = reduce(
- lambda x, y: x + "%s:%s," % (y["HostRoles"]["host_name"], zoo_def_port),
- return_curl_data["host_components"],
- '' # initializer
- ).rstrip(',')
-
- # execute testing function
- actual_result = upgradeHelper.get_zookeeper_quorum()
-
- self.assertEqual(expected_result, actual_result)
-
- @patch.object(upgradeHelper, "curl")
- def test_get_tez_history_url_base(self, curl_mock):
- return_curl_data = {
- 'href': 'http://127.0.0.1:8080/api/v1/views/TEZ',
- 'ViewInfo': {'view_name': 'TEZ'},
- 'versions': [
- {
- 'ViewVersionInfo': {
- 'view_name': 'TEZ',
- 'version': '0.7.0.2.3.0.0-1319'
- },
- 'href': 'http://127.0.0.1:8080/api/v1/views/TEZ/versions/0.7.0.2.3.0.0-1319'
- }
- ]
- }
-
- curl_mock.return_value = copy.deepcopy(return_curl_data)
-
- # build zookeeper quorum string from return_curl_data and remove trailing comas
- expected_result = "http://127.0.0.1:8080/#/main/views/TEZ/0.7.0.2.3.0.0-1319/TEZ_CLUSTER_INSTANCE"
-
- # execute testing function
- actual_result = upgradeHelper.get_tez_history_url_base()
-
- self.assertEqual(expected_result, actual_result)
-
- @patch.object(upgradeHelper, "curl")
- def test_get_ranger_xaaudit_hdfs_destination_directory(self, curl_mock):
- return_curl_data = {
- "host_components": [
- {
- "HostRoles": {
- "host_name": "test.host.vm"
- }
- }
- ]
- }
-
- curl_mock.return_value = copy.deepcopy(return_curl_data)
-
- # build zookeeper quorum string from return_curl_data and remove trailing comas
- expected_result = "hdfs://test.host.vm:8020/ranger/audit"
-
- # execute testing function
- actual_result = upgradeHelper.get_ranger_xaaudit_hdfs_destination_directory()
-
- self.assertEqual(expected_result, actual_result)
-
-
- @patch.object(upgradeHelper, "curl")
- def test_get_config_resp_all(self, curl_mock):
- cfg_type = "my type"
- cfg_tag = "my tag"
- cfg_properties = {
- "my property": "property value"
- }
- curl_resp = [
- {
- 'Clusters': {
- 'desired_configs': {
- cfg_type: {
- "tag": cfg_tag
- }
- }
- }
- },
- {
- "items": [
- {
- "type": cfg_type,
- "tag": cfg_tag,
- "properties": cfg_properties
- }
- ]
- }
- ]
-
- expected_result = {
- cfg_type: {
- "properties": cfg_properties,
- "tag": cfg_tag
- }
- }
- curl_mock.side_effect = MagicMock(side_effect=curl_resp)
-
- # execute testing function
- actual_result = upgradeHelper.get_config_resp_all()
-
- self.assertEquals(expected_result, actual_result)
- pass
-
- @patch.object(upgradeHelper, "get_config_resp_all")
- @patch("os.mkdir")
- @patch("os.path.exists")
- @patch("__builtin__.open")
- def test_backup_configs(self, open_mock, os_path_exists_mock, mkdir_mock, get_config_resp_all_mock):
- data = {
- self.catalog_cfg_type: {
- "properties": {
- "test-property": "value"
- },
- "tag": "version1"
- }
- }
- os_path_exists_mock.return_value = False
- get_config_resp_all_mock.return_value = data
- expected = json.dumps(data[self.catalog_cfg_type]["properties"], indent=4)
- stream = StringIO()
- m = MagicMock()
- m.__enter__.return_value = stream
- open_mock.return_value = m
-
- # execute testing function
- upgradeHelper.backup_configs(self.catalog_cfg_type)
-
- self.assertEqual(expected, stream.getvalue())
-
- @patch.object(upgradeHelper, "curl")
- def test_install_services(self, curl_mock):
- expected_args = (
- (
- ('http://127.0.0.1:8080/api/v1/clusters/test1/services/MAPREDUCE2',),
- {
- 'request_type': 'PUT',
- 'data': {
- 'RequestInfo': {
- 'context': 'Install MapReduce2'
- },
- 'Body': {
- 'ServiceInfo': {
- 'state': 'INSTALLED'
- }
- }
- },
- 'validate': True
- }
- ),
- (
- ('http://127.0.0.1:8080/api/v1/clusters/test1/services/YARN',),
- {
- 'request_type': 'PUT',
- 'data': {
- 'RequestInfo': {
- 'context': 'Install YARN'
- },
- 'Body': {
- 'ServiceInfo': {
- 'state': 'INSTALLED'
- }
- }
- },
- 'validate': True
- }
- )
- )
-
- # execute testing function
- upgradeHelper.install_services()
-
- self.assertEqual(2, curl_mock.call_count)
- for i in range(0, 1):
- self.assertEqual(expected_args[i], tuple(curl_mock.call_args_list[i]))
-
- def test_configuration_diff_analyze(self):
- in_data = {
- self.catalog_cfg_type: [
- {
- 'catalog_item': {
- 'value': 'my value'
- },
- 'property': 'my property',
- 'actual_value': 'my value',
- 'catalog_value': 'my value'
- }
- ]
- }
-
- expected_result = {
- 'my type': {
- 'fail': {
- 'count': 0,
- 'items': []
- },
- 'total': {
- 'count': 1,
- 'items': []
- },
- 'skipped': {
- 'count': 0,
- 'items': []
- },
- 'ok': {
- 'count': 1,
- 'items': [
- {
- 'catalog_item': {
- 'value': 'my value'
- },
- 'property': 'my property',
- 'actual_value': 'my value',
- 'catalog_value': 'my value'
- }
- ]
- }
- }
- }
-
- # execute testing function
- actual_result = upgradeHelper.configuration_diff_analyze(in_data)
-
- self.assertEqual(expected_result, actual_result)
-
- @patch.object(upgradeHelper, "UpgradeCatalogFactory", autospec=True)
- @patch.object(upgradeHelper, "get_config_resp_all")
- @patch.object(upgradeHelper, "configuration_item_diff")
- @patch.object(upgradeHelper, "configuration_diff_analyze")
- @patch("__builtin__.open")
- def test_verify_configuration(self, open_mock, configuration_diff_analyze_mock, configuration_item_diff_mock,
- get_config_resp_all_mock, upgradecatalogfactory_mock):
- old_opt = upgradeHelper.Options.OPTIONS
- options = lambda: ""
- options.from_stack = self.catalog_from
- options.to_stack = self.catalog_to
- options.upgrade_json = ""
-
- upgradeHelper.Options.OPTIONS = options
- upgradeHelper.Options.SERVICES = [self.required_service]
- upgradecatalogfactory_mock.return_value = UpgradeCatalogFactoryMock(self.test_catalog)
- get_config_resp_all_mock.return_value = {
- self.catalog_cfg_type: {
- "properties": {}
- }
- }
-
- # execute testing function
- upgradeHelper.verify_configuration()
-
- upgradeHelper.Options.OPTIONS = old_opt
-
- self.assertEqual(1, get_config_resp_all_mock.call_count)
- self.assertEqual(1, configuration_item_diff_mock.call_count)
- self.assertEqual(1, configuration_diff_analyze_mock.call_count)
- self.assertEqual(1, open_mock.call_count)
-
- def test_report_formatter(self):
- file = StringIO()
- cfg_item = self.catalog_cfg_type
- analyzed_list = {
- 'fail': {
- 'count': 1,
- 'items': [
- {
- 'catalog_item': {
- 'value': 'my value'
- },
- 'property': 'my property',
- 'actual_value': 'my value 1',
- 'catalog_value': 'my value'
- }
- ]
- },
- 'total': {
- 'count': 1,
- 'items': []
- },
- 'skipped': {
- 'count': 0,
- 'items': []
- },
- 'ok': {
- 'count': 0,
- 'items': []
- }
- }
-
- expected_output = "Configuration item my type: property \"my property\" is set to \"my value 1\", but should be set to \"my value\"\n"
-
- # execute testing function
- upgradeHelper.report_formatter(file, cfg_item, analyzed_list)
-
- self.assertEqual(expected_output, file.getvalue())
-
- @patch.object(upgradeHelper, "get_config_resp_all")
- def test_conditional_replace(self, get_config_resp_all_mock):
- test_catalog = """
- {
- "version": "1.0",
- "stacks": [
- {
- "name": "HDP",
- "old-version": "1.0",
- "target-version": "1.1",
- "options": {
- "config-types":{
- "test": {
- "merged-copy": "yes"
- }
- }
- },
- "properties": {
- "test": {
- "test": {
- "value": "10",
- "value-required": "-1"
- },
- "test2": {
- "value": "10",
- "value-required": "-2"
- }
- }
- },
- "property-mapping": {
- }
- }
- ]
- }
- """
-
- expected_properties = {"test":"10", "test2":"15"}
-
- old_opt = upgradeHelper.Options.OPTIONS
- options = lambda: ""
- options.from_stack = "1.0"
- options.to_stack = "1.1"
- options.upgrade_json = ""
-
- upgradeHelper.Options.OPTIONS = options
- upgradeHelper.Options.SERVICES = [self.required_service]
- get_config_resp_all_mock.return_value = {
- "test": {
- "properties": {"test":"-1", "test2":"15"}
- }
- }
-
- ucf = UpgradeCatalogFactoryMock(test_catalog)
- scf = upgradeHelper.ServerConfigFactory()
-
- cfg = scf.get_config("test")
- ucfg = ucf.get_catalog("1.0", "1.1")
-
- cfg.merge(ucfg)
- upgradeHelper.Options.OPTIONS = old_opt
-
- self.assertEqual(expected_properties, cfg.properties)
-
-if __name__ == "__main__":
- unittest.main()