def test_init(self): engine = PlumberyEngine() engine.from_text(myPlan) self.assertEqual(engine.safeMode, False) self.assertEqual(len(engine.information), 2) self.assertEqual(len(engine.links), 1) domain = engine.get_default('domain') self.assertEqual(domain['ipv4'], 'auto') cloudConfig = engine.get_default('cloud-config', {}) self.assertEqual(len(cloudConfig.keys()), 3) parameter = engine.get_parameter('locationId') self.assertEqual(parameter, 'EU6') parameter = engine.get_parameter('domainName') self.assertEqual(parameter, 'myDC') parameter = engine.get_parameter('networkName') self.assertEqual(parameter, 'myVLAN') self.assertEqual(len(engine.facilities), 1) facility = engine.facilities[0] self.assertEqual(facility.settings['locationId'], 'EU6') self.assertEqual(facility.settings['regionId'], 'dd-eu') blueprint = facility.blueprints[0]['myBlueprint'] self.assertEqual(blueprint['domain']['name'], 'myDC') self.assertEqual(blueprint['ethernet']['name'], 'myVLAN')
def test_defaults(self): engine = PlumberyEngine() engine.from_text(defaultsPlan) self.assertEqual(engine.get_default('locationId'), 'EU6') self.assertEqual(engine.get_default('regionId'), 'dd-eu') self.assertEqual(engine.get_default('ipv4'), 'auto')
def test_get_parameter(self): engine = PlumberyEngine() engine.from_text(defaultsPlan) facility = engine.list_facility('EU6')[0] self.assertEqual(facility.get_parameter('locationId'), 'EU6') self.assertEqual(facility.get_parameter('regionId'), 'dd-eu') self.assertEqual(facility.get_parameter('rub'), None) self.assertEqual(facility.get_parameter('ipv4'), 'auto') self.assertEqual(facility.get_parameter('basement'), 'myBlueprint')
def test_main(self): engine = PlumberyEngine() engine.from_text(myPlan) engine.set_user_name('fake_name') engine.set_user_password('fake_password') with self.assertRaises(SystemExit): main(['bad args'], engine) with self.assertRaises(SystemExit): main(['fittings.yaml'], engine) with self.assertRaises(SystemExit): main(['fittings.yaml', 'xyz123', 'web'], engine) with self.assertRaises(SystemExit): main(['-v'], engine) with self.assertRaises(SystemExit): main(['fittings.yaml', 'build', 'web', '-v'], engine)
def test_settings(self): engine = PlumberyEngine() engine.from_text(defaultsPlan) facility = engine.list_facility('EU6')[0] self.assertEqual(facility.get_setting('locationId'), 'EU6') self.assertEqual(facility.get_setting('regionId'), 'dd-eu') self.assertEqual(facility.get_setting('rub'), None) self.assertEqual(facility.get_setting('basement'), 'myBlueprint') city = facility.get_city() self.assertEqual(city, 'Frankfurt') self.assertEqual(city, facility.get_city('EU6')) coordinates = facility.get_coordinates() self.assertEqual(len(coordinates), 2) self.assertEqual(coordinates, facility.get_coordinates('EU6'))
def do_polish(polisher): engine = PlumberyEngine() engine.set_shared_secret('fake_secret') engine.set_user_name('fake_name') engine.set_user_password('fake_password') engine.from_text(myInformation) polisher.go(engine) facility = engine.list_facility('NA9')[0] DimensionDataNodeDriver.connectionCls.conn_classes = ( None, DimensionDataMockHttp) DimensionDataMockHttp.type = None facility.region = DimensionDataNodeDriver(*DIMENSIONDATA_PARAMS) polisher.move_to(facility) blueprint = facility.get_blueprint('test') infrastructure = PlumberyInfrastructure(facility) container = infrastructure.get_container(blueprint) polisher.shine_container(container) nodes = PlumberyNodes(facility) node = nodes.get_node('stackstorm') polisher.shine_node( node=node, settings=fakeNodeSettings, container=container) node = nodes.get_node('node1') polisher.shine_node( node=node, settings=fakeNodeSettings, container=container) polisher.move_to(FakeFacility()) polisher.shine_container(FakeContainer()) polisher.shine_node( node=FakeNode(), settings=fakeNodeSettings, container=FakeContainer()) polisher.reap()
def test_blueprints(self): engine = PlumberyEngine() engine.from_text(defaultsPlan) facility = engine.list_facility('EU6')[0] blueprint = facility.get_blueprint('myBlueprint') self.assertEqual(isinstance(blueprint, dict), True) self.assertEqual(blueprint['domain']['name'], 'myDC') self.assertEqual(blueprint['domain']['ipv4'], 'auto') self.assertEqual(blueprint['ethernet']['name'], 'myVLAN') self.assertEqual(blueprint['ethernet']['subnet'], '10.1.10.0') self.assertEqual(len(blueprint['ethernet']['accept']), 1) label = blueprint['nodes'][0].keys()[0] node = blueprint['nodes'][0][label] self.assertEqual('default' not in node, True) self.assertEqual(node['cpu'], 3) self.assertEqual(node['memory'], 5) self.assertEqual(len(node['information']), 2) config = node['cloud-config'] self.assertEqual(isinstance(config, dict), True) self.assertEqual(config['disable_root'], True) self.assertEqual(config['ssh_pwauth'], True) self.assertEqual(len(config['packages']), 4) self.assertEqual(len(config['runcmd']), 4)
class TestPlumberyEngine(unittest.TestCase): def test_set(self): settings = { 'safeMode': False, 'polishers': [ {'ansible': {}}, {'spit': {}}, ] } self.engine = PlumberyEngine() self.engine.set_shared_secret('fake_secret') self.assertEqual(self.engine.get_shared_secret(), 'fake_secret') random = self.engine.get_secret('random') self.assertEqual(len(random), 9) self.assertEqual(self.engine.get_secret('random'), random) self.engine.set_user_name('fake_name') self.assertEqual(self.engine.get_user_name(), 'fake_name') self.engine.set_user_password('fake_password') self.assertEqual(self.engine.get_user_password(), 'fake_password') self.engine.set(settings) self.assertEqual(self.engine.safeMode, False) try: self.engine.from_text(myPlan) cloudConfig = self.engine.get_cloud_config() self.assertEqual(len(cloudConfig.keys()), 3) self.engine.add_facility(myFacility) self.assertEqual(len(self.engine.facilities), 2) except socket.gaierror: pass except InvalidCredsError: pass def test_lifecycle(self): self.engine = PlumberyEngine() self.engine.set_shared_secret('fake_secret') self.assertEqual(self.engine.get_shared_secret(), 'fake_secret') self.engine.set_user_name('fake_name') self.assertEqual(self.engine.get_user_name(), 'fake_name') self.engine.set_user_password('fake_password') self.assertEqual(self.engine.get_user_password(), 'fake_password') try: self.engine.do('build') self.engine.build_all_blueprints() self.engine.build_blueprint('myBlueprint') self.engine.do('start') self.engine.start_all_blueprints() self.engine.start_blueprint('myBlueprint') self.engine.do('polish') self.engine.polish_all_blueprints() self.engine.polish_blueprint('myBlueprint') self.engine.do('stop') self.engine.stop_all_blueprints() self.engine.stop_blueprint('myBlueprint') self.engine.wipe_all_blueprints() self.engine.wipe_blueprint('myBlueprint') self.engine.do('destroy') self.engine.destroy_all_blueprints() self.engine.destroy_blueprint('myBlueprint') except socket.gaierror: pass except InvalidCredsError: pass def test_lookup(self): self.engine = PlumberyEngine() self.assertEqual(self.engine.lookup('plumbery.version'), __version__) self.engine.secrets = {} random = self.engine.lookup('random.secret') self.assertEqual(len(random), 9) self.assertEqual(self.engine.lookup('random.secret'), random) md5 = self.engine.lookup('random.md5.secret') self.assertEqual(len(md5), 32) self.assertNotEqual(md5, random) sha = self.engine.lookup('random.sha1.secret') self.assertEqual(len(sha), 40) self.assertNotEqual(sha, random) sha = self.engine.lookup('random.sha256.secret') self.assertEqual(len(sha), 64) self.assertNotEqual(sha, random) id1 = self.engine.lookup('id1.uuid') self.assertEqual(len(id1), 36) self.assertEqual(self.engine.lookup('id1.uuid'), id1) id2 = self.engine.lookup('id2.uuid') self.assertEqual(len(id2), 36) self.assertNotEqual(id1, id2) self.engine.lookup('application.secret') self.engine.lookup('database.secret') self.engine.lookup('master.secret') self.engine.lookup('slave.secret') original = 'hello world' text = self.engine.lookup('pair1.rsa_public') self.assertEqual(text.startswith('ssh-rsa '), True) key = RSA.importKey(text) encrypted = key.publickey().encrypt(original, 32) privateKey = self.engine.lookup('pair1.rsa_private') self.assertEqual(privateKey.startswith( '-----BEGIN RSA PRIVATE KEY-----'), True) key = RSA.importKey(self.engine.lookup('pair1.rsa_private')) decrypted = key.decrypt(ast.literal_eval(str(encrypted))) self.assertEqual(decrypted, original) self.assertEqual(len(self.engine.secrets), 12) with self.assertRaises(LookupError): localKey = self.engine.lookup('local.rsa_private') localKey = self.engine.lookup('local.rsa_public') try: path = '~/.ssh/id_rsa.pub' with open(os.path.expanduser(path)) as stream: text = stream.read() stream.close() self.assertEqual(localKey.strip(), text.strip()) logging.info("Successful lookup of local public key") except IOError: pass def test_secrets(self): engine = PlumberyEngine() engine.secrets = {'hello': 'world'} engine.save_secrets(plan='test_engine.yaml') self.assertEqual(os.path.isfile('.test_engine.secrets'), True) engine.secrets = {} engine.load_secrets(plan='test_engine.yaml') self.assertEqual(engine.secrets['hello'], 'world') engine.forget_secrets(plan='test_engine.yaml') self.assertEqual(os.path.isfile('.test_engine.secrets'), False) def test_defaults(self): engine = PlumberyEngine() engine.from_text(defaultsPlan) self.assertEqual(engine.get_default('locationId'), 'EU6') self.assertEqual(engine.get_default('regionId'), 'dd-eu') self.assertEqual(engine.get_default('ipv4'), 'auto') def test_parser(self): args = parse_args(['fittings.yaml', 'build', 'web']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'build') self.assertEqual(args.blueprints, ['web']) self.assertEqual(args.facilities, None) args = parse_args(['fittings.yaml', 'build', 'web', '-d']) self.assertEqual( logging.getLogger().getEffectiveLevel(), logging.DEBUG) args = parse_args(['fittings.yaml', 'build', 'web', '-q']) self.assertEqual( logging.getLogger().getEffectiveLevel(), logging.WARNING) args = parse_args(['fittings.yaml', 'start', '@NA12']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'start') self.assertEqual(args.blueprints, None) self.assertEqual(args.facilities, ['NA12']) args = parse_args([ 'fittings.yaml', 'rub', 'web', 'sql', '@NA9', '@NA12']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'rub') self.assertEqual(args.blueprints, ['web', 'sql']) self.assertEqual(args.facilities, ['NA9', 'NA12']) args = parse_args([ 'fittings.yaml', 'rub', 'web', '@NA9', 'sql', '@NA12']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'rub') self.assertEqual(args.blueprints, ['web', 'sql']) self.assertEqual(args.facilities, ['NA9', 'NA12']) args = parse_args(['fittings.yaml', 'polish']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'polish') self.assertEqual(args.blueprints, None) self.assertEqual(args.facilities, None) def test_main(self): engine = PlumberyEngine() engine.from_text(myPlan) engine.set_user_name('fake_name') engine.set_user_password('fake_password') with self.assertRaises(SystemExit): main(['bad args'], engine) with self.assertRaises(SystemExit): main(['fittings.yaml'], engine) with self.assertRaises(SystemExit): main(['fittings.yaml', 'xyz123', 'web'], engine) with self.assertRaises(SystemExit): main(['-v'], engine) with self.assertRaises(SystemExit): main(['fittings.yaml', 'build', 'web', '-v'], engine)
def test_get_default(self): engine = PlumberyEngine() engine.from_text(defaultsPlan) facility = engine.list_facility('EU6')[0] infrastructure = PlumberyInfrastructure(facility) self.assertEqual(infrastructure.get_default('ipv4'), 'auto')
class TestPlumberyEngine(unittest.TestCase): def test_set(self): settings = { 'safeMode': False, 'polishers': [ { 'ansible': {} }, { 'spit': {} }, ] } self.engine = PlumberyEngine() self.engine.set_shared_secret('fake_secret') self.assertEqual(self.engine.get_shared_secret(), 'fake_secret') self.engine.set_user_name('fake_name') self.assertEqual(self.engine.get_user_name(), 'fake_name') self.engine.set_user_password('fake_password') self.assertEqual(self.engine.get_user_password(), 'fake_password') self.engine.set(settings) self.assertEqual(self.engine.safeMode, False) try: self.engine.from_text(myPlan) self.engine.add_facility(myFacility) self.assertEqual(len(self.engine.facilities), 2) except socket.gaierror: pass except InvalidCredsError: pass def test_lifecycle(self): self.engine = PlumberyEngine() self.engine.set_shared_secret('fake_secret') self.assertEqual(self.engine.get_shared_secret(), 'fake_secret') self.engine.set_user_name('fake_name') self.assertEqual(self.engine.get_user_name(), 'fake_name') self.engine.set_user_password('fake_password') self.assertEqual(self.engine.get_user_password(), 'fake_password') try: self.engine.build_all_blueprints() self.engine.build_blueprint('myBlueprint') self.engine.start_all_nodes() self.engine.start_nodes('myBlueprint') self.engine.polish_all_blueprints() self.engine.polish_blueprint('myBlueprint') self.engine.stop_all_nodes() self.engine.stop_nodes('myBlueprint') self.engine.destroy_all_nodes() self.engine.destroy_nodes('myBlueprint') self.engine.destroy_all_blueprints() self.engine.destroy_blueprint('myBlueprint') except socket.gaierror: pass except InvalidCredsError: pass def test_parser(self): with self.assertRaises(SystemExit): args = parse_args(['bad args']) with self.assertRaises(SystemExit): args = parse_args(['fittings.yaml']) args = parse_args(['fittings.yaml', 'build', 'web']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'build') self.assertEqual(args.blueprints, ['web']) self.assertEqual(args.facilities, None) args = parse_args(['fittings.yaml', 'start', '@NA12']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'start') self.assertEqual(args.blueprints, None) self.assertEqual(args.facilities, ['NA12']) args = parse_args( ['fittings.yaml', 'rub', 'web', 'sql', '@NA9', '@NA12']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'rub') self.assertEqual(args.blueprints, ['web', 'sql']) self.assertEqual(args.facilities, ['NA9', 'NA12']) args = parse_args(['fittings.yaml', 'polish']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'polish') self.assertEqual(args.blueprints, None) self.assertEqual(args.facilities, None) def test_main(self): engine = PlumberyEngine() engine.from_text(myPlan) engine.set_user_name('fake_name') engine.set_user_password('fake_password')
def test_main(self): engine = PlumberyEngine() engine.from_text(myPlan) engine.set_user_name('fake_name') engine.set_user_password('fake_password')
class TestPlumberyEngine(unittest.TestCase): def test_set(self): settings = { 'safeMode': False, 'polishers': [ {'ansible': {}}, {'spit': {}}, ] } self.engine = PlumberyEngine() self.engine.set_shared_secret('fake_secret') self.assertEqual(self.engine.get_shared_secret(), 'fake_secret') random = self.engine.get_random_secret() self.assertEqual(len(random), 9) self.assertEqual(self.engine.get_random_secret(), random) self.engine.set_user_name('fake_name') self.assertEqual(self.engine.get_user_name(), 'fake_name') self.engine.set_user_password('fake_password') self.assertEqual(self.engine.get_user_password(), 'fake_password') self.engine.set(settings) self.assertEqual(self.engine.safeMode, False) try: self.engine.from_text(myPlan) self.engine.add_facility(myFacility) self.assertEqual(len(self.engine.facilities), 2) except socket.gaierror: pass except InvalidCredsError: pass def test_lifecycle(self): self.engine = PlumberyEngine() self.engine.set_shared_secret('fake_secret') self.assertEqual(self.engine.get_shared_secret(), 'fake_secret') self.engine.set_user_name('fake_name') self.assertEqual(self.engine.get_user_name(), 'fake_name') self.engine.set_user_password('fake_password') self.assertEqual(self.engine.get_user_password(), 'fake_password') try: self.engine.do('build') self.engine.build_all_blueprints() self.engine.build_blueprint('myBlueprint') self.engine.do('start') self.engine.start_all_blueprints() self.engine.start_blueprint('myBlueprint') self.engine.do('polish') self.engine.polish_all_blueprints() self.engine.polish_blueprint('myBlueprint') self.engine.do('stop') self.engine.stop_all_blueprints() self.engine.stop_blueprint('myBlueprint') self.engine.wipe_all_blueprints() self.engine.wipe_blueprint('myBlueprint') self.engine.do('destroy') self.engine.destroy_all_blueprints() self.engine.destroy_blueprint('myBlueprint') except socket.gaierror: pass except InvalidCredsError: pass def test_lookup(self): self.engine = PlumberyEngine() self.assertEqual(self.engine.lookup('plumbery.version'), __version__) random = self.engine.lookup('random.secret') self.assertEqual(len(random), 9) self.assertEqual(self.engine.lookup('random.secret'), random) def test_parser(self): args = parse_args(['fittings.yaml', 'build', 'web']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'build') self.assertEqual(args.blueprints, ['web']) self.assertEqual(args.facilities, None) args = parse_args(['fittings.yaml', 'build', 'web', '-d']) self.assertEqual( logging.getLogger().getEffectiveLevel(), logging.DEBUG) args = parse_args(['fittings.yaml', 'build', 'web', '-q']) self.assertEqual( logging.getLogger().getEffectiveLevel(), logging.WARNING) args = parse_args(['fittings.yaml', 'start', '@NA12']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'start') self.assertEqual(args.blueprints, None) self.assertEqual(args.facilities, ['NA12']) args = parse_args([ 'fittings.yaml', 'rub', 'web', 'sql', '@NA9', '@NA12']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'rub') self.assertEqual(args.blueprints, ['web', 'sql']) self.assertEqual(args.facilities, ['NA9', 'NA12']) args = parse_args([ 'fittings.yaml', 'rub', 'web', '@NA9', 'sql', '@NA12']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'rub') self.assertEqual(args.blueprints, ['web', 'sql']) self.assertEqual(args.facilities, ['NA9', 'NA12']) args = parse_args(['fittings.yaml', 'polish']) self.assertEqual(args.fittings, 'fittings.yaml') self.assertEqual(args.action, 'polish') self.assertEqual(args.blueprints, None) self.assertEqual(args.facilities, None) def test_main(self): engine = PlumberyEngine() engine.from_text(myPlan) engine.set_user_name('fake_name') engine.set_user_password('fake_password') with self.assertRaises(SystemExit): main(['bad args'], engine) with self.assertRaises(SystemExit): main(['fittings.yaml'], engine) with self.assertRaises(SystemExit): main(['fittings.yaml', 'xyz123', 'web'], engine) with self.assertRaises(SystemExit): main(['-v'], engine) with self.assertRaises(SystemExit): main(['fittings.yaml', 'build', 'web', '-v'], engine)