Changeset - 1f0e37c0854d
[Not reviewed]
beta
0 1 0
Marcin Kuzminski - 15 years ago 2011-01-03 00:30:05
marcin@python-works.com
fixed hg operations test script
1 file changed with 127 insertions and 40 deletions:
0 comments (0 inline, 0 general)
rhodecode/tests/test_hg_operations.py
Show inline comments
 
@@ -23,75 +23,146 @@ from rhodecode.tests import TESTS_TMP_PA
 
USER = 'test_admin'
 
PASS = 'test12'
 
HOST = '127.0.0.1:5000'
 

	
 
log = logging.getLogger(__name__)
 

	
 
def __execute_cmd(cmd, *args):
 
    """Runs command on the system with given ``args``.
 
    """
 

	
 
class Command(object):
 

	
 
    def __init__(self, cwd):
 
        self.cwd = cwd
 

	
 
    command = cmd + ' ' + ' '.join(args)
 
    log.debug('Executing %s' % command)
 
    print command
 
    p = Popen(command, shell=True, stdout=PIPE, stderr=PIPE)
 
    stdout, stderr = p.communicate()
 
    print stdout, stderr
 
    return stdout, stderr
 
    def execute(self, cmd, *args):
 
        """Runs command on the system with given ``args``.
 
        """
 

	
 
        command = cmd + ' ' + ' '.join(args)
 
        log.debug('Executing %s' % command)
 
        print command
 
        p = Popen(command, shell=True, stdout=PIPE, stderr=PIPE, cwd=self.cwd)
 
        stdout, stderr = p.communicate()
 
        print stdout, stderr
 
        return stdout, stderr
 

	
 

	
 
#===============================================================================
 
# TESTS
 
#===============================================================================
 
def test_clone():
 
    #rm leftovers
 
    cwd = path = jn(TESTS_TMP_PATH, HG_REPO)
 

	
 
    try:
 
        log.debug('removing old directory')
 
        shutil.rmtree(jn(TESTS_TMP_PATH, HG_REPO))
 
        shutil.rmtree(path, ignore_errors=True)
 
        os.makedirs(path)
 
        #print 'made dirs %s' % jn(path)
 
    except OSError:
 
        pass
 
        raise
 

	
 

	
 
    clone_url = 'http://%(user)s:%(pass)s@%(host)s/%(cloned_repo)s %(dest)s' % \
 
                  {'user':USER,
 
                   'pass':PASS,
 
                   'host':HOST,
 
                   'cloned_repo':HG_REPO,
 
                   'dest':jn(TESTS_TMP_PATH, HG_REPO)}
 
                   'dest':path}
 

	
 
    stdout, stderr = Command(cwd).execute('hg clone', clone_url)
 

	
 
    assert """adding file changes""" in stdout, 'no messages about cloning'
 
    assert """abort""" not in stderr , 'got error from clone'
 

	
 

	
 

	
 
def test_clone_anonymous_ok():
 
    cwd = path = jn(TESTS_TMP_PATH, HG_REPO)
 

	
 
    try:
 
        shutil.rmtree(path, ignore_errors=True)
 
        os.makedirs(path)
 
        #print 'made dirs %s' % jn(path)
 
    except OSError:
 
        raise
 

	
 

	
 
    clone_url = 'http://%(host)s/%(cloned_repo)s %(dest)s' % \
 
                  {'user':USER,
 
                   'pass':PASS,
 
                   'host':HOST,
 
                   'cloned_repo':HG_REPO,
 
                   'dest':path}
 

	
 
    stdout, stderr = __execute_cmd('hg clone', clone_url)
 
    stdout, stderr = Command(cwd).execute('hg clone', clone_url)
 
    print stdout, stderr
 
    assert """adding file changes""" in stdout, 'no messages about cloning'
 
    assert """abort""" not in stderr , 'got error from clone'
 

	
 
def test_clone_wrong_credentials():
 
    cwd = path = jn(TESTS_TMP_PATH, HG_REPO)
 

	
 
    try:
 
        shutil.rmtree(path, ignore_errors=True)
 
        os.makedirs(path)
 
        #print 'made dirs %s' % jn(path)
 
    except OSError:
 
        raise
 

	
 

	
 
    clone_url = 'http://%(user)s:%(pass)s@%(host)s/%(cloned_repo)s %(dest)s' % \
 
                  {'user':USER + 'error',
 
                   'pass':PASS,
 
                   'host':HOST,
 
                   'cloned_repo':HG_REPO,
 
                   'dest':path}
 

	
 
    stdout, stderr = Command(cwd).execute('hg clone', clone_url)
 

	
 
    assert """abort: authorization failed""" in stderr , 'no error from wrong credentials'
 

	
 

	
 
def test_pull():
 
    pass
 

	
 
def test_push():
 

	
 
    modified_file = jn(TESTS_TMP_PATH, HG_REPO, 'setup.py')
 
    for i in xrange(5):
 
        cmd = """echo 'added_line%s' >> %s""" % (i, modified_file)
 
        __execute_cmd(cmd)
 
        Command(cwd).execute(cmd)
 

	
 
        cmd = """hg ci -m 'changed file %s' %s """ % (i, modified_file)
 
        __execute_cmd(cmd)
 
        Command(cwd).execute(cmd)
 

	
 
    __execute_cmd('hg push %s' % jn(TESTS_TMP_PATH, HG_REPO))
 
    Command(cwd).execute('hg push %s' % jn(TESTS_TMP_PATH, HG_REPO))
 

	
 
