123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468 |
- '''
- 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 StringIO
- import re
- from unittest import TestCase
- import sys
- from mock.mock import patch
- from mock.mock import MagicMock
- from mock.mock import create_autospec
- import os, errno, tempfile
- import signal
- import stat
- import datetime
- import operator
- from pwd import getpwnam
- # We have to use this import HACK because the filename contains a dash
- ambari_server = __import__('ambari-server')
- FatalException = ambari_server.FatalException
- NonFatalException = ambari_server.NonFatalException
- class TestAmbariServer(TestCase):
- def setUp(self):
- out = StringIO.StringIO()
- sys.stdout = out
- def tearDown(self):
- sys.stdout = sys.__stdout__
- @patch.object(ambari_server, 'configure_database_username_password')
- @patch.object(ambari_server, 'run_os_command')
- @patch('optparse.Values')
- def test_configure_pg_hba_ambaridb_users(self, OptParseValuesMock,
- run_os_command_method,
- configure_database_username_password_method):
- # Prepare mocks
- run_os_command_method.return_value = (0, "", "")
- opvm = OptParseValuesMock.return_value
- opvm.database_username = "ffdf"
- tf1 = tempfile.NamedTemporaryFile()
- ambari_server.PG_HBA_CONF_FILE = tf1.name
- # Run test
- ambari_server.configure_pg_hba_ambaridb_users()
- # Check results
- self.assertTrue(run_os_command_method.called)
- self.assertTrue(configure_database_username_password_method.called)
- string_expected = self.get_file_string(self
- .get_samples_dir("configure_pg_hba_ambaridb_users1"))
- string_actual = self.get_file_string(ambari_server.PG_HBA_CONF_FILE)
- self.assertEquals(string_expected, string_actual)
- pass
- @patch('__builtin__.raw_input')
- def test_servicename_regex(self, raw_input_method):
- ''' Test to make sure the service name can contain digits '''
- ambari_server.SILENT = False
- raw_input_method.return_value = "OT100"
- result = ambari_server.get_validated_service_name("ambari", 1)
- self.assertEqual("OT100", result, "Not accepting digits")
- pass
-
- @patch('__builtin__.raw_input')
- def test_dbname_regex(self, raw_input_method):
- ''' Test to make sure the service name can contain digits '''
- ambari_server.SILENT = False
- raw_input_method.return_value = "OT100"
- result = ambari_server.get_validated_db_name("ambari")
- self.assertEqual("OT100", result, "Not accepting digits")
-
- def test_configure_pg_hba_postgres_user(self):
- tf1 = tempfile.NamedTemporaryFile()
- ambari_server.PG_HBA_CONF_FILE = tf1.name
- with open(ambari_server.PG_HBA_CONF_FILE, 'w') as fout:
- fout.write("\n")
- fout.write("local all all md5\n")
- fout.write("host all all 0.0.0.0/0 md5\n")
- fout.write("host all all ::/0 md5\n")
- ambari_server.configure_pg_hba_postgres_user()
- expected = self.get_file_string(self.get_samples_dir(
- "configure_pg_hba_ambaridb_users2"))
- result = self.get_file_string(ambari_server.PG_HBA_CONF_FILE)
- self.assertEqual(expected, result, "pg_hba_conf not processed")
- mode = oct(os.stat(ambari_server.PG_HBA_CONF_FILE)[stat.ST_MODE])
- str_mode = str(mode)[-4:]
- self.assertEqual("0644", str_mode, "Wrong file permissions")
- @patch('__builtin__.raw_input')
- def get_choice_string_input(self, raw_input_method):
- prompt = "blablabla"
- default = "default blablabla"
- firstChoice = set(['yes','ye', 'y'])
- secondChoice = set(['no','n'])
- # test first input
- raw_input_method.return_value = "Y"
- result = ambari_server.get_choice_string_input(prompt, default,
- firstChoice, secondChoice)
- self.assertEquals(result, True)
- raw_input_method.reset_mock()
- # test second input
- raw_input_method.return_value = "N"
- result = ambari_server.get_choice_string_input(prompt, default,
- firstChoice, secondChoice)
- self.assertEquals(result, False)
- raw_input_method.reset_mock()
- # test enter pressed
- raw_input_method.return_value = ""
- result = ambari_server.get_choice_string_input(prompt, default,
- firstChoice, secondChoice)
- self.assertEquals(result, default)
- raw_input_method.reset_mock()
- # test wrong input
- list_of_return_values= ['yes', 'dsad', 'fdsfds']
- def side_effect(list):
- return list_of_return_values.pop()
- raw_input_method.side_effect = side_effect
- result = ambari_server.get_choice_string_input(prompt, default,
- firstChoice, secondChoice)
- self.assertEquals(result, True)
- self.assertEquals(raw_input_method.call_count, 3)
- pass
- @patch('re.search')
- @patch('__builtin__.raw_input')
- @patch('getpass.getpass')
- def get_validated_string_input(self, get_pass_method,
- raw_input_method, re_search_method):
- prompt = "blabla"
- default = "default_pass"
- pattern = "pattern_pp"
- description = "blabla2"
- # check password input
- self.assertFalse(False, ambari_server.SILENT)
- is_pass = True
- get_pass_method.return_value = "dfdsfdsfds"
- result = ambari_server.get_validated_string_input(prompt, default,
- pattern, description, is_pass)
- self.assertEquals(get_pass_method.return_value, result)
- get_pass_method.assure_called_once(prompt)
- self.assertFalse(raw_input_method.called)
- # check raw input
- get_pass_method.reset_mock()
- raw_input_method.reset_mock()
- is_pass = False
- raw_input_method.return_value = "dkf90ewuf0"
- result = ambari_server.get_validated_string_input(prompt, default,
- pattern, description, is_pass)
- self.assertEquals(raw_input_method.return_value, result)
- self.assertFalse(get_pass_method.called)
- raw_input_method.assure_called_once(prompt)
- def test_get_pass_file_path(self):
- result = ambari_server.get_pass_file_path("/etc/ambari/conf_file")
- self.assertEquals("/etc/ambari/password.dat", result)
- pass
- @patch.object(ambari_server, 'setup')
- @patch.object(ambari_server, 'start')
- @patch.object(ambari_server, 'stop')
- @patch.object(ambari_server, 'reset')
- @patch('optparse.OptionParser')
- def test_main_test_setup(self, OptionParserMock, reset_method, stop_method,
- start_method, setup_method):
- opm = OptionParserMock.return_value
- options = MagicMock()
- args = ["setup"]
- opm.parse_args.return_value = (options, args)
- options.database=None
- options.sid_or_sname = "sid"
- ambari_server.main()
- self.assertTrue(setup_method.called)
- self.assertFalse(start_method.called)
- self.assertFalse(stop_method.called)
- self.assertFalse(reset_method.called)
- self.assertFalse(False, ambari_server.VERBOSE)
- self.assertFalse(False, ambari_server.SILENT)
- @patch.object(ambari_server, 'setup')
- @patch.object(ambari_server, 'start')
- @patch.object(ambari_server, 'stop')
- @patch.object(ambari_server, 'reset')
- @patch('optparse.OptionParser')
- def test_main_test_start(self, OptionParserMock, reset_method, stop_method,
- start_method, setup_method):
- opm = OptionParserMock.return_value
- options = MagicMock()
- args = ["setup"]
- opm.parse_args.return_value = (options, args)
- options.database=None
- options.sid_or_sname = "sname"
- ambari_server.main()
- self.assertTrue(setup_method.called)
- self.assertFalse(start_method.called)
- self.assertFalse(stop_method.called)
- self.assertFalse(reset_method.called)
- self.assertFalse(False, ambari_server.VERBOSE)
- self.assertFalse(False, ambari_server.SILENT)
- @patch.object(ambari_server, 'setup')
- @patch.object(ambari_server, 'start')
- @patch.object(ambari_server, 'stop')
- @patch.object(ambari_server, 'reset')
- @patch('optparse.OptionParser')
- def test_main_test_start_debug_short(self, OptionParserMock, reset_method, stop_method,
- start_method, setup_method):
- opm = OptionParserMock.return_value
- options = MagicMock()
- args = ["start", "-g"]
- opm.parse_args.return_value = (options, args)
- options.database=None
- options.sid_or_sname = "sid"
- ambari_server.main()
- self.assertFalse(setup_method.called)
- self.assertTrue(start_method.called)
- self.assertFalse(stop_method.called)
- self.assertFalse(reset_method.called)
- self.assertTrue(ambari_server.SERVER_DEBUG_MODE)
- @patch.object(ambari_server, 'setup')
- @patch.object(ambari_server, 'start')
- @patch.object(ambari_server, 'stop')
- @patch.object(ambari_server, 'reset')
- @patch('optparse.OptionParser')
- def test_main_test_start_debug_long(self, OptionParserMock, reset_method, stop_method,
- start_method, setup_method):
- opm = OptionParserMock.return_value
- options = MagicMock()
- args = ["start", "--debug"]
- opm.parse_args.return_value = (options, args)
- options.database=None
- options.sid_or_sname = "sid"
- ambari_server.main()
- self.assertFalse(setup_method.called)
- self.assertTrue(start_method.called)
- self.assertFalse(stop_method.called)
- self.assertFalse(reset_method.called)
- self.assertTrue(ambari_server.SERVER_DEBUG_MODE)
- @patch.object(ambari_server, 'setup')
- @patch.object(ambari_server, 'start')
- @patch.object(ambari_server, 'stop')
- @patch.object(ambari_server, 'reset')
- @patch('optparse.OptionParser')
- def test_main_test_stop(self, OptionParserMock, reset_method, stop_method,
- start_method, setup_method):
- opm = OptionParserMock.return_value
- options = MagicMock()
- args = ["stop"]
- opm.parse_args.return_value = (options, args)
- options.database = None
- options.sid_or_sname = "sid"
- ambari_server.main()
- self.assertFalse(setup_method.called)
- self.assertFalse(start_method.called)
- self.assertTrue(stop_method.called)
- self.assertFalse(reset_method.called)
- self.assertFalse(False, ambari_server.VERBOSE)
- self.assertFalse(False, ambari_server.SILENT)
- @patch.object(ambari_server, 'setup')
- @patch.object(ambari_server, 'start')
- @patch.object(ambari_server, 'stop')
- @patch.object(ambari_server, 'reset')
- @patch('optparse.OptionParser')
- def test_main_test_reset(self, OptionParserMock, reset_method, stop_method,
- start_method, setup_method):
- opm = OptionParserMock.return_value
- options = MagicMock()
- args = ["reset"]
- opm.parse_args.return_value = (options, args)
- options.database=None
- options.sid_or_sname = "sid"
- ambari_server.main()
- self.assertFalse(setup_method.called)
- self.assertFalse(start_method.called)
- self.assertFalse(stop_method.called)
- self.assertTrue(reset_method.called)
- self.assertFalse(False, ambari_server.VERBOSE)
- self.assertFalse(False, ambari_server.SILENT)
- def test_configure_postgresql_conf(self):
- tf1 = tempfile.NamedTemporaryFile()
- ambari_server.POSTGRESQL_CONF_FILE = tf1.name
- with open(ambari_server.POSTGRESQL_CONF_FILE, 'w') as f:
- f.write("#listen_addresses = '127.0.0.1' #\n")
- f.write("#listen_addresses = '127.0.0.1'")
- ambari_server.configure_postgresql_conf()
- expected = self.get_file_string(self.get_samples_dir(
- "configure_postgresql_conf1"))
- result = self.get_file_string(ambari_server.POSTGRESQL_CONF_FILE)
- self.assertEqual(expected, result, "postgresql.conf not updated")
- mode = oct(os.stat(ambari_server.POSTGRESQL_CONF_FILE)[stat.ST_MODE])
- str_mode = str(mode)[-4:]
- self.assertEqual("0644", str_mode, "Wrong file permissions")
- @patch.object(ambari_server, "restart_postgres")
- @patch.object(ambari_server, "get_postgre_status")
- @patch.object(ambari_server, "configure_postgresql_conf")
- @patch.object(ambari_server, "configure_pg_hba_ambaridb_users")
- @patch.object(ambari_server, "configure_pg_hba_postgres_user")
- def test_configure_postgres(self, configure_pg_hba_postgres_user_mock,
- configure_pg_hba_ambaridb_users_mock,
- configure_postgresql_conf_mock,
- get_postgre_status_mock,
- restart_postgres_mock):
- tf1 = tempfile.NamedTemporaryFile()
- tf2 = tempfile.NamedTemporaryFile()
- ambari_server.PG_HBA_CONF_FILE = tf1.name
- ambari_server.PG_HBA_CONF_FILE_BACKUP = tf2.name
- args = MagicMock()
- out = StringIO.StringIO()
- sys.stdout = out
- rcode = ambari_server.configure_postgres()
- sys.stdout = sys.__stdout__
- self.assertEqual(0, rcode)
- self.assertEqual("Backup for pg_hba found, reconfiguration not required\n",
- out.getvalue())
- ambari_server.PG_HBA_CONF_FILE_BACKUP = tempfile.mktemp()
- get_postgre_status_mock.return_value = ambari_server.PG_STATUS_RUNNING
- restart_postgres_mock.return_value = 0
- rcode = ambari_server.configure_postgres()
- self.assertTrue(os.path.isfile(ambari_server.PG_HBA_CONF_FILE_BACKUP),
- "postgresql.conf backup not created")
- self.assertTrue(configure_pg_hba_postgres_user_mock.called)
- self.assertTrue(configure_pg_hba_ambaridb_users_mock.called)
- mode = oct(os.stat(ambari_server.PG_HBA_CONF_FILE)[stat.ST_MODE])
- str_mode = str(mode)[-4:]
- self.assertEqual("0644", str_mode, "Wrong file permissions")
- self.assertTrue(configure_postgresql_conf_mock.called)
- self.assertEqual(0, rcode)
- os.unlink(ambari_server.PG_HBA_CONF_FILE_BACKUP)
- get_postgre_status_mock.return_value = "stopped"
- rcode = ambari_server.configure_postgres()
- self.assertEqual(0, rcode)
- os.unlink(ambari_server.PG_HBA_CONF_FILE_BACKUP)
- sys.stdout = sys.__stdout__
- @patch("time.sleep")
- @patch("subprocess.Popen")
- @patch.object(ambari_server, "run_os_command")
- @patch.object(ambari_server, "get_postgre_status")
- @patch.object(ambari_server, "print_info_msg")
- def test_restart_postgres(self, printInfoMsg_mock, get_postgre_status_mock,
- run_os_command_mock, popenMock, sleepMock):
- p = MagicMock()
- p.poll.return_value = 0
- popenMock.return_value = p
- rcode = ambari_server.restart_postgres()
- self.assertEqual(0, rcode)
- p.poll.return_value = None
- get_postgre_status_mock.return_value = "stopped"
- run_os_command_mock.return_value = (1, None, None)
- rcode = ambari_server.restart_postgres()
- self.assertEqual(1, rcode)
- @patch("shlex.split")
- @patch("subprocess.Popen")
- @patch.object(ambari_server, "print_info_msg")
- def test_run_os_command(self, printInfoMsg_mock, popenMock, splitMock):
- p = MagicMock()
- p.communicate.return_value = (None, None)
- p.returncode = 3
- popenMock.return_value = p
- # with list arg
- cmd = ["exec", "arg"]
- ambari_server.run_os_command(cmd)
- self.assertFalse(splitMock.called)
- # with str arg
- resp = ambari_server.run_os_command("runme")
- self.assertEqual(3, resp[0])
- self.assertTrue(splitMock.called)
- @patch.object(ambari_server, "get_conf_dir")
- @patch.object(ambari_server, "search_file")
- def test_write_property(self, search_file_mock, get_conf_dir_mock):
- expected_content = "key1=val1\n"
- tf1 = tempfile.NamedTemporaryFile()
- search_file_mock.return_value = tf1.name
- ambari_server.write_property("key1", "val1")
- result = tf1.read()
- self.assertTrue(expected_content in result)
- @patch.object(ambari_server, "configure_database_username_password")
- @patch.object(ambari_server, "run_os_command")
- def test_setup_db(self, run_os_command_mock,
- configure_database_username_password_mock):
- run_os_command_mock.return_value = (0, None, None)
- result = ambari_server.setup_db(MagicMock())
- self.assertTrue(configure_database_username_password_mock.called)
- self.assertEqual(0, result)
- @patch.object(ambari_server, "get_YN_input")
- @patch.object(ambari_server, "run_os_command")
- def test_check_selinux(self, run_os_command_mock, getYNInput_mock):
- run_os_command_mock.return_value = (0, ambari_server.SE_STATUS_DISABLED,
- None)
- rcode = ambari_server.check_selinux()
- self.assertEqual(0, rcode)
- getYNInput_mock.return_value = True
- run_os_command_mock.return_value = (0,"enabled "
- + ambari_server.SE_MODE_ENFORCING,
- None)
- rcode = ambari_server.check_selinux()
- self.assertEqual(0, rcode)
- self.assertTrue(run_os_command_mock.called)
- self.assertTrue(getYNInput_mock.called)
- @patch.object(ambari_server, "print_info_msg")
- def test_get_ambari_jars(self, printInfoMsg_mock):
- env = "/ambari/jars"
- os.environ[ambari_server.AMBARI_SERVER_LIB] = env
- result = ambari_server.get_ambari_jars()
- self.assertEqual(env, result)
- del os.environ[ambari_server.AMBARI_SERVER_LIB]
- result = ambari_server.get_ambari_jars()
- self.assertEqual("/usr/lib/ambari-server", result)
- self.assertTrue(printInfoMsg_mock.called)
- @patch("glob.glob")
- @patch.object(ambari_server, "print_info_msg")
- def test_get_share_jars(self, printInfoMsg_mock, globMock):
- globMock.return_value = ["one", "two"]
- expected = "one:two:one:two"
- result = ambari_server.get_share_jars()
- self.assertEqual(expected, result)
- globMock.return_value = []
- expected = ""
- result = ambari_server.get_share_jars()
- self.assertEqual(expected, result)
- @patch("glob.glob")
- @patch.object(ambari_server, "print_info_msg")
- def test_get_ambari_classpath(self, printInfoMsg_mock, globMock):
- globMock.return_value = ["one"]
- result = ambari_server.get_ambari_classpath()
- self.assertTrue(ambari_server.get_ambari_jars() in result)
- self.assertTrue(ambari_server.get_share_jars() in result)
- globMock.return_value = []
- result = ambari_server.get_ambari_classpath()
- self.assertTrue(ambari_server.get_ambari_jars() in result)
- self.assertFalse(":" in result)
- @patch.object(ambari_server, "print_info_msg")
- def test_get_conf_dir(self, printInfoMsg_mock):
- env = "/dummy/ambari/conf"
- os.environ[ambari_server.AMBARI_CONF_VAR] = env
- result = ambari_server.get_conf_dir()
- self.assertEqual(env, result)
- del os.environ[ambari_server.AMBARI_CONF_VAR]
- result = ambari_server.get_conf_dir()
- self.assertEqual("/etc/ambari-server/conf", result)
- def test_search_file(self):
- path = os.path.dirname(__file__)
- result = ambari_server.search_file(__file__, path)
- expected = os.path.abspath(__file__)
- self.assertEqual(expected, result)
- result = ambari_server.search_file("non_existent_file", path)
- self.assertEqual(None, result)
- @patch.object(ambari_server, "search_file")
- def test_find_properties_file(self, search_file_mock):
- # Testing case when file is not found
- search_file_mock.return_value = None
- try:
- ambari_server.find_properties_file()
- self.fail("File not found'")
- except FatalException:
- # Expected
- pass
- self.assertTrue(search_file_mock.called)
- # Testing case when file is found
- value = MagicMock()
- search_file_mock.return_value = value
- result = ambari_server.find_properties_file()
- self.assertTrue(result is value)
- @patch.object(ambari_server, "find_properties_file")
- @patch("__builtin__.open")
- @patch("ambari-server.Properties")
- def test_read_ambari_user(self, properties_mock, open_mock, find_properties_file_mock):
- open_mock.return_value = "dummy"
- find_properties_file_mock.return_value = "dummy"
- # Testing with defined user
- properties_mock.return_value.__getitem__.return_value = "dummy_user"
- user = ambari_server.read_ambari_user()
- self.assertEquals(user, "dummy_user")
- # Testing with undefined user
- properties_mock.return_value.__getitem__.return_value = None
- user = ambari_server.read_ambari_user()
- self.assertEquals(user, None)
- @patch("os.path.exists")
- @patch.object(ambari_server, "set_file_permissions")
- @patch.object(ambari_server, "run_os_command")
- @patch.object(ambari_server, "get_ambari_properties")
- @patch.object(ambari_server, "get_value_from_properties")
- @patch("os.mkdir")
- def test_adjust_directory_permissions(self, mkdir_mock,
- get_value_from_properties_mock, get_ambari_properties_mock,
- run_os_command_mock, set_file_permissions_mock, exists_mock):
- # Testing boostrap dir wipe
- properties_mock = MagicMock()
- get_value_from_properties_mock.return_value = "dummy_bootstrap_dir"
- ambari_server.adjust_directory_permissions("user")
- exists_mock.return_value = False
- self.assertEquals(run_os_command_mock.call_args_list[0][0][0], "rm -rf dummy_bootstrap_dir")
- self.assertTrue(mkdir_mock.called)
- set_file_permissions_mock.reset_mock()
- # Test recursive calls
- old_list = ambari_server.NR_ADJUST_OWNERSHIP_LIST
- ambari_server.NR_ADJUST_OWNERSHIP_LIST = [
- ( "/etc/ambari-server/conf", "755", "{0}", True ),
- ( "/etc/ambari-server/conf/ambari.properties", "644", "{0}", False )
- ]
- ambari_server.adjust_directory_permissions("user")
- self.assertTrue(len(set_file_permissions_mock.call_args_list) ==
- len(ambari_server.NR_ADJUST_OWNERSHIP_LIST))
- self.assertEquals(set_file_permissions_mock.call_args_list[0][0][3], True)
- self.assertEquals(set_file_permissions_mock.call_args_list[1][0][3], False)
- ambari_server.NR_ADJUST_OWNERSHIP_LIST = old_list
- @patch("os.path.exists")
- @patch.object(ambari_server, "run_os_command")
- @patch.object(ambari_server, "print_warning_msg")
- @patch.object(ambari_server, "print_info_msg")
- def test_set_file_permissions(self, print_info_msg_mock, print_warning_msg_mock,
- run_os_command_mock, exists_mock):
- # Testing not existent file scenario
- exists_mock.return_value = False
- ambari_server.set_file_permissions("dummy-file", "dummy-mod",
- "dummy-user", False)
- self.assertFalse(run_os_command_mock.called)
- self.assertTrue(print_info_msg_mock.called)
- run_os_command_mock.reset_mock()
- print_warning_msg_mock.reset_mock()
- # Testing OK scenario
- exists_mock.return_value = True
- run_os_command_mock.side_effect = [(0, "", ""), (0, "", "")]
- ambari_server.set_file_permissions("dummy-file", "dummy-mod",
- "dummy-user", False)
- self.assertTrue(len(run_os_command_mock.call_args_list) == 2)
- self.assertFalse(print_warning_msg_mock.called)
- run_os_command_mock.reset_mock()
- print_warning_msg_mock.reset_mock()
- # Testing first command fail
- run_os_command_mock.side_effect = [(1, "", ""), (0, "", "")]
- ambari_server.set_file_permissions("dummy-file", "dummy-mod",
- "dummy-user", False)
- self.assertTrue(len(run_os_command_mock.call_args_list) == 2)
- self.assertTrue(print_warning_msg_mock.called)
- run_os_command_mock.reset_mock()
- print_warning_msg_mock.reset_mock()
- # Testing second command fail
- run_os_command_mock.side_effect = [(0, "", ""), (1, "", "")]
- ambari_server.set_file_permissions("dummy-file", "dummy-mod",
- "dummy-user", False)
- self.assertTrue(len(run_os_command_mock.call_args_list) == 2)
- self.assertTrue(print_warning_msg_mock.called)
- run_os_command_mock.reset_mock()
- print_warning_msg_mock.reset_mock()
- # Testing recursive operation
- exists_mock.return_value = True
- run_os_command_mock.side_effect = [(0, "", ""), (0, "", "")]
- ambari_server.set_file_permissions("dummy-file", "dummy-mod",
- "dummy-user", True)
- self.assertTrue(len(run_os_command_mock.call_args_list) == 2)
- self.assertTrue("-R" in run_os_command_mock.call_args_list[0][0][0])
- self.assertTrue("-R" in run_os_command_mock.call_args_list[1][0][0])
- self.assertFalse(print_warning_msg_mock.called)
- run_os_command_mock.reset_mock()
- print_warning_msg_mock.reset_mock()
- # Testing non-recursive operation
- exists_mock.return_value = True
- run_os_command_mock.side_effect = [(0, "", ""), (0, "", "")]
- ambari_server.set_file_permissions("dummy-file", "dummy-mod",
- "dummy-user", False)
- self.assertTrue(len(run_os_command_mock.call_args_list) == 2)
- self.assertFalse("-R" in run_os_command_mock.call_args_list[0][0][0])
- self.assertFalse("-R" in run_os_command_mock.call_args_list[1][0][0])
- self.assertFalse(print_warning_msg_mock.called)
- run_os_command_mock.reset_mock()
- print_warning_msg_mock.reset_mock()
- @patch.object(ambari_server, "get_validated_string_input")
- @patch.object(ambari_server, "print_info_msg")
- @patch.object(ambari_server, "print_warning_msg")
- @patch.object(ambari_server, "run_os_command")
- def test_create_custom_user(self, run_os_command_mock, print_warning_msg_mock,
- print_info_msg_mock, get_validated_string_input_mock):
- user = "dummy-user"
- get_validated_string_input_mock.return_value = user
- # Testing scenario: absent user
- run_os_command_mock.side_effect = [(0, "", "")]
- result = ambari_server.create_custom_user()
- self.assertFalse(print_warning_msg_mock.called)
- self.assertEquals(result, (0, user))
- print_info_msg_mock.reset_mock()
- print_warning_msg_mock.reset_mock()
- run_os_command_mock.reset_mock()
- # Testing scenario: existing user
- run_os_command_mock.side_effect = [(9, "", "")]
- result = ambari_server.create_custom_user()
- self.assertTrue("User dummy-user already exists" in str(print_info_msg_mock.call_args_list[1][0]))
- self.assertEquals(result, (0, user))
- print_info_msg_mock.reset_mock()
- print_warning_msg_mock.reset_mock()
- run_os_command_mock.reset_mock()
- # Testing scenario: os command fail
- run_os_command_mock.side_effect = [(1, "", "")]
- result = ambari_server.create_custom_user()
- self.assertTrue(print_warning_msg_mock.called)
- self.assertEquals(result, (1, None))
- @patch.object(ambari_server, "read_ambari_user")
- @patch.object(ambari_server, "get_YN_input")
- @patch.object(ambari_server, "create_custom_user")
- @patch.object(ambari_server, "write_property")
- @patch.object(ambari_server, "adjust_directory_permissions")
- @patch.object(ambari_server, "print_error_msg")
- def test_check_ambari_user(self, print_error_msg_mock,
- adjust_directory_permissions_mock, write_property_mock,
- create_custom_user_mock, get_YN_input_mock, read_ambari_user_mock):
- # Scenario: user is already defined, user does not want to reconfigure it
- read_ambari_user_mock.return_value = "dummy-user"
- get_YN_input_mock.return_value = False
- result = ambari_server.check_ambari_user()
- self.assertTrue(get_YN_input_mock.called)
- self.assertFalse(write_property_mock.called)
- self.assertFalse(create_custom_user_mock.called)
- self.assertTrue(adjust_directory_permissions_mock.called)
- self.assertEqual(result, 0)
- get_YN_input_mock.reset_mock()
- write_property_mock.reset_mock()
- adjust_directory_permissions_mock.reset_mock()
- create_custom_user_mock.reset_mock()
- # Scenario: user is already defined, but user wants to reconfigure it
- read_ambari_user_mock.return_value = "dummy-user"
- create_custom_user_mock.return_value = (0, "new-dummy-user")
- get_YN_input_mock.return_value = True
- result = ambari_server.check_ambari_user()
- self.assertTrue(get_YN_input_mock.called)
- self.assertTrue(write_property_mock.called)
- self.assertTrue(write_property_mock.call_args[0][1] == "new-dummy-user")
- self.assertTrue(create_custom_user_mock.called)
- self.assertTrue(adjust_directory_permissions_mock.called)
- self.assertEqual(result, 0)
- get_YN_input_mock.reset_mock()
- write_property_mock.reset_mock()
- adjust_directory_permissions_mock.reset_mock()
- create_custom_user_mock.reset_mock()
- # Negative scenario: user is already defined, but user wants
- # to reconfigure it, user creation failed
- read_ambari_user_mock.return_value = "dummy-user"
- create_custom_user_mock.return_value = (1, None)
- get_YN_input_mock.return_value = True
- result = ambari_server.check_ambari_user()
- self.assertTrue(get_YN_input_mock.called)
- self.assertTrue(create_custom_user_mock.called)
- self.assertFalse(write_property_mock.called)
- self.assertFalse(adjust_directory_permissions_mock.called)
- self.assertEqual(result, 1)
- get_YN_input_mock.reset_mock()
- create_custom_user_mock.reset_mock()
- write_property_mock.reset_mock()
- adjust_directory_permissions_mock.reset_mock()
- # Scenario: user is not defined (setup process)
- read_ambari_user_mock.return_value = None
- get_YN_input_mock.return_value = True
- create_custom_user_mock.return_value = (0, "dummy-user")
- result = ambari_server.check_ambari_user()
- self.assertTrue(get_YN_input_mock.called)
- self.assertTrue(create_custom_user_mock.called)
- self.assertTrue(write_property_mock.called)
- self.assertTrue(write_property_mock.call_args[0][1] == "dummy-user")
- self.assertTrue(adjust_directory_permissions_mock.called)
- self.assertEqual(result, 0)
- get_YN_input_mock.reset_mock()
- create_custom_user_mock.reset_mock()
- write_property_mock.reset_mock()
- adjust_directory_permissions_mock.reset_mock()
- # Scenario: user is not defined (setup process), user creation failed
- read_ambari_user_mock.return_value = None
- get_YN_input_mock.return_value = True
- create_custom_user_mock.return_value = (1, None)
- result = ambari_server.check_ambari_user()
- self.assertTrue(get_YN_input_mock.called)
- self.assertTrue(create_custom_user_mock.called)
- self.assertFalse(write_property_mock.called)
- self.assertFalse(adjust_directory_permissions_mock.called)
- self.assertEqual(result, 1)
- get_YN_input_mock.reset_mock()
- create_custom_user_mock.reset_mock()
- write_property_mock.reset_mock()
- adjust_directory_permissions_mock.reset_mock()
- # negative scenario: user is not defined (setup process), user creation failed
- read_ambari_user_mock.return_value = None
- get_YN_input_mock.return_value = True
- create_custom_user_mock.return_value = (1, None)
- result = ambari_server.check_ambari_user()
- self.assertTrue(get_YN_input_mock.called)
- self.assertTrue(create_custom_user_mock.called)
- self.assertFalse(write_property_mock.called)
- self.assertFalse(adjust_directory_permissions_mock.called)
- self.assertEqual(result, 1)
- get_YN_input_mock.reset_mock()
- create_custom_user_mock.reset_mock()
- write_property_mock.reset_mock()
- adjust_directory_permissions_mock.reset_mock()
- # Scenario: user is not defined and left to be root
- read_ambari_user_mock.return_value = None
- get_YN_input_mock.return_value = False
- result = ambari_server.check_ambari_user()
- self.assertTrue(get_YN_input_mock.called)
- self.assertFalse(create_custom_user_mock.called)
- self.assertTrue(write_property_mock.called)
- self.assertTrue(write_property_mock.call_args[0][1] == "root")
- self.assertTrue(adjust_directory_permissions_mock.called)
- self.assertEqual(result, 0)
- @patch.object(ambari_server, "search_file")
- @patch("__builtin__.open")
- @patch.object(ambari_server, "read_ambari_user")
- @patch.object(ambari_server, "set_file_permissions")
- def test_store_password_file(self, set_file_permissions_mock,
- read_ambari_user_mock, open_mock, search_file_mock):
- search_file_mock.return_value = "/etc/ambari-server/conf/ambari.properties"
- open_mock.return_value = MagicMock()
- ambari_server.store_password_file("password", "passfile")
- self.assertTrue(set_file_permissions_mock.called)
- @patch.object(ambari_server, "run_os_command")
- def test_check_iptables(self, run_os_command_mock):
- run_os_command_mock.return_value = (1, "test", "")
- rcode, info = ambari_server.check_iptables()
- self.assertEqual(1, rcode)
- self.assertEqual("test", info)
- run_os_command_mock.return_value = (2, "",
- ambari_server.IP_TBLS_SRVC_NT_FND)
- rcode = ambari_server.check_iptables()
- self.assertEqual(0, rcode)
- def test_dlprogress(self):
- out = StringIO.StringIO()
- sys.stdout = out
- ambari_server.dlprogress("filename", 10, 2, 100)
- sys.stdout = sys.__stdout__
- self.assertNotEqual("", out.getvalue())
- @patch("urllib2.urlopen")
- @patch("__builtin__.open")
- @patch.object(ambari_server, "dlprogress")
- def test_track_jdk(self, dlprogress_mock, openMock, urlopenMock):
- u = MagicMock()
- u.info.return_value = {"Content-Length":"24576"}
- chunks = [None, "second", "first"]
- def side_effect(*args, **kwargs):
- return chunks.pop()
- u.read.side_effect = side_effect
- urlopenMock.return_value = u
- f = MagicMock()
- openMock.return_value = f
- ambari_server.track_jdk("base", "url", "local")
- self.assertEqual(0, len(chunks))
- self.assertTrue(f.write.called)
- self.assertTrue(f.flush.called)
- self.assertTrue(f.close.called)
- self.assertEqual(2, len(dlprogress_mock.call_args_list))
- @patch("shutil.copy")
- @patch("os.path.join")
- @patch("os.path.exists")
- @patch.object(ambari_server, "get_ambari_properties")
- def test_install_jce_manualy(self, get_ambari_properties_mock,\
- os_path_exists_mock, os_path_join_mock,\
- shutil_copy_mock):
- args = MagicMock()
- args.jce_policy = "somewhere"
- p = MagicMock()
- get_ambari_properties_mock.return_value = p
- p.__getitem__.side_effect = None
- p.__getitem__.return_value = "somewhere"
- os_path_exists_mock.return_value = True
- os_path_join_mock.return_value = \
- "/var/lib/ambari-server/resources/jce_policy-6.zip"
- ambari_server.install_jce_manualy(args)
- self.assertTrue(shutil_copy_mock.called)
- shutil_copy_mock.side_effect = Exception("exception")
- try:
- ambari_server.install_jce_manualy(args)
- self.fail("Should throw exception because of not found jce_policy-6.zip")
- except Exception:
- # Expected
- self.assertTrue(shutil_copy_mock.called)
- pass
- shutil_copy_mock.side_effect = None
- args.jce_policy = None
- ambari_server.install_jce_manualy(args)
- @patch.object(ambari_server, 'read_ambari_user')
- @patch.object(ambari_server, "get_validated_string_input")
- @patch.object(ambari_server, "find_properties_file")
- @patch.object(ambari_server, "get_ambari_properties")
- @patch.object(ambari_server, "is_server_runing")
- @patch.object(ambari_server, "import_cert_and_key_action")
- @patch.object(ambari_server, "get_YN_input")
- @patch("__builtin__.open")
- @patch("ambari-server.Properties")
- @patch.object(ambari_server, "is_root")
- @patch.object(ambari_server, "is_valid_cert_host")
- @patch.object(ambari_server, "is_valid_cert_exp")
- def test_setup_https(self, is_valid_cert_exp_mock, is_valid_cert_host_mock,\
- is_root_mock, Properties_mock, open_Mock, get_YN_input_mock,\
- import_cert_and_key_action_mock,
- is_server_runing_mock, get_ambari_properties_mock,\
- find_properties_file_mock,\
- get_validated_string_input_mock,
- read_ambari_user_method):
-
- is_valid_cert_exp_mock.return_value=True
- is_valid_cert_host_mock.return_value=True
- args = MagicMock()
- open_Mock.return_value = file
- p = get_ambari_properties_mock.return_value
- # Testing call under non-root
- is_root_mock.return_value = False
- try:
- ambari_server.setup_https(args)
- self.fail("Should throw exception")
- except FatalException as fe:
- # Expected
- self.assertTrue("root-level" in fe.reason)
- pass
- # Testing call under root
- is_root_mock.return_value = True
- read_ambari_user_method.return_value = None
- #Case #1: if client ssl is on and user didnt choose
- #disable ssl option and choose import certs and keys
- p.get_property.side_effect = ["key_dir","5555","6666", "true"]
- get_YN_input_mock.side_effect = [False,True]
- get_validated_string_input_mock.side_effect = ["4444"]
- get_property_expected = "[call('security.server.keys_dir'),\n"+\
- " call('client.api.ssl.port'),\n"+\
- " call('client.api.ssl.port'),\n call('api.ssl')]"
- process_pair_expected = "[call('client.api.ssl.port', '4444')]"
- ambari_server.SILENT = False
- ambari_server.setup_https(args)
-
- self.assertTrue(p.process_pair.called)
- self.assertTrue(p.get_property.call_count == 4)
- self.assertEqual(str(p.get_property.call_args_list), get_property_expected)
- self.assertEqual(str(p.process_pair.call_args_list), process_pair_expected)
- self.assertTrue(p.store.called)
- self.assertTrue(import_cert_and_key_action_mock.called)
- p.process_pair.reset_mock()
- p.get_property.reset_mock()
- p.store.reset_mock()
- import_cert_and_key_action_mock.reset_mock()
- #Case #2: if client ssl is on and user choose to disable ssl option
- p.get_property.side_effect = ["key_dir","", "true"]
- get_YN_input_mock.side_effect = [True]
- get_validated_string_input_mock.side_effect = ["4444"]
- get_property_expected = "[call('security.server.keys_dir'),\n"+\
- " call('client.api.ssl.port'),\n call('api.ssl')]"
- process_pair_expected = "[call('api.ssl', 'false')]"
- ambari_server.setup_https(args)
-
- self.assertTrue(p.process_pair.called)
- self.assertTrue(p.get_property.call_count == 3)
- self.assertEqual(str(p.get_property.call_args_list), get_property_expected)
- self.assertEqual(str(p.process_pair.call_args_list), process_pair_expected)
- self.assertTrue(p.store.called)
- self.assertFalse(import_cert_and_key_action_mock.called)
- p.process_pair.reset_mock()
- p.get_property.reset_mock()
- p.store.reset_mock()
- import_cert_and_key_action_mock.reset_mock()
- #Case #3: if client ssl is off and user choose option
- #to import cert and keys
- p.get_property.side_effect = ["key_dir","", None]
- get_YN_input_mock.side_effect = [True, True]
- get_validated_string_input_mock.side_effect = ["4444"]
- get_property_expected = "[call('security.server.keys_dir'),\n"+\
- " call('client.api.ssl.port'),\n call('api.ssl')]"
- process_pair_expected = "[call('client.api.ssl.port', '4444')]"
- ambari_server.setup_https(args)
- self.assertTrue(p.process_pair.called)
- self.assertTrue(p.get_property.call_count == 3)
- self.assertEqual(str(p.get_property.call_args_list), get_property_expected)
- self.assertEqual(str(p.process_pair.call_args_list), process_pair_expected)
- self.assertTrue(p.store.called)
- self.assertTrue(import_cert_and_key_action_mock.called)
- p.process_pair.reset_mock()
- p.get_property.reset_mock()
- p.store.reset_mock()
- import_cert_and_key_action_mock.reset_mock()
-
- #Case #4: if client ssl is off and
- #user did not choose option to import cert and keys
- p.get_property.side_effect = ["key_dir","", None]
- get_YN_input_mock.side_effect = [False]
- get_validated_string_input_mock.side_effect = ["4444"]
- get_property_expected = "[call('security.server.keys_dir'),\n"+\
- " call('client.api.ssl.port'),\n call('api.ssl')]"
- process_pair_expected = "[]"
- ambari_server.setup_https(args)
- self.assertFalse(p.process_pair.called)
- self.assertTrue(p.get_property.call_count == 3)
- self.assertEqual(str(p.get_property.call_args_list), get_property_expected)
- self.assertEqual(str(p.process_pair.call_args_list), process_pair_expected)
- self.assertFalse(p.store.called)
- self.assertFalse(import_cert_and_key_action_mock.called)
- p.process_pair.reset_mock()
- p.get_property.reset_mock()
- p.store.reset_mock()
- import_cert_and_key_action_mock.reset_mock()
- ambari_server.SILENT = True
-
- @patch.object(ambari_server, "import_cert_and_key")
- def test_import_cert_and_key_action(self, import_cert_and_key_mock):
- import_cert_and_key_mock.return_value = True
- properties = MagicMock()
- properties.get_property.side_effect = ["key_dir","5555","6666", "true"]
- properties.process_pair = MagicMock()
- expect_process_pair = "[call('client.api.ssl.cert_name', 'https.crt'),\n"+\
- " call('client.api.ssl.key_name', 'https.key'),\n"+\
- " call('api.ssl', 'true')]"
- ambari_server.import_cert_and_key_action("key_dir", properties)
-
- self.assertEqual(str(properties.process_pair.call_args_list),\
- expect_process_pair)
-
- @patch.object(ambari_server, "remove_file")
- @patch.object(ambari_server, "copy_file")
- @patch.object(ambari_server, "read_ambari_user")
- @patch.object(ambari_server, "set_file_permissions")
- @patch.object(ambari_server, "import_file_to_keystore")
- @patch("__builtin__.open")
- @patch.object(ambari_server, "run_os_command")
- @patch("os.path.join")
- @patch.object(ambari_server, "get_validated_filepath_input")
- @patch.object(ambari_server, "get_validated_string_input")
- @patch.object(ambari_server, "is_valid_cert_host")
- @patch.object(ambari_server, "is_valid_cert_exp")
- def test_import_cert_and_key(self,is_valid_cert_exp_mock,\
- is_valid_cert_host_mock,\
- get_validated_string_input_mock,\
- get_validated_filepath_input_mock,\
- os_path_join_mock, run_os_command_mock,\
- open_mock, import_file_to_keystore_mock,\
- set_file_permissions_mock, read_ambari_user_mock, copy_file_mock,\
- remove_file_mock):
- is_valid_cert_exp_mock.return_value=True
- is_valid_cert_host_mock.return_value=True
- get_validated_string_input_mock.return_value = "password"
- get_validated_filepath_input_mock.side_effect = \
- ["cert_file_path","key_file_path"]
- os_path_join_mock.side_effect = ["keystore_file_path","pass_file_path",\
- "passin_file_path","password_file_path","keystore_cert_file_path",\
- "keystore_cert_key_file_path",]
- run_os_command_mock.return_value = (0, "", "")
- om = open_mock.return_value
- expect_import_file_to_keystore = "[call('cert_file_path',"+\
- " 'keystore_cert_file_path'),\n"+\
- " call('key_file_path',"+\
- " 'keystore_cert_key_file_path')]"
- ambari_server.import_cert_and_key("key_dir")
- self.assertTrue(get_validated_filepath_input_mock.call_count == 2)
- self.assertTrue(get_validated_string_input_mock.called)
- self.assertEqual(os_path_join_mock.call_count, 6)
- self.assertTrue(set_file_permissions_mock.call_count == 2)
- self.assertEqual(str(import_file_to_keystore_mock.call_args_list),\
- expect_import_file_to_keystore)
- @patch.object(ambari_server, "remove_file")
- @patch.object(ambari_server, "copy_file")
- @patch.object(ambari_server, "generate_random_string")
- @patch.object(ambari_server, "read_ambari_user")
- @patch.object(ambari_server, "set_file_permissions")
- @patch.object(ambari_server, "import_file_to_keystore")
- @patch("__builtin__.open")
- @patch.object(ambari_server, "run_os_command")
- @patch("os.path.join")
- @patch.object(ambari_server, "get_validated_filepath_input")
- @patch.object(ambari_server, "get_validated_string_input")
- @patch.object(ambari_server, "is_valid_cert_host")
- @patch.object(ambari_server, "is_valid_cert_exp")
- def test_import_cert_and_key_with_empty_password(self, \
- is_valid_cert_exp_mock, is_valid_cert_host_mock,
- get_validated_string_input_mock, get_validated_filepath_input_mock,\
- os_path_join_mock, run_os_command_mock, open_mock, \
- import_file_to_keystore_mock, set_file_permissions_mock,
- read_ambari_user_mock, generate_random_string_mock, copy_file_mock,\
- remove_file_mock):
-
- is_valid_cert_exp_mock.return_value=True
- is_valid_cert_host_mock.return_value=True
- get_validated_string_input_mock.return_value = ""
- get_validated_filepath_input_mock.side_effect =\
- ["cert_file_path","key_file_path"]
- os_path_join_mock.side_effect = ["keystore_file_path","pass_file_path",\
- "passin_file_path","password_file_path","keystore_cert_file_path",\
- "keystore_cert_key_file_path",]
- run_os_command_mock.return_value = (0, "", "")
- expect_import_file_to_keystore = "[call('cert_file_path',"+\
- " 'keystore_cert_file_path'),\n"+\
- " call('key_file_path.secured',"+\
- " 'keystore_cert_key_file_path')]"
- ambari_server.import_cert_and_key("key_dir")
- self.assertEquals(get_validated_filepath_input_mock.call_count, 2)
- self.assertTrue(get_validated_string_input_mock.called)
- self.assertEquals(os_path_join_mock.call_count, 6)
- self.assertEquals(set_file_permissions_mock.call_count, 2)
- self.assertEqual(str(import_file_to_keystore_mock.call_args_list),\
- expect_import_file_to_keystore)
- self.assertTrue(generate_random_string_mock.called)
- def test_is_valid_cert_exp(self):
-
- #No data in certInfo
- certInfo = {}
- is_valid = ambari_server.is_valid_cert_exp(certInfo)
- self.assertFalse(is_valid)
-
- #Issued in future
- issuedOn = (datetime.datetime.now() + datetime.timedelta(hours=1000)).strftime(ambari_server.SSL_DATE_FORMAT)
- expiresOn = (datetime.datetime.now() + datetime.timedelta(hours=2000)).strftime(ambari_server.SSL_DATE_FORMAT)
- certInfo = {ambari_server.NOT_BEFORE_ATTR : issuedOn,
- ambari_server.NOT_AFTER_ATTR : expiresOn}
- is_valid = ambari_server.is_valid_cert_exp(certInfo)
- self.assertFalse(is_valid)
-
- #Was expired
- issuedOn = (datetime.datetime.now() - datetime.timedelta(hours=2000)).strftime(ambari_server.SSL_DATE_FORMAT)
- expiresOn = (datetime.datetime.now() - datetime.timedelta(hours=1000)).strftime(ambari_server.SSL_DATE_FORMAT)
- certInfo = {ambari_server.NOT_BEFORE_ATTR : issuedOn,
- ambari_server.NOT_AFTER_ATTR : expiresOn}
- is_valid = ambari_server.is_valid_cert_exp(certInfo)
- self.assertFalse(is_valid)
-
- #Valid
- issuedOn = (datetime.datetime.now() - datetime.timedelta(hours=2000)).strftime(ambari_server.SSL_DATE_FORMAT)
- expiresOn = (datetime.datetime.now() + datetime.timedelta(hours=1000)).strftime(ambari_server.SSL_DATE_FORMAT)
- certInfo = {ambari_server.NOT_BEFORE_ATTR : issuedOn,
- ambari_server.NOT_AFTER_ATTR : expiresOn}
- is_valid = ambari_server.is_valid_cert_exp(certInfo)
- self.assertTrue(is_valid)
-
- @patch.object(ambari_server, "get_fqdn")
- def is_valid_cert_host(self, get_fqdn_mock):
-
- #No data in certInfo
- certInfo = {}
- is_valid = ambari_server.is_valid_cert_host(certInfo)
- self.assertFalse(is_valid)
-
- #Failed to get FQDN
- get_fqdn_mock.return_value = None
- is_valid = ambari_server.is_valid_cert_host(certInfo)
- self.assertFalse(is_valid)
-
- #FQDN and Common name in certificated don't correspond
- get_fqdn_mock.return_value = 'host1'
- certInfo = {ambari_server.COMMON_NAME_ATTR : 'host2'}
- is_valid = ambari_server.is_valid_cert_host(certInfo)
- self.assertFalse(is_valid)
-
- #FQDN and Common name in certificated correspond
- get_fqdn_mock.return_value = 'host1'
- certInfo = {ambari_server.COMMON_NAME_ATTR : 'host1'}
- is_valid = ambari_server.is_valid_cert_host(certInfo)
- self.assertFalse(is_valid)
- @patch("socket.getfqdn")
- @patch("urllib2.urlopen")
- @patch.object(ambari_server, "get_ambari_properties")
- def test_get_fqdn(self, get_ambari_properties_mock, url_open_mock, getfqdn_mock):
-
- #No ambari.properties
- get_ambari_properties_mock.return_value = -1
- fqdn = ambari_server.get_fqdn()
- self.assertEqual(fqdn, None)
-
- #Check mbari_server.GET_FQDN_SERVICE_URL property name (AMBARI-2612)
- #property name should be server.fqdn.service.url
- self.assertEqual(ambari_server.GET_FQDN_SERVICE_URL, "server.fqdn.service.url")
-
- #Read FQDN from service
- p = MagicMock()
- p[ambari_server.GET_FQDN_SERVICE_URL] = 'someurl'
- get_ambari_properties_mock.return_value = p
-
- u = MagicMock()
- host = 'host1.domain.com'
- u.read.return_value = host
- url_open_mock.return_value = u
-
- fqdn = ambari_server.get_fqdn()
- self.assertEqual(fqdn, host)
-
- #Failed to read FQDN from service, getting from socket
- u.reset_mock()
- u.side_effect = Exception("Failed to read FQDN from service")
- getfqdn_mock.return_value = host
- fqdn = ambari_server.get_fqdn()
- self.assertEqual(fqdn, host)
-
- @patch.object(ambari_server, "run_os_command")
- def test_get_cert_info(self, run_os_command_mock):
- # Error running openssl command
- path = 'path/to/certificate'
- run_os_command_mock.return_value = -1, None, None
- cert_info = ambari_server.get_cert_info(path)
- self.assertEqual(cert_info, None)
-
- #Empty result of openssl command
- run_os_command_mock.return_value = 0, None, None
- cert_info = ambari_server.get_cert_info(path)
- self.assertEqual(cert_info, None)
-
- #Positive scenario
- notAfter = 'Jul 3 14:12:57 2014 GMT'
- notBefore = 'Jul 3 14:12:57 2013 GMT'
- attr1_key = 'A'
- attr1_value = 'foo'
- attr2_key = 'B'
- attr2_value = 'bar'
- attr3_key = 'CN'
- attr3_value = 'host.domain.com'
- subject_pattern = '/{attr1_key}={attr1_value}/{attr2_key}={attr2_value}/{attr3_key}={attr3_value}'
- subject = subject_pattern.format(attr1_key = attr1_key, attr1_value = attr1_value,
- attr2_key = attr2_key, attr2_value = attr2_value,
- attr3_key = attr3_key, attr3_value = attr3_value)
- out_pattern = """
- notAfter={notAfter}
- notBefore={notBefore}
- subject={subject}
- -----BEGIN CERTIFICATE-----
- MIIFHjCCAwYCCQDpHKOBI+Lt0zANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJV
- ...
- 5lqd8XxOGSYoMOf+70BLN2sB
- -----END CERTIFICATE-----
- """
- out = out_pattern.format(notAfter = notAfter, notBefore = notBefore, subject = subject)
- run_os_command_mock.return_value = 0, out, None
- cert_info = ambari_server.get_cert_info(path)
- self.assertEqual(cert_info['notAfter'], notAfter)
- self.assertEqual(cert_info['notBefore'], notBefore)
- self.assertEqual(cert_info['subject'], subject)
- self.assertEqual(cert_info[attr1_key], attr1_value)
- self.assertEqual(cert_info[attr2_key], attr2_value)
- self.assertEqual(cert_info[attr3_key], attr3_value)
-
- @patch.object(ambari_server, "run_os_command")
- @patch("__builtin__.open")
- @patch("os.path.exists")
- def test_is_server_runing(self, os_path_exists_mock, open_mock,\
- run_os_command_mock):
- os_path_exists_mock.return_value = True
- f = open_mock.return_value
- f.readline.return_value = "111"
- run_os_command_mock.return_value = 0, "", ""
- status, pid = ambari_server.is_server_runing()
- self.assertTrue(status)
- self.assertEqual(111, pid)
- os_path_exists_mock.return_value = False
- status, pid = ambari_server.is_server_runing()
- self.assertFalse(status)
-
- @patch.object(ambari_server, "install_jce_manualy")
- @patch("os.stat")
- @patch("os.path.isfile")
- @patch("os.path.exists")
- @patch.object(ambari_server, "track_jdk")
- @patch.object(ambari_server, "get_YN_input")
- @patch.object(ambari_server, "run_os_command")
- @patch.object(ambari_server, "write_property")
- @patch.object(ambari_server, "print_info_msg")
- @patch.object(ambari_server, "get_JAVA_HOME")
- @patch.object(ambari_server, "get_ambari_properties")
- @patch("shutil.copyfile")
- def test_download_jdk(self, copyfile_mock, get_ambari_properties_mock, get_JAVA_HOME_mock,\
- print_info_msg_mock, write_property_mock,\
- run_os_command_mock, get_YN_input_mock, track_jdk_mock,
- path_existsMock, path_isfileMock, statMock,\
- install_jce_manualy_mock):
- args = MagicMock()
- args.java_home = "somewhere"
- path_existsMock.return_value = False
- get_JAVA_HOME_mock.return_value = False
- get_ambari_properties_mock.return_value = -1
- # Test case: ambari.properties not found
- try:
- ambari_server.download_jdk(args)
- self.fail("Should throw exception because of not found ambari.properties")
- except FatalException:
- # Expected
- self.assertTrue(get_ambari_properties_mock.called)
- pass
- # Test case: JDK already exists
- p = MagicMock()
- get_ambari_properties_mock.return_value = p
- p.__getitem__.return_value = "somewhere"
- get_JAVA_HOME_mock.return_value = True
- path_existsMock.return_value = True
- rcode = ambari_server.download_jdk(args)
- self.assertEqual(0, rcode)
- # Test case: java home setup
- get_JAVA_HOME_mock.return_value = False
- rcode = ambari_server.download_jdk(args)
- self.assertEqual(0, rcode)
- self.assertTrue(write_property_mock.called)
- # Test case: JDK file does not exist, property not defined
- path_existsMock.return_value = False
- p = MagicMock()
- get_ambari_properties_mock.return_value = p
- p.__getitem__.side_effect = KeyError("test exception")
- try:
- ambari_server.download_jdk(args)
- self.fail("Should throw exception")
- except FatalException:
- # Expected
- pass
- # Test case: JDK file does not exist, os command (curl) result does not
- # contain Content-Length
- p.__getitem__.return_value = "somewhere"
- p.__getitem__.side_effect = None
- path_existsMock.return_value = False
- run_os_command_mock.return_value = (0, "Wrong out", None)
- try:
- ambari_server.download_jdk(args)
- self.fail("Should throw exception")
- except FatalException:
- # Expected
- pass
- # Successful JDK download
- ambari_server.JDK_INSTALL_DIR = os.getcwd()
- get_YN_input_mock.return_value = True
- run_os_command_mock.return_value = (0, "Creating jdk-1.2/jre"
- "Content-Length: 32000\r\n"
- , None)
- statResult = MagicMock()
- statResult.st_size = 32000
- statMock.return_value = statResult
- rcode = ambari_server.download_jdk(args)
- self.assertEqual(0, rcode)
- # Test case: JDK file does not exist, jdk-location argument passed
- p.__getitem__.return_value = "somewhere"
- p.__getitem__.side_effect = None
- args.jdk_location = "/existing/jdk/file"
- path_existsMock.side_effect = [False, False, True, False, False, False]
- ambari_server.download_jdk(args)
- self.assertTrue(copyfile_mock.called)
- copyfile_mock.reset_mock()
- # Negative test case: JDK file does not exist, jdk-location argument
- # (non-accessible file) passed
- p.__getitem__.return_value = "somewhere"
- p.__getitem__.side_effect = None
- args.jdk_location = "/existing/jdk/file"
- path_existsMock.side_effect = [False, False, True, False, False, False]
- def copyfile_side_effect(s, d):
- raise Exception("TerribleException")
- copyfile_mock.side_effect = copyfile_side_effect
- try:
- ambari_server.download_jdk(args)
- self.fail("Should throw exception")
- except FatalException:
- # Expected
- self.assertTrue(copyfile_mock.called)
- copyfile_mock.reset_mock()
- # Test case: jdk is already installed, ensure that JCE check is not skipped
- p = MagicMock()
- get_ambari_properties_mock.return_value = p
- p.__getitem__.return_value = "somewhere"
- get_JAVA_HOME_mock.return_value = True
- path_existsMock.return_value = True
- install_jce_manualy_mock.return_value = 1
- with patch.object(ambari_server, "download_jce_policy") as download_jce_policy_mock:
- rcode = ambari_server.download_jdk(args)
- self.assertTrue(download_jce_policy_mock.called)
- @patch.object(ambari_server, "run_os_command")
- def test_get_postgre_status(self, run_os_command_mock):
- run_os_command_mock.return_value = (1, "running", None)
- result = ambari_server.get_postgre_status()
- self.assertEqual("running", result)
- run_os_command_mock.return_value = (1, "wrong", None)
- result = ambari_server.get_postgre_status()
- self.assertEqual(None, result)
- @patch("time.sleep")
- @patch("subprocess.Popen")
- @patch.object(ambari_server, "run_os_command")
- @patch.object(ambari_server, "get_postgre_status")
- def test_check_postgre_up(self, get_postgre_status_mock, run_os_command_mock,
- popen_mock, sleep_mock):
- p = MagicMock()
- p.poll.return_value = 0
- popen_mock.return_value = p
- run_os_command_mock.return_value = (0, None, None)
- rcode = ambari_server.check_postgre_up()
- self.assertEqual(0, rcode)
- p.poll.return_value = 4
- get_postgre_status_mock.return_value = None
- rcode = ambari_server.check_postgre_up()
- self.assertEqual(4, rcode)
- @patch("platform.linux_distribution")
- @patch("platform.system")
- @patch.object(ambari_server, "print_info_msg")
- @patch.object(ambari_server, "print_error_msg")
- @patch.object(ambari_server, "get_ambari_properties")
- @patch.object(ambari_server, "write_property")
- @patch.object(ambari_server, "get_conf_dir")
- def test_configure_os_settings(self, get_conf_dir_mock, write_property_mock, get_ambari_properties_mock,
- print_error_msg_mock, print_info_msg_mock,
- systemMock, distMock):
- get_ambari_properties_mock.return_value = -1
- rcode = ambari_server.configure_os_settings()
- self.assertEqual(-1, rcode)
- p = MagicMock()
- p[ambari_server.OS_TYPE_PROPERTY] = 'somevalue'
- get_ambari_properties_mock.return_value = p
- rcode = ambari_server.configure_os_settings()
- self.assertEqual(0, rcode)
- p.__getitem__.return_value = ""
- systemMock.return_value = "NonLinux"
- rcode = ambari_server.configure_os_settings()
- self.assertEqual(-1, rcode)
- systemMock.return_value = "Linux"
- distMock.return_value = ("CentOS", "6.3", None)
- rcode = ambari_server.configure_os_settings()
- self.assertEqual(0, rcode)
- self.assertTrue(write_property_mock.called)
- @patch("__builtin__.open")
- @patch.object(ambari_server, "Properties")
- @patch.object(ambari_server, "search_file")
- @patch.object(ambari_server, "get_conf_dir")
- def test_get_JAVA_HOME(self, get_conf_dir_mock, search_file_mock,
- Properties_mock, openMock):
- openMock.side_effect = Exception("exception")
- result = ambari_server.get_JAVA_HOME()
- self.assertEqual(None, result)
- expected = os.path.dirname(__file__)
- p = MagicMock()
- p.__getitem__.return_value = expected
- openMock.side_effect = None
- Properties_mock.return_value = p
- result = ambari_server.get_JAVA_HOME()
- self.assertEqual(expected, result)
- def test_prompt_db_properties_default(self):
- args = MagicMock()
- ambari_server.load_default_db_properties(args)
- ambari_server.prompt_db_properties(args)
- self.assertEqual(args.database, "postgres")
- self.assertEqual(args.database_host, "localhost")
- self.assertEqual(args.database_name, "ambari")
- self.assertEqual(args.database_port, "5432")
- @patch.object(ambari_server, "setup_master_key")
- @patch.object(ambari_server, "read_password")
- @patch.object(ambari_server, "get_validated_string_input")
- @patch.object(ambari_server, "get_YN_input")
- def test_prompt_db_properties_oracle_sname(self, gyni_mock, gvsi_mock, rp_mock, smk_mock):
- ambari_server.PROMPT_DATABASE_OPTIONS = True
- gyni_mock.return_value = True
- list_of_return_values= ["ambari-server", "ambari", "1", "1521", "localhost", "2"]
- def side_effect(*args, **kwargs):
- return list_of_return_values.pop()
- gvsi_mock.side_effect = side_effect
- rp_mock.return_value = "password"
- smk_mock.return_value = (None, False, True)
- args = MagicMock()
- ambari_server.load_default_db_properties(args)
- ambari_server.prompt_db_properties(args)
- self.assertEqual(args.database, "oracle")
- self.assertEqual(args.database_port, "1521")
- self.assertEqual(args.database_host, "localhost")
- self.assertEqual(args.database_name, "ambari")
- self.assertEqual(args.database_username, "ambari-server")
- self.assertEqual(args.sid_or_sname, "sname")
- @patch.object(ambari_server, "setup_master_key")
- @patch.object(ambari_server, "read_password")
- @patch.object(ambari_server, "get_validated_string_input")
- @patch.object(ambari_server, "get_YN_input")
- def test_prompt_db_properties_oracle_sid(self, gyni_mock, gvsi_mock, rp_mock, smk_mock):
- ambari_server.PROMPT_DATABASE_OPTIONS = True
- gyni_mock.return_value = True
- list_of_return_values= ["ambari-server", "ambari", "2", "1521", "localhost", "2"]
- def side_effect(*args, **kwargs):
- return list_of_return_values.pop()
- gvsi_mock.side_effect = side_effect
- rp_mock.return_value = "password"
- smk_mock.return_value = (None, False, True)
- args = MagicMock()
- ambari_server.load_default_db_properties(args)
- ambari_server.prompt_db_properties(args)
- self.assertEqual(args.database, "oracle")
- self.assertEqual(args.database_port, "1521")
- self.assertEqual(args.database_host, "localhost")
- self.assertEqual(args.database_name, "ambari")
- self.assertEqual(args.database_username, "ambari-server")
- self.assertEqual(args.sid_or_sname, "sid")
- @patch.object(ambari_server, "setup_master_key")
- @patch.object(ambari_server, "read_password")
- @patch.object(ambari_server, "get_validated_string_input")
- @patch.object(ambari_server, "get_YN_input")
- def test_prompt_db_properties_postgre_adv(self, gyni_mock, gvsi_mock, rp_mock, smk_mock):
- ambari_server.PROMPT_DATABASE_OPTIONS = True
- gyni_mock.return_value = True
- list_of_return_values= ["ambari-server", "ambari", "1"]
- def side_effect(*args, **kwargs):
- return list_of_return_values.pop()
- gvsi_mock.side_effect = side_effect
- rp_mock.return_value = "password"
- smk_mock.return_value = (None, False, True)
- args = MagicMock()
- ambari_server.load_default_db_properties(args)
- ambari_server.prompt_db_properties(args)
- self.assertEqual(args.database, "postgres")
- self.assertEqual(args.database_port, "5432")
- self.assertEqual(args.database_host, "localhost")
- self.assertEqual(args.database_name, "ambari")
- self.assertEqual(args.database_username, "ambari-server")
- self.assertEqual(args.sid_or_sname, "sname")
- @patch("glob.glob")
- @patch.object(ambari_server, "get_JAVA_HOME")
- def test_find_jdk(self, get_JAVA_HOME_mock, globMock):
- get_JAVA_HOME_mock.return_value = "somewhere"
- result = ambari_server.find_jdk()
- self.assertEqual("somewhere", result)
- get_JAVA_HOME_mock.return_value = None
- globMock.return_value = []
- result = ambari_server.find_jdk()
- self.assertEqual(None, result)
- globMock.return_value = ["one", "two"]
- result = ambari_server.find_jdk()
- self.assertNotEqual(None, result)
- @patch.object(ambari_server, "get_YN_input")
- @patch.object(ambari_server, "configure_os_settings")
- @patch.object(ambari_server, "download_jdk")
- @patch.object(ambari_server, "configure_postgres")
- @patch.object(ambari_server, "setup_db")
- @patch.object(ambari_server, "check_postgre_up")
- @patch.object(ambari_server, "check_iptables")
- @patch.object(ambari_server, "check_ambari_user")
- @patch.object(ambari_server, "check_jdbc_drivers")
- @patch.object(ambari_server, "check_selinux")
- @patch.object(ambari_server, "setup_remote_db")
- @patch.object(ambari_server, "store_remote_properties")
- @patch.object(ambari_server, "is_local_database")
- @patch.object(ambari_server, "store_local_properties")
- @patch.object(ambari_server, "is_root")
- def test_setup(self, is_root_mock, store_local_properties_mock, is_local_database_mock, store_remote_properties_mock,
- setup_remote_db_mock, check_selinux_mock, check_jdbc_drivers_mock, check_ambari_user_mock,
- check_iptables_mock, check_postgre_up_mock, setup_db_mock, configure_postgres_mock,
- download_jdk_mock, configure_os_settings_mock,get_YN_input ):
- args = MagicMock()
- failed = False
- get_YN_input.return_value = False
- def reset_mocks():
- is_root_mock.reset_mock()
- store_local_properties_mock.reset_mock()
- store_remote_properties_mock.reset_mock()
- is_local_database_mock.reset_mock()
- setup_remote_db_mock.reset_mock()
- check_selinux_mock.reset_mock()
- check_jdbc_drivers_mock.reset_mock()
- check_ambari_user_mock.reset_mock()
- check_iptables_mock.reset_mock()
- check_postgre_up_mock.reset_mock()
- setup_db_mock.reset_mock()
- configure_postgres_mock.reset_mock()
- download_jdk_mock.reset_mock()
- configure_os_settings_mock.reset_mock()
- pass
- # Testing call under non-root
- is_root_mock.return_value = False
- try:
- ambari_server.setup(args)
- self.fail("Should throw exception")
- except FatalException as fe:
- # Expected
- self.assertTrue("root-level" in fe.reason)
- pass
- # Testing calls under root
- # remote case
- is_root_mock.return_value = True
- check_selinux_mock.return_value = 0
- check_ambari_user_mock.return_value = 0
- check_jdbc_drivers_mock.return_value = 0
- check_iptables_mock.return_value = (0, "other")
- check_postgre_up_mock.return_value = 0
- setup_db_mock.return_value = 0
- setup_remote_db_mock.return_value = 0
- is_local_database_mock.return_value = False
- configure_postgres_mock.return_value = 0
- download_jdk_mock.return_value = 0
- configure_os_settings_mock.return_value = 0
- store_remote_properties_mock.return_value = 0
- store_local_properties_mock.return_value = 0
- result = ambari_server.setup(args)
- self.assertEqual(None, result)
- self.assertTrue(check_ambari_user_mock.called)
- self.assertEquals(True, store_remote_properties_mock.called)
- self.assertEquals(False, store_local_properties_mock.called)
- #Local case
- reset_mocks()
- is_local_database_mock.return_value = True
- try:
- result = ambari_server.setup(args)
- except FatalException:
- self.fail("Setup should be successful")
- self.assertEqual(None, result)
- self.assertEquals(True, store_local_properties_mock.called)
- self.assertEquals(False, store_remote_properties_mock.called)
- #negative case
- reset_mocks()
- is_local_database_mock.return_value = False
- setup_remote_db_mock.return_value = -1
- try:
- result = ambari_server.setup(args)
- self.fail("Should throw exception")
- except NonFatalException as fe:
- self.assertTrue("cli was not found" in fe.reason)
- @patch.object(ambari_server, "get_YN_input")
- @patch.object(ambari_server, "setup_db")
- @patch.object(ambari_server, "print_info_msg")
- @patch.object(ambari_server, "run_os_command")
- @patch.object(ambari_server, "configure_database_username_password")
- @patch.object(ambari_server, "parse_properties_file")
- @patch.object(ambari_server, "execute_remote_script")
- @patch.object(ambari_server, "is_root")
- def test_reset(self, is_root_mock, execute_remote_script_mock, parse_properties_file_mock, configure_database_username_password_mock,
- run_os_command_mock, print_info_msg_mock,
- setup_db_mock, get_YN_inputMock):
- parse_properties_file_mock.return_value = 0
- args = MagicMock()
- args.persistence_type = "local"
- get_YN_inputMock.return_value = False
- # Testing call under non-root
- is_root_mock.return_value = False
- try:
- ambari_server.reset(args)
- self.fail("Should throw exception")
- except FatalException as fe:
- # Expected
- self.assertTrue("root-level" in fe.reason)
- pass
- # Testing calls under root
- is_root_mock.return_value = True
- try:
- ambari_server.reset(args)
- self.fail("Should throw exception")
- except FatalException as fe:
- # Expected
- self.assertFalse("root-level" in fe.reason)
- pass
- get_YN_inputMock.return_value = True
- run_os_command_mock.return_value = (1, None, None)
- try:
- ambari_server.reset(args)
- self.fail("Should throw exception")
- except FatalException:
- # Expected
- pass
- run_os_command_mock.return_value = (0, None, None)
- ambari_server.reset(args)
- self.assertTrue(setup_db_mock.called)
-
- #remote db case
- args.persistence_type = "remote"
- execute_remote_script_mock.return_value=(0, None, None)
- rcode = ambari_server.reset(args)
- self.assertEqual(None, rcode)
- self.assertTrue(execute_remote_script_mock.called)
- @patch.object(ambari_server, "setup_db")
- @patch.object(ambari_server, "print_info_msg")
- @patch.object(ambari_server, "run_os_command")
- @patch.object(ambari_server, "parse_properties_file")
- @patch.object(ambari_server, "is_root")
- def test_silent_reset(self, is_root_mock, parse_properties_file_mock,
- run_os_command_mock, print_info_msg_mock,
- setup_db_mock):
- is_root_mock.return_value = True
- args = MagicMock()
- ambari_server.SILENT = True
- self.assertTrue(ambari_server.SILENT)
- run_os_command_mock.return_value = (0, None, None)
- def signal_handler(signum, frame):
- self.fail("Timed out!")
- signal.signal(signal.SIGALRM, signal_handler)
- signal.alarm(5)
- rcode = ambari_server.reset(args)
- signal.alarm(0)
- self.assertEqual(None, rcode)
- self.assertTrue(setup_db_mock.called)
- @patch("os.chown")
- @patch("pwd.getpwnam")
- @patch.object(ambari_server, 'get_master_key_location')
- @patch.object(ambari_server, 'save_master_key')
- @patch('os.chmod', autospec=True)
- @patch.object(ambari_server, 'get_validated_string_input')
- @patch("os.environ")
- @patch.object(ambari_server, "get_ambari_properties")
- @patch("os.kill")
- @patch("os.path.exists")
- @patch("__builtin__.open")
- @patch("subprocess.Popen")
- @patch.object(ambari_server, "print_info_msg")
- @patch.object(ambari_server, "search_file")
- @patch.object(ambari_server, "find_jdk")
- @patch.object(ambari_server, "print_error_msg")
- @patch.object(ambari_server, "check_postgre_up")
- @patch.object(ambari_server, "check_iptables")
- @patch.object(ambari_server, "parse_properties_file")
- @patch.object(ambari_server, "read_ambari_user")
- @patch.object(ambari_server, "is_root")
- @patch("getpass.getuser")
- @patch("os.chdir")
- def test_start(self, chdir_mock, getuser_mock, is_root_mock, read_ambari_user_mock,
- parse_properties_file_mock, check_iptables_mock, check_postgre_up_mock,
- print_error_msg_mock, find_jdk_mock, search_file_mock,
- print_info_msg_mock, popenMock, openMock, pexistsMock,
- killMock, get_ambari_properties_mock, os_environ_mock,
- get_validated_string_input_method, os_chmod_method,
- save_master_key_method, get_master_key_location_method,
- getpwnam_mock, os_chown_mock):
- args = MagicMock()
- f = MagicMock()
- f.readline.return_value = 42
- openMock.return_value = f
- p = get_ambari_properties_mock.return_value
- p.get_property.return_value = 'False'
- search_file_mock.return_value = None
- pw = MagicMock()
- pw.setattr('pw_uid', 0)
- pw.setattr('pw_gid', 0)
- getpwnam_mock.return_value = pw
- os_chown_mock.return_value = None
- # Checking "server is running"
- pexistsMock.return_value = True
- try:
- ambari_server.start(args)
- self.fail("Should fail with 'Server is running'")
- except FatalException:
- # Expected
- pass
- self.assertTrue(killMock.called)
- killMock.reset_mock()
- parse_properties_file_mock.reset_mock()
- pexistsMock.return_value = False
- # Checking situation when ambari user is not set up
- read_ambari_user_mock.return_value = None
- try:
- ambari_server.start(args)
- self.fail("Should fail with 'Can not detect a system user for Ambari'")
- except FatalException as e:
- # Expected
- self.assertTrue('Unable to detect a system user for Ambari Server.' in e.reason)
- parse_properties_file_mock.reset_mock()
- # Checking start from non-root when current user is not the same as a
- # custom user
- read_ambari_user_mock.return_value = "dummy-user"
- getuser_mock.return_value = "non_custom_user"
- is_root_mock.return_value = False
- try:
- ambari_server.start(args)
- self.fail("Should fail with 'Can not start ambari-server as user...'")
- except FatalException as e:
- # Expected
- self.assertTrue('Unable to start Ambari Server as user' in e.reason)
- self.assertFalse(parse_properties_file_mock.called)
- parse_properties_file_mock.reset_mock()
- # Checking "jdk not found"
- is_root_mock.return_value = True
- find_jdk_mock.return_value = None
- try:
- ambari_server.start(args)
- self.fail("Should fail with 'No JDK found'")
- except FatalException as e:
- # Expected
- self.assertTrue('No JDK found' in e.reason)
- find_jdk_mock.return_value = "somewhere"
- parse_properties_file_mock.reset_mock()
- ## Testing workflow under root
- is_root_mock.return_value = True
- # Remote DB
- args.persistence_type="remote"
- check_iptables_mock.return_value = (0, None)
- try:
- ambari_server.start(args)
- except FatalException as e:
- # Ignored
- pass
- self.assertFalse('Unable to start PostgreSQL server' in e.reason)
- self.assertFalse(check_postgre_up_mock.called)
- check_postgre_up_mock.reset_mock()
- parse_properties_file_mock.reset_mock()
- # Local DB
- args.persistence_type="local"
- # case: postgres failed to start
- check_postgre_up_mock.return_value = 1
- try:
- ambari_server.start(args)
- self.fail("Should fail with 'Unable to start PostgreSQL server'")
- except FatalException as e:
- # Expected
- self.assertTrue('Unable to start PostgreSQL server' in e.reason)
- self.assertTrue(check_postgre_up_mock.called)
- parse_properties_file_mock.reset_mock()
- # case: iptables failed to stop
- check_postgre_up_mock.return_value = 0
- check_iptables_mock.return_value = (1, ambari_server.IP_TBLS_ENABLED)
- try:
- ambari_server.start(args)
- self.fail("Should fail with 'Failed to stop iptables'")
- except FatalException as e:
- # Expected
- self.assertTrue('Failed to stop iptables' in e.reason)
- parse_properties_file_mock.reset_mock()
- check_iptables_mock.return_value = (0, None)
- # Case: custom user is "root"
- read_ambari_user_mock.return_value = "root"
- ambari_server.start(args)
- self.assertTrue(popenMock.called)
- popen_arg = popenMock.call_args[0][0]
- self.assertTrue(popen_arg[0] == "/bin/sh")
- popenMock.reset_mock()
- parse_properties_file_mock.reset_mock()
- # Case: custom user is not "root"
- read_ambari_user_mock.return_value = "not-root-user"
- ambari_server.start(args)
- self.assertTrue(chdir_mock.called)
- self.assertTrue(popenMock.called)
- popen_arg = popenMock.call_args[0][0]
- self.assertTrue(popen_arg[0] == "/bin/su")
- check_postgre_up_mock.reset_mock()
- popenMock.reset_mock()
- parse_properties_file_mock.reset_mock()
- ## Testing workflow under non-root
- is_root_mock.return_value = False
- read_ambari_user_mock.return_value = "not-root-user"
- getuser_mock.return_value = read_ambari_user_mock.return_value
- parse_properties_file_mock.reset_mock()
- # Local DB
- args.persistence_type="local"
- ambari_server.start(args)
- self.assertFalse(check_postgre_up_mock.called)
- parse_properties_file_mock.reset_mock()
- # Remote DB
- args.persistence_type="remote"
- ambari_server.start(args)
- self.assertFalse(check_postgre_up_mock.called)
- parse_properties_file_mock.reset_mock()
- # Checking call
- check_iptables_mock.reset_mock()
- check_iptables_mock.return_value = (0, None)
- ambari_server.start(args)
- self.assertTrue(popenMock.called)
- popen_arg = popenMock.call_args[0][0]
- self.assertTrue(popen_arg[0] == "/bin/sh")
- self.assertFalse(check_iptables_mock.called)
- parse_properties_file_mock.reset_mock()
- # Test start under wrong user
- read_ambari_user_mock.return_value = "not-root-user"
- getuser_mock.return_value = "non_custom_user"
- try:
- ambari_server.start(args)
- self.fail("Can not start ambari-server as user non_custom_user.")
- except FatalException as e:
- # Expected
- self.assertTrue('Unable to start Ambari Server as user' in e.reason)
- parse_properties_file_mock.reset_mock()
- # Check environ master key is set
- popenMock.reset_mock()
- os_environ_mock.copy.return_value = {"a" : "b",
- ambari_server.SECURITY_KEY_ENV_VAR_NAME : "masterkey"}
- args.persistence_type="local"
- read_ambari_user_mock.return_value = "root"
- is_root_mock.return_value = True
- ambari_server.start(args)
- self.assertFalse(get_validated_string_input_method.called)
- self.assertFalse(save_master_key_method.called)
- popen_arg = popenMock.call_args[1]['env']
- self.assertEquals(os_environ_mock.copy.return_value, popen_arg)
- parse_properties_file_mock.reset_mock()
- # Check environ master key is not set
- popenMock.reset_mock()
- os_environ_mock.reset_mock()
- p.get_property.return_value = 'True'
- os_environ_mock.copy.return_value = {"a" : "b"}
- args.persistence_type="local"
- read_ambari_user_mock.return_value = "root"
- is_root_mock.return_value = True
- get_validated_string_input_method.return_value = "masterkey"
- os_chmod_method.return_value = None
- ambari_server.start(args)
- self.assertTrue(get_validated_string_input_method.called)
- self.assertTrue(save_master_key_method.called)
- popen_arg = popenMock.call_args[1]['env']
- self.assertEquals(os_environ_mock.copy.return_value, popen_arg)
- @patch("__builtin__.open")
- @patch("os.path.exists")
- @patch("os.remove")
- @patch("os.killpg")
- @patch("os.getpgid")
- @patch.object(ambari_server, "print_info_msg")
- def test_stop(self, print_info_msg_mock, gpidMock, removeMock,
- killMock, pexistsMock, openMock):
- pexistsMock.return_value = True
- f = MagicMock()
- f.readline.return_value = "42"
- openMock.return_value = f
- ambari_server.stop(None)
- self.assertTrue(f.readline.called)
- self.assertTrue(killMock.called)
- self.assertTrue(killMock.called)
- self.assertTrue(f.close.called)
- self.assertTrue(removeMock.called)
- @patch.object(ambari_server, "configure_database_username_password")
- @patch.object(ambari_server, "run_os_command")
- @patch.object(ambari_server, "is_root")
- def test_upgrade_stack(self, is_root_mock, run_os_command_mock,
- configure_postgres_username_password_mock):
- args = MagicMock()
- # Testing call under non-root
- is_root_mock.return_value = False
- try:
- ambari_server.upgrade_stack(args, 'HDP-2.0')
- self.fail("Should throw exception")
- except FatalException as fe:
- # Expected
- self.assertTrue("root-level" in fe.reason)
- pass
- # Testing calls under root
- is_root_mock.return_value = True
- run_os_command_mock.return_value = (0, '', '')
- ambari_server.upgrade_stack(args, 'HDP-2.0')
- self.assertTrue(configure_postgres_username_password_mock.called)
- self.assertTrue(run_os_command_mock.called)
- @patch.object(ambari_server, "adjust_directory_permissions")
- @patch.object(ambari_server, "print_warning_msg")
- @patch.object(ambari_server, "read_ambari_user")
- @patch.object(ambari_server, "check_db_consistency")
- @patch.object(ambari_server, "execute_db_script")
- @patch.object(ambari_server, "check_postgre_up")
- @patch.object(ambari_server, "update_ambari_properties")
- @patch.object(ambari_server, "parse_properties_file")
- @patch.object(ambari_server, "is_root")
- def test_upgrade(self, is_root_mock, parse_properties_file_mock, update_ambari_properties_mock,
- check_postgre_up_mock, execute_db_script_mock,
- check_db_consistency_mock, read_ambari_user_mock,
- print_warning_msg_mock, adjust_directory_permissions_mock):
- args = MagicMock()
- args.upgrade_script_file = "/var/lib/"\
- "ambari-server/resources/upgrade/ddl/"\
- "Ambari-DDL-Postgres-UPGRADE-1.3.0.sql"
- update_ambari_properties_mock.return_value = 0
- check_postgre_up_mock.return_value = 0
- execute_db_script_mock.return_value = 0
- check_db_consistency_mock.return_value = 0
- # Testing call under non-root
- is_root_mock.return_value = False
- try:
- ambari_server.upgrade(args)
- self.fail("Should throw exception")
- except FatalException as fe:
- # Expected
- self.assertTrue("root-level" in fe.reason)
- pass
- # Testing calls under root
- is_root_mock.return_value = True
- # Testing with undefined custom user
- read_ambari_user_mock.return_value = None
- ambari_server.upgrade(args)
- self.assertTrue(print_warning_msg_mock.called)
- warning_args = print_warning_msg_mock.call_args[0][0]
- self.assertTrue("custom ambari user" in warning_args)
- # Testing with defined custom user
- read_ambari_user_mock.return_value = "ambari-custom-user"
- ambari_server.upgrade(args)
- self.assertTrue(adjust_directory_permissions_mock.called)
- def test_print_info_msg(self):
- out = StringIO.StringIO()
- sys.stdout = out
- ambari_server.VERBOSE = True
- ambari_server.print_info_msg("msg")
- self.assertNotEqual("", out.getvalue())
- sys.stdout = sys.__stdout__
- def test_print_error_msg(self):
- out = StringIO.StringIO()
- sys.stdout = out
- ambari_server.VERBOSE = True
- ambari_server.print_error_msg("msg")
- self.assertNotEqual("", out.getvalue())
- sys.stdout = sys.__stdout__
- def test_print_warning_msg(self):
- out = StringIO.StringIO()
- sys.stdout = out
- ambari_server.VERBOSE = True
- ambari_server.print_warning_msg("msg")
- self.assertNotEqual("", out.getvalue())
- sys.stdout = sys.__stdout__
- @patch.object(ambari_server, "get_choice_string_input")
- def test_get_YN_input(self, get_choice_string_input_mock):
- ambari_server.get_YN_input("prompt", "default")
- self.assertTrue(get_choice_string_input_mock.called)
- self.assertEqual(4, len(get_choice_string_input_mock.call_args_list[0][0]))
- def test_load_default_db_properties(self):
- args = MagicMock()
- ambari_server.load_default_db_properties(args)
- self.assertEquals(args.database, "postgres")
- self.assertEquals(args.database_host, "localhost")
- self.assertEquals(args.database_port, "5432")
- self.assertEquals(args.database_name, "ambari")
- self.assertEquals(args.database_username, "ambari")
- self.assertEquals(args.database_password, "bigdata")
- args = MagicMock()
- ambari_server.DATABASE_INDEX=1
- ambari_server.load_default_db_properties(args)
- self.assertEquals(args.database, "oracle")
- self.assertEquals(args.database_port, "1521")
- failed = False
- args = MagicMock()
- ambari_server.DATABASE_INDEX=2
- try:
- ambari_server.load_default_db_properties(args)
- except:
- failed = True
- self.assertTrue(failed)
- pass
- @patch.object(ambari_server, 'setup')
- def test_main_db_options(self, setup_mock):
- base_args = ["ambari-server.py", "setup"]
- db_args = ["--database", "postgres", "--databasehost", "somehost.net", "--databaseport", "12345",
- "--databasename", "ambari", "--databaseusername", "ambari", "--databasepassword", "bigdata"]
- #test no args
- failed = False
- sys.argv = list(base_args)
- try:
- ambari_server.main()
- except SystemExit:
- failed = True
- pass
- self.assertFalse(failed)
- self.assertTrue(setup_mock.called)
- setup_mock.reset_mock()
- #test full args
- sys.argv = list(base_args)
- sys.argv.extend(db_args)
- try:
- ambari_server.main()
- except SystemExit:
- failed = True
- pass
- self.assertTrue(ambari_server.PROMPT_DATABASE_OPTIONS)
- self.assertFalse(failed)
- self.assertTrue(setup_mock.called)
- setup_mock.reset_mock()
- #test not full args
- sys.argv = list(base_args)
- sys.argv.extend(["--database", "postgres"])
- try:
- ambari_server.main()
- except SystemExit:
- failed = True
- pass
- self.assertFalse(setup_mock.called)
- self.assertTrue(failed)
- setup_mock.reset_mock()
- #test wrong database
- failed = False
- sys.argv = list(base_args)
- sys.argv.extend(["--database", "unknown"])
- sys.argv.extend(db_args[2:])
- try:
- ambari_server.main()
- except SystemExit:
- failed = True
- pass
- self.assertTrue(failed)
- self.assertFalse(setup_mock.called)
- setup_mock.reset_mock()
- #test wrong port check
- failed = False
- sys.argv = list(base_args)
- sys.argv.extend(["--databaseport", "unknown"])
- sys.argv.extend(db_args[:4])
- sys.argv.extend(db_args[6:])
- try:
- ambari_server.main()
- except SystemExit:
- failed = True
- pass
- self.assertTrue(failed)
- self.assertFalse(setup_mock.called)
- setup_mock.reset_mock()
- pass
- @patch.object(ambari_server, "load_default_db_properties")
- @patch.object(ambari_server, "get_YN_input")
- @patch.object(ambari_server, "get_validated_string_input")
- @patch.object(ambari_server, "setup_master_key")
- @patch.object(ambari_server, "configure_database_password")
- def test_prompt_db_properties(self, configure_database_password_mock, setup_master_key_mock,
- get_validated_string_input_mock, get_YN_input_mock, load_default_db_properties_mock):
- args = MagicMock()
- #test not prompt
- ambari_server.PROMPT_DATABASE_OPTIONS = False
- ambari_server.prompt_db_properties(args)
- self.assertFalse(load_default_db_properties_mock.called)
- self.assertFalse(get_validated_string_input_mock.called)
- self.assertFalse(get_YN_input_mock.called)
- load_default_db_properties_mock.reset_mock()
- get_validated_string_input_mock.reset_mock()
- get_YN_input_mock.reset_mock()
- #test prompt
- get_YN_input_mock.return_value = False
- ambari_server.PROMPT_DATABASE_OPTIONS = True
- ambari_server.prompt_db_properties(args)
- self.assertTrue(get_YN_input_mock.called)
- self.assertFalse(get_validated_string_input_mock.called)
- self.assertTrue(load_default_db_properties_mock.called)
- load_default_db_properties_mock.reset_mock()
- get_validated_string_input_mock.reset_mock()
- get_YN_input_mock.reset_mock()
- #test prompt advanced
- get_YN_input_mock.return_value = True
- ambari_server.PROMPT_DATABASE_OPTIONS = True
- setup_master_key_mock.return_value = (None, False, True)
- configure_database_password_mock.return_value = ("test", None)
- ambari_server.prompt_db_properties(args)
- self.assertTrue(get_YN_input_mock.called)
- self.assertTrue(get_validated_string_input_mock.called)
- self.assertTrue(load_default_db_properties_mock.called)
- self.assertEquals(args.database, "postgres")
- load_default_db_properties_mock.reset_mock()
- get_validated_string_input_mock.reset_mock()
- get_YN_input_mock.reset_mock()
- pass
- @patch.object(ambari_server, "get_db_cli_tool")
- @patch.object(ambari_server, "run_in_shell")
- def test_execute_remote_script(self, run_in_shell_mock, get_db_cli_tool_mock):
- args = MagicMock()
- script = "script"
- #success
- run_in_shell_mock.return_value=(0, None, None)
- get_db_cli_tool_mock.return_value="tool"
- args.database = "postgres"
- args.database_password = "some_password"
- retcode, out, err = ambari_server.execute_remote_script(args, script)
- self.assertEquals(retcode, 0)
- self.assertTrue(get_db_cli_tool_mock.called)
- self.assertTrue(run_in_shell_mock.called)
- #fail no cli tool
- get_db_cli_tool_mock.return_value = None
- get_db_cli_tool_mock.called = False
- run_in_shell_mock.called = False
- retcode, out, err = ambari_server.execute_remote_script(args, script)
- self.assertEquals(retcode, -1)
- self.assertTrue(get_db_cli_tool_mock.called)
- self.assertFalse(run_in_shell_mock.called)
- #fail execute
- errcode = 1
- get_db_cli_tool_mock.return_value = "tool"
- run_in_shell_mock.return_value=(errcode, None, None)
- get_db_cli_tool_mock.called = False
- run_in_shell_mock.called = False
- retcode, out, err = ambari_server.execute_remote_script(args, script)
- self.assertEquals(retcode, errcode)
- self.assertTrue(get_db_cli_tool_mock.called)
- self.assertTrue(run_in_shell_mock.called)
- #fail wrong database - case should be completely impossible
- get_db_cli_tool_mock.return_value = "tool"
- run_in_shell_mock.return_value=(0, None, None)
- get_db_cli_tool_mock.called = False
- run_in_shell_mock.called = False
- args.database = "unknown"
- retcode, out, err = ambari_server.execute_remote_script(args, script)
- self.assertEquals(retcode, -2)
- self.assertTrue(get_db_cli_tool_mock.called)
- self.assertFalse(run_in_shell_mock.called)
- pass
- @patch.object(ambari_server, "get_conf_dir")
- def test_update_ambari_properties(self, get_conf_dir_mock):
- properties = ["server.jdbc.user.name=ambari-server\n",
- "server.jdbc.user.passwd=/etc/ambari-server/conf/password.dat\n",
- "java.home=/usr/jdk64/jdk1.6.0_31\n",
- "server.os_type=redhat6\n",
- "ambari-server.user=ambari\n",
- "agent.fqdn.service.url=URL\n"]
- NEW_PROPERTY = 'some_new_property=some_value\n'
- CHANGED_VALUE_PROPERTY = 'server.os_type=should_not_overwrite_value\n'
- get_conf_dir_mock.return_value = '/etc/ambari-server/conf'
- (tf1, fn1) = tempfile.mkstemp()
- (tf2, fn2) = tempfile.mkstemp()
- ambari_server.AMBARI_PROPERTIES_RPMSAVE_FILE = fn1
- ambari_server.AMBARI_PROPERTIES_FILE = fn2
- with open(ambari_server.AMBARI_PROPERTIES_FILE, "w") as f:
- f.write(NEW_PROPERTY)
- f.write(CHANGED_VALUE_PROPERTY)
- with open(ambari_server.AMBARI_PROPERTIES_RPMSAVE_FILE, 'w') as f:
- for line in properties:
- f.write(line)
- #Call tested method
- ambari_server.update_ambari_properties()
- timestamp = datetime.datetime.now()
- #RPMSAVE_FILE wasn't found
- self.assertFalse(os.path.exists(ambari_server.AMBARI_PROPERTIES_RPMSAVE_FILE))
- #Renamed RPMSAVE_FILE exists
- self.assertTrue(os.path.exists(ambari_server.AMBARI_PROPERTIES_RPMSAVE_FILE
- + '.' + timestamp.strftime('%Y%m%d%H%M%S')))
- with open(ambari_server.AMBARI_PROPERTIES_FILE, 'r') as f:
- ambari_properties_content = f.readlines()
- for line in properties:
- if (line == "agent.fqdn.service.url=URL\n"):
- if (not ambari_server.GET_FQDN_SERVICE_URL+"=URL\n" in ambari_properties_content) and (line in ambari_properties_content):
- self.fail()
- else:
- if not line in ambari_properties_content:
- self.fail()
- if not NEW_PROPERTY in ambari_properties_content:
- self.fail()
- if CHANGED_VALUE_PROPERTY in ambari_properties_content:
- self.fail()
- # Command should not fail if *.rpmsave file is missing
- result = ambari_server.update_ambari_properties()
- self.assertEquals(result, 0)
- os.unlink(fn2)
- #if ambari.properties file is absent then "ambari-server upgrade" should
- # fail
- (tf, fn) = tempfile.mkstemp()
- ambari_server.AMBARI_PROPERTIES_RPMSAVE_FILE = fn
- result = ambari_server.update_ambari_properties()
- self.assertNotEquals(result, 0)
- @patch.object(ambari_server.Properties, '__init__')
- @patch.object(ambari_server, 'search_file')
- def test_update_ambari_properties_negative_case(self, search_file_mock, properties_mock):
- search_file_mock.return_value = None
- #Call tested method
- self.assertEquals(0, ambari_server.update_ambari_properties())
- self.assertFalse(properties_mock.called)
- search_file_mock.return_value = False
- #Call tested method
- self.assertEquals(0, ambari_server.update_ambari_properties())
- self.assertFalse(properties_mock.called)
- search_file_mock.return_value = ''
- #Call tested method
- self.assertEquals(0, ambari_server.update_ambari_properties())
- self.assertFalse(properties_mock.called)
- @patch.object(ambari_server, "get_conf_dir")
- def test_update_ambari_properties_without_user_property(self, get_conf_dir_mock):
- '''
- Checks: update_ambari_properties call should add ambari-server.user property if
- it's absent
- '''
- properties = ["server.jdbc.user.name=ambari-server\n",
- "server.jdbc.user.passwd=/etc/ambari-server/conf/password.dat\n",
- "java.home=/usr/jdk64/jdk1.6.0_31\n",
- "server.os_type=redhat6\n"]
- get_conf_dir_mock.return_value = '/etc/ambari-server/conf'
- (tf1, fn1) = tempfile.mkstemp()
- (tf2, fn2) = tempfile.mkstemp()
- ambari_server.AMBARI_PROPERTIES_RPMSAVE_FILE = fn1
- ambari_server.AMBARI_PROPERTIES_FILE = fn2
- with open(ambari_server.AMBARI_PROPERTIES_RPMSAVE_FILE, 'w') as f:
- for line in properties:
- f.write(line)
- #Call tested method
- ambari_server.update_ambari_properties()
- ambari_properties = ambari_server.Properties()
- ambari_properties.load(open(fn2))
- self.assertTrue(ambari_server.NR_USER_PROPERTY in ambari_properties.keys())
- value = ambari_properties[ambari_server.NR_USER_PROPERTY]
- self.assertEqual(value, "root")
- os.unlink(fn2)
- @patch("sys.exit")
- @patch.object(ambari_server, "get_YN_input")
- @patch.object(ambari_server, "get_db_cli_tool")
- @patch.object(ambari_server, "store_remote_properties")
- @patch.object(ambari_server, "is_local_database")
- @patch.object(ambari_server, "check_iptables")
- @patch.object(ambari_server, "check_jdbc_drivers")
- @patch.object(ambari_server, "is_root")
- @patch.object(ambari_server, "check_ambari_user")
- @patch.object(ambari_server, "download_jdk")
- @patch.object(ambari_server, "configure_os_settings")
- @patch('__builtin__.raw_input')
- def test_setup_remote_db_wo_client(self,raw_input, configure_os_settings_mock, download_jdk_mock, check_ambari_user_mock, is_root_mock, check_jdbc_drivers_mock, check_iptables_mock, is_local_db_mock,
- store_remote_properties_mock, get_db_cli_tool_mock, get_YN_input, exit_mock):
- args = MagicMock()
- raw_input.return_value =""
- is_root_mock.return_value = True
- is_local_db_mock.return_value = False
- get_YN_input.return_value = False
- check_iptables_mock.return_value = (0, "other")
- store_remote_properties_mock.return_value = 0
- get_db_cli_tool_mock.return_value = None
- check_jdbc_drivers_mock.return_value=0
- check_ambari_user_mock.return_value = 0
- download_jdk_mock.return_value = 0
- configure_os_settings_mock.return_value = 0
- try:
- ambari_server.setup(args)
- self.fail("Should throw exception")
- except NonFatalException as fe:
- # Expected
- self.assertTrue("The cli was not found" in fe.reason)
- @patch.object(ambari_server, "parse_properties_file")
- @patch.object(ambari_server, "get_db_cli_tool")
- @patch.object(ambari_server, "print_error_msg")
- @patch.object(ambari_server, "get_YN_input")
- @patch.object(ambari_server, "setup_db")
- @patch.object(ambari_server, "run_os_command")
- @patch.object(ambari_server, "is_root")
- def test_reset_remote_db_wo_client(self, is_root_mock, run_os_command_mock, setup_db_mock,
- get_YN_inputMock, print_error_msg_mock, get_db_cli_tool_mock, parse_properties_file_mock):
- args = MagicMock()
- get_YN_inputMock.return_value = True
- run_os_command_mock.return_value = (0, None, None)
- args.persistence_type="remote"
- get_db_cli_tool_mock.return_value = None
- is_root_mock.return_value = True
- try:
- ambari_server.reset(args)
- self.fail("Should throw exception")
- except NonFatalException as fe:
- # Expected
- self.assertTrue("Client wasn't found" in fe.reason)
- pass
- @patch.object(ambari_server, "find_properties_file")
- def test_get_ambari_properties(self, find_properties_file_mock):
- find_properties_file_mock.return_value = None
- rcode = ambari_server.get_ambari_properties()
- self.assertEqual(rcode, -1)
-
- tf1 = tempfile.NamedTemporaryFile()
- find_properties_file_mock.return_value = tf1.name
- prop_name='name'
- prop_value='val'
-
- with open(tf1.name, 'w') as fout:
- fout.write(prop_name + '=' + prop_value)
- fout.close()
- properties = ambari_server.get_ambari_properties()
- self.assertEqual(properties[prop_name], prop_value)
- @patch.object(ambari_server, "get_ambari_properties")
- @patch.object(ambari_server, "find_jdbc_driver")
- @patch.object(ambari_server, "copy_files")
- @patch.object(ambari_server, "print_error_msg")
- @patch.object(ambari_server, "print_warning_msg")
- @patch('__builtin__.raw_input')
- @patch("sys.exit")
- def check_jdbc_drivers(self, exit_mock, raw_input_mock, print_warning_msg, print_error_msg_mock, copy_files_mock,
- find_jdbc_driver_mock, get_ambari_properties_mock):
- out = StringIO.StringIO()
- sys.stdout = out
- args = MagicMock()
- # Check positive scenario
- drivers_list = ['driver_file']
- resources_dir = '/tmp'
- get_ambari_properties_mock.return_value = {ambari_server.RESOURCES_DIR_PROPERTY : resources_dir}
- find_jdbc_driver_mock.return_value = drivers_list
- args.database = "oracle"
- rcode = ambari_server.check_jdbc_drivers(args)
- self.assertEqual(0, rcode)
- copy_files_mock.assert_called_with(drivers_list, resources_dir)
- # Check negative scenarios
- # Silent option, no drivers
- ambari_server.SILENT = True
- find_jdbc_driver_mock.return_value = -1
- rcode = ambari_server.check_jdbc_drivers(args)
- self.assertTrue(print_error_msg_mock.called)
- self.assertTrue(exit_mock.called)
- # Non-Silent option, no drivers
- ambari_server.SILENT = False
- find_jdbc_driver_mock.return_value = -1
- rcode = ambari_server.check_jdbc_drivers(args)
- self.assertTrue(exit_mock.called)
- self.assertTrue(print_error_msg_mock.called)
- # Non-Silent option, no drivers at first ask, present drivers after that
- find_jdbc_driver_mock.side_effect = [-1, drivers_list]
- rcode = ambari_server.check_jdbc_drivers(args)
- self.assertEqual(0, rcode)
- copy_files_mock.assert_called_with(drivers_list, resources_dir)
- # Non-Silent option, no drivers at first ask, present drivers after that
- find_jdbc_driver_mock.reset()
- find_jdbc_driver_mock.side_effect = [-1, -1]
- rcode = ambari_server.check_jdbc_drivers(args)
- self.assertTrue(exit_mock.called)
- self.assertTrue(print_error_msg_mock.called)
- sys.stdout = sys.__stdout__
- @patch.object(ambari_server, "find_properties_file")
- def test_get_ambari_properties(self, find_properties_file):
- find_properties_file.return_value = None
- rcode = ambari_server.get_ambari_properties()
- self.assertEqual(rcode, -1)
- tf1 = tempfile.NamedTemporaryFile()
- find_properties_file.return_value = tf1.name
- prop_name='name'
- prop_value='val'
- with open(tf1.name, 'w') as fout:
- fout.write(prop_name + '=' + prop_value)
- fout.close()
- properties = ambari_server.get_ambari_properties()
- self.assertEqual(properties[prop_name], prop_value)
- self.assertEqual(properties.fileName, os.path.abspath(tf1.name))
- sys.stdout = sys.__stdout__
-
- @patch("os.path.exists")
- @patch("os.remove")
- @patch.object(ambari_server,"print_warning_msg")
- def test_remove_file(self, printWarningMsgMock, removeMock, pathExistsMock):
- def side_effect():
- raise Exception(-1, "Failed to delete!")
-
- removeMock.side_effect = side_effect
- pathExistsMock.return_value = 1
-
- res = ambari_server.remove_file("/someNonExsistantDir/filename")
- self.assertEquals(res,1)
-
- removeMock.side_effect = None
- res = ambari_server.remove_file("/someExsistantDir/filename")
- self.assertEquals(res, 0)
-
- @patch("shutil.copyfile")
- def test_copy_file(self, shutilCopyfileMock):
- def side_effect():
- raise Exception(-1, "Failed to copy!")
-
- shutilCopyfileMock.side_effect = side_effect
-
- try:
- ambari_server.copy_file("/tmp/psswd","/someNonExsistantDir/filename")
- self.fail("Exception on file not copied has not been thrown!")
- except FatalException:
- # Expected
- pass
-
- self.assertTrue(shutilCopyfileMock.called)
-
-
- shutilCopyfileMock.side_effect = None
- try:
- ambari_server.copy_file("/tmp/psswd","/root/psswd")
- except FatalException:
- self.fail("Exception on file copied should not be thrown!")
-
- self.assertTrue(shutilCopyfileMock.called)
- @patch.object(ambari_server, "get_ambari_properties")
- @patch.object(ambari_server, "find_jdbc_driver")
- @patch.object(ambari_server, "copy_files")
- @patch.object(ambari_server, "print_error_msg")
- @patch.object(ambari_server, "print_warning_msg")
- @patch('__builtin__.raw_input')
- def test_check_jdbc_drivers(self, raw_input_mock, print_warning_msg, print_error_msg_mock, copy_files_mock,
- find_jdbc_driver_mock, get_ambari_properties_mock):
- out = StringIO.StringIO()
- sys.stdout = out
- args = MagicMock()
-
- # Check positive scenario
- drivers_list = ['driver_file']
- resources_dir = '/tmp'
-
- get_ambari_properties_mock.return_value = {ambari_server.RESOURCES_DIR_PROPERTY : resources_dir}
- find_jdbc_driver_mock.return_value = drivers_list
- copy_files_mock.return_value = 0
-
- args.database = "oracle"
-
- rcode = ambari_server.check_jdbc_drivers(args)
-
- self.assertEqual(0, rcode)
- copy_files_mock.assert_called_with(drivers_list, resources_dir)
-
- get_ambari_properties_mock.reset_mock()
- find_jdbc_driver_mock.reset_mock()
- copy_files_mock.reset_mock()
- print_error_msg_mock.reset_mock()
- print_warning_msg.reset_mock()
- raw_input_mock.reset_mock()
-
-
-
- # Check negative scenarios
- # Silent option, no drivers
- ambari_server.SILENT = True
-
- find_jdbc_driver_mock.return_value = -1
-
- failed = False
-
- try:
- rcode = ambari_server.check_jdbc_drivers(args)
- except FatalException:
- failed = True
-
- self.assertTrue(print_error_msg_mock.called)
- self.assertTrue(failed)
-
- get_ambari_properties_mock.reset_mock()
- find_jdbc_driver_mock.reset_mock()
- copy_files_mock.reset_mock()
- print_error_msg_mock.reset_mock()
- print_warning_msg.reset_mock()
- raw_input_mock.reset_mock()
-
- # Non-Silent option, no drivers
- ambari_server.SILENT = False
-
- find_jdbc_driver_mock.return_value = -1
-
- failed = False
-
- try:
- rcode = ambari_server.check_jdbc_drivers(args)
- except FatalException:
- failed = True
- self.assertTrue(failed)
- self.assertTrue(print_error_msg_mock.called)
-
- get_ambari_properties_mock.reset_mock()
- find_jdbc_driver_mock.reset_mock()
- copy_files_mock.reset_mock()
- print_error_msg_mock.reset_mock()
- print_warning_msg.reset_mock()
- raw_input_mock.reset_mock()
-
- # Non-Silent option, no drivers at first ask, present drivers after that
-
- find_jdbc_driver_mock.side_effect = [-1, drivers_list]
-
- rcode = ambari_server.check_jdbc_drivers(args)
-
- self.assertEqual(0, rcode)
- copy_files_mock.assert_called_with(drivers_list, resources_dir)
-
- get_ambari_properties_mock.reset_mock()
- find_jdbc_driver_mock.reset_mock()
- copy_files_mock.reset_mock()
- print_error_msg_mock.reset_mock()
- print_warning_msg.reset_mock()
- raw_input_mock.reset_mock()
-
- # Non-Silent option, no drivers at first ask, no drivers after that
- find_jdbc_driver_mock.side_effect = [-1, -1]
-
- failed = False
-
- try:
- rcode = ambari_server.check_jdbc_drivers(args)
- except FatalException:
- failed = True
-
- self.assertTrue(failed)
- self.assertTrue(print_error_msg_mock.called)
-
- get_ambari_properties_mock.reset_mock()
- find_jdbc_driver_mock.reset_mock()
- copy_files_mock.reset_mock()
- print_error_msg_mock.reset_mock()
- print_warning_msg.reset_mock()
- raw_input_mock.reset_mock()
-
-
-
-
- # Failed to copy_files
-
- find_jdbc_driver_mock.side_effect = [drivers_list]
- try:
- rcode = ambari_server.check_jdbc_drivers(args)
- except FatalException:
- failed = True
-
- self.assertTrue(failed)
-
- sys.stdout = sys.__stdout__
-
-
- @patch.object(ambari_server, "find_properties_file")
- def test_get_ambari_properties(self, find_properties_file_mock):
- find_properties_file_mock.return_value = None
- rcode = ambari_server.get_ambari_properties()
- self.assertEqual(rcode, -1)
-
- tf1 = tempfile.NamedTemporaryFile()
- find_properties_file_mock.return_value = tf1.name
- prop_name='name'
- prop_value='val'
-
- with open(tf1.name, 'w') as fout:
- fout.write(prop_name + '=' + prop_value)
- fout.close()
- properties = ambari_server.get_ambari_properties()
-
- self.assertEqual(properties[prop_name], prop_value)
- self.assertEqual(properties.fileName, os.path.abspath(tf1.name))
-
- sys.stdout = sys.__stdout__
- @patch.object(ambari_server, "find_properties_file")
- def test_parse_properties_file(self, find_properties_file_mock):
- tf1 = tempfile.NamedTemporaryFile(mode='r')
- find_properties_file_mock.return_value = tf1.name
- args = MagicMock()
- ambari_server.parse_properties_file(args)
- self.assertEquals(args.persistence_type, "local")
- with open(tf1.name, 'w') as fout:
- fout.write("\n")
- fout.write(ambari_server.PERSISTENCE_TYPE_PROPERTY+"=remote")
- args = MagicMock()
- ambari_server.parse_properties_file(args)
- self.assertEquals(args.persistence_type, "remote")
- @patch.object(ambari_server, 'decrypt_password_for_alias')
- @patch.object(ambari_server, 'is_alias_string')
- @patch.object(ambari_server, 'get_ambari_properties')
- def test_configure_database_username_password_masterkey_persisted(self,
- get_ambari_properties_method, is_alias_string_method,
- decrypt_password_for_alias_method):
- out = StringIO.StringIO()
- sys.stdout = out
- configs = {ambari_server.JDBC_USER_NAME_PROPERTY: "fakeuser",
- ambari_server.JDBC_PASSWORD_PROPERTY: "${alias=somealias}",
- ambari_server.SECURITY_KEY_IS_PERSISTED: "True" }
- get_ambari_properties_method.return_value = configs
- is_alias_string_method.return_value = True
- decrypt_password_for_alias_method.return_value = "falepasswd"
- args = MagicMock()
- args.master_key = None
- ambari_server.configure_database_username_password(args)
- self.assertTrue(decrypt_password_for_alias_method.called)
- self.assertTrue(is_alias_string_method.called)
- self.assertEquals("fakeuser", args.database_username)
- self.assertEquals("falepasswd", args.database_password)
- sys.stdout = sys.__stdout__
- @patch.object(ambari_server, 'read_password')
- def test_configure_database_password(self, read_password_method):
- out = StringIO.StringIO()
- sys.stdout = out
- read_password_method.return_value = "fakepasswd"
- result = ambari_server.configure_database_password(True)
- self.assertTrue(read_password_method.called)
- self.assertEquals("fakepasswd", result)
- result = ambari_server.configure_database_password(True)
- self.assertEquals("fakepasswd", result)
- result = ambari_server.configure_database_password(True)
- self.assertEquals("fakepasswd", result)
- sys.stdout = sys.__stdout__
- @patch.object(ambari_server, 'remove_password_file')
- @patch.object(ambari_server, 'save_passwd_for_alias')
- @patch.object(ambari_server, 'read_master_key')
- @patch.object(ambari_server, 'read_ambari_user')
- @patch.object(ambari_server, 'get_master_key_location')
- @patch.object(ambari_server, 'update_properties')
- @patch.object(ambari_server, 'save_master_key')
- @patch.object(ambari_server, 'get_YN_input')
- @patch.object(ambari_server, 'search_file')
- @patch.object(ambari_server, 'get_ambari_properties')
- @patch.object(ambari_server, 'is_root')
- def test_setup_master_key_not_persist(self, is_root_method,
- get_ambari_properties_method, search_file_message,
- get_YN_input_method, save_master_key_method,
- update_properties_method, get_master_key_location_method,
- read_ambari_user_method, read_master_key_method,
- save_passwd_for_alias_method, remove_password_file_method):
- is_root_method.return_value = True
- p = get_ambari_properties_method.return_value
- p.get_property.side_effect = [ None, "fakepasswd", "fakepasswd", "fakepasswd"]
- read_master_key_method.return_value = "aaa"
- get_YN_input_method.return_value = False
- read_ambari_user_method.return_value = None
- save_passwd_for_alias_method.return_value = 0
- ambari_server.setup_master_key()
- self.assertTrue(get_YN_input_method.called)
- self.assertTrue(read_master_key_method.called)
- self.assertTrue(read_ambari_user_method.called)
- self.assertTrue(update_properties_method.called)
- self.assertFalse(save_master_key_method.called)
- self.assertTrue(save_passwd_for_alias_method.called)
- self.assertEquals(3, save_passwd_for_alias_method.call_count)
- self.assertTrue(remove_password_file_method.called)
- result_expected = {ambari_server.JDBC_PASSWORD_PROPERTY :
- ambari_server.get_alias_string(ambari_server.JDBC_RCA_PASSWORD_ALIAS),
- ambari_server.LDAP_MGR_PASSWORD_PROPERTY :
- ambari_server.get_alias_string(ambari_server.LDAP_MGR_PASSWORD_ALIAS),
- ambari_server.SSL_TRUSTSTORE_PASSWORD_PROPERTY :
- ambari_server.get_alias_string(ambari_server.SSL_TRUSTSTORE_PASSWORD_ALIAS),
- ambari_server.SECURITY_IS_ENCRYPTION_ENABLED : 'true'}
- sorted_x = sorted(result_expected.iteritems(), key=operator.itemgetter(0))
- sorted_y = sorted(update_properties_method.call_args[0][1].iteritems(),
- key=operator.itemgetter(0))
- self.assertEquals(sorted_x, sorted_y)
- @patch.object(ambari_server, 'read_master_key')
- @patch.object(ambari_server, 'read_ambari_user')
- @patch.object(ambari_server, 'get_master_key_location')
- @patch.object(ambari_server, 'update_properties')
- @patch.object(ambari_server, 'save_master_key')
- @patch.object(ambari_server, 'get_YN_input')
- @patch.object(ambari_server, 'search_file')
- @patch.object(ambari_server, 'get_ambari_properties')
- @patch.object(ambari_server, 'is_root')
- def test_setup_master_key_persist(self, is_root_method,
- get_ambari_properties_method, search_file_message,
- get_YN_input_method, save_master_key_method,
- update_properties_method, get_master_key_location_method,
- read_ambari_user_method, read_master_key_method):
- is_root_method.return_value = True
- p = get_ambari_properties_method.return_value
- p.get_property.side_effect = [ None, "fakepasswd", None, None]
- read_master_key_method.return_value = "aaa"
- get_YN_input_method.side_effect = [True, False]
- read_ambari_user_method.return_value = None
- ambari_server.setup_master_key()
- self.assertTrue(get_YN_input_method.called)
- self.assertTrue(read_master_key_method.called)
- self.assertTrue(read_ambari_user_method.called)
- self.assertTrue(update_properties_method.called)
- self.assertTrue(save_master_key_method.called)
- result_expected = {ambari_server.JDBC_PASSWORD_PROPERTY:
- ambari_server.get_alias_string(ambari_server.JDBC_RCA_PASSWORD_ALIAS),
- ambari_server.SECURITY_IS_ENCRYPTION_ENABLED: 'true'}
- sorted_x = sorted(result_expected.iteritems(), key=operator.itemgetter(0))
- sorted_y = sorted(update_properties_method.call_args[0][1].iteritems(),
- key=operator.itemgetter(0))
- self.assertEquals(sorted_x, sorted_y)
- @patch.object(ambari_server, 'read_master_key')
- @patch.object(ambari_server, 'remove_password_file')
- @patch("os.path.exists")
- @patch.object(ambari_server, 'read_ambari_user')
- @patch.object(ambari_server, 'get_master_key_location')
- @patch("ambari-server.Properties")
- @patch.object(ambari_server, 'save_passwd_for_alias')
- @patch.object(ambari_server, 'read_passwd_for_alias')
- @patch.object(ambari_server, 'update_properties')
- @patch.object(ambari_server, 'save_master_key')
- @patch.object(ambari_server, 'get_validated_string_input')
- @patch.object(ambari_server, 'get_YN_input')
- @patch.object(ambari_server, 'search_file')
- @patch.object(ambari_server, 'get_ambari_properties')
- @patch.object(ambari_server, 'is_root')
- def test_reset_master_key_persisted(self, is_root_method,
- get_ambari_properties_method, search_file_message,
- get_YN_input_method, get_validated_string_input_method,
- save_master_key_method, update_properties_method,
- read_passwd_for_alias_method, save_passwd_for_alias_method,
- Properties_mock, get_master_key_location_method,
- read_ambari_user_method, exists_mock,
- remove_password_file_method, read_master_key_method):
- # Testing call under non-root
- is_root_method.return_value = False
- try:
- ambari_server.setup_master_key()
- self.fail("Should throw exception")
- except FatalException as fe:
- # Expected
- self.assertTrue("root-level" in fe.reason)
- pass
- # Testing call under root
- is_root_method.return_value = True
- search_file_message.return_value = "filepath"
- read_ambari_user_method.return_value = None
- p = get_ambari_properties_method.return_value
- p.get_property.side_effect = [ 'true', '${alias=fakealias}',
- '${alias=fakealias}', '${alias=fakealias}']
- get_YN_input_method.side_effect = [ True, True ]
- read_master_key_method.return_value = "aaa"
- read_passwd_for_alias_method.return_value = "fakepassword"
- save_passwd_for_alias_method.return_value = 0
- exists_mock.return_value = False
- ambari_server.setup_master_key()
- self.assertTrue(save_master_key_method.called)
- self.assertTrue(get_YN_input_method.called)
- self.assertTrue(read_master_key_method.called)
- self.assertTrue(update_properties_method.called)
- self.assertTrue(read_passwd_for_alias_method.called)
- self.assertTrue(3, read_passwd_for_alias_method.call_count)
- self.assertTrue(3, save_passwd_for_alias_method.call_count)
- result_expected = {ambari_server.JDBC_PASSWORD_PROPERTY:
- ambari_server.get_alias_string(ambari_server.JDBC_RCA_PASSWORD_ALIAS),
- ambari_server.LDAP_MGR_PASSWORD_PROPERTY:
- ambari_server.get_alias_string(ambari_server.LDAP_MGR_PASSWORD_ALIAS),
- ambari_server.SSL_TRUSTSTORE_PASSWORD_PROPERTY:
- ambari_server.get_alias_string(ambari_server.SSL_TRUSTSTORE_PASSWORD_ALIAS),
- ambari_server.SECURITY_IS_ENCRYPTION_ENABLED: 'true'}
- sorted_x = sorted(result_expected.iteritems(), key=operator.itemgetter(0))
- sorted_y = sorted(update_properties_method.call_args[0][1].iteritems(),
- key=operator.itemgetter(0))
- self.assertEquals(sorted_x, sorted_y)
- @patch.object(ambari_server, 'remove_password_file')
- @patch("os.path.exists")
- @patch.object(ambari_server, 'read_ambari_user')
- @patch.object(ambari_server, 'get_master_key_location')
- @patch("ambari-server.Properties")
- @patch.object(ambari_server, 'save_passwd_for_alias')
- @patch.object(ambari_server, 'read_passwd_for_alias')
- @patch.object(ambari_server, 'update_properties')
- @patch.object(ambari_server, 'save_master_key')
- @patch.object(ambari_server, 'get_validated_string_input')
- @patch.object(ambari_server, 'get_YN_input')
- @patch.object(ambari_server, 'search_file')
- @patch.object(ambari_server, 'get_ambari_properties')
- @patch.object(ambari_server, 'is_root')
- def test_reset_master_key_not_persisted(self, is_root_method,
- get_ambari_properties_method,
- search_file_message, get_YN_input_method,
- get_validated_string_input_method, save_master_key_method,
- update_properties_method, read_passwd_for_alias_method,
- save_passwd_for_alias_method, Properties_mock,
- get_master_key_location_method, read_ambari_user_method,
- exists_mock, remove_password_file_method):
- is_root_method.return_value = True
- search_file_message.return_value = False
- read_ambari_user_method.return_value = None
- p = get_ambari_properties_method.return_value
- p.get_property.side_effect = [ 'true', '${alias=fakealias}',
- '${alias=fakealias}', '${alias=fakealias}']
- get_YN_input_method.side_effect = [ True, False ]
- get_validated_string_input_method.return_value = "aaa"
- read_passwd_for_alias_method.return_value = "fakepassword"
- save_passwd_for_alias_method.return_value = 0
- exists_mock.return_value = False
- ambari_server.setup_master_key()
- self.assertFalse(save_master_key_method.called)
- self.assertTrue(get_YN_input_method.called)
- self.assertTrue(get_validated_string_input_method.called)
- self.assertTrue(update_properties_method.called)
- self.assertTrue(read_passwd_for_alias_method.called)
- self.assertTrue(3, read_passwd_for_alias_method.call_count)
- self.assertTrue(3, save_passwd_for_alias_method.call_count)
- self.assertFalse(save_master_key_method.called)
- result_expected = {ambari_server.JDBC_PASSWORD_PROPERTY:
- ambari_server.get_alias_string(ambari_server.JDBC_RCA_PASSWORD_ALIAS),
- ambari_server.LDAP_MGR_PASSWORD_PROPERTY:
- ambari_server.get_alias_string(ambari_server.LDAP_MGR_PASSWORD_ALIAS),
- ambari_server.SSL_TRUSTSTORE_PASSWORD_PROPERTY:
- ambari_server.get_alias_string(ambari_server.SSL_TRUSTSTORE_PASSWORD_ALIAS),
- ambari_server.SECURITY_IS_ENCRYPTION_ENABLED: 'true'}
- sorted_x = sorted(result_expected.iteritems(), key=operator.itemgetter(0))
- sorted_y = sorted(update_properties_method.call_args[0][1].iteritems(),
- key=operator.itemgetter(0))
- self.assertEquals(sorted_x, sorted_y)
- @patch.object(ambari_server, 'save_passwd_for_alias')
- @patch.object(ambari_server, 'get_YN_input')
- @patch.object(ambari_server, 'update_properties')
- @patch.object(ambari_server, 'configure_ldap_password')
- @patch.object(ambari_server, 'get_validated_string_input')
- @patch.object(ambari_server, 'setup_master_key')
- @patch.object(ambari_server, 'search_file')
- @patch.object(ambari_server, 'get_ambari_properties')
- @patch.object(ambari_server, 'is_root')
- def test_setup_ldap(self, is_root_method, get_ambari_properties_method,
- search_file_message, setup_master_key_method,
- get_validated_string_input_method,
- configure_ldap_password_method, update_properties_method,
- get_YN_input_method, save_passwd_for_alias_method):
- out = StringIO.StringIO()
- sys.stdout = out
- # Testing call under non-root
- is_root_method.return_value = False
- try:
- ambari_server.setup_ldap()
- self.fail("Should throw exception")
- except FatalException as fe:
- # Expected
- self.assertTrue("root-level" in fe.reason)
- pass
- # Testing call under root
- is_root_method.return_value = True
- search_file_message.return_value = "filepath"
- configs = { ambari_server.SECURITY_MASTER_KEY_LOCATION : "filepath",
- ambari_server.SECURITY_KEYS_DIR : tempfile.gettempdir(),
- ambari_server.SECURITY_KEY_IS_PERSISTED : "true"
- }
- get_ambari_properties_method.return_value = configs
- configure_ldap_password_method.return_value = "password"
- setup_master_key_method.return_value = (None, True, True)
- get_YN_input_method.return_value = True
- save_passwd_for_alias_method.return_value = 0
- def side_effect(*args, **kwargs):
- if 'Bind anonymously' in args[0]:
- return 'false'
- if args[1] == "true" or args[1] == "false":
- return args[1]
- else:
- return "test"
- get_validated_string_input_method.side_effect = side_effect
- ambari_server.setup_ldap()
- ldap_properties_map =\
- {
- "authentication.ldap.primaryUrl" : "test",
- "authentication.ldap.secondaryUrl" : "test",
- "authentication.ldap.useSSL" : "false",
- "authentication.ldap.usernameAttribute" : "test",
- "authentication.ldap.baseDn" : "test",
- "authentication.ldap.bindAnonymously" : "false",
- "authentication.ldap.managerDn" : "test",
- "authentication.ldap.managerPassword" : \
- 'password',
- "client.security" : "ldap"
- }
- sorted_x = sorted(ldap_properties_map.iteritems(), key=operator.itemgetter(0))
- sorted_y = sorted(update_properties_method.call_args[0][1].iteritems(),
- key=operator.itemgetter(0))
- self.assertEquals(sorted_x, sorted_y)
- self.assertTrue(update_properties_method.called)
- self.assertTrue(configure_ldap_password_method.called)
- self.assertTrue(get_validated_string_input_method.called)
- self.assertTrue(get_YN_input_method.called)
- sys.stdout = sys.__stdout__
- @patch.object(ambari_server, 'read_password')
- def test_configure_ldap_password(self, read_password_method):
- out = StringIO.StringIO()
- sys.stdout = out
- read_password_method.return_value = "blah"
- ambari_server.configure_ldap_password()
- self.assertTrue(read_password_method.called)
- sys.stdout = sys.__stdout__
-
- def test_generate_random_string(self):
- random_str_len = 100
- str1 = ambari_server.generate_random_string(random_str_len)
- self.assertTrue(len(str1) == random_str_len)
-
- str2 = ambari_server.generate_random_string(random_str_len)
- self.assertTrue(str1 != str2)
- @patch("__builtin__.open")
- @patch.object(ambari_server, "search_file")
- @patch.object(ambari_server, "backup_file_in_temp")
- def test_update_properties(self, backup_file_in_temp_mock, search_file_mock, open_mock):
- conf_file = "ambari.properties"
- propertyMap = {"1":"1", "2":"2"}
- properties = MagicMock()
- f = MagicMock(name = "file")
- # f.__enter__.return_value = f #mimic file behavior
- search_file_mock.return_value = conf_file
- open_mock.return_value = f
- ambari_server.update_properties(properties, propertyMap)
- properties.store.assert_called_with(f.__enter__.return_value)
- backup_file_in_temp_mock.assert_called_with(conf_file)
- self.assertEquals(2, properties.removeOldProp.call_count)
- self.assertEquals(2, properties.process_pair.call_count)
- properties = MagicMock()
- backup_file_in_temp_mock.reset_mock()
- open_mock.reset_mock()
- ambari_server.update_properties(properties, None)
- properties.store.assert_called_with(f.__enter__.return_value)
- backup_file_in_temp_mock.assert_called_with(conf_file)
- self.assertFalse(properties.removeOldProp.called)
- self.assertFalse(properties.process_pair.called)
- pass
- def test_regexps(self):
- res = re.search(ambari_server.REGEX_HOSTNAME_PORT, "")
- self.assertTrue(res is None)
- res = re.search(ambari_server.REGEX_HOSTNAME_PORT, "ddd")
- self.assertTrue(res is None)
- res = re.search(ambari_server.REGEX_HOSTNAME_PORT, "gg:ff")
- self.assertTrue(res is None)
- res = re.search(ambari_server.REGEX_HOSTNAME_PORT, "gg:55444325")
- self.assertTrue(res is None)
- res = re.search(ambari_server.REGEX_HOSTNAME_PORT, "gg:555")
- self.assertTrue(res is not None)
- res = re.search(ambari_server.REGEX_TRUE_FALSE, "")
- self.assertTrue(res is not None)
- res = re.search(ambari_server.REGEX_TRUE_FALSE, "t")
- self.assertTrue(res is None)
- res = re.search(ambari_server.REGEX_TRUE_FALSE, "trrrr")
- self.assertTrue(res is None)
- res = re.search(ambari_server.REGEX_TRUE_FALSE, "true|false")
- self.assertTrue(res is None)
- res = re.search(ambari_server.REGEX_TRUE_FALSE, "true")
- self.assertTrue(res is not None)
- res = re.search(ambari_server.REGEX_TRUE_FALSE, "false")
- self.assertTrue(res is not None)
- res = re.search(ambari_server.REGEX_ANYTHING, "")
- self.assertTrue(res is not None)
- res = re.search(ambari_server.REGEX_ANYTHING, "t")
- self.assertTrue(res is not None)
- res = re.search(ambari_server.REGEX_ANYTHING, "trrrr")
- self.assertTrue(res is not None)
- def get_sample(self, sample):
- """
- Returns sample file content as string with normalized line endings
- """
- path = self.get_samples_dir(sample)
- return self.get_file_string(path)
- def get_file_string(self, file):
- """
- Returns file content as string with normalized line endings
- """
- string = open(file, 'r').read()
- return self.normalize(string)
- def normalize(self, string):
- """
- Normalizes line ending in string according to platform-default encoding
- """
- return string.replace("\n", os.linesep)
- def get_samples_dir(self, sample):
- """
- Returns full file path by sample name
- """
- testdir = os.path.dirname(__file__)
- return os.path.dirname(testdir) + os.sep + "resources" + os.sep \
- + 'TestAmbaryServer.samples/' + sample
|