Project

General

Profile

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

runcible / test / resources / consumer_test.rb @ master

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

    
4
require './lib/runcible/resources/consumer'
5
require './lib/runcible/extensions/consumer'
6
require './test/support/repository_support'
7
require './test/support/consumer_support'
8

    
9
module Resources
10
  module TestConsumerBase
11
    def setup
12
      @resource = TestRuncible.server.resources.consumer
13
      @extension = TestRuncible.server.extensions.consumer
14
      @consumer_id = 'integration_test_consumer'
15
    end
16

    
17
    def create_consumer(package_profile = false)
18
      consumer = @resource.create(@consumer_id, :name => 'boo')
19
      if package_profile
20
        @consumer_resource.upload_profile(@consumer_id, 'rpm', [{'name' => 'elephant', 'version' => '0.2',
21
                                                                 'release' => '0.7', 'epoch' => 0, 'arch' => 'noarch'}])
22
      end
23
      consumer
24
    end
25

    
26
    def destroy_consumer
27
      @resource.delete(@consumer_id)
28
    rescue
29
    end
30
  end
31

    
32
  class ConsumerTests < MiniTest::Unit::TestCase
33
    include TestConsumerBase
34

    
35
    def setup
36
      super
37
      create_consumer
38
    end
39

    
40
    def teardown
41
      destroy_consumer
42
      super
43
    end
44
  end
45

    
46
  class TestConsumerCreate < MiniTest::Unit::TestCase
47
    include TestConsumerBase
48

    
49
    def teardown
50
      destroy_consumer
51
      super
52
    end
53

    
54
    def test_create
55
      response = create_consumer
56

    
57
      assert response.is_a? Hash
58
      assert_equal @consumer_id, response['consumer']['id']
59
    end
60
  end
61

    
62
  class TestConsumerDestroy < MiniTest::Unit::TestCase
63
    include TestConsumerBase
64

    
65
    def setup
66
      super
67
      create_consumer
68
    end
69

    
70
    def test_destroy
71
      response = destroy_consumer
72

    
73
      assert_equal 200, response.code
74
    end
75
  end
76

    
77
  class TestGeneralMethods < MiniTest::Unit::TestCase
78
    include TestConsumerBase
79

    
80
    def setup
81
      super
82
      create_consumer
83
    end
84

    
85
    def teardown
86
      destroy_consumer
87
      super
88
    end
89

    
90
    def test_path
91
      path = @resource.path
92

    
93
      assert_match 'consumers/', path
94
    end
95

    
96
    def test_consumer_path_with_id
97
      path = @resource.path(@consumer_id)
98

    
99
      assert_match "consumers/#{@consumer_id}/", path
100
    end
101

    
102
    def test_retrieve
103
      response = @resource.retrieve(@consumer_id)
104

    
105
      refute_empty response
106
      assert_equal @consumer_id, response['id']
107
    end
108

    
109
    def test_retrieve_all
110
      response = @resource.retrieve_all
111

    
112
      refute_empty response
113
      consumer_ids = response.map { |consumer| consumer['id'] }
114
      assert_includes consumer_ids, @consumer_id
115
    end
116

    
117
    def test_update
118
      description = 'Test description'
119
      response = @resource.update(@consumer_id, :description => description)
120

    
121
      assert_equal 200, response.code
122
      assert_equal description, response['description']
123
    end
124
  end
125

    
126
  class TestConsumerApplicability < MiniTest::Unit::TestCase
127
    include TestConsumerBase
128

    
129
    def setup
130
      super
131
      create_consumer
132
    end
133

    
134
    def teardown
135
      destroy_consumer
136
      super
137
    end
138

    
139
    def test_generate_applicability
140
      criteria = {
141
        'consumer_criteria' => { 'filters' => { 'id' => { '$in' => [@consumer_id] } } }
142
      }
143

    
144
      response = @resource.regenerate_applicability(criteria)
145
      assert_equal 202, response.code
146
      task = RepositorySupport.new.wait_on_response(response)
147
      assert 'finished', task.first['state']
148
    end
149

    
150
    def test_generate_applicability_one_id
151
      response = @resource.regenerate_applicability_by_id(@consumer_id)
152
      assert_equal 202, response.code
153
      task = RepositorySupport.new.wait_on_response(response)
154
      assert 'finished', task.first['state']
155
    end
156

    
157
    def test_applicability
158
      criteria = {
159
        'criteria' => { 'filters' => { 'id' => { '$in' => [@consumer_id] } } },
160
        'content_types' => [Runcible::Extensions::Errata.content_type]
161
      }
