def test_verify_user_access_only_bad(self): bindings = YamlBindings() validator = ValidateConfig(configurator=Configurator( bindings=bindings)) fd, temp = tempfile.mkstemp() os.close(fd) try: os.chmod(temp, 0410) self.assertFalse(validator.verify_user_access_only(temp)) self.assertEqual( '"{temp}" should not have non-owner access. Mode is 410.'. format(temp=temp), validator.errors[0]) os.chmod(temp, 0420) self.assertFalse(validator.verify_user_access_only(temp)) os.chmod(temp, 0440) self.assertFalse(validator.verify_user_access_only(temp)) os.chmod(temp, 0401) self.assertFalse(validator.verify_user_access_only(temp)) os.chmod(temp, 0402) self.assertFalse(validator.verify_user_access_only(temp)) os.chmod(temp, 0404) self.assertFalse(validator.verify_user_access_only(temp)) finally: os.remove(temp)
def test_true_false_not_resolved(self): bindings = YamlBindings() bindings.import_dict({'indirect': '${t}'}) validator = ValidateConfig(configurator=Configurator( bindings=bindings)) self.assertFalse(validator.verify_true_false('indirect')) self.assertEqual('Missing "indirect".', validator.errors[0])
def test_is_reference_bad(self): bindings = YamlBindings() validator = ValidateConfig(configurator=Configurator( bindings=bindings)) self.assertFalse(validator.is_reference('str')) self.assertFalse(validator.is_reference('true')) self.assertFalse(validator.is_reference('0')) self.assertFalse(validator.is_reference('not ${a}'))
def test_true_false_good(self): bindings = YamlBindings() bindings.import_dict( {'t': True, 'f':False, 'indirect':'${t}', 'default': '${x:true}'}) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) self.assertTrue(validator.verify_true_false('t')) self.assertTrue(validator.verify_true_false('f')) self.assertTrue(validator.verify_true_false('indirect')) self.assertTrue(validator.verify_true_false('default'))
def host_test_helper(self, tests, valid, required=False): bindings = YamlBindings() bindings.import_dict(tests) validator = ValidateConfig(configurator=Configurator( bindings=bindings)) for key, value in tests.items(): msg = '"{key}" was {valid}'.format( key=key, valid='invalid' if valid else 'valid') self.assertEqual(valid, validator.verify_host(key, required), msg) return validator
def test_update_deck_settings(self): temp_sourcedir = tempfile.mkdtemp() temp_targetdir = tempfile.mkdtemp() template = """ preamble // BEGIN reconfigure_spinnaker // var gateUrl = ${{services.gate.baseUrl}}; {gate_url_value} // var bakeryBaseUrl = ${{services.bakery.baseUrl}}; {bakery_url_value} // END reconfigure_spinnaker // var gateUrl = ${{services.gate.baseUrl}}; stuff here is left along. """ # This was originally just a comment, which was preserved. bakery_url_assignment = ("var bakeryBaseUrl = 'BAKERY_BASE_URL';" "\n# comment") # This was originally a different let statement that was removed. gate_url_assignment = "var gateUrl = 'GATE_BASE_URL';" bindings = YamlBindings() bindings.import_dict({ 'services': { 'gate': { 'baseUrl': 'GATE_BASE_URL' }, 'bakery': { 'baseUrl': 'BAKERY_BASE_URL' }, } }) installation = InstallationParameters installation.INSTALLED_CONFIG_DIR = temp_sourcedir installation.DECK_INSTALL_DIR = temp_targetdir configurator = Configurator(installation_parameters=installation, bindings=bindings) try: source_settings_path = os.path.join(temp_sourcedir, 'settings.js') target_settings_path = os.path.join(temp_targetdir, 'settings.js') with open(source_settings_path, 'w') as f: f.write( template.format(gate_url_value="var gateUrl='old';", bakery_url_value='# comment')) configurator.update_deck_settings() with open(target_settings_path, 'r') as f: got = f.read() expect = template.format(gate_url_value=gate_url_assignment, bakery_url_value=bakery_url_assignment) self.assertEqual(expect, got) finally: shutil.rmtree(temp_sourcedir) shutil.rmtree(temp_targetdir)
def test_configuration(self): configurator = Configurator() self.assertEquals(os.path.join(os.environ['HOME'], '.spinnaker'), configurator.user_config_dir) self.assertEquals( os.path.abspath( os.path.join(os.path.dirname(sys.argv[0]), '../config')), configurator.installation_config_dir) with self.assertRaises(RuntimeError): # The test isnt run from a build directory so this raises configurator.deck_install_dir
def test_verify_at_least_one_provider_enabled_good(self): bindings = YamlBindings() bindings.import_dict({ 'providers': { 'aws': { 'enabled': False }, 'google': {'enabled': False }, 'another': {'enabled': True } }, }) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) self.assertTrue(validator.verify_at_least_one_provider_enabled())
def test_verify_user_access_only_good(self): bindings = YamlBindings() validator = ValidateConfig(configurator=Configurator( bindings=bindings)) fd, temp = tempfile.mkstemp() os.close(fd) try: os.chmod(temp, 0400) self.assertTrue(validator.verify_user_access_only(temp)) os.chmod(temp, 0600) self.assertTrue(validator.verify_user_access_only(temp)) finally: os.remove(temp)
def baseUrl_test_helper(self, tests, valid, scheme_optional): bindings = YamlBindings() bindings.import_dict(tests) validator = ValidateConfig(configurator=Configurator( bindings=bindings)) for key, value in tests.items(): msg = '"{key}" was {valid}'.format( key=key, valid='invalid' if valid else 'valid') self.assertEqual( valid, validator.verify_baseUrl(key, True, scheme_optional=scheme_optional), msg)
def test_verify_at_least_one_provider_enabled_bad(self): bindings = YamlBindings() bindings.import_dict({ 'providers': { 'aws': { 'enabled': False }, 'google': {'enabled': False } }, 'services': {'test': { 'enabled': True }} }) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) self.assertFalse(validator.verify_at_least_one_provider_enabled()) self.assertEqual('None of the providers are enabled.', validator.errors[0])
def test_true_false_bad(self): bindings = YamlBindings() bindings.import_dict( {'t': 'true', 'f':'false', 'indirect':'${t}', 'default': '${x:0}'}) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) self.assertFalse(validator.verify_true_false('t')) self.assertFalse(validator.verify_true_false('f')) self.assertFalse(validator.verify_true_false('indirect')) self.assertFalse(validator.verify_true_false('default')) self.assertEqual(4, len(validator.errors)) self.assertEqual(0, len(validator.warnings)) self.assertEqual( ["t='true' is not valid. Must be boolean true or false.", "f='false' is not valid. Must be boolean true or false.", "indirect='true' is not valid. Must be boolean true or false.", "default=0 is not valid. Must be boolean true or false."], validator.errors)
def test_configuration(self): temp_homedir = tempfile.mkdtemp() home_spinnaker_dir = os.path.join(temp_homedir, '.spinnaker') os.mkdir(home_spinnaker_dir) with open(os.path.join(home_spinnaker_dir, 'spinnaker-local.yml'), 'w') as f: f.write('empty:\n') # We aren't using HOME in a test, but want to verify that it is # being used. old_home = os.environ['HOME'] os.environ['HOME'] = temp_homedir try: configurator = Configurator() finally: os.environ['HOME'] = old_home self.assertEquals(home_spinnaker_dir, configurator.user_config_dir) self.assertEquals( os.path.abspath( os.path.join(os.path.dirname(sys.argv[0]), '../config')), configurator.installation_config_dir)
def test_is_reference_good(self): bindings = YamlBindings() validator = ValidateConfig(configurator=Configurator( bindings=bindings)) self.assertTrue(validator.is_reference('${a}')) self.assertTrue(validator.is_reference('${a:value'))