##// END OF EJS Templates
fixes issue #506
fixes issue #506

File last commit:

r2451:402a96fc beta
r2636:4dbc00e9 beta
Show More
test_archives.py
108 lines | 3.5 KiB | text/x-python | PythonLexer
Added vcs testsuite for better integration tests + added fetching...
r2451 from __future__ import with_statement
import os
import tarfile
import zipfile
import datetime
import tempfile
import StringIO
from base import BackendTestMixin
from conf import SCM_TESTS
from rhodecode.lib.vcs.exceptions import VCSError
from rhodecode.lib.vcs.nodes import FileNode
from rhodecode.lib.vcs.utils.compat import unittest
class ArchivesTestCaseMixin(BackendTestMixin):
@classmethod
def _get_commits(cls):
start_date = datetime.datetime(2010, 1, 1, 20)
for x in xrange(5):
yield {
'message': 'Commit %d' % x,
'author': 'Joe Doe <joe.doe@example.com>',
'date': start_date + datetime.timedelta(hours=12 * x),
'added': [
FileNode('%d/file_%d.txt' % (x, x),
content='Foobar %d' % x),
],
}
def test_archive_zip(self):
path = tempfile.mkstemp()[1]
with open(path, 'wb') as f:
self.tip.fill_archive(stream=f, kind='zip', prefix='repo')
out = zipfile.ZipFile(path)
for x in xrange(5):
node_path = '%d/file_%d.txt' % (x, x)
decompressed = StringIO.StringIO()
decompressed.write(out.read('repo/' + node_path))
self.assertEqual(
decompressed.getvalue(),
self.tip.get_node(node_path).content)
def test_archive_tgz(self):
path = tempfile.mkstemp()[1]
with open(path, 'wb') as f:
self.tip.fill_archive(stream=f, kind='tgz', prefix='repo')
outdir = tempfile.mkdtemp()
outfile = tarfile.open(path, 'r|gz')
outfile.extractall(outdir)
for x in xrange(5):
node_path = '%d/file_%d.txt' % (x, x)
self.assertEqual(
open(os.path.join(outdir, 'repo/' + node_path)).read(),
self.tip.get_node(node_path).content)
def test_archive_tbz2(self):
path = tempfile.mkstemp()[1]
with open(path, 'w+b') as f:
self.tip.fill_archive(stream=f, kind='tbz2', prefix='repo')
outdir = tempfile.mkdtemp()
outfile = tarfile.open(path, 'r|bz2')
outfile.extractall(outdir)
for x in xrange(5):
node_path = '%d/file_%d.txt' % (x, x)
self.assertEqual(
open(os.path.join(outdir, 'repo/' + node_path)).read(),
self.tip.get_node(node_path).content)
def test_archive_default_stream(self):
tmppath = tempfile.mkstemp()[1]
with open(tmppath, 'w') as stream:
self.tip.fill_archive(stream=stream)
mystream = StringIO.StringIO()
self.tip.fill_archive(stream=mystream)
mystream.seek(0)
with open(tmppath, 'r') as f:
self.assertEqual(f.read(), mystream.read())
def test_archive_wrong_kind(self):
with self.assertRaises(VCSError):
self.tip.fill_archive(kind='wrong kind')
def test_archive_empty_prefix(self):
with self.assertRaises(VCSError):
self.tip.fill_archive(prefix='')
def test_archive_prefix_with_leading_slash(self):
with self.assertRaises(VCSError):
self.tip.fill_archive(prefix='/any')
# For each backend create test case class
for alias in SCM_TESTS:
attrs = {
'backend_alias': alias,
}
cls_name = ''.join(('%s archive test' % alias).title().split())
bases = (ArchivesTestCaseMixin, unittest.TestCase)
globals()[cls_name] = type(cls_name, bases, attrs)
if __name__ == '__main__':
unittest.main()