Files @ a7efcee0f399
Branch filter:

Location: kallithea/rhodecode/tests/test_hg_operations.py - annotation

Marcin Kuzminski
updated mercurial test operations script
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
a7efcee0f399
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
af65ca7e5c2b
a7efcee0f399
a7efcee0f399
af65ca7e5c2b
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
a7efcee0f399
af65ca7e5c2b
af65ca7e5c2b
a7efcee0f399
a7efcee0f399
af65ca7e5c2b
a7efcee0f399
af65ca7e5c2b
# -*- coding: utf-8 -*-
"""
    rhodecode.tests.test_hg_operations
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Test suite for making push/pull operations
    
    :created_on: Dec 30, 2010
    :copyright: (c) 2010 by marcink.
    :license: LICENSE_NAME, see LICENSE_FILE for more details.
"""

import os
import shutil
import logging

from subprocess import Popen, PIPE

from os.path import join as jn

from rhodecode.tests import TESTS_TMP_PATH, NEW_HG_REPO, HG_REPO

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``.
    """

    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


#===============================================================================
# TESTS
#===============================================================================
def test_clone():
    #rm leftovers
    try:
        log.debug('removing old directory')
        shutil.rmtree(jn(TESTS_TMP_PATH, HG_REPO))
    except OSError:
        pass

    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)}

    stdout, stderr = __execute_cmd('hg clone', clone_url)

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)

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

    __execute_cmd('hg push %s' % jn(TESTS_TMP_PATH, HG_REPO))

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

    __execute_cmd('touch %s' % added_file)

    __execute_cmd('hg add %s' % added_file)

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

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

    __execute_cmd('hg push %s' % jn(TESTS_TMP_PATH, HG_REPO))

def test_push_wrong_credentials():

    clone_url = 'http://%(user)s:%(pass)s@%(host)s/%(cloned_repo)s' % \
                  {'user':USER + 'xxx',
                   'pass':PASS,
                   'host':HOST,
                   '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)

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

    __execute_cmd('hg push %s' % clone_url)

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

    try:
        os.makedirs(jn(TESTS_TMP_PATH, HG_REPO))
    except OSError:
        pass

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

    __execute_cmd("""hg add %s""" % added_file)

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

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

    __execute_cmd('hg push %s' % jn(TESTS_TMP_PATH, HG_REPO + '_error'))

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