aboutsummaryrefslogtreecommitdiff
path: root/gitosis/test
diff options
context:
space:
mode:
authorTommi Virtanen <tv@eagain.net>2007-09-01 18:27:25 -0700
committerTommi Virtanen <tv@eagain.net>2007-09-01 18:59:13 -0700
commit97c093470e2cd5f968422be938b2086d07e68757 (patch)
tree2c858db70a4753347191adc1f9167f8b5ec35e8b /gitosis/test
parentAdd gitosis-run-hook, to be run from git hooks. (diff)
downloadgitosis-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.py83
-rw-r--r--gitosis/test/test_repository.py28
-rw-r--r--gitosis/test/util.py13
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: