def test_init(): s = gerritssh.Site('gerrit.example.com') assert s, 'Failed to create a Site object' assert s.site == 'gerrit.example.com', \ 'Did not record the site name properly' assert repr(s) == ("<gerritssh.gerritsite.Site(args=('gerrit.example.com'," " None, None, None), connected=False)>") with pytest.raises(TypeError): _ = gerritssh.Site(1)
def test_failed_connection3(): ''' Use a clearly invalid site name to ensure the connection attempt fails ''' s = gerritssh.Site('...') with pytest.raises(gerritssh.SSHConnectionError): s.connect()
def live_instance(request): s = gssh.Site(online_instance()) def fin(): print('Closing connection to ' + online_instance()) s.disconnect() print('Site created: ' + repr(s)) request.addfinalizer(fin) s.connect() assert s.connected return s
def test_version_compare(connected_site): with pytest.raises(gerritssh.SSHConnectionError): gerritssh.Site('...').version_in('>=2.10') s = connected_site ev = s.version_in v = s.version # unused but useful if test fails assert ev('==2.9.0') assert ev('>=2') assert ev('==2.9') assert not ev('==1.1') assert ev('>=1.9,<=3.1')
def test_extract_version(): s = gerritssh.Site('...') ev = s._Site__extract_version assert ev('gerrit version 1') == '0.0.0' assert ev('gerrit version 1.2') == '0.0.0' assert ev('gerrit version 1.2.3') == '1.2.3' assert ev('gerrit version 1-2ab') == '0.0.0' assert ev('gerrit version 1ab') == '0.0.0' assert ev('gerrit version abc') == '0.0.0' assert ev('g') == '0.0.0' assert ev('gerrit 1.2.3') == '0.0.0' assert ev('gerrit version 1 2 3') == '0.0.0' assert ev('gerrit version 1 abc 2') == '0.0.0' assert ev('gerrit version 1.2.3abcd') == '1.2.3' assert ev('gerrit version 2.4.4-14-gab7f4c1') == '2.4.4'
def connected_site(): ''' This fixture provides a Site object, monkeypatched so that any attempt to execute a command acts as if a 'gerrit version' command had been executed. In essence it provides a properly constructed Site object which will report a version of 2.9.0 and a site of 'gerrit.example.com. ''' class DummySSHClient(object): def __init__(self, *args, **kwargs): self.connected = False def execute(self, command): import io import sys self.connected = True vstr = 'gerrit version 2.9.0\n' if sys.version_info[0] < 3: vstr = unicode(vstr) result = SSHCommandResult(command, io.StringIO(), io.StringIO(vstr), io.StringIO()) return result def disconnect(self): self.connected = False s = gerritssh.Site('gerrit.example.com') s._Site__ssh = DummySSHClient() assert not s.connected, 'Thinks its connected after construction' s.connect() assert s.connected assert s.version == SV.Version('2.9.0') return s
def connect_to_site(site): ''' Connect to the specified site ''' return gssh.Site(site).connect()
def main(): global LF parser = optparse.OptionParser(usage="usage: %prog [options]", version="%prog 1.0") parser.add_option("-o", "--owner", dest="owner", action='store', help="gerrit pwner [default: %default]", metavar="OWNER", default=OWNER) parser.add_option("-s", "--server", dest="server", action='store', help="gerrit server [default: %default]", metavar="SERVER", default=GERRIT_HOST) parser.add_option("-p", "--port", dest="port", action='store', type="int", help="gerrit port [default: %default]", metavar="PORT", default=GERRIT_PORT) parser.add_option("--start-time", dest="start_time", action='store', type="string", help="start time for querrying in " "gerrit, in format: YYYY-MM-DD", metavar="STARTTIME", default=START_TIME) parser.add_option("-k", "--keyfile", dest="keyfile", action='store', help="gerrit ssh keyfile [default: use local keyfile]", metavar="FILE", default=None) parser.add_option("-P", "--passphrase", dest="passphrase", action='store', help="passphrase in case of enrypting keyfile", metavar="PASS", default=None) parser.add_option("-u", "--user", dest="user", action='store', help="gerrit user to querry [default: %default]", metavar="USER", default=OWNER) parser.add_option("-d", "--del", dest="bdel", action='store', type="int", help="whether to delete delivery folder " "and loc file [default: %default]", metavar="OPTION", default=0) (options, args) = parser.parse_args() check_date(options.start_time) owner = options.owner start_time = options.start_time port = options.port server = options.server keyfile = options.keyfile passp = options.passphrase user = options.user bdel = options.bdel rsite = gssh.Site(server, owner, port, keyfile, passp).connect() plist = gssh.Query( '--commit-message', 'owner:' + user + ' AND (status:merged OR status:pending)' + ' since:' + start_time).execute_on(rsite) LOG.info("| Total gerrit results: %d", len(plist)) if bdel == 1: shutil.rmtree(OUTPUT, True) if os.path.exists(LOC_FILE): os.remove(LOC_FILE) LF = open(LOC_FILE, 'a') # Create delivery folder if not os.path.exists(OUTPUT): os.makedirs(OUTPUT) if OUTPUT.startswith('/'): root_dir = OUTPUT else: root_dir = "/".join([os.getcwd(), OUTPUT]) for p in plist: LOG.info("|_ Generating doc from gerrit patch: %s ", p.number) os.chdir(root_dir) project_name = '[' + p.repo_name.split('/')[-1] + ']' topic = get_topic_name(p) pss = p.patchsets patch_urls = {} if topic.bug: name = topic.bug else: name = topic.change for num, ps in pss.iteritems(): patch_urls[num] = PROTO + GERRIT_HOST + \ '/gitweb?p=' + p.repo_name + \ '.git;a=patch;h=' + \ ps.raw['revision'] LOG.info('|____ Project: %s', project_name) LOG.info('|____ Topic: %s', name) LOG.info('|____ PS count: %s', len(patch_urls)) patch_name = project_name if topic.bp: directory = create_folder(patch_name, topic.bp) os.chdir("/".join([os.getcwd(), directory])) patch_name = None if len(patch_urls) == 1: create_file(patch_name, name, patch_urls[1], (p.patchsets[1].raw['sizeInsertions'], p.patchsets[1].raw['sizeDeletions'], p.raw['commitMessage'].split('Change-Id')[0].replace( '\n', ' '))) else: directory = create_folder( patch_name, name, p.raw['commitMessage'].split('Change-Id')[0].replace( '\n', ' ')) os.chdir("/".join([os.getcwd(), directory])) tmp_name = name if topic.bug and topic.change: tmp_name = topic.bug + '_' + topic.change for patch_num, patch_url in patch_urls.iteritems(): create_file(None, tmp_name, patch_url, (p.patchsets[patch_num].raw['sizeInsertions'], p.patchsets[patch_num].raw['sizeDeletions']), patch_num=patch_num) LF.close() LOG.info("|_ FIN!")