view rhodecode/tests/test_hg_operations.py @ 896:af65ca7e5c2b beta

changed mercurial test operations script
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 30 Dec 2010 18:14:37 +0100
parents rhodecode/tests/test_hg_operations.sh@7b18e7ca66da
children a7efcee0f399
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 addremove %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)



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