aboutsummaryrefslogtreecommitdiff
path: root/gitosis/test
diff options
context:
space:
mode:
authorTommi Virtanen <tv@eagain.net>2007-09-02 12:46:07 -0700
committerTommi Virtanen <tv@eagain.net>2007-09-02 12:46:07 -0700
commit3339783581b6b3fdbdc10aca614c51210544b884 (patch)
tree38902aef4a179524ccaf36e020e8cfb6efc940d9 /gitosis/test
parentAdd gitosis-init, for bootstrapping a new installation. (diff)
downloadgitosis-dakkar-3339783581b6b3fdbdc10aca614c51210544b884.tar.gz
gitosis-dakkar-3339783581b6b3fdbdc10aca614c51210544b884.tar.bz2
gitosis-dakkar-3339783581b6b3fdbdc10aca614c51210544b884.zip
Add unit tests for gitosis-serve.
Diffstat (limited to 'gitosis/test')
-rw-r--r--gitosis/test/test_serve.py112
1 files changed, 112 insertions, 0 deletions
diff --git a/gitosis/test/test_serve.py b/gitosis/test/test_serve.py
new file mode 100644
index 0000000..a2e2e90
--- /dev/null
+++ b/gitosis/test/test_serve.py
@@ -0,0 +1,112 @@
+from nose.tools import eq_ as eq
+from gitosis.test.util import assert_raises
+
+from ConfigParser import RawConfigParser
+
+from gitosis import serve
+
+from gitosis.test import util
+
+def test_bad_newLine():
+ cfg = RawConfigParser()
+ e = assert_raises(
+ serve.CommandMayNotContainNewlineError,
+ serve.serve,
+ cfg=cfg,
+ user='jdoe',
+ command='ev\nil',
+ )
+ eq(str(e), 'Command may not contain newline')
+ assert isinstance(e, serve.ServingError)
+
+def test_bad_command():
+ cfg = RawConfigParser()
+ e = assert_raises(
+ serve.UnknownCommandError,
+ serve.serve,
+ cfg=cfg,
+ user='jdoe',
+ command="evil 'foo'",
+ )
+ eq(str(e), 'Unknown command denied')
+ assert isinstance(e, serve.ServingError)
+
+def test_bad_unsafeArguments():
+ cfg = RawConfigParser()
+ e = assert_raises(
+ serve.UnsafeArgumentsError,
+ serve.serve,
+ cfg=cfg,
+ user='jdoe',
+ command='git-upload-pack /evil/attack',
+ )
+ eq(str(e), 'Arguments to command look dangerous')
+ assert isinstance(e, serve.ServingError)
+
+def test_bad_forbiddenCommand_read():
+ cfg = RawConfigParser()
+ e = assert_raises(
+ serve.ReadAccessDenied,
+ serve.serve,
+ cfg=cfg,
+ user='jdoe',
+ command="git-upload-pack 'foo'",
+ )
+ eq(str(e), 'Read access denied')
+ assert isinstance(e, serve.AccessDenied)
+ assert isinstance(e, serve.ServingError)
+
+def test_bad_forbiddenCommand_write_noAccess():
+ cfg = RawConfigParser()
+ e = assert_raises(
+ serve.ReadAccessDenied,
+ serve.serve,
+ cfg=cfg,
+ user='jdoe',
+ command="git-receive-pack 'foo'",
+ )
+ # error message talks about read in an effort to make it more
+ # obvious that jdoe doesn't have *even* read access
+ eq(str(e), 'Read access denied')
+ assert isinstance(e, serve.AccessDenied)
+ assert isinstance(e, serve.ServingError)
+
+def test_bad_forbiddenCommand_write_readAccess():
+ cfg = RawConfigParser()
+ cfg.add_section('group foo')
+ cfg.set('group foo', 'members', 'jdoe')
+ cfg.set('group foo', 'readonly', 'foo')
+ e = assert_raises(
+ serve.WriteAccessDenied,
+ serve.serve,
+ cfg=cfg,
+ user='jdoe',
+ command="git-receive-pack 'foo'",
+ )
+ eq(str(e), 'Write access denied')
+ assert isinstance(e, serve.AccessDenied)
+ assert isinstance(e, serve.ServingError)
+
+def test_simple_read():
+ cfg = RawConfigParser()
+ cfg.add_section('group foo')
+ cfg.set('group foo', 'members', 'jdoe')
+ cfg.set('group foo', 'readonly', 'foo')
+ got = serve.serve(
+ cfg=cfg,
+ user='jdoe',
+ command="git-upload-pack 'foo'",
+ )
+ eq(got, "git-upload-pack 'repositories/foo'")
+
+def test_simple_write():
+ cfg = RawConfigParser()
+ cfg.add_section('group foo')
+ cfg.set('group foo', 'members', 'jdoe')
+ cfg.set('group foo', 'writable', 'foo')
+ got = serve.serve(
+ cfg=cfg,
+ user='jdoe',
+ command="git-receive-pack 'foo'",
+ )
+ eq(got, "git-receive-pack 'repositories/foo'")