123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- #!/usr/bin/env python
- '''
- 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.
- '''
- import os, sys, StringIO
- from ambari_agent.AgentException import AgentException
- from unittest import TestCase
- from ambari_agent import manifestGenerator
- import ambari_agent.AmbariConfig
- import tempfile
- import json
- import shutil
- from ambari_agent.AmbariConfig import AmbariConfig
- from mock.mock import patch, MagicMock, call
- class TestManifestGenerator(TestCase):
- def setUp(self):
- # disable stdout
- out = StringIO.StringIO()
- sys.stdout = out
- self.dir = tempfile.mkdtemp()
- self.config = AmbariConfig()
- jsonCommand = file('../../main/python/ambari_agent/test.json').read()
- self.parsedJson = json.loads(jsonCommand)
- def tearDown(self):
- shutil.rmtree(self.dir)
- # enable stdout
- sys.stdout = sys.__stdout__
- def testWriteImports(self):
- tmpFileName = tempfile.mkstemp(dir=self.dir, text=True)[1]
- print tmpFileName
- tmpFile = file(tmpFileName, 'r+')
- manifestGenerator.writeImports(tmpFile, '../../main/puppet/modules', self.config.getImports())
- tmpFile.seek(0)
- print tmpFile.read()
- tmpFile.close()
- def testEscape(self):
- shouldBe = '\\\'\\\\'
- result = manifestGenerator.escape('\'\\')
- self.assertEqual(result, shouldBe)
- def test_writeNodes(self):
- tmpFileName = tempfile.mkstemp(dir=self.dir, text=True)[1]
- tmpFile = file(tmpFileName, 'r+')
- clusterHostInfo = self.parsedJson['clusterHostInfo']
- clusterHostInfo['zookeeper_hosts'] = ["h1.hortonworks.com", "h2.hortonworks.com"]
- manifestGenerator.writeNodes(tmpFile, clusterHostInfo)
- tmpFile.seek(0)
- print tmpFile.read()
- tmpFile.close()
- os.remove(tmpFileName)
- def test_writeNodes_failed(self):
- tmpFileName = tempfile.mkstemp(dir=self.dir, text=True)[1]
- tmpFile = file(tmpFileName, 'r+')
- clusterHostInfo = self.parsedJson['clusterHostInfo']
- clusterHostInfo.update({u'ZOOKEEPER':[None]})
- clusterHostInfo['zookeeper_hosts'] = ["h1.hortonworks.com", "h2.hortonworks.com"]
- self.assertRaises(TypeError, manifestGenerator.writeNodes, tmpFile, clusterHostInfo)
- tmpFile.seek(0)
- print tmpFile.read()
- tmpFile.close()
- os.remove(tmpFileName)
- def test_writeHostAttributes(self):
- tmpFileName = tempfile.mkstemp(dir=self.dir, text=True)[1]
- tmpFile = file(tmpFileName, 'r+')
- hostAttributes = {'HostAttr1' : '1', 'HostAttr2' : '2'}
- manifestGenerator.writeHostAttributes(tmpFile, hostAttributes)
- tmpFile.seek(0)
- print tmpFile.read()
- tmpFile.close()
- os.remove(tmpFileName)
- def test_writeTasks(self):
- tmpFileName = tempfile.mkstemp(dir=self.dir, text=True)[1]
- tmpFile = file(tmpFileName, 'r+')
- roles = [{'role' : 'ZOOKEEPER_SERVER',
- 'cmd' : 'NONE',
- 'roleParams' : {'someRoleParams': '-x'}}]
- clusterHostInfo = self.parsedJson['clusterHostInfo']
- clusterHostInfo['zookeeper_hosts'] = ["h1.hortonworks.com", "h2.hortonworks.com"]
- manifestGenerator.writeTasks(tmpFile, roles, self.config, clusterHostInfo, "h1.hortonworks.com")
- tmpFile.seek(0)
- print tmpFile.read()
- tmpFile.close()
- os.remove(tmpFileName)
-
- def testConvertRangeToList(self):
-
- rangesList = ["1-3", "4", "6", "7-9"]
- list = manifestGenerator.convertRangeToList(rangesList)
- self.assertEqual(sorted(list), sorted([1,2,3,4,6,7,8,9]))
-
- rangesList = ["5", "4"]
- list = manifestGenerator.convertRangeToList(rangesList)
- self.assertEqual(list, [5,4])
- exceptionWasTrown = False
- try:
- rangesList = ["0", "-2"]
- list = manifestGenerator.convertRangeToList(rangesList)
- except AgentException, err:
- #Expected
- exceptionWasTrown = True
-
- self.assertTrue(exceptionWasTrown)
-
- exceptionWasTrown = False
- try:
- rangesList = ["0", "-"]
- list = manifestGenerator.convertRangeToList(rangesList)
- except AgentException, err:
- #Expected
- exceptionWasTrown = True
- self.assertTrue(exceptionWasTrown)
-
- exceptionWasTrown = False
- try:
- rangesList = ["0", "2-"]
- list = manifestGenerator.convertRangeToList(rangesList)
- except AgentException, err:
- #Expected
- exceptionWasTrown = True
- self.assertTrue(exceptionWasTrown)
-
- def testConvertMappedRangeToList(self):
- mappedRangedList = ["1:0-2,5", "2:3,4"]
- list = manifestGenerator.convertMappedRangeToList(mappedRangedList)
- self.assertEqual(list, [1,1,1,2,2,1])
-
- mappedRangedList = ["7:0"]
- list = manifestGenerator.convertMappedRangeToList(mappedRangedList)
- self.assertEqual(list, [7])
-
- exceptionWasTrown = False
- mappedRangedList = ["7:0-"]
- try:
- list = manifestGenerator.convertMappedRangeToList(mappedRangedList)
- except AgentException, err:
- #Expected
- exceptionWasTrown = True
- self.assertTrue(exceptionWasTrown)
-
-
- exceptionWasTrown = False
- mappedRangedList = ["7:-"]
- try:
- list = manifestGenerator.convertMappedRangeToList(mappedRangedList)
- except AgentException, err:
- #Expected
- exceptionWasTrown = True
- self.assertTrue(exceptionWasTrown)
-
- exceptionWasTrown = False
- mappedRangedList = ["7:-1"]
- try:
- list = manifestGenerator.convertMappedRangeToList(mappedRangedList)
- except AgentException, err:
- #Expected
- exceptionWasTrown = True
- self.assertTrue(exceptionWasTrown)
-
- def testDecompressClusterHostInfo(self):
-
- info = { "jtnode_host" : ["5"],
- "hbase_master_hosts" : ["5"],
- "all_hosts" : ["h8", "h9", "h5", "h4", "h7", "h6", "h1", "h3", "h2", "h10"],
- "namenode_host" : ["6"],
- "mapred_tt_hosts" : ["0", "7-9", "2","3", "5"],
- "slave_hosts" : ["3", "0", "1", "5-9"],
- "snamenode_host" : ["8"],
- "ping_ports" : ["8670:1,5-8", "8673:9", "8672:0,4", "8671:2,3"],
- "hbase_rs_hosts" : ["3", "1", "5", "8", "9"]
- }
-
- decompressedInfo = manifestGenerator.decompressClusterHostInfo(clusterHostInfo)
-
- self.assertTrue(decompressedInfo.has_key("all_hosts"))
-
- allHosts = decompressedInfo.pop("all_hosts")
-
- self.assertEquals(info.get("all_hosts"), decompressedInfo.get("all_hosts"))
-
- pingPorts = decompressedInfo.pop("all_ping_ports")
-
- self.assertEquals(pingPorts, manifestGenerator.convertMappedRangeToList(info.get("all_ping_ports")))
-
- for k,v in decompressedInfo.items():
- self.assertEquals(v, manifestGenerator.convertRangeToList(info.get(k)))
|