view rhodecode/tests/test_hg_operations.py @ 897:a7efcee0f399 beta

updated mercurial test operations script
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 30 Dec 2010 18:30:09 +0100
parents af65ca7e5c2b
children 1f0e37c0854d
line wrap: on
line source

# -*- 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()