Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2:ARM
obs-service-tar_scm
scmlogs.py
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File scmlogs.py of Package obs-service-tar_scm
#!/usr/bin/python import glob import os class ScmInvocationLogs: """ Provides log files which tracks invocations of SCM binaries. The tracking is done via a wrapper around SCM to enable behaviour verification testing on tar_scm's repository caching code. This is cleaner than writing tests which look inside the cache, because then they become coupled to the cache's implementation, and require knowledge of where the cache lives etc. One instance should be constructed per unit test. If the test invokes the SCM binary multiple times, invoke next() in between each, so that a separate log file is used for each invocation - this allows more accurate fine-grained assertions on the invocation log. """ @classmethod def setup_bin_wrapper(cls, scm, tmp_dir): cls.wrapper_dir = tmp_dir + '/wrappers' if not os.path.exists(cls.wrapper_dir): os.makedirs(cls.wrapper_dir) wrapper = cls.wrapper_dir + '/' + scm if not os.path.exists(wrapper): os.symlink('../../scm-wrapper', wrapper) path = os.getenv('PATH') prepend = cls.wrapper_dir + ':' if not path.startswith(prepend): new_path = prepend + path os.environ['PATH'] = new_path def __init__(self, scm, test_dir): self.scm = scm self.test_dir = test_dir self.counter = 0 self.unlink_existing_logs() def get_log_file_template(self): return '%s-invocation-%%s.log' % self.scm def get_log_path_template(self): return os.path.join(self.test_dir, self.get_log_file_template()) def unlink_existing_logs(self): pat = self.get_log_path_template() % '*' for log in glob.glob(pat): os.unlink(log) def get_log_file(self, identifier): if identifier: identifier = '-' + identifier return self.get_log_file_template() % ('%02d%s' % (self.counter, identifier)) def get_log_path(self, identifier): return os.path.join(self.test_dir, self.get_log_file(identifier)) def next(self, identifier=''): self.counter += 1 self.current_log_path = self.get_log_path(identifier) if os.path.exists(self.current_log_path): raise RuntimeError, "%s already existed?!" % self.current_log_path os.putenv('SCM_INVOCATION_LOG', self.current_log_path) def annotate(self, msg): log = open(self.current_log_path, 'a') log.write('# ' + msg + "\n") print msg log.close() def read(self): if not os.path.exists(self.current_log_path): return '<no %s log>' % self.scm log = open(self.current_log_path) loglines = log.readlines() log.close() return loglines
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor