def test_heartbeat_with_status_multiple(self, read_stack_version_method): actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) actionQueue.IDLE_SLEEP_TIME = 0.01 read_stack_version_method.return_value="1.3.0" heartbeat = Heartbeat(actionQueue) actionQueue.start() max_number_of_status_entries = 0 for i in range(1,5): statusCommand = { "serviceName" : 'HDFS', "commandType" : "STATUS_COMMAND", "clusterName" : "", "componentName" : "DATANODE", 'configurations':{'global' : {}} } actionQueue.put(statusCommand) time.sleep(0.1) result = heartbeat.build(101) number_of_status_entries = len(result['componentStatus']) # print "Heartbeat with status: " + str(result) + " XXX " + str(number_of_status_entries) if max_number_of_status_entries < number_of_status_entries: max_number_of_status_entries = number_of_status_entries actionQueue.stop() actionQueue.join() NUMBER_OF_COMPONENTS = 1 self.assertEquals(max_number_of_status_entries == NUMBER_OF_COMPONENTS, True)
def test_no_mapping(self, register_mock, result_mock, Popen_mock): result_mock.return_value = { 'reports': [{'status': 'IN_PROGRESS', 'stderr': 'Read from /tmp/errors-3.txt', 'stdout': 'Read from /tmp/output-3.txt', 'clusterName': u'cc', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'taskId': 3, 'exitCode': 777}], 'componentStatus': [{'status': 'HEALTHY', 'componentName': 'NAMENODE'}] } config = AmbariConfig.AmbariConfig() config.set('agent', 'prefix', 'tmp') config.set('agent', 'cache_dir', "/var/lib/ambari-agent/cache") config.set('agent', 'tolerate_download_failures', "true") dummy_controller = MagicMock() actionQueue = ActionQueue(config, dummy_controller) heartbeat = Heartbeat(actionQueue) hb = heartbeat.build(id = 10, state_interval=1, componentsMapped=True) self.assertEqual(register_mock.call_args_list[0][0][1], True) register_mock.reset_mock() hb = heartbeat.build(id = 0, state_interval=1, componentsMapped=True) self.assertEqual(register_mock.call_args_list[0][0][1], False)
def test_heartbeat_with_task_in_progress(self): actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) actionQueue.commandInProgress = { 'role': "role", 'actionId': "actionId", 'taskId': "taskId", 'stdout': "stdout", 'clusterName': "clusterName", 'stderr': 'none', 'exitCode': 777, 'serviceName': "serviceName", 'status': 'IN_PROGRESS', 'configurations': { 'global': {} }, 'roleCommand': 'START' } heartbeat = Heartbeat(actionQueue) result = heartbeat.build(100) #print "Heartbeat: " + str(result) self.assertEquals(len(result['reports']), 1) self.assertEquals(result['reports'][0]['role'], "role") self.assertEquals(result['reports'][0]['actionId'], "actionId") self.assertEquals(result['reports'][0]['taskId'], "taskId") self.assertEquals(result['reports'][0]['stdout'], "...") self.assertEquals(result['reports'][0]['clusterName'], "clusterName") self.assertEquals(result['reports'][0]['stderr'], "...") self.assertEquals(result['reports'][0]['exitCode'], 777) self.assertEquals(result['reports'][0]['serviceName'], "serviceName") self.assertEquals(result['reports'][0]['status'], "IN_PROGRESS") self.assertEquals(result['reports'][0]['roleCommand'], "START") pass
def test_no_mapping(self, register_mock, result_mock): result_mock.return_value = { 'reports': [{ 'status': 'IN_PROGRESS', 'stderr': 'Read from /tmp/errors-3.txt', 'stdout': 'Read from /tmp/output-3.txt', 'clusterName': u'cc', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'taskId': 3, 'exitCode': 777 }], 'componentStatus': [{ 'status': 'HEALTHY', 'componentName': 'NAMENODE' }] } actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig(), 'dummy_controller') heartbeat = Heartbeat(actionQueue) hb = heartbeat.build(id=10, state_interval=1, componentsMapped=True) self.assertEqual(register_mock.call_args_list[0][0][1], True) register_mock.reset_mock() hb = heartbeat.build(id=0, state_interval=1, componentsMapped=True) self.assertEqual(register_mock.call_args_list[0][0][1], False)
def test_build(self): config = AmbariConfig.AmbariConfig() config.set('agent', 'prefix', 'tmp') config.set('agent', 'cache_dir', "/var/lib/ambari-agent/cache") config.set('agent', 'tolerate_download_failures', "true") dummy_controller = MagicMock() actionQueue = ActionQueue(config, dummy_controller) heartbeat = Heartbeat(actionQueue) result = heartbeat.build(100) print "Heartbeat: " + str(result) self.assertEquals(result['hostname'] != '', True, "hostname should not be empty") self.assertEquals(result['responseId'], 100) self.assertEquals(result['componentStatus'] is not None, True, "Heartbeat should contain componentStatus") self.assertEquals(result['reports'] is not None, True, "Heartbeat should contain reports") self.assertEquals(result['timestamp'] >= 1353679373880L, True) self.assertEquals(len(result['nodeStatus']), 2) self.assertEquals(result['nodeStatus']['cause'], "NONE") self.assertEquals(result['nodeStatus']['status'], "HEALTHY") # result may or may NOT have an agentEnv structure in it self.assertEquals((len(result) is 6) or (len(result) is 7), True) self.assertEquals(not heartbeat.reports, True, "Heartbeat should not contain task in progress")
def test_heartbeat_with_status_multiple(self, read_stack_version_method): actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) actionQueue.IDLE_SLEEP_TIME = 0.01 read_stack_version_method.return_value = "1.3.0" heartbeat = Heartbeat(actionQueue) actionQueue.start() max_number_of_status_entries = 0 for i in range(1, 5): statusCommand = { "serviceName": 'HDFS', "commandType": "STATUS_COMMAND", "clusterName": "", "componentName": "DATANODE", 'configurations': { 'global': {} } } actionQueue.put(statusCommand) time.sleep(0.1) result = heartbeat.build(101) number_of_status_entries = len(result['componentStatus']) # print "Heartbeat with status: " + str(result) + " XXX " + str(number_of_status_entries) if max_number_of_status_entries < number_of_status_entries: max_number_of_status_entries = number_of_status_entries actionQueue.stop() actionQueue.join() NUMBER_OF_COMPONENTS = 1 self.assertEquals(max_number_of_status_entries == NUMBER_OF_COMPONENTS, True)
def test_heartbeat_with_task_in_progress(self): actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) actionQueue.commandInProgress= { 'role' : "role", 'actionId' : "actionId", 'taskId' : "taskId", 'stdout' : "stdout", 'clusterName' : "clusterName", 'stderr' : 'none', 'exitCode' : 777, 'serviceName' : "serviceName", 'status' : 'IN_PROGRESS', 'configurations':{'global' : {}}, 'roleCommand' : 'START' } heartbeat = Heartbeat(actionQueue) result = heartbeat.build(100) #print "Heartbeat: " + str(result) self.assertEquals(len(result['reports']), 1) self.assertEquals(result['reports'][0]['role'], "role") self.assertEquals(result['reports'][0]['actionId'], "actionId") self.assertEquals(result['reports'][0]['taskId'], "taskId") self.assertEquals(result['reports'][0]['stdout'], "...") self.assertEquals(result['reports'][0]['clusterName'], "clusterName") self.assertEquals(result['reports'][0]['stderr'], "...") self.assertEquals(result['reports'][0]['exitCode'], 777) self.assertEquals(result['reports'][0]['serviceName'], "serviceName") self.assertEquals(result['reports'][0]['status'], "IN_PROGRESS") self.assertEquals(result['reports'][0]['roleCommand'], "START") pass
def test_build(self): testsPath = os.path.dirname(os.path.realpath(__file__)) dictPath = testsPath + os.sep + '..' + os.sep + '..' + os.sep + 'main' + os.sep + 'python' + os.sep + 'ambari_agent' + os.sep + 'servicesToPidNames.dict' AmbariConfig.config.set('services', 'serviceToPidMapFile', dictPath) actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) heartbeat = Heartbeat(actionQueue) result = heartbeat.build(100)
def test_no_mapping(self, register_mock, result_mock): result_mock.return_value = { 'reports': [{'status': 'IN_PROGRESS', 'stderr': 'Read from /tmp/errors-3.txt', 'stdout': 'Read from /tmp/output-3.txt', 'clusterName': u'cc', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'taskId': 3, 'exitCode': 777}], 'componentStatus': [{'status': 'HEALTHY', 'componentName': 'NAMENODE'}] } config = AmbariConfig.AmbariConfig().getConfig() config.set('agent', 'prefix', 'tmp') config.set('agent', 'cache_dir', "/var/lib/ambari-agent/cache") config.set('agent', 'tolerate_download_failures', "true") dummy_controller = MagicMock() actionQueue = ActionQueue(config, dummy_controller) heartbeat = Heartbeat(actionQueue) hb = heartbeat.build(id = 10, state_interval=1, componentsMapped=True) self.assertEqual(register_mock.call_args_list[0][0][1], True) register_mock.reset_mock() hb = heartbeat.build(id = 0, state_interval=1, componentsMapped=True) self.assertEqual(register_mock.call_args_list[0][0][1], False)
def test_heartbeat_no_host_check_cmd_in_queue(self, register_mock, Popen_mock): config = AmbariConfig.AmbariConfig() config.set('agent', 'prefix', 'tmp') config.set('agent', 'cache_dir', "/var/lib/ambari-agent/cache") config.set('agent', 'tolerate_download_failures', "true") dummy_controller = MagicMock() actionQueue = ActionQueue(config, dummy_controller) statusCommand = { "serviceName": 'HDFS', "commandType": "STATUS_COMMAND", "clusterName": "c1", "componentName": "DATANODE", "role": "DATANODE", 'configurations': { 'global': {} } } actionQueue.put_status([statusCommand]) heartbeat = Heartbeat(actionQueue) heartbeat.build(12, 6) self.assertTrue(register_mock.called) args, kwargs = register_mock.call_args_list[0] self.assertFalse(args[2]) self.assertFalse(args[1])
def test_heartbeat_host_check_no_cmd(self, register_mock): actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) heartbeat = Heartbeat(actionQueue) heartbeat.build(12, 6) self.assertTrue(register_mock.called) args, kwargs = register_mock.call_args_list[0] self.assertFalse(args[1]) self.assertFalse(args[2])
def test_build(self): actionQueue = ActionQueue(AmbariConfig().getConfig()) heartbeat = Heartbeat(actionQueue) result = heartbeat.build(100) self.assertEqual(result['hostname'], socket.gethostname(), 'hostname mismatched.') self.assertEqual(result['responseId'], 100, 'responseId mismatched.') self.assertEqual(result['idle'], True, 'Heartbeat should indicate Agent is idle.') self.assertEqual(result['installScriptHash'], -1, 'installScriptHash should be -1.') self.assertEqual(result['firstContact'], True, 'firstContact should be True.') result = heartbeat.build(101) self.assertEqual(result['firstContact'], False, 'firstContact should be False.')
def test_heartbeat_host_check_no_cmd(self, register_mock): config = AmbariConfig.AmbariConfig().getConfig() config.set('agent', 'prefix', 'tmp') config.set('agent', 'cache_dir', "/var/lib/ambari-agent/cache") config.set('agent', 'tolerate_download_failures', "true") dummy_controller = MagicMock() actionQueue = ActionQueue(config, dummy_controller) heartbeat = Heartbeat(actionQueue) heartbeat.build(12, 6) self.assertTrue(register_mock.called) args, kwargs = register_mock.call_args_list[0] self.assertFalse(args[1]) self.assertFalse(args[2])
def test_heartbeat_host_check_no_cmd(self, register_mock, Popen_mock): config = AmbariConfig.AmbariConfig() config.set('agent', 'prefix', 'tmp') config.set('agent', 'cache_dir', "/var/lib/ambari-agent/cache") config.set('agent', 'tolerate_download_failures', "true") dummy_controller = MagicMock() actionQueue = ActionQueue(config, dummy_controller) heartbeat = Heartbeat(actionQueue) heartbeat.build(12, 6) self.assertTrue(register_mock.called) args, kwargs = register_mock.call_args_list[0] self.assertFalse(args[1]) self.assertFalse(args[2])
def test_build(self): actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) heartbeat = Heartbeat(actionQueue) result = heartbeat.build(100) print "Heartbeat: " + str(result) self.assertEquals(result['hostname'] != '', True, "hostname should not be empty") self.assertEquals(result['responseId'], 100) self.assertEquals(result['componentStatus'] is not None, True, "Heartbeat should contain componentStatus") self.assertEquals(result['reports'] is not None, True, "Heartbeat should contain reports") self.assertEquals(result['timestamp'] >= 1353679373880L, True) self.assertEquals(len(result['nodeStatus']), 2) self.assertEquals(result['nodeStatus']['cause'], "NONE") self.assertEquals(result['nodeStatus']['status'], "HEALTHY") # result may or may NOT have an agentEnv structure in it self.assertEquals((len(result) is 6) or (len(result) is 7), True) self.assertEquals(not heartbeat.reports, True, "Heartbeat should not contain task in progress")
def test_heartbeat_no_host_check_cmd_in_queue(self, register_mock): actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) statusCommand = { "serviceName" : 'HDFS', "commandType" : "STATUS_COMMAND", "clusterName" : "", "componentName" : "DATANODE", 'configurations':{'global' : {}} } actionQueue.commandQueue.put(statusCommand) heartbeat = Heartbeat(actionQueue) heartbeat.build(12, 6) self.assertTrue(register_mock.called) args, kwargs = register_mock.call_args_list[0] self.assertTrue(args[2]) self.assertFalse(args[1])
def test_heartbeat_with_status(self, read_stack_version_method): actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) read_stack_version_method.return_value="1.3.0" heartbeat = Heartbeat(actionQueue) statusCommand = { "serviceName" : 'HDFS', "commandType" : "STATUS_COMMAND", "clusterName" : "", "componentName" : "DATANODE", 'configurations':{'global' : {}} } actionQueue.put(statusCommand) actionQueue.start() time.sleep(0.1) actionQueue.stop() actionQueue.join() result = heartbeat.build(101) self.assertEquals(len(result['componentStatus']) > 0, True, 'Heartbeat should contain status of HDFS components')
def test_heartbeat_no_host_check_cmd_in_queue(self, register_mock): actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) statusCommand = { "serviceName": 'HDFS', "commandType": "STATUS_COMMAND", "clusterName": "", "componentName": "DATANODE", 'configurations': { 'global': {} } } actionQueue.commandQueue.put(statusCommand) heartbeat = Heartbeat(actionQueue) heartbeat.build(12, 6) self.assertTrue(register_mock.called) args, kwargs = register_mock.call_args_list[0] self.assertTrue(args[2]) self.assertFalse(args[1])
def test_heartbeat_no_host_check_cmd_in_progress(self, register_mock): actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) actionQueue.commandInProgress= { 'role' : "role", 'actionId' : "actionId", 'taskId' : "taskId", 'stdout' : "stdout", 'clusterName' : "clusterName", 'stderr' : 'none', 'exitCode' : 777, 'serviceName' : "serviceName", 'status' : 'IN_PROGRESS', 'configurations':{'global' : {}}, 'roleCommand' : 'START' } heartbeat = Heartbeat(actionQueue) heartbeat.build(12, 6) self.assertTrue(register_mock.called) args, kwargs = register_mock.call_args_list[0] self.assertTrue(args[2]) self.assertFalse(args[1])
def test_build(self): config = AmbariConfig.AmbariConfig().getConfig() config.set('agent', 'prefix', 'tmp') config.set('agent', 'cache_dir', "/var/lib/ambari-agent/cache") config.set('agent', 'tolerate_download_failures', "true") dummy_controller = MagicMock() actionQueue = ActionQueue(config, dummy_controller) heartbeat = Heartbeat(actionQueue) result = heartbeat.build(100) print "Heartbeat: " + str(result) self.assertEquals(result['hostname'] != '', True, "hostname should not be empty") self.assertEquals(result['responseId'], 100) self.assertEquals(result['componentStatus'] is not None, True, "Heartbeat should contain componentStatus") self.assertEquals(result['reports'] is not None, True, "Heartbeat should contain reports") self.assertEquals(result['timestamp'] >= 1353679373880L, True) self.assertEquals(len(result['nodeStatus']), 3) self.assertEquals(result['nodeStatus']['cause'], "NONE") self.assertEquals(result['nodeStatus']['status'], "HEALTHY") # result may or may NOT have an agentEnv structure in it self.assertEquals((len(result) is 6) or (len(result) is 7), True) self.assertEquals(not heartbeat.reports, True, "Heartbeat should not contain task in progress")
def test_heartbeat_no_host_check_cmd_in_queue(self, register_mock): config = AmbariConfig.AmbariConfig().getConfig() config.set('agent', 'prefix', 'tmp') config.set('agent', 'cache_dir', "/var/lib/ambari-agent/cache") config.set('agent', 'tolerate_download_failures', "true") dummy_controller = MagicMock() actionQueue = ActionQueue(config, dummy_controller) statusCommand = { "serviceName" : 'HDFS', "commandType" : "STATUS_COMMAND", "clusterName" : "c1", "componentName" : "DATANODE", 'configurations':{'global' : {}} } actionQueue.put([statusCommand]) heartbeat = Heartbeat(actionQueue) heartbeat.build(12, 6) self.assertTrue(register_mock.called) args, kwargs = register_mock.call_args_list[0] self.assertTrue(args[2]) self.assertFalse(args[1])
def test_heartbeat_with_status(self, read_stack_version_method): actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) read_stack_version_method.return_value = "1.3.0" heartbeat = Heartbeat(actionQueue) statusCommand = { "serviceName": 'HDFS', "commandType": "STATUS_COMMAND", "clusterName": "", "componentName": "DATANODE", 'configurations': { 'global': {} } } actionQueue.put(statusCommand) actionQueue.start() time.sleep(0.1) actionQueue.stop() actionQueue.join() result = heartbeat.build(101) self.assertEquals( len(result['componentStatus']) > 0, True, 'Heartbeat should contain status of HDFS components')
def test_heartbeat_no_host_check_cmd_in_progress(self, register_mock): actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) actionQueue.commandInProgress = { 'role': "role", 'actionId': "actionId", 'taskId': "taskId", 'stdout': "stdout", 'clusterName': "clusterName", 'stderr': 'none', 'exitCode': 777, 'serviceName': "serviceName", 'status': 'IN_PROGRESS', 'configurations': { 'global': {} }, 'roleCommand': 'START' } heartbeat = Heartbeat(actionQueue) heartbeat.build(12, 6) self.assertTrue(register_mock.called) args, kwargs = register_mock.call_args_list[0] self.assertTrue(args[2]) self.assertFalse(args[1])
def test_heartbeat_retries(self): netutil = NetUtil() netutil.HEARTBEAT_IDDLE_INTERVAL_SEC = 0.05 netutil.HEARTBEAT_NOT_IDDLE_INTERVAL_SEC = 0.05 #building heartbeat object testsPath = os.path.dirname(os.path.realpath(__file__)) dictPath = testsPath + os.sep + '..' + os.sep + '..' + os.sep + 'main' + os.sep + 'python' + os.sep + 'ambari_agent' + os.sep + 'servicesToPidNames.dict' AmbariConfig.config.set('services', 'serviceToPidMapFile', dictPath) actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig()) heartbeat = Heartbeat(actionQueue) # testing controller with our heartbeat and wrong url controller = Controller(AmbariConfig.config) controller.heartbeat = heartbeat controller.heartbeatUrl = BAD_URL controller.actionQueue = actionQueue controller.logger = self.logger controller.netutil = netutil thread = Thread(target=controller.heartbeatWithServer) thread.start() time.sleep(1) # I have to stop the thread anyway, so I'll check results later threadWasAlive = thread.isAlive() successfull_heartbits0 = controller.DEBUG_SUCCESSFULL_HEARTBEATS heartbeat_retries0 = controller.DEBUG_HEARTBEAT_RETRIES # Stopping thread controller.DEBUG_STOP_HEARTBITTING = True time.sleep(1) # Checking results before thread stop self.assertEquals(threadWasAlive, True, "Heartbeat should be alive now") self.assertEquals(successfull_heartbits0, 0, "Heartbeat should not have any success") self.assertEquals(heartbeat_retries0 > 1, True, "Heartbeat should retry connecting") # Checking results after thread stop self.assertEquals(thread.isAlive(), False, "Heartbeat should stop now") self.assertEquals(controller.DEBUG_SUCCESSFULL_HEARTBEATS, 0, "Heartbeat should not have any success")
def test_build_long_result(self, result_mock): config = AmbariConfig.AmbariConfig() config.set('agent', 'prefix', 'tmp') config.set('agent', 'cache_dir', "/var/lib/ambari-agent/cache") config.set('agent', 'tolerate_download_failures', "true") dummy_controller = MagicMock() dummy_controller.recovery_manager = RecoveryManager(tempfile.mktemp()) actionQueue = ActionQueue(config, dummy_controller) result_mock.return_value = { 'reports': [{'status': 'IN_PROGRESS', 'stderr': 'Read from /tmp/errors-3.txt', 'stdout': 'Read from /tmp/output-3.txt', 'clusterName': u'cc', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'taskId': 3, 'exitCode': 777}, {'status': 'COMPLETED', 'stderr': 'stderr', 'stdout': 'out', 'clusterName': 'clusterName', 'roleCommand': 'UPGRADE', 'serviceName': 'serviceName', 'role': 'role', 'actionId': 17, 'taskId': 'taskId', 'exitCode': 0}, {'status': 'FAILED', 'stderr': 'stderr', 'stdout': 'out', 'clusterName': u'cc', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'taskId': 3, 'exitCode': 13}, {'status': 'COMPLETED', 'stderr': 'stderr', 'stdout': 'out', 'clusterName': u'cc', 'configurationTags': {'global': {'tag': 'v1'}}, 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'taskId': 3, 'exitCode': 0} ], 'componentStatus': [ {'status': 'HEALTHY', 'componentName': 'DATANODE'}, {'status': 'UNHEALTHY', 'componentName': 'NAMENODE'}, ], } heartbeat = Heartbeat(actionQueue) hb = heartbeat.build(10) hb['hostname'] = 'hostname' hb['timestamp'] = 'timestamp' expected = {'nodeStatus': {'status': 'HEALTHY', 'cause': 'NONE'}, 'recoveryReport': {'summary': 'DISABLED'}, 'recoveryTimestamp': -1, 'timestamp': 'timestamp', 'hostname': 'hostname', 'responseId': 10, 'reports': [ {'status': 'IN_PROGRESS', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'stderr': 'Read from /tmp/errors-3.txt', 'stdout': 'Read from /tmp/output-3.txt', 'clusterName': u'cc', 'taskId': 3, 'exitCode': 777}, {'status': 'COMPLETED', 'roleCommand': 'UPGRADE', 'serviceName': 'serviceName', 'role': 'role', 'actionId': 17, 'stderr': 'stderr', 'stdout': 'out', 'clusterName': 'clusterName', 'taskId': 'taskId', 'exitCode': 0}, {'status': 'FAILED', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'stderr': 'stderr', 'stdout': 'out', 'clusterName': u'cc', 'taskId': 3, 'exitCode': 13}, {'status': 'COMPLETED', 'stdout': 'out', 'configurationTags': {'global': {'tag': 'v1'}}, 'taskId': 3, 'exitCode': 0, 'roleCommand': u'INSTALL', 'clusterName': u'cc', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'stderr': 'stderr'}], 'componentStatus': [ {'status': 'HEALTHY', 'componentName': 'DATANODE'}, {'status': 'UNHEALTHY', 'componentName': 'NAMENODE'}]} self.assertEqual.__self__.maxDiff = None self.assertEquals(hb, expected)
def test_build_long_result(self, result_mock): actionQueue = ActionQueue(AmbariConfig.AmbariConfig().getConfig(), 'dummy_controller') result_mock.return_value = { 'reports': [{ 'status': 'IN_PROGRESS', 'stderr': 'Read from /tmp/errors-3.txt', 'stdout': 'Read from /tmp/output-3.txt', 'clusterName': u'cc', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'taskId': 3, 'exitCode': 777 }, { 'status': 'COMPLETED', 'stderr': 'stderr', 'stdout': 'out', 'clusterName': 'clusterName', 'roleCommand': 'UPGRADE', 'serviceName': 'serviceName', 'role': 'role', 'actionId': 17, 'taskId': 'taskId', 'exitCode': 0 }, { 'status': 'FAILED', 'stderr': 'stderr', 'stdout': 'out', 'clusterName': u'cc', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'taskId': 3, 'exitCode': 13 }, { 'status': 'COMPLETED', 'stderr': 'stderr', 'stdout': 'out', 'clusterName': u'cc', 'configurationTags': { 'global': { 'tag': 'v1' } }, 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'taskId': 3, 'exitCode': 0 }], 'componentStatus': [ { 'status': 'HEALTHY', 'componentName': 'DATANODE' }, { 'status': 'UNHEALTHY', 'componentName': 'NAMENODE' }, ], } heartbeat = Heartbeat(actionQueue) hb = heartbeat.build(10) hb['hostname'] = 'hostname' hb['timestamp'] = 'timestamp' expected = { 'nodeStatus': { 'status': 'HEALTHY', 'cause': 'NONE' }, 'timestamp': 'timestamp', 'hostname': 'hostname', 'responseId': 10, 'reports': [{ 'status': 'IN_PROGRESS', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'stderr': 'Read from /tmp/errors-3.txt', 'stdout': 'Read from /tmp/output-3.txt', 'clusterName': u'cc', 'taskId': 3, 'exitCode': 777 }, { 'status': 'COMPLETED', 'roleCommand': 'UPGRADE', 'serviceName': 'serviceName', 'role': 'role', 'actionId': 17, 'stderr': 'stderr', 'stdout': 'out', 'clusterName': 'clusterName', 'taskId': 'taskId', 'exitCode': 0 }, { 'status': 'FAILED', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'stderr': 'stderr', 'stdout': 'out', 'clusterName': u'cc', 'taskId': 3, 'exitCode': 13 }, { 'status': 'COMPLETED', 'stdout': 'out', 'configurationTags': { 'global': { 'tag': 'v1' } }, 'taskId': 3, 'exitCode': 0, 'roleCommand': u'INSTALL', 'clusterName': u'cc', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'stderr': 'stderr' }], 'componentStatus': [{ 'status': 'HEALTHY', 'componentName': 'DATANODE' }, { 'status': 'UNHEALTHY', 'componentName': 'NAMENODE' }] } self.assertEquals(hb, expected)
def test_build_long_result(self, result_mock, createAlerts_mock): createAlerts_mock.return_value = [] config = AmbariConfig.AmbariConfig().getConfig() config.set('agent', 'prefix', 'tmp') config.set('agent', 'cache_dir', "/var/lib/ambari-agent/cache") config.set('agent', 'tolerate_download_failures', "true") dummy_controller = MagicMock() actionQueue = ActionQueue(config, dummy_controller) result_mock.return_value = { 'reports': [{'status': 'IN_PROGRESS', 'stderr': 'Read from /tmp/errors-3.txt', 'stdout': 'Read from /tmp/output-3.txt', 'clusterName': u'cc', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'taskId': 3, 'exitCode': 777}, {'status': 'COMPLETED', 'stderr': 'stderr', 'stdout': 'out', 'clusterName': 'clusterName', 'roleCommand': 'UPGRADE', 'serviceName': 'serviceName', 'role': 'role', 'actionId': 17, 'taskId': 'taskId', 'exitCode': 0}, {'status': 'FAILED', 'stderr': 'stderr', 'stdout': 'out', 'clusterName': u'cc', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'taskId': 3, 'exitCode': 13}, {'status': 'COMPLETED', 'stderr': 'stderr', 'stdout': 'out', 'clusterName': u'cc', 'configurationTags': {'global': {'tag': 'v1'}}, 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'taskId': 3, 'exitCode': 0} ], 'componentStatus': [ {'status': 'HEALTHY', 'componentName': 'DATANODE'}, {'status': 'UNHEALTHY', 'componentName': 'NAMENODE'}, ], } heartbeat = Heartbeat(actionQueue) hb = heartbeat.build(10) hb['hostname'] = 'hostname' hb['timestamp'] = 'timestamp' expected = {'nodeStatus': {'status': 'HEALTHY', 'alerts': [], 'cause': 'NONE'}, 'timestamp': 'timestamp', 'hostname': 'hostname', 'responseId': 10, 'reports': [ {'status': 'IN_PROGRESS', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'stderr': 'Read from /tmp/errors-3.txt', 'stdout': 'Read from /tmp/output-3.txt', 'clusterName': u'cc', 'taskId': 3, 'exitCode': 777}, {'status': 'COMPLETED', 'roleCommand': 'UPGRADE', 'serviceName': 'serviceName', 'role': 'role', 'actionId': 17, 'stderr': 'stderr', 'stdout': 'out', 'clusterName': 'clusterName', 'taskId': 'taskId', 'exitCode': 0}, {'status': 'FAILED', 'roleCommand': u'INSTALL', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'stderr': 'stderr', 'stdout': 'out', 'clusterName': u'cc', 'taskId': 3, 'exitCode': 13}, {'status': 'COMPLETED', 'stdout': 'out', 'configurationTags': {'global': {'tag': 'v1'}}, 'taskId': 3, 'exitCode': 0, 'roleCommand': u'INSTALL', 'clusterName': u'cc', 'serviceName': u'HDFS', 'role': u'DATANODE', 'actionId': '1-1', 'stderr': 'stderr'}], 'componentStatus': [ {'status': 'HEALTHY', 'componentName': 'DATANODE'}, {'status': 'UNHEALTHY', 'componentName': 'NAMENODE'}]} self.assertEquals(hb, expected)