gitosis_easy_conf 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,96 @@
1
+ require 'helper'
2
+
3
+ class TestGitosisForker < Test::Unit::TestCase
4
+ context "forkers" do
5
+ should "only take the first argument" do
6
+ Gitosis.forkers do
7
+ fubar("one", "two") do
8
+ nil
9
+ end
10
+ end
11
+
12
+ assert_equal "one", Gitosis.forkers.fubar
13
+ assert_equal "one", Gitosis.forkers['fubar']
14
+ end
15
+
16
+ should "raise error for unknown forkers" do
17
+ Gitosis.forkers do
18
+ fubar("one", "two") do
19
+ nil
20
+ end
21
+ end
22
+
23
+ assert_raises Gitosis::UnknownForker do
24
+ Gitosis.forkers[:fuabr]
25
+ end
26
+ assert_raises Gitosis::UnknownForker do
27
+ Gitosis.forkers.fuabr
28
+ end
29
+ end
30
+
31
+ should "have shortcut method" do
32
+ Gitosis.forkers do
33
+ fubar("one", "two") do
34
+ nil
35
+ end
36
+ end
37
+
38
+ assert_raises Gitosis::UnknownForker do
39
+ Forker["unknonw"]
40
+ end
41
+ assert_raises Gitosis::UnknownForker do
42
+ Gitosis.forkers['unknonw']
43
+ end
44
+ assert_raises Gitosis::UnknownForker do
45
+ Gitosis.forkers.unknonw
46
+ end
47
+
48
+ assert_equal "one", Forker["fubar"]
49
+ assert_equal "one", Forker[:fubar]
50
+ end
51
+
52
+ should "return all forkers" do
53
+ Gitosis.forkers do
54
+ end
55
+ assert_equal [], Gitosis.forkers.all
56
+
57
+ Gitosis.forkers do
58
+ dev1 "some.public.key"
59
+ dev2 "some.other.key"
60
+ dev3 "more.key"
61
+ end
62
+ assert_equal [:dev1, :dev2, :dev3], Gitosis.forkers.all
63
+ assert_equal [:dev1, :dev2, :dev3], Forker[:all]
64
+ end
65
+
66
+ should "complain if using the duplicate pub keys" do
67
+ assert_raises Gitosis::SamePublicKeyForForkers do
68
+ Gitosis.forkers do
69
+ fubar "has.key"
70
+ fubar2 "has.key"
71
+ end
72
+ end
73
+ assert_raises Gitosis::SamePublicKeyForForkers do
74
+ Gitosis.forkers do
75
+ fubar "haskey"
76
+ fubar2 :haskey
77
+ end
78
+ end
79
+ assert_raises Gitosis::SamePublicKeyForForkers do
80
+ Gitosis.forkers do
81
+ fubar "has.key"
82
+ fubar "has.key"
83
+ end
84
+ end
85
+ end
86
+
87
+ should "complain if using the same forker name" do
88
+ assert_raises Gitosis::ForkerAlreadyDefined do
89
+ Gitosis.forkers do
90
+ fubar "has.key"
91
+ fubar "has.key.2"
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,100 @@
1
+ require 'helper'
2
+
3
+ class TestGitosisGroups < Test::Unit::TestCase
4
+ context "groups" do
5
+
6
+ should "avoid self reference" do
7
+ assert_raises Gitosis::SelfReferencingGroup do
8
+ Gitosis.roles do
9
+ fubar 'fubar.bad', :fubar
10
+ end
11
+ end
12
+ assert_raises Gitosis::SelfReferencingGroup do
13
+ Gitosis.roles do
14
+ admin :fubar
15
+ fubar 'fubar.bad', :admin
16
+ end
17
+ end
18
+
19
+ assert_raises Gitosis::SelfReferencingGroup do
20
+ Gitosis.roles do
21
+ snafu :admin
22
+ admin :snafu
23
+ fubar 'fubar.bad', :admin
24
+ end
25
+ end
26
+
27
+ assert_raises Gitosis::SelfReferencingGroup do
28
+ Gitosis.roles do
29
+ snafu :fubar
30
+ admin :snafu
31
+ fubar 'fubar.bad', :admin
32
+ end
33
+ end
34
+ end
35
+
36
+ should 'raise an error if symbol is not a group' do
37
+ assert_raises Gitosis::UnknownGroup do
38
+ Gitosis.roles do
39
+ fubar 'fubar.bad', :admins
40
+ end
41
+ end
42
+ end
43
+
44
+ should 'strings are key names and symbols refer to group names' do
45
+ Gitosis.groups do
46
+ fubar 'public.key'
47
+ snafu :fubar
48
+ luke 'fubar'
49
+ combined :luke, :snafu, :fubar
50
+ end
51
+
52
+ assert_equal 'public.key', Gitosis.groups[:fubar]
53
+ assert_equal 'public.key', Gitosis.groups[:snafu]
54
+ assert_equal 'fubar', Gitosis.groups[:luke]
55
+ assert_equal 'fubar public.key', Gitosis.groups[:combined]
56
+ end
57
+
58
+ should "anything other than string or symbol causes error" do
59
+ assert_raises Gitosis::UnknownGroupType do
60
+ Gitosis.roles do
61
+ fubar 1234
62
+ end
63
+ end
64
+ end
65
+
66
+ should "blocks are ignored" do
67
+ Gitosis.roles do
68
+ fubar "fubar" do |a|
69
+ nil
70
+ end
71
+ end
72
+ assert_equal "fubar", Gitosis.groups.fubar
73
+ end
74
+
75
+ should "be able to use roles" do
76
+ Gitosis.roles do
77
+ fubar 'fubar.bad', 'big.bear'
78
+ end
79
+ assert_equal 'fubar.bad big.bear', Gitosis.roles[:fubar]
80
+ assert_equal 'fubar.bad big.bear', Gitosis.roles.fubar
81
+ end
82
+
83
+ should "be denormalized and uniquized" do
84
+ Gitosis.groups do
85
+ admins 'key.one', 'key.two', 'shared.key'
86
+ developers 'dev.one', :admins
87
+ deployers 'app1.deploy', 'app2.deploy', 'shared.key'
88
+ shared_grp :admins, :deployers
89
+ all_developers :admins, :developers
90
+ everyone :all_developers, :deployers
91
+ end
92
+
93
+ groups = Gitosis.groups
94
+ assert_equal('key.one key.two shared.key dev.one app1.deploy app2.deploy',
95
+ groups.everyone)
96
+ assert_equal 'key.one key.two shared.key app1.deploy app2.deploy', groups.shared_grp
97
+ assert_raises(Gitosis::UnknownGroup) { groups.unknown_group }
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,371 @@
1
+ require 'helper'
2
+
3
+ class TestGitosisRepositories < Test::Unit::TestCase
4
+
5
+ context "no filename" do
6
+ should "work but not write anything to disk" do
7
+ Gitosis.setup do
8
+ config do
9
+ fork_naming_convention do |*args|
10
+ "[%s+%s]" % args.map{ |a| a.to_s }
11
+ end
12
+ end
13
+
14
+ forkers do
15
+ dev1 "dev.one"
16
+ dev2 "dev.two"
17
+ end
18
+
19
+ roles do
20
+ admin "dev.three"
21
+ end
22
+
23
+ repositories do
24
+ test_one :writable => Forker[:dev1], :forks => :dev2, :readable => Forker[:dev2]
25
+ test_two :writable => :admin, :readable => Forker[:dev1]
26
+ end
27
+ end
28
+
29
+ assert_equal({"gitosis"=>{},
30
+ "group test_one.writable"=>{
31
+ "members"=>"dev.one",
32
+ "writable"=>"test_one"},
33
+ "group test_one.readonly"=>{
34
+ "members"=>"dev.two",
35
+ "readonly"=>"test_one"},
36
+ "group fork.test_one.dev2.writable"=>{
37
+ "members"=>"dev.two",
38
+ "writable"=>"[test_one+dev2]"},
39
+ "group fork.test_one.dev2.readonly"=>{
40
+ "members"=>"dev.two",
41
+ "readonly"=>"[test_one+dev2]"},
42
+ "group test_two.writable"=>{
43
+ "members"=>"dev.three",
44
+ "writable"=>"test_two"},
45
+ "group test_two.readonly"=>{
46
+ "members"=>"dev.one",
47
+ "readonly"=>"test_two"}},
48
+ Gitosis.repositories.instance_variable_get("@conffile"))
49
+ end
50
+ end
51
+
52
+ context "repository exception handling" do
53
+ setup do
54
+ # write call does not happen
55
+ @results = {}
56
+ mock(File).exists?("fubar") { true }
57
+ mock(@results).clone { nil }
58
+ mock(IniFile).new("fubar") { @results }
59
+ end
60
+
61
+ should 'not allow unknown groups' do
62
+ Gitosis.config do
63
+ filename "fubar"
64
+ end
65
+ Gitosis.roles do
66
+ developers Forker[:dev1]
67
+ end
68
+
69
+ assert_raises Gitosis::UnknownGroup do
70
+ Gitosis.repositories do
71
+ gitosis_admin(:writable => :developers1)
72
+ end
73
+ end
74
+ end
75
+
76
+ should "not allow unknown forkers - string" do
77
+ Gitosis.config do
78
+ filename "fubar"
79
+ end
80
+ Gitosis.forkers do
81
+ dev1 "dev.one.key"
82
+ dev2 "dev.two.key"
83
+ end
84
+ Gitosis.roles do
85
+ developers Forker[:dev1]
86
+ end
87
+ assert_raises Gitosis::UnknownForker do
88
+ Gitosis.repositories do
89
+ gitosis_admin(:writable => :developers,
90
+ :forks => 'dev3')
91
+ end
92
+ end
93
+ end
94
+
95
+ should "not allow unknown forkers - symbol" do
96
+ Gitosis.config do
97
+ filename "fubar"
98
+ end
99
+ Gitosis.forkers do
100
+ dev1 "dev.one.key"
101
+ dev2 "dev.two.key"
102
+ end
103
+ Gitosis.roles do
104
+ developers Forker[:dev1]
105
+ end
106
+ assert_raises Gitosis::UnknownForker do
107
+ Gitosis.repositories do
108
+ gitosis_admin(:writable => :developers,
109
+ :forks => :dev3)
110
+ end
111
+ end
112
+ end
113
+ end
114
+
115
+ context "repositories" do
116
+ setup do
117
+ @results = {}
118
+ mock(File).exists?("fubar") { true }
119
+ mock(@results).write
120
+ mock(@results).clone { nil }
121
+ mock(IniFile).new("fubar") { @results }
122
+ # avoid fork naming convention leaking across tests.
123
+ Gitosis.config() do
124
+ fork_naming_convention nil
125
+ end
126
+ end
127
+
128
+ should "have a concise form" do
129
+ Gitosis.setup("fubar") do
130
+ config do
131
+ fork_naming_convention do |*args|
132
+ "[%s+%s]" % args.map{ |a| a.to_s }
133
+ end
134
+ end
135
+
136
+ forkers do
137
+ dev1 "dev.one"
138
+ dev2 "dev.two"
139
+ end
140
+
141
+ roles do
142
+ admin "dev.three"
143
+ end
144
+
145
+ repositories do
146
+ test_one :writable => Forker[:dev1], :forks => :dev2, :readable => Forker[:dev2]
147
+ test_two :writable => :admin, :readable => Forker[:dev1]
148
+ end
149
+ end
150
+
151
+ assert_config({ "group fork.test_one.dev2.readonly" => {
152
+ "members" => "dev.two",
153
+ "readonly" => "[test_one+dev2]"
154
+ },
155
+ "group fork.test_one.dev2.writable" => {
156
+ "members" => "dev.two",
157
+ "writable" => "[test_one+dev2]"
158
+ },
159
+ "group test_one.readonly" => {
160
+ "members" => "dev.two",
161
+ "readonly" => "test_one"
162
+ },
163
+ "group test_one.writable" => {
164
+ "members" => "dev.one",
165
+ "writable" => "test_one"
166
+ },
167
+ "group test_two.readonly" => {
168
+ "members" => "dev.one",
169
+ "readonly" => "test_two"
170
+ },
171
+ "group test_two.writable" => {
172
+ "members" => "dev.three",
173
+ "writable" => "test_two"
174
+ }
175
+ }, "concise setup")
176
+ end
177
+
178
+ should "handle the simplest case" do
179
+ Gitosis.config do
180
+ filename "fubar"
181
+ end
182
+ Gitosis.repositories do
183
+ with_base_configuration({}) do
184
+ empty_repo
185
+ another_empty_repo
186
+ end
187
+ end.write
188
+ assert_config({}, "simplest case")
189
+ end
190
+
191
+ should "provide a base_configuration stanza" do
192
+ Gitosis.config do
193
+ filename "fubar"
194
+ end
195
+ Gitosis.repositories do
196
+ with_base_configuration({ :writable => ['key.one', 'key.two'],
197
+ :readable => 'key.three' }) do
198
+ gitosis_admin :readable => 'dev.four'
199
+ another_repo :writable => 'another.developer'
200
+ a_third_repo :name => 'fubar-a-third-repo'
201
+ a_fourth_repo
202
+ end
203
+ no_base_config_repo :writable => 'me.you.them'
204
+ end.write
205
+
206
+ assert_config({ "group another_repo.readonly" => {
207
+ "members" => "key.three",
208
+ "readonly" => "another_repo"
209
+ },
210
+ "group another_repo.writable" => {
211
+ "members" => "key.one key.two another.developer",
212
+ "writable" => "another_repo"
213
+ },
214
+ "group fubar-a-third-repo.readonly" => {
215
+ "members" => "key.three",
216
+ "readonly" => "fubar-a-third-repo"
217
+ },
218
+ "group fubar-a-third-repo.writable" => {
219
+ "members" => "key.one key.two",
220
+ "writable" => "fubar-a-third-repo"
221
+ },
222
+ "group gitosis_admin.readonly" => {
223
+ "members" => "key.three dev.four",
224
+ "readonly" => "gitosis_admin"
225
+ },
226
+ "group gitosis_admin.writable" => {
227
+ "members" => "key.one key.two",
228
+ "writable" => "gitosis_admin"
229
+ },
230
+ "group no_base_config_repo.writable" => {
231
+ "members" => "me.you.them",
232
+ "writable" => "no_base_config_repo"
233
+ },
234
+ "group a_fourth_repo.readonly" => {
235
+ "members" => "key.three",
236
+ "readonly" => "a_fourth_repo"
237
+ },
238
+ "group a_fourth_repo.writable" => {
239
+ "members" => "key.one key.two",
240
+ "writable" => "a_fourth_repo"
241
+ },
242
+ },"with base config")
243
+ end
244
+
245
+ should "allow just repositories definition" do
246
+ Gitosis.config do
247
+ filename "fubar"
248
+ end
249
+ Gitosis.repositories do
250
+ gitosis_admin(:writable => ['key.one', 'key.two'],
251
+ :readable => 'key.three')
252
+ end.write
253
+
254
+ assert_config({"group gitosis_admin.writable" => {
255
+ "members" => "key.one key.two",
256
+ "writable" => "gitosis_admin"
257
+ },
258
+ "group gitosis_admin.readonly" => {
259
+ "members" => "key.three",
260
+ "readonly" => "gitosis_admin"
261
+ },
262
+ },"just repositories defined")
263
+ end
264
+
265
+ should "allow string forkers and string developers that aren't a group/role" do
266
+ Gitosis.config do
267
+ filename "fubar"
268
+ end
269
+ Gitosis.forkers do
270
+ dev1 "dev.one.key"
271
+ dev2 "dev.two.key"
272
+ end
273
+ Gitosis.roles do
274
+ developers Forker[:dev1]
275
+ end
276
+ Gitosis.repositories do
277
+ gitosis_admin(:writable => [:developers, 'key.specific'],
278
+ :forks => ['dev1', :dev2])
279
+ end.write
280
+
281
+ assert_config({"group gitosis_admin.writable" => {
282
+ "members" => "dev.one.key key.specific",
283
+ "writable" => "gitosis_admin"
284
+ },
285
+ "group fork.gitosis_admin.dev1.writable" => {
286
+ "members" => "dev.one.key",
287
+ "writable" => "dev1_gitosis_admin"
288
+ },
289
+ "group fork.gitosis_admin.dev2.writable" => {
290
+ "members" => "dev.two.key",
291
+ "writable" => "dev2_gitosis_admin"
292
+ },
293
+ },"string roles + forks")
294
+ end
295
+
296
+
297
+
298
+ should "forking and naming convention" do
299
+ Gitosis.config do
300
+ filename "fubar"
301
+ fork_naming_convention do |*args|
302
+ "[%s]=={%s}" % args.map { |a| a.to_s}
303
+ end
304
+ end
305
+ Gitosis.forkers do
306
+ dev1 "dev.one.key"
307
+ dev2 "dev.two.key"
308
+ end
309
+ Gitosis.roles do
310
+ developers Forker[:dev1]
311
+ end
312
+ Gitosis.repositories do
313
+ gitosis_admin(:writable => [:developers,'dev.three.key'],
314
+ :name => "gitosis-admin",
315
+ :forks => :dev2)
316
+ end.write
317
+
318
+ assert_config({"group gitosis-admin.writable" => {
319
+ "members" => "dev.one.key dev.three.key",
320
+ "writable" => "gitosis-admin"
321
+ },
322
+ "group fork.gitosis-admin.dev2.writable" => {
323
+ "members" => "dev.two.key",
324
+ "writable" => "[gitosis-admin]=={dev2}"
325
+ },
326
+ },"forking and name convention")
327
+ end
328
+
329
+ should "repo_naming" do
330
+ Gitosis.config do
331
+ filename "fubar"
332
+ end
333
+ Gitosis.forkers do
334
+ dev1 "dev.one.key"
335
+ end
336
+ Gitosis.roles do
337
+ developers Forker[:dev1]
338
+ end
339
+ Gitosis.repositories do
340
+ gitosis_admin :writable => :developers, :name => "gitosis-admin"
341
+ end.write
342
+
343
+ assert_config({"group gitosis-admin.writable" => {
344
+ "members" => "dev.one.key",
345
+ "writable" => "gitosis-admin"
346
+ }
347
+ },"handle repository naming")
348
+ end
349
+
350
+ should "handle simple case" do
351
+ Gitosis.config do
352
+ filename "fubar"
353
+ end
354
+ Gitosis.forkers do
355
+ dev1 "dev.one.key"
356
+ end
357
+ Gitosis.roles do
358
+ developers Forker[:dev1]
359
+ end
360
+ Gitosis.repositories do
361
+ fritz :writable => :developers
362
+ end.write
363
+
364
+ assert_config({"group fritz.writable" => {
365
+ "members" => "dev.one.key",
366
+ "writable" => "fritz"
367
+ }
368
+ },"handle simple case")
369
+ end
370
+ end
371
+ end