gitosis_easy_conf 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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