162
      response = @resource.applicability(criteria)
163

    
164
      assert_equal 200, response.code
165
    end
166
  end
167

    
168
  class TestProfiles < MiniTest::Unit::TestCase
169
    include TestConsumerBase
170

    
171
    def setup
172
      super
173
      create_consumer
174
    end
175

    
176
    def teardown
177
      destroy_consumer
178
      super
179
    end
180

    
181
    def test_upload_profile
182
      packages = [{'vendor' => 'FedoraHosted', 'name' => 'elephant',
183
                   'version' => '0.3', 'release' => '0.8',
184
                   'arch' => 'noarch', 'epoch' => ''}]
185
      response = @resource.upload_profile(@consumer_id, 'rpm', packages)
186

    
187
      assert_equal 201, response.code
188
    end
189

    
190
    def test_retrieve_profile
191
      packages = [{'vendor' => 'FedoraHosted', 'name' => 'elephant',
192
                   'version' => '0.3', 'release' => '0.8',
193
                   'arch' => 'noarch', 'epoch' => '1'}]
194
      @resource.upload_profile(@consumer_id, 'rpm', packages)
195
      response = @resource.retrieve_profile(@consumer_id, 'rpm')
196

    
197
      assert_equal @consumer_id, response['consumer_id']
198
      assert_equal packages, response['profile']
199
    end
200
  end
201

    
202
  class ConsumerRequiresRepoTests < MiniTest::Unit::TestCase
203
    include TestConsumerBase
204
    def self.before_suite
205
      @@support = ConsumerSupport.new
206
      @@repo_support = RepositorySupport.new
207
      @@support.create_consumer(true)
208
      @@repo_support.create_and_sync_repo(:importer_and_distributor => true)
209
    end
210

    
211
    def self.after_suite
212
      @@support.destroy_consumer
213
      @@repo_support.destroy_repo
214
    end
215

    
216
    def self.bind_repo
217
      distro_id = @@repo_support.distributor['id']
218
      tasks = TestRuncible.server.resources.consumer.bind(ConsumerSupport.consumer_id,
219
                                    RepositorySupport.repo_id, distro_id, :notify_agent => false)
220
      @@repo_support.wait_on_response(tasks)
221
      return tasks
222
    end
223
  end
224

    
225
  class TestConsumerBindings < ConsumerRequiresRepoTests
226
    def test_bind
227
      response = self.class.bind_repo
228

    
229
      refute_empty response
230
      assert_equal 200, response.code
231
    end
232

    
233
    def test_unbind
234
      self.class.bind_repo
235
      distro_id = @@repo_support.distributor['id']
236
      refute_empty @resource.retrieve_bindings(ConsumerSupport.consumer_id)
237

    
238
      response = @resource.unbind(ConsumerSupport.consumer_id, RepositorySupport.repo_id, distro_id)
239

    
240
      assert_equal 200, response.code
241
    end
242
  end
243

    
244
  class TestConsumerRequiresRepo < ConsumerRequiresRepoTests
245
    def self.before_suite
246
      super
247
      bind_repo
248
    end
249

    
250
    def test_retrieve_binding
251
      distributor_id = @@repo_support.distributor['id']
252
      response = @resource.retrieve_binding(ConsumerSupport.consumer_id, RepositorySupport.repo_id, distributor_id)
253

    
254
      assert_equal 200, response.code
255
      assert_equal RepositorySupport.repo_id, response['repo_id']
256
    end
257

    
258
    def test_retrieve_bindings
259
      response = @resource.retrieve_bindings(ConsumerSupport.consumer_id)
260

    
261
      assert_equal 200, response.code
262
      refute_empty response
263
    end
264

    
265
    def test_install_units
266
      response = @resource.install_units(ConsumerSupport.consumer_id,
267
                                          [{'unit_key' => {:name => 'zsh'}, :type_id => 'rpm'}])
268
      assert_equal 202, response.code
269
      refute_empty response
270
    end
271

    
272
    def test_update_units
273
      response = @resource.update_units(ConsumerSupport.consumer_id,
274
                                        [{'unit_key' => {:name => 'zsh'}, :type_id => 'rpm'}])
275
      assert_equal 202, response.code
276
      refute_empty response
277
    end
278

    
279
    def test_uninstall_units
280
      response = @resource.uninstall_units(ConsumerSupport.consumer_id,
281
                                            [{'unit_key' => {:name => 'zsh'}, :type_id => 'rpm'}])
282
      assert_equal 202, response.code
283
      refute_empty response
284
    end
285
  end
286
end