def test_push_new_file():
 
    added_file = jn(TESTS_TMP_PATH, HG_REPO, 'setup.py')
 

	
 
    test_clone()
 

	
 
    __execute_cmd('touch %s' % added_file)
 
    cwd = path = jn(TESTS_TMP_PATH, HG_REPO)
 
    added_file = jn(path, 'setup.py')
 

	
 
    __execute_cmd('hg add %s' % added_file)
 
    Command(cwd).execute('touch %s' % added_file)
 

	
 
    Command(cwd).execute('hg add %s' % added_file)
 

	
 
    for i in xrange(15):
 
        cmd = """echo 'added_line%s' >> %s""" % (i, added_file)
 
        __execute_cmd(cmd)
 
        Command(cwd).execute(cmd)
 

	
 
        cmd = """hg ci -m 'commited new %s' %s """ % (i, added_file)
 
        __execute_cmd(cmd)
 
        Command(cwd).execute(cmd)
 

	
 
    __execute_cmd('hg push %s' % jn(TESTS_TMP_PATH, HG_REPO))
 
    push_url = 'http://%(user)s:%(pass)s@%(host)s/%(cloned_repo)s' % \
 
                  {'user':USER,
 
                   'pass':PASS,
 
                   'host':HOST,
 
                   'cloned_repo':HG_REPO,
 
                   'dest':jn(TESTS_TMP_PATH, HG_REPO)}
 

	
 
    Command(cwd).execute('hg push %s' % push_url)
 

	
 
def test_push_wrong_credentials():
 

	
 
    clone_url = 'http://%(user)s:%(pass)s@%(host)s/%(cloned_repo)s' % \
 
                  {'user':USER + 'xxx',
 
                   'pass':PASS,
 
@@ -99,40 +170,56 @@ def test_push_wrong_credentials():
 
                   'cloned_repo':HG_REPO,
 
                   'dest':jn(TESTS_TMP_PATH, HG_REPO)}
 

	
 
    modified_file = jn(TESTS_TMP_PATH, HG_REPO, 'setup.py')
 
    for i in xrange(5):
 
        cmd = """echo 'added_line%s' >> %s""" % (i, modified_file)
 
        __execute_cmd(cmd)
 
        Command(cwd).execute(cmd)
 

	
 
        cmd = """hg ci -m 'commited %s' %s """ % (i, modified_file)
 
        __execute_cmd(cmd)
 
        Command(cwd).execute(cmd)
 

	
 
    __execute_cmd('hg push %s' % clone_url)
 
    Command(cwd).execute('hg push %s' % clone_url)
 

	
 
def test_push_wrong_path():
 
    added_file = jn(TESTS_TMP_PATH, HG_REPO, 'somefile.py')
 
    cwd = path = jn(TESTS_TMP_PATH, HG_REPO)
 
    added_file = jn(path, 'somefile.py')
 

	
 
    try:
 
        os.makedirs(jn(TESTS_TMP_PATH, HG_REPO))
 
        shutil.rmtree(path, ignore_errors=True)
 
        os.makedirs(path)
 
        print 'made dirs %s' % jn(path)
 
    except OSError:
 
        pass
 
        raise
 

	
 
    __execute_cmd("""echo '' > %s""" % added_file)
 

	
 
    __execute_cmd("""hg add %s""" % added_file)
 
    Command(cwd).execute("""echo '' > %s""" % added_file)
 
    Command(cwd).execute("""hg init %s""" % path)
 
    Command(cwd).execute("""hg add %s""" % added_file)
 

	
 
    for i in xrange(2):
 
        cmd = """echo 'added_line%s' >> %s""" % (i, added_file)
 
        __execute_cmd(cmd)
 
        Command(cwd).execute(cmd)
 

	
 
        cmd = """hg ci -m 'commited new %s' %s """ % (i, added_file)
 
        __execute_cmd(cmd)
 
        Command(cwd).execute(cmd)
 

	
 
    __execute_cmd('hg push %s' % jn(TESTS_TMP_PATH, HG_REPO + '_error'))
 
    clone_url = 'http://%(user)s:%(pass)s@%(host)s/%(cloned_repo)s' % \
 
                  {'user':USER,
 
                   'pass':PASS,
 
                   'host':HOST,
 
                   'cloned_repo':HG_REPO + '_error',
 
                   'dest':jn(TESTS_TMP_PATH, HG_REPO)}
 

	
 
    stdout, stderr = Command(cwd).execute('hg push %s' % clone_url)
 
    assert """abort: HTTP Error 403: Forbidden"""  in stderr
 

	
 

	
 
if __name__ == '__main__':
 
    test_clone()
 
    test_push_wrong_path()
 
    test_push_wrong_credentials()
 
    test_push_new_file()
 
    test_clone_wrong_credentials()
 
    ##test_clone_anonymous_ok()
 

	
 
    #test_push_new_file()
 
    #test_push_wrong_path()
 
    #test_push_wrong_credentials()
 

	
 

	
0 comments (0 inline, 0 general)