def test_set(self): engine = PlumberyEngine() DimensionDataNodeDriver.connectionCls.conn_classes = ( None, DimensionDataMockHttp) DimensionDataMockHttp.type = None self.region = DimensionDataNodeDriver(*DIMENSIONDATA_PARAMS) file = os.path.abspath( os.path.dirname(__file__))+'/fixtures/dummy_rsa.pub' settings = { 'keys': [ "*hello-there*" ], } with self.assertRaises(ValueError): engine.set_settings(settings) settings = { 'keys': [ file ], } engine.set_settings(settings) self.assertTrue(isinstance(engine.get_shared_key_files(), list)) self.assertTrue(file in engine.get_shared_key_files()) settings = { 'safeMode': False, 'polishers': [ {'ansible': {}}, {'configure': {}}, ], 'keys': [ file, file ], } engine.set_settings(settings) self.assertEqual(engine.safeMode, False) self.assertTrue(isinstance(engine.get_shared_key_files(), list)) self.assertTrue(file in engine.get_shared_key_files()) engine.add_facility(myFacility) self.assertEqual(len(engine.facilities), 1) self.assertEqual(engine.get_shared_user(), 'root') engine.set_shared_user('ubuntu') self.assertEqual(engine.get_shared_user(), 'ubuntu') engine.set_shared_secret('fake_secret') self.assertEqual(engine.get_shared_secret(), 'fake_secret') random = engine.get_secret('random') self.assertEqual(len(random), 9) self.assertEqual(engine.get_secret('random'), random) engine.set_user_name('fake_name') self.assertEqual(engine.get_user_name(), 'fake_name') engine.set_user_password('fake_password') self.assertEqual(engine.get_user_password(), 'fake_password')
def test_keys(self): engine = PlumberyEngine() self.assertEqual(engine._sharedKeyFiles, []) with self.assertRaises(ValueError): engine.set_shared_key_files('this_does_not_exist') self.assertTrue(isinstance(engine.get_shared_key_files(), list)) self.assertEqual(engine._sharedKeyFiles, engine.get_shared_key_files()) with mock.patch.object(engine, 'get_shared_key_files') as patched: patched.return_value = [] files = ['*unknown-file*', '**me-too*'] with self.assertRaises(ValueError): engine.set_shared_key_files(files) file = os.path.abspath( os.path.dirname(__file__))+'/fixtures/dummy_rsa.pub' engine.set_shared_key_files(file) self.assertTrue(isinstance(engine.get_shared_key_files(), list)) self.assertEqual(engine.get_shared_key_files()[0], file) self.assertEqual(engine._sharedKeyFiles, engine.get_shared_key_files()) with mock.patch.object(engine, 'get_shared_key_files') as patched: patched.return_value = [] files = [file, file, file] engine.set_shared_key_files(files) self.assertEqual(engine._sharedKeyFiles, [file]) if 'SHARED_KEY' in os.environ: memory = os.environ["SHARED_KEY"] else: memory = None engine._sharedKeyFiles = [] os.environ["SHARED_KEY"] = 'this_does_not_exist' with self.assertRaises(ValueError): engine.set_shared_key_files() with self.assertRaises(ValueError): engine.get_shared_key_files() self.assertTrue(isinstance(engine._sharedKeyFiles, list)) engine._sharedKeyFiles = [] os.environ["SHARED_KEY"] = file engine.set_shared_key_files() self.assertTrue(isinstance(engine.get_shared_key_files(), list)) self.assertEqual(engine.get_shared_key_files()[0], file) self.assertEqual(engine._sharedKeyFiles, engine.get_shared_key_files()) if memory is None: os.environ.pop("SHARED_KEY") else: os.environ["SHARED_KEY"] = memory with mock.patch.object(engine, 'get_shared_key_files') as patched: patched.return_value = [] self.assertTrue(isinstance(engine.get_shared_key_files(), list)) engine.set_shared_key_files() self.assertTrue(plogging.foundErrors()) with self.assertRaises(ValueError): engine.set_shared_key_files('this_does_not_exist') file = os.path.abspath( os.path.dirname(__file__))+'/fixtures/dummy_rsa.pub' engine.set_shared_key_files(file) self.assertEqual(engine._sharedKeyFiles, [file])
def test_lookup(self): engine = PlumberyEngine() self.assertEqual(engine.lookup('plumbery.version'), __version__) engine.secrets = {} random = engine.lookup('secret.random') self.assertEqual(len(random), 9) self.assertEqual(engine.lookup('secret.random'), random) md5 = engine.lookup('secret.random.md5') self.assertEqual(len(md5), 32) self.assertNotEqual(md5, random) sha = engine.lookup('secret.random.sha1') self.assertEqual(len(sha), 40) self.assertNotEqual(sha, random) sha = engine.lookup('secret.random.sha256') self.assertEqual(len(sha), 64) self.assertNotEqual(sha, random) id1 = engine.lookup('id1.uuid') self.assertEqual(len(id1), 36) self.assertEqual(engine.lookup('id1.uuid'), id1) id2 = engine.lookup('id2.uuid') self.assertEqual(len(id2), 36) self.assertNotEqual(id1, id2) engine.lookup('application.secret') engine.lookup('database.secret') engine.lookup('master.secret') engine.lookup('slave.secret') original = b'hello world' print('original: {}'.format(original)) text = ensure_string(engine.lookup('rsa_public.pair1')) print('rsa_public.pair1: {}'.format(text)) self.assertTrue(text.startswith('ssh-rsa ')) text = b(text) key = serialization.load_ssh_public_key( data=text, backend=default_backend()) encrypted = key.encrypt( original, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), label=None ) ) encrypted = base64.b64encode(encrypted) print('encrypted: {}'.format(encrypted)) privateKey = engine.lookup('rsa_private.pair1') print('rsa_private.pair1: {}'.format(privateKey)) self.assertTrue(ensure_string(privateKey).startswith( '-----BEGIN RSA PRIVATE KEY-----')) privateKey = serialization.load_pem_private_key( b(privateKey), password=None, backend=default_backend()) decrypted = privateKey.decrypt( base64.b64decode(encrypted), padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), label=None ) ) print('decrypted: {}'.format(decrypted)) self.assertEqual(decrypted, original) token = engine.lookup('https://discovery.etcd.io/new') self.assertEqual(token.startswith( 'https://discovery.etcd.io/'), True) self.assertEqual(len(token), 58) self.assertEqual(len(engine.secrets), 13) with self.assertRaises(LookupError): localKey = engine.lookup('rsa_private.local') localKey = engine.lookup('rsa_public.local') if len(localKey) > 0: path = engine.get_shared_key_files()[0] with open(os.path.expanduser(path)) as stream: text = stream.read() stream.close() self.assertEqual(localKey.strip(), text.strip()) plogging.info("Successful lookup of local public key")
def test_keys(self): engine = PlumberyEngine() self.assertEqual(engine._sharedKeyFiles, []) with self.assertRaises(ValueError): engine.set_shared_key_files('this_does_not_exist') self.assertTrue(isinstance(engine.get_shared_key_files(), list)) self.assertEqual(engine._sharedKeyFiles, engine.get_shared_key_files()) with mock.patch.object(engine, 'get_shared_key_files') as patched: patched.return_value = [] files = ['*unknown-file*', '**me-too*'] with self.assertRaises(ValueError): engine.set_shared_key_files(files) file = os.path.abspath( os.path.dirname(__file__)) + '/fixtures/dummy_rsa.pub' engine.set_shared_key_files(file) self.assertTrue(isinstance(engine.get_shared_key_files(), list)) self.assertEqual(engine.get_shared_key_files()[0], file) self.assertEqual(engine._sharedKeyFiles, engine.get_shared_key_files()) with mock.patch.object(engine, 'get_shared_key_files') as patched: patched.return_value = [] files = [file, file, file] engine.set_shared_key_files(files) self.assertEqual(engine._sharedKeyFiles, [file]) if 'SHARED_KEY' in os.environ: memory = os.environ["SHARED_KEY"] else: memory = None engine._sharedKeyFiles = [] os.environ["SHARED_KEY"] = 'this_does_not_exist' with self.assertRaises(ValueError): engine.set_shared_key_files() with self.assertRaises(ValueError): engine.get_shared_key_files() self.assertTrue(isinstance(engine._sharedKeyFiles, list)) engine._sharedKeyFiles = [] os.environ["SHARED_KEY"] = file engine.set_shared_key_files() self.assertTrue(isinstance(engine.get_shared_key_files(), list)) self.assertEqual(engine.get_shared_key_files()[0], file) self.assertEqual(engine._sharedKeyFiles, engine.get_shared_key_files()) if memory is None: os.environ.pop("SHARED_KEY") else: os.environ["SHARED_KEY"] = memory with mock.patch.object(engine, 'get_shared_key_files') as patched: patched.return_value = [] self.assertTrue(isinstance(engine.get_shared_key_files(), list)) engine.set_shared_key_files() self.assertTrue(plogging.foundErrors()) with self.assertRaises(ValueError): engine.set_shared_key_files('this_does_not_exist') file = os.path.abspath( os.path.dirname(__file__)) + '/fixtures/dummy_rsa.pub' engine.set_shared_key_files(file) self.assertEqual(engine._sharedKeyFiles, [file])
def test_lookup(self): engine = PlumberyEngine() self.assertEqual(engine.lookup('plumbery.version'), __version__) engine.secrets = {} random = engine.lookup('secret.random') self.assertEqual(len(random), 9) self.assertEqual(engine.lookup('secret.random'), random) md5 = engine.lookup('secret.random.md5') self.assertEqual(len(md5), 32) self.assertNotEqual(md5, random) sha = engine.lookup('secret.random.sha1') self.assertEqual(len(sha), 40) self.assertNotEqual(sha, random) sha = engine.lookup('secret.random.sha256') self.assertEqual(len(sha), 64) self.assertNotEqual(sha, random) id1 = engine.lookup('id1.uuid') self.assertEqual(len(id1), 36) self.assertEqual(engine.lookup('id1.uuid'), id1) id2 = engine.lookup('id2.uuid') self.assertEqual(len(id2), 36) self.assertNotEqual(id1, id2) engine.lookup('application.secret') engine.lookup('database.secret') engine.lookup('master.secret') engine.lookup('slave.secret') original = b'hello world' print('original: {}'.format(original)) text = ensure_string(engine.lookup('rsa_public.pair1')) print('rsa_public.pair1: {}'.format(text)) self.assertTrue(text.startswith('ssh-rsa ')) text = b(text) key = serialization.load_ssh_public_key(data=text, backend=default_backend()) encrypted = key.encrypt( original, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), label=None)) encrypted = base64.b64encode(encrypted) print('encrypted: {}'.format(encrypted)) privateKey = engine.lookup('rsa_private.pair1') print('rsa_private.pair1: {}'.format(privateKey)) self.assertTrue( ensure_string(privateKey).startswith( '-----BEGIN RSA PRIVATE KEY-----')) privateKey = serialization.load_pem_private_key( b(privateKey), password=None, backend=default_backend()) decrypted = privateKey.decrypt( base64.b64decode(encrypted), padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), label=None)) print('decrypted: {}'.format(decrypted)) self.assertEqual(decrypted, original) token = engine.lookup('https://discovery.etcd.io/new') self.assertEqual(token.startswith('https://discovery.etcd.io/'), True) self.assertEqual(len(token), 58) self.assertEqual(len(engine.secrets), 13) with self.assertRaises(LookupError): localKey = engine.lookup('rsa_private.local') localKey = engine.lookup('rsa_public.local') if len(localKey) > 0: path = engine.get_shared_key_files()[0] with open(os.path.expanduser(path)) as stream: text = stream.read() stream.close() self.assertEqual(localKey.strip(), text.strip()) plogging.info("Successful lookup of local public key")
def test_set(self): engine = PlumberyEngine() DimensionDataNodeDriver.connectionCls.conn_classes = ( None, DimensionDataMockHttp) DimensionDataMockHttp.type = None self.region = DimensionDataNodeDriver(*DIMENSIONDATA_PARAMS) file = os.path.abspath( os.path.dirname(__file__)) + '/fixtures/dummy_rsa.pub' settings = { 'keys': ["*hello-there*"], } with self.assertRaises(ValueError): engine.set_settings(settings) settings = { 'keys': [file], } engine.set_settings(settings) self.assertTrue(isinstance(engine.get_shared_key_files(), list)) self.assertTrue(file in engine.get_shared_key_files()) settings = { 'safeMode': False, 'polishers': [ { 'ansible': {} }, { 'configure': {} }, ], 'keys': [file, file], } engine.set_settings(settings) self.assertEqual(engine.safeMode, False) self.assertTrue(isinstance(engine.get_shared_key_files(), list)) self.assertTrue(file in engine.get_shared_key_files()) engine.add_facility(myFacility) self.assertEqual(len(engine.facilities), 1) self.assertEqual(engine.get_shared_user(), 'root') engine.set_shared_user('ubuntu') self.assertEqual(engine.get_shared_user(), 'ubuntu') engine.set_shared_secret('fake_secret') self.assertEqual(engine.get_shared_secret(), 'fake_secret') random = engine.get_secret('random') self.assertEqual(len(random), 9) self.assertEqual(engine.get_secret('random'), random) engine.set_user_name('fake_name') self.assertEqual(engine.get_user_name(), 'fake_name') engine.set_user_password('fake_password') self.assertEqual(engine.get_user_password(), 'fake_password')