mirror of
https://github.com/nvbn/thefuck.git
synced 2025-02-22 12:58:33 +00:00
#334 Add performance test
This commit is contained in:
parent
354ae119c6
commit
7be71a0121
@ -5,3 +5,4 @@ wheel
|
|||||||
setuptools>=17.1
|
setuptools>=17.1
|
||||||
pexpect
|
pexpect
|
||||||
pypandoc
|
pypandoc
|
||||||
|
pytest-benchmark
|
||||||
|
56
tests/functional/test_performance.py
Normal file
56
tests/functional/test_performance.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
from pexpect import TIMEOUT
|
||||||
|
import pytest
|
||||||
|
import time
|
||||||
|
from tests.functional.utils import spawn, functional, bare
|
||||||
|
|
||||||
|
dockerfile = u'''
|
||||||
|
FROM ubuntu:latest
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install -yy python3 python3-pip python3-dev git
|
||||||
|
RUN pip3 install -U setuptools
|
||||||
|
RUN ln -s /usr/bin/pip3 /usr/bin/pip
|
||||||
|
RUN adduser --disabled-password --gecos '' test
|
||||||
|
ENV SEED "{seed}"
|
||||||
|
COPY thefuck /src
|
||||||
|
WORKDIR /src
|
||||||
|
RUN pip install .
|
||||||
|
USER test
|
||||||
|
RUN echo 'eval $(thefuck --alias)' > /home/test/.bashrc
|
||||||
|
RUN echo > /home/test/.bash_history
|
||||||
|
RUN git config --global user.email "you@example.com"
|
||||||
|
RUN git config --global user.name "Your Name"
|
||||||
|
'''.format(seed=time.time())
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def proc(request):
|
||||||
|
return spawn(request, 'ubuntu-python3-bash-performance',
|
||||||
|
dockerfile, u'bash', install=False, copy_src=True)
|
||||||
|
|
||||||
|
|
||||||
|
def plot(proc):
|
||||||
|
proc.sendline(u'cd /home/test/')
|
||||||
|
proc.sendline(u'fuck')
|
||||||
|
assert proc.expect([TIMEOUT, u'No fucks given'])
|
||||||
|
proc.sendline(u'git init')
|
||||||
|
proc.sendline(u'git add .')
|
||||||
|
proc.sendline(u'git commit -a -m init')
|
||||||
|
proc.sendline(u'git brnch')
|
||||||
|
proc.sendline(u'fuck')
|
||||||
|
assert proc.expect([TIMEOUT, u'git branch'])
|
||||||
|
proc.send('\n')
|
||||||
|
assert proc.expect([TIMEOUT, u'master'])
|
||||||
|
proc.sendline(u'echo test')
|
||||||
|
proc.sendline(u'echo tst')
|
||||||
|
proc.sendline(u'fuck')
|
||||||
|
assert proc.expect([TIMEOUT, u'echo test'])
|
||||||
|
proc.send('\n')
|
||||||
|
assert proc.expect([TIMEOUT, u'test'])
|
||||||
|
|
||||||
|
|
||||||
|
@functional
|
||||||
|
@pytest.mark.skipif(
|
||||||
|
bool(bare), reason='Would lie on a bare run')
|
||||||
|
@pytest.mark.benchmark(min_rounds=10)
|
||||||
|
def test_performance(proc, benchmark):
|
||||||
|
assert benchmark(plot, proc) is None
|
@ -8,28 +8,31 @@ import sys
|
|||||||
import pexpect
|
import pexpect
|
||||||
from tests.utils import root
|
from tests.utils import root
|
||||||
|
|
||||||
|
|
||||||
bare = os.environ.get('BARE')
|
bare = os.environ.get('BARE')
|
||||||
enabled = os.environ.get('FUNCTIONAL')
|
enabled = os.environ.get('FUNCTIONAL')
|
||||||
|
|
||||||
|
|
||||||
def build_container(tag, dockerfile):
|
def build_container(tag, dockerfile, copy_src=False):
|
||||||
tmpdir = mkdtemp()
|
tmpdir = mkdtemp()
|
||||||
try:
|
try:
|
||||||
with Path(tmpdir).joinpath('Dockerfile').open('w') as file:
|
if copy_src:
|
||||||
|
subprocess.call(['cp', '-a', str(root), tmpdir])
|
||||||
|
dockerfile_path = Path(tmpdir).joinpath('Dockerfile')
|
||||||
|
with dockerfile_path.open('w') as file:
|
||||||
file.write(dockerfile)
|
file.write(dockerfile)
|
||||||
if subprocess.call(['docker', 'build', '--tag={}'.format(tag), tmpdir],
|
if subprocess.call(['docker', 'build', '--tag={}'.format(tag), tmpdir]) != 0:
|
||||||
cwd=str(root)) != 0:
|
|
||||||
raise Exception("Can't build a container")
|
raise Exception("Can't build a container")
|
||||||
finally:
|
finally:
|
||||||
shutil.rmtree(tmpdir)
|
shutil.rmtree(tmpdir)
|
||||||
|
|
||||||
|
|
||||||
def spawn(request, tag, dockerfile, cmd, install=True):
|
def spawn(request, tag, dockerfile, cmd, install=True, copy_src=False):
|
||||||
if bare:
|
if bare:
|
||||||
proc = pexpect.spawnu(cmd)
|
proc = pexpect.spawnu(cmd)
|
||||||
else:
|
else:
|
||||||
tag = 'thefuck/{}'.format(tag)
|
tag = 'thefuck/{}'.format(tag)
|
||||||
build_container(tag, dockerfile)
|
build_container(tag, dockerfile, copy_src)
|
||||||
proc = pexpect.spawnu('docker run --volume {}:/src --tty=true '
|
proc = pexpect.spawnu('docker run --volume {}:/src --tty=true '
|
||||||
'--interactive=true {} {}'.format(root, tag, cmd))
|
'--interactive=true {} {}'.format(root, tag, cmd))
|
||||||
if install:
|
if install:
|
||||||
@ -39,7 +42,7 @@ def spawn(request, tag, dockerfile, cmd, install=True):
|
|||||||
|
|
||||||
proc.logfile = sys.stdout
|
proc.logfile = sys.stdout
|
||||||
|
|
||||||
request.addfinalizer(proc.terminate)
|
request.addfinalizer(lambda: proc.terminate(True))
|
||||||
return proc
|
return proc
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user