Project

General

Profile

Download (8.86 KB) Statistics
| Branch: | Tag: | Revision:

runcible / test / resources / repository_test.rb @ master

1
require 'rubygems'
2
require 'minitest/autorun'
3

    
4
require './test/support/repository_support'
5
require './lib/runcible'
6

    
7
module Resources
8
  module TestRepositoryBase
9
    def setup
10
      @resource = TestRuncible.server.resources.repository
11
      @extension = TestRuncible.server.extensions.repository
12
      @support = RepositorySupport.new
13
    end
14

    
15
    def assert_async_response(response)
16
      if response.code == 202
17
        tasks = @support.wait_on_response(response)
18
        tasks.each do |task|
19
          assert task['state'], 'finished'
20
        end
21
      else
22
        assert response.code, 200
23
      end
24
    end
25
  end
26

    
27
  class TestRepositoryCreate < MiniTest::Unit::TestCase
28
    include TestRepositoryBase
29

    
30
    def setup
31
      super
32
    end
33

    
34
    def teardown
35
      @support.destroy_repo
36
      super
37
    end
38

    
39
    def test_create
40
      response = @support.create_repo
41

    
42
      assert_equal 201, response.code
43
      assert_equal RepositorySupport.repo_id, response['id']
44
    end
45
  end
46

    
47
  class TestRepositoryDelete < MiniTest::Unit::TestCase
48
    include TestRepositoryBase
49

    
50
    def setup
51
      super
52
      @support.create_repo
53
    end
54

    
55
    def test_delete
56
      response = @resource.delete(RepositorySupport.repo_id)
57
      @support.wait_on_response(response)
58

    
59
      assert_equal 202, response.code
60
    end
61
  end
62

    
63
  class TestRepositoryMisc < MiniTest::Unit::TestCase
64
    include TestRepositoryBase
65

    
66
    def setup
67
      super
68
      RepositorySupport.new.create_repo(:importer => true)
69
    end
70

    
71
    def teardown
72
      RepositorySupport.new.destroy_repo
73
    ensure
74
      super
75
    end
76

    
77
    def test_path
78
      path = @resource.class.path
79

    
80
      assert_match 'repositories/', path
81
    end
82

    
83
    def test_repository_path_with_id
84
      path = @resource.class.path(RepositorySupport.repo_id)
85

    
86
      assert_match "repositories/#{RepositorySupport.repo_id}", path
87
    end
88

    
89
    def test_update
90
      response = @resource.update(RepositorySupport.repo_id,
91
                                  :description => 'updated_description_' + RepositorySupport.repo_id)
92

    
93
      assert_equal 200, response.code
94
      assert_equal 'updated_description_' + RepositorySupport.repo_id, response['result']['description']
95
    end
96

    
97
    def test_retrieve
98
      response = @resource.retrieve(RepositorySupport.repo_id)
99

    
100
      assert_equal 200, response.code
101
      assert_equal RepositorySupport.repo_id, response['display_name']
102
    end
103

    
104
    def test_retrieve_all
105
      response = @resource.retrieve_all
106

    
107
      assert_equal 200, response.code
108
      refute_empty response
109
    end
110

    
111
    def test_search
112
      response = @resource.search({})
113

    
114
      assert_equal 200, response.code
115
      refute_empty response
116
    end
117

    
118
    def test_generate_applicability_with_spawned_tasks
119
      criteria = {
120
        'repo_criteria' => { 'filters' => { 'id' => { '$in' => [RepositorySupport.repo_id] } } }
121
      }
122
      response = @resource.regenerate_applicability(criteria)
123
      assert_equal 202, response.code
124
      task = RepositorySupport.new.wait_on_response(response)
125
      assert 'finished', task.first['state']
126
    end
127

    
128
    def test_generate_applicability_with_task_group
129
      criteria = {
130
        'parallel' => true,
131
        'repo_criteria' => { 'filters' => { 'id' => { '$in' => [RepositorySupport.repo_id] } } }
132
      }
133
      response = @resource.regenerate_applicability(criteria)
134
      assert_equal 202, response.code
135
      assert response.key?("group_id")
136
      summary = RepositorySupport.new.wait_on_task_group(response)
137
      assert summary["total"], summary['finished']
138
    end
139
  end
140

    
141
  class TestRespositoryDistributor < MiniTest::Unit::TestCase
142
    include TestRepositoryBase
143
    def setup
144
      super
145
      @support.create_repo(:importer => false)
146
    end
147

    
148
    def teardown
149
      @support.destroy_repo
150
    ensure
151
      super
152
    end
153

    
154
    def test_associate_distributor
155
      distributor_config = {'relative_url' => '123/456', 'http' => true, 'https' => true}
156
      response = @resource.associate_distributor(RepositorySupport.repo_id, 'yum_distributor', distributor_config,
157
                                                 :distributor_id => 'dist_1')
158

    
159
      assert_equal 201, response.code
160
      assert_equal 'yum_distributor', response['distributor_type_id']
161
    end
162

    
163
    def test_delete_distributor
164
      distributor_config = {'relative_url' => '123/456', 'http' => true, 'https' => true}
165
      @resource.associate_distributor(RepositorySupport.repo_id, 'yum_distributor',
166
                                      distributor_config, :distributor_id => 'dist_1')
