def test_software_install_networkcache_upload_blacklist(self): """ Check if the networkcache upload blacklist parameters are propagated. """ def fakeBuildout(*args, **kw): pass Software._install_from_buildout = fakeBuildout def fake_upload_network_cached(*args, **kw): self.assertFalse(True) networkcache.upload_network_cached = fake_upload_network_cached upload_to_binary_cache_url_blacklist = ["http://example.com"] software = Software( url='http://example.com/software.cfg', software_root=self.software_root, buildout=self.buildout, logger=logging.getLogger(), signature_private_key_file='/signature/private/key_file', upload_cache_url='http://example.com/uploadcache', upload_dir_url='http://example.com/uploaddir', shacache_ca_file=self.shacache_ca_file, shacache_cert_file=self.shacache_cert_file, shacache_key_file=self.shacache_key_file, shadir_ca_file=self.shadir_ca_file, shadir_cert_file=self.shadir_cert_file, shadir_key_file=self.shadir_key_file, upload_to_binary_cache_url_blacklist= upload_to_binary_cache_url_blacklist, ) software.install()
def test_software_install_networkcache_upload_blacklist_side_effect(self): """ Check if the networkcache upload blacklist parameters only prevent blacklisted Software Release to be uploaded. """ def fakeBuildout(*args, **kw): pass Software._install_from_buildout = fakeBuildout def fakeUploadSoftwareRelease(*args, **kw): self.uploaded = True Software.uploadSoftwareRelease = fakeUploadSoftwareRelease upload_to_binary_cache_url_blacklist = ["http://anotherexample.com"] software = Software( url='http://example.com/software.cfg', software_root=self.software_root, buildout=self.buildout, logger=logging.getLogger(), signature_private_key_file='/signature/private/key_file', upload_cache_url='http://example.com/uploadcache', upload_dir_url='http://example.com/uploaddir', upload_binary_cache_url='http://example.com/uploadcache', upload_binary_dir_url='http://example.com/uploaddir', shacache_cert_file=self.shacache_cert_file, shacache_key_file=self.shacache_key_file, shadir_cert_file=self.shadir_cert_file, shadir_key_file=self.shadir_key_file, upload_to_binary_cache_url_blacklist= upload_to_binary_cache_url_blacklist, ) software.install() self.assertTrue(getattr(self, 'uploaded', False))
def test_software_install_with_networkcache(self): """ Check if the networkcache parameters are propagated. """ software = Software( url='http://example.com/software.cfg', software_root=self.software_root, buildout=self.buildout, logger=logging.getLogger(), signature_private_key_file='/signature/private/key_file', upload_cache_url='http://example.com/uploadcache', upload_dir_url='http://example.com/uploaddir', shacache_ca_file=self.shacache_ca_file, shacache_cert_file=self.shacache_cert_file, shacache_key_file=self.shacache_key_file, shadir_ca_file=self.shadir_ca_file, shadir_cert_file=self.shadir_cert_file, shadir_key_file=self.shadir_key_file) software.install() command_list = self.fakeCallAndRead.external_command_list self.assertIn('buildout:networkcache-section=networkcache', command_list) self.assertIn('networkcache:signature-private-key-file=%s' % self.signature_private_key_file, command_list) self.assertIn('networkcache:upload-cache-url=%s' % self.upload_cache_url, command_list) self.assertIn('networkcache:upload-dir-url=%s' % self.upload_dir_url, command_list) self.assertIn('networkcache:shacache-ca-file=%s' % self.shacache_ca_file, command_list) self.assertIn('networkcache:shacache-cert-file=%s' % self.shacache_cert_file, command_list) self.assertIn('networkcache:shacache-key-file=%s' % self.shacache_key_file, command_list) self.assertIn('networkcache:shadir-ca-file=%s' % self.shadir_ca_file, command_list) self.assertIn('networkcache:shadir-cert-file=%s' % self.shadir_cert_file, command_list) self.assertIn('networkcache:shadir-key-file=%s' % self.shadir_key_file, command_list)
def test_software_install_without_networkcache(self): """ Check if the networkcache parameters are not propagated if they are not available. """ software = Software(url='http://example.com/software.cfg', software_root=self.software_root, buildout=self.buildout, logger=logging.getLogger()) software.install() command_list = self.fakeCallAndRead.external_command_list self.assertNotIn('buildout:networkcache-section=networkcache', command_list) self.assertNotIn('networkcache:signature-private-key-file=%s' % self.signature_private_key_file, command_list) self.assertNotIn('networkcache:upload-cache-url=%s' % self.upload_cache_url, command_list) self.assertNotIn('networkcache:upload-dir-url=%s' % self.upload_dir_url, command_list)
def processSoftwareReleaseList(self): """Will process each Software Release. """ self.checkEnvironmentAndCreateStructure() self.logger.info('Processing software releases...') # Boolean to know if every instance has correctly been deployed clean_run = True for software_release in self.computer.getSoftwareReleaseList(): state = software_release.getState() try: software_release_uri = software_release.getURI() url_hash = md5digest(software_release_uri) software_path = os.path.join(self.software_root, url_hash) software = Software(url=software_release_uri, software_root=self.software_root, buildout=self.buildout, logger=self.logger, signature_private_key_file=self.signature_private_key_file, signature_certificate_list=self.signature_certificate_list, download_binary_cache_url=self.download_binary_cache_url, upload_binary_cache_url=self.upload_binary_cache_url, download_from_binary_cache_url_blacklist= self.download_from_binary_cache_url_blacklist, upload_to_binary_cache_url_blacklist= self.upload_to_binary_cache_url_blacklist, upload_cache_url=self.upload_cache_url, download_binary_dir_url=self.download_binary_dir_url, upload_binary_dir_url=self.upload_binary_dir_url, upload_dir_url=self.upload_dir_url, shacache_cert_file=self.shacache_cert_file, shacache_key_file=self.shacache_key_file, shadir_cert_file=self.shadir_cert_file, shadir_key_file=self.shadir_key_file) if state == 'available': completed_tag = os.path.join(software_path, '.completed') if (self.develop or (not os.path.exists(completed_tag) and len(self.software_release_filter_list) == 0) or url_hash in self.software_release_filter_list or url_hash in (md5digest(uri) for uri in self.software_release_filter_list)): try: software_release.building() except NotFoundError: pass software.install() with open(completed_tag, 'w') as fout: fout.write(time.asctime()) elif state == 'destroyed': if os.path.exists(software_path): self.logger.info('Destroying %r...' % software_release_uri) software.destroy() self.logger.info('Destroyed %r.' % software_release_uri) # Send log before exiting except (SystemExit, KeyboardInterrupt): software_release.error(traceback.format_exc(), logger=self.logger) raise # Buildout failed: send log but don't print it to output (already done) except BuildoutFailedError as exc: clean_run = False try: software_release.error(exc, logger=self.logger) except (SystemExit, KeyboardInterrupt): raise except Exception: self.logger.exception('Problem while reporting error, continuing:') # For everything else: log it, send it, continue. except Exception: self.logger.exception('') software_release.error(traceback.format_exc(), logger=self.logger) clean_run = False else: if state == 'available': try: software_release.available() except NotFoundError: pass elif state == 'destroyed': try: software_release.destroyed() except (NotFoundError, ServerError): self.logger.exception('') self.logger.info('Finished software releases.') # Return success value if not clean_run: return SLAPGRID_FAIL return SLAPGRID_SUCCESS