diff options
author | Tommi Virtanen <tv@eagain.net> | 2007-09-01 18:27:25 -0700 |
---|---|---|
committer | Tommi Virtanen <tv@eagain.net> | 2007-09-01 18:59:13 -0700 |
commit | 97c093470e2cd5f968422be938b2086d07e68757 (patch) | |
tree | 2c858db70a4753347191adc1f9167f8b5ec35e8b /gitosis/test | |
parent | Add gitosis-run-hook, to be run from git hooks. (diff) | |
download | gitosis-dakkar-97c093470e2cd5f968422be938b2086d07e68757.tar.gz gitosis-dakkar-97c093470e2cd5f968422be938b2086d07e68757.tar.bz2 gitosis-dakkar-97c093470e2cd5f968422be938b2086d07e68757.zip |
Add gitosis-init, for bootstrapping a new installation.
Diffstat (limited to 'gitosis/test')
-rw-r--r-- | gitosis/test/test_init.py | 83 | ||||
-rw-r--r-- | gitosis/test/test_repository.py | 28 | ||||
-rw-r--r-- | gitosis/test/util.py | 13 |
3 files changed, 124 insertions, 0 deletions
diff --git a/gitosis/test/test_init.py b/gitosis/test/test_init.py new file mode 100644 index 0000000..8f72b2d --- /dev/null +++ b/gitosis/test/test_init.py @@ -0,0 +1,83 @@ +from nose.tools import eq_ as eq +from gitosis.test.util import assert_raises, maketemp + +import os +from ConfigParser import RawConfigParser + +from gitosis import init +from gitosis import repository + +from gitosis.test import util + +def test_ssh_extract_user_simple(): + got = init.ssh_extract_user( + 'ssh-somealgo ' + +'0123456789ABCDEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= fakeuser@fakehost') + eq(got, 'fakeuser@fakehost') + +def test_ssh_extract_user_bad(): + e = assert_raises( + init.InsecureSSHKeyUsername, + init.ssh_extract_user, + 'ssh-somealgo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= ER3%#@e%') + eq(str(e), "Username contains not allowed characters: 'ER3%#@e%'") + +def test_init_admin_repository(): + tmp = maketemp() + admin_repository = os.path.join(tmp, 'admin.git') + pubkey = ( + 'ssh-somealgo ' + +'0123456789ABCDEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= fakeuser@fakehost') + user = 'jdoe' + init.init_admin_repository( + git_dir=admin_repository, + pubkey=pubkey, + user=user, + ) + eq(os.listdir(tmp), ['admin.git']) + hook = os.path.join( + tmp, + 'admin.git', + 'hooks', + 'post-update', + ) + util.check_mode(hook, 0755, is_file=True) + got = util.readFile(hook).splitlines() + assert 'gitosis-run-hook post-update' in got + export_dir = os.path.join(tmp, 'export') + repository.export(git_dir=admin_repository, + path=export_dir) + eq(sorted(os.listdir(export_dir)), + sorted(['gitosis.conf', 'keydir'])) + eq(os.listdir(os.path.join(export_dir, 'keydir')), + ['jdoe.pub']) + got = util.readFile( + os.path.join(export_dir, 'keydir', 'jdoe.pub')) + eq(got, pubkey) + # the only thing guaranteed of initial config file ordering is + # that [gitosis] is first + got = util.readFile(os.path.join(export_dir, 'gitosis.conf')) + got = got.splitlines()[0] + eq(got, '[gitosis]') + cfg = RawConfigParser() + cfg.read(os.path.join(export_dir, 'gitosis.conf')) + eq(sorted(cfg.sections()), + sorted([ + 'gitosis', + 'group gitosis-admin', + ])) + eq(cfg.items('gitosis'), []) + eq(sorted(cfg.items('group gitosis-admin')), + sorted([ + ('writable', 'gitosis-admin'), + ('members', 'jdoe'), + ])) diff --git a/gitosis/test/test_repository.py b/gitosis/test/test_repository.py index 79d1561..9d22d0a 100644 --- a/gitosis/test/test_repository.py +++ b/gitosis/test/test_repository.py @@ -6,6 +6,7 @@ import subprocess from gitosis import repository from gitosis.test.util import mkdir, maketemp, readFile, check_mode +from gitosis.test.util import assert_raises def check_bare(path): # we want it to be a bare repository @@ -102,3 +103,30 @@ Frobitz the quux and eschew obfuscation. eq(got[5], '') eq(got[6], 'Frobitz the quux and eschew obfuscation.') eq(got[7:], []) + +def test_has_initial_commit_fail_notAGitDir(): + tmp = maketemp() + e = assert_raises( + repository.GitRevParseError, + repository.has_initial_commit, + git_dir=tmp) + eq(str(e), 'rev-parse failed: exit status 128') + +def test_has_initial_commit_no(): + tmp = maketemp() + repository.init(path=tmp) + got = repository.has_initial_commit(git_dir=tmp) + eq(got, False) + +def test_has_initial_commit_yes(): + tmp = maketemp() + repository.init(path=tmp) + repository.fast_import( + git_dir=tmp, + commit_msg='fakecommit', + committer='John Doe <jdoe@example.com>', + files=[], + ) + got = repository.has_initial_commit(git_dir=tmp) + eq(got, True) + diff --git a/gitosis/test/util.py b/gitosis/test/util.py index aa5a4a2..592b766 100644 --- a/gitosis/test/util.py +++ b/gitosis/test/util.py @@ -52,6 +52,19 @@ def readFile(path): f.close() return data +def assert_raises(excClass, callableObj, *args, **kwargs): + """ + Like unittest.TestCase.assertRaises, but returns the exception. + """ + try: + callableObj(*args, **kwargs) + except excClass, e: + return e + else: + if hasattr(excClass,'__name__'): excName = excClass.__name__ + else: excName = str(excClass) + raise AssertionError("%s not raised" % excName) + def check_mode(path, mode, is_file=None, is_dir=None): st = os.stat(path) if is_dir: |