167

    
168
      response = @resource.delete_distributor(RepositorySupport.repo_id, 'dist_1')
169
      @support.wait_on_response(response)
170

    
171
      assert_equal 202, response.code
172
    end
173

    
174
    def test_update_distributor
175
      distributor_config = {'relative_url' => '123/456', 'http' => true, 'https' => true}
176
      distributor = @resource.associate_distributor(RepositorySupport.repo_id, 'yum_distributor',
177
                                      distributor_config, :distributor_id => 'dist_1')
178

    
179
      response = @resource.update_distributor(RepositorySupport.repo_id, distributor['id'],
180
                                           :relative_url => 'new_path/')
181
      assert_equal 202, response.code
182
    end
183
  end
184

    
185
  class TestRepositoryImporter < MiniTest::Unit::TestCase
186
    include TestRepositoryBase
187

    
188
    def setup
189
      super
190
      RepositorySupport.new.create_repo(:importer => false)
191
      associate
192
    end
193

    
194
    def teardown
195
      RepositorySupport.new.destroy_repo
196
    ensure
197
      super
198
    end
199

    
200
    def associate
201
      response = @resource.associate_importer(RepositorySupport.repo_id, 'yum_importer', {})
202
      assert_async_response(response)
203
    end
204

    
205
    def test_associate_importer
206
      repo = @resource.retrieve(RepositorySupport.repo_id, :details => true)
207
      assert_equal 'yum_importer', repo['importers'].first['id']
208
    end
209

    
210
    def test_delete_importer
211
      response = @resource.delete_importer(RepositorySupport.repo_id, 'yum_importer')
212
      assert_async_response(response)
213
    end
214

    
215
    def test_update_importer
216
      feed_url = 'http://katello.org/repo/'
217
      response = @resource.update_importer(RepositorySupport.repo_id, 'yum_importer',
218
                                           :feed => feed_url)
219

    
220
      assert_async_response(response)
221
      repo = @resource.retrieve(RepositorySupport.repo_id, :details => true)
222
      importer = repo[:importers].find { |imp| imp[:repo_id] == "integration_test_id" }
223
      assert_equal feed_url, importer[:config][:feed]
224
    end
225
  end
226

    
227
  class TestRepositorySync < MiniTest::Unit::TestCase
228
    include TestRepositoryBase
229

    
230
    def setup
231
      super
232
    end
233

    
234
    def teardown
235
      @support.destroy_repo
236
    ensure
237
      super
238
    end
239

    
240
    def test_sync
241
      @support.create_repo
242
      response = @resource.sync(RepositorySupport.repo_id)
243

    
244
      tasks = assert_async_response(response)
245
      assert_includes tasks.first['tags'], 'pulp:action:sync'
246
    end
247

    
248
    def test_sync_repo_with_yum_importer
249
      @support.create_repo(:importer => true)
250
      response = @resource.sync(RepositorySupport.repo_id)
251

    
252
      tasks = assert_async_response(response)
253
      assert_includes tasks.first['tags'], 'pulp:action:sync'
254
    end
255
  end
256

    
257
  class TestRepositoryRequiresSync < MiniTest::Unit::TestCase
258
    include TestRepositoryBase
259

    
260
    def setup
261
      super
262
      @support.create_and_sync_repo(:importer_and_distributor => true)
263
    end
264

    
265
    def teardown
266
      @support.destroy_repo
267
    ensure
268
      super
269
    end
270

    
271
    def test_publish
272
      response = @resource.publish(RepositorySupport.repo_id, @support.distributor['id'])
273

    
274
      tasks = assert_async_response(response)
275
      assert_includes tasks.first['tags'], 'pulp:action:publish'
276
    end
277

    
278
    def test_download
279
      response = @resource.download(RepositorySupport.repo_id)
280

    
281
      tasks = assert_async_response(response)
282
      assert_includes tasks.first['tags'], 'pulp:action:download'
283
    end
284

    
285
    def test_unassociate_units
286
      response = @resource.unassociate_units(RepositorySupport.repo_id, {})
287

    
288
      assert_async_response(response)
289
    end
290

    
291
    def test_unit_search
292
      response = @resource.unit_search(RepositorySupport.repo_id, {})
293

    
294
      assert_equal 200, response.code
295
      refute_empty response
296
    end
297

    
298
    def test_sync_history
299
      response = @resource.sync_history(RepositorySupport.repo_id)
300

    
301
      assert 200, response.code
302
      refute_empty response
303
    end
304
  end
305

    
306
  class TestRepositoryClone < MiniTest::Unit::TestCase
307
    include TestRepositoryBase
308

    
309
    def setup
310
      super
311
      @clone_name = RepositorySupport.repo_id + '_clone'
312
      @support.create_and_sync_repo(:importer => true)
313
      @extension.create_with_importer(@clone_name, :id => 'yum_importer')
314
    end
315

    
316
    def teardown
317
      @support.destroy_repo(@clone_name)
318
      @support.destroy_repo
319
    ensure
320
      super
321
    end
322

    
323
    def test_unit_copy
324
      response = @resource.unit_copy(@clone_name, RepositorySupport.repo_id)
325
      tasks = assert_async_response(response)
326

    
327
      assert_includes tasks.first['tags'], 'pulp:action:associate'
328
    end
329
  end
330
end