You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by mf...@redhat.com on 2012/07/19 15:02:42 UTC

[PATCH core 09/16] Core: Added more collection tests and test_helper to run simplecov

From: Michal Fojtik <mf...@redhat.com>


Signed-off-by: Michal fojtik <mf...@redhat.com>
---
 server/Rakefile                                    |   10 +--
 .../collections/buckets_collection_test.rb         |   64 ++++++++++++++++++++
 .../collections/drivers_collection_test.rb         |   36 +++++++++++
 .../collections/images_collection_test.rb          |   58 ++++++++++++++++++
 .../collections/instance_states_collection_test.rb |   33 ++++++++++
 .../collections/instances_collection_test.rb       |   24 ++++++++
 server/tests/helpers/core_ext/integer_test.rb      |    2 +-
 server/tests/test_helper.rb                        |   21 +++++++
 8 files changed, 243 insertions(+), 5 deletions(-)
 create mode 100644 server/tests/deltacloud/collections/buckets_collection_test.rb
 create mode 100644 server/tests/deltacloud/collections/drivers_collection_test.rb
 create mode 100644 server/tests/deltacloud/collections/images_collection_test.rb
 create mode 100644 server/tests/deltacloud/collections/instance_states_collection_test.rb
 create mode 100644 server/tests/deltacloud/collections/instances_collection_test.rb
 create mode 100644 server/tests/test_helper.rb

diff --git a/server/Rakefile b/server/Rakefile
index cfc6a2e..83460c8 100644
--- a/server/Rakefile
+++ b/server/Rakefile
@@ -113,10 +113,12 @@ namespace :rabbit do
 end
 
 Rake::TestTask.new do |t|
+  t.ruby_opts << '-r./tests/test_helper.rb'   # Load SimpleCov when COVERAGE=1 is set
   t.test_files = FileList[
-    'tests/helpers/**/*test.rb',      # Deltacloud extensions (core_ext) and other helpers
-    'tests/drivers/base/*test.rb',    # Deltacloud drivers API tests
-    'tests/drivers/models/*test.rb',  # Deltacloud models tests
-    'tests/deltacloud/*test.rb'       # Deltacloud internal API tests
+    'tests/helpers/**/*test.rb',              # Deltacloud extensions (core_ext) and other helpers
+    'tests/drivers/base/*test.rb',            # Deltacloud drivers API tests
+    'tests/drivers/models/*test.rb',          # Deltacloud models tests
+    'tests/deltacloud/*test.rb',              # Deltacloud internal API tests
+    'tests/deltacloud/collections/*test.rb'   # Deltacloud collections
   ]
 end
diff --git a/server/tests/deltacloud/collections/buckets_collection_test.rb b/server/tests/deltacloud/collections/buckets_collection_test.rb
new file mode 100644
index 0000000..6eff7ad
--- /dev/null
+++ b/server/tests/deltacloud/collections/buckets_collection_test.rb
@@ -0,0 +1,64 @@
+require 'minitest/autorun'
+
+load File.join(File.dirname(__FILE__), '..', 'common.rb')
+
+describe Deltacloud::Collections::Buckets do
+
+  before do
+    def app; Deltacloud::API; end
+    authorize 'mockuser', 'mockpassword'
+    @collection = Deltacloud::Collections.collection(:buckets)
+  end
+
+  it 'has index operation' do
+    @collection.operation(:index).must_equal Sinatra::Rabbit::BucketsCollection::IndexOperation
+  end
+
+  it 'provides URL to specify new bucket' do
+    header 'Accept', 'text/html'
+    get root_url + '/buckets/new/' + Deltacloud::Helpers::Application::NEW_BLOB_FORM_ID
+    status.must_equal 200
+  end
+
+  it 'returns list of buckets in various formats with index operation' do
+    formats.each do |format|
+      header 'Accept', format
+      get root_url + '/buckets'
+      status.must_equal 200
+    end
+  end
+
+  it 'must support creating a new bucket and destroying it' do
+    post root_url + '/buckets', { :name => 'test-bucket1' }
+    status.must_equal 201
+    xml.root.name.must_equal 'bucket'
+    delete root_url + '/buckets/' + xml.root[:id]
+    status.must_equal 204
+  end
+
+  it 'returns blob metadata' do
+    head root_url + '/buckets/bucket1/blob1'
+    headers['X-Deltacloud-Blobmeta-SOMENEWKEY'].must_equal 'NEWVALUE'
+    status.must_equal 204
+    head root_url + '/buckets/bucket1/non-existing-blob'
+    status.must_equal 404
+  end
+
+  it 'returns blob details on show operation in various formats' do
+    formats.each do |format|
+      header 'Accept', format
+      get root_url + '/buckets/bucket1/blob1'
+      last_response
+      status.must_equal 200
+    end
+  end
+
+  it 'creates a new blob and then destroy it' do
+    post root_url + '/buckets/bucket1', { :blob_id => 'test-blob', :blob_data => 'test', :meta_params => '1', :meta_name1 => 'test-meta1' }
+    status.must_equal 201
+    delete root_url + '/buckets/bucket1/test-blob'
+    status.must_equal 204
+  end
+
+
+end
diff --git a/server/tests/deltacloud/collections/drivers_collection_test.rb b/server/tests/deltacloud/collections/drivers_collection_test.rb
new file mode 100644
index 0000000..4467b68
--- /dev/null
+++ b/server/tests/deltacloud/collections/drivers_collection_test.rb
@@ -0,0 +1,36 @@
+require 'minitest/autorun'
+
+load File.join(File.dirname(__FILE__), '..', 'common.rb')
+
+describe Deltacloud::Collections::Drivers do
+
+  before do
+    def app; Deltacloud::API; end
+    @collection = Deltacloud::Collections.collection(:drivers)
+  end
+
+  it 'has index operation' do
+    @collection.operation(:index).must_equal Sinatra::Rabbit::DriversCollection::IndexOperation
+  end
+
+  it 'has show operation' do
+    @collection.operation(:show).must_equal Sinatra::Rabbit::DriversCollection::ShowOperation
+  end
+
+  it 'returns list of drivers in various formats with index operation' do
+    formats.each do |format|
+      header 'Accept', format
+      get root_url + '/drivers'
+      status.must_equal 200
+    end
+  end
+
+  it 'returns details about driver in various formats with show operation' do
+    formats.each do |format|
+      header 'Accept', format
+      get root_url + '/drivers/mock'
+      status.must_equal 200
+    end
+  end
+
+end
diff --git a/server/tests/deltacloud/collections/images_collection_test.rb b/server/tests/deltacloud/collections/images_collection_test.rb
new file mode 100644
index 0000000..8262df8
--- /dev/null
+++ b/server/tests/deltacloud/collections/images_collection_test.rb
@@ -0,0 +1,58 @@
+require 'minitest/autorun'
+
+load File.join(File.dirname(__FILE__), '..', 'common.rb')
+
+describe Deltacloud::Collections::Images do
+
+  before do
+    def app; Deltacloud::API; end
+    authorize 'mockuser', 'mockpassword'
+    @collection = Deltacloud::Collections.collection(:images)
+  end
+
+  it 'has index operation' do
+    @collection.operation(:index).must_equal Sinatra::Rabbit::ImagesCollection::IndexOperation
+  end
+
+  it 'has show operation' do
+    @collection.operation(:show).must_equal Sinatra::Rabbit::ImagesCollection::ShowOperation
+  end
+
+  it 'returns list of drivers in various formats with index operation' do
+    formats.each do |format|
+      header 'Accept', format
+      get root_url + '/images'
+      status.must_equal 200
+    end
+  end
+
+  it 'returns details about driver in various formats with show operation' do
+    formats.each do |format|
+      header 'Accept', format
+      get root_url + '/images/img1'
+      status.must_equal 200
+    end
+  end
+
+  it 'provides URL to specify new image' do
+    header 'Accept', 'text/html'
+    get root_url + '/images/new?instance_id=inst1'
+    status.must_equal 200
+    get root_url + '/images/new'
+    status.must_equal 404
+  end
+
+  it 'allow to create and destroy the new image' do
+    post root_url + '/images', { :instance_id => 'inst1', :name => 'img-test1', :description => 'test image' }
+    status.must_equal 201
+    xml.root[:id].wont_be_nil
+    delete root_url + '/images/' + xml.root[:id]
+    status.must_equal 204
+  end
+
+  it 'reports 404 when querying non-existing image' do
+    get root_url + '/images/non-existing-one'
+    status.must_equal 404
+  end
+
+end
diff --git a/server/tests/deltacloud/collections/instance_states_collection_test.rb b/server/tests/deltacloud/collections/instance_states_collection_test.rb
new file mode 100644
index 0000000..ecf86c5
--- /dev/null
+++ b/server/tests/deltacloud/collections/instance_states_collection_test.rb
@@ -0,0 +1,33 @@
+require 'minitest/autorun'
+
+load File.join(File.dirname(__FILE__), '..', 'common.rb')
+
+describe Deltacloud::Collections::InstanceStates do
+
+  before do
+    def app; Deltacloud::API; end
+    authorize 'mockuser', 'mockpassword'
+    @collection = Deltacloud::Collections.collection(:instance_states)
+  end
+
+  it 'has index operation' do
+    @collection.operation(:index).must_equal Sinatra::Rabbit::InstanceStatesCollection::IndexOperation
+  end
+
+  it 'returns list of states for current driver in various formats with index operation' do
+    get root_url + '/instance_states'
+    status.must_equal 200
+    xml.root.name.must_equal 'states'
+    header 'Accept', 'application/json'
+    get root_url + '/instance_states'
+    status.must_equal 200
+    JSON::parse(response_body).must_be_kind_of Array
+    JSON::parse(response_body).wont_be_empty
+    header 'Accept', 'image/png'
+    get root_url + '/instance_states'
+    status.must_equal 200
+    last_response.content_type.must_equal 'image/png'
+  end
+
+
+end
diff --git a/server/tests/deltacloud/collections/instances_collection_test.rb b/server/tests/deltacloud/collections/instances_collection_test.rb
new file mode 100644
index 0000000..a1da030
--- /dev/null
+++ b/server/tests/deltacloud/collections/instances_collection_test.rb
@@ -0,0 +1,24 @@
+require 'minitest/autorun'
+
+load File.join(File.dirname(__FILE__), '..', 'common.rb')
+
+describe Deltacloud::Collections::Instances do
+
+  before do
+    def app; Deltacloud::API; end
+    authorize 'mockuser', 'mockpassword'
+    @collection = Deltacloud::Collections.collection(:instances)
+  end
+
+  it 'has index operation' do
+    @collection.operation(:index).must_equal Sinatra::Rabbit::InstancesCollection::IndexOperation
+  end
+
+  it 'provides URL to specify new instance' do
+    header 'Accept', 'text/html'
+    get root_url + '/instances/new?image_id=img1'
+    status.must_equal 200
+  end
+
+
+end
diff --git a/server/tests/helpers/core_ext/integer_test.rb b/server/tests/helpers/core_ext/integer_test.rb
index 2ddf09b..b4d50f6 100644
--- a/server/tests/helpers/core_ext/integer_test.rb
+++ b/server/tests/helpers/core_ext/integer_test.rb
@@ -11,7 +11,7 @@ class TestInteger < MiniTest::Unit::TestCase
     assert_equal '2nd', 2.ordinalize
     assert_equal '3rd', 3.ordinalize
     assert_equal '6th', 6.ordinalize
-    assert_equal '1100th', 1100.ordinalize
+    assert_equal '1211th', 1211.ordinalize
   end
 
 end
diff --git a/server/tests/test_helper.rb b/server/tests/test_helper.rb
new file mode 100644
index 0000000..3bbd6a3
--- /dev/null
+++ b/server/tests/test_helper.rb
@@ -0,0 +1,21 @@
+
+%x[rake mock:fixtures:reset]
+
+if ENV['COVERAGE']
+  begin
+    require 'simplecov'
+    SimpleCov.start do
+      command_name 'Minitest tests'
+      project_name 'Deltacloud API'
+      add_filter "tests/"
+      add_group 'Drivers', 'lib/deltacloud/drivers'
+      add_group 'Collections', 'lib/deltacloud/collections'
+      add_group 'Models', 'lib/deltacloud/models'
+      add_group 'Helpers', 'lib/deltacloud/helpers'
+      add_group 'Extensions', 'lib/deltacloud/core_ext'
+      add_group 'Sinatra', 'lib/sinatra'
+    end
+  rescue LoadError
+    warn "To generate code coverage you need to install 'simplecov' (gem install simplecov OR bundle)"
+  end
+end
-- 
1.7.10.2