aboutsummaryrefslogtreecommitdiff
path: root/gitosis/test/test_serve.py
blob: a2e2e9035e758a83b5984d65d7293c731614eea0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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(eserve.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(eserve.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(eserve.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(eserve.AccessDenied)
    assert isinstance(eserve.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(eserve.AccessDenied)
    assert isinstance(eserve.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(eserve.AccessDenied)
    assert isinstance(eserve.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'")