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/31 14:33:29 UTC
[PATCH core 5/5] CIMI: Added initial support for CIMI collections tests
From: Michal Fojtik <mf...@redhat.com>
Signed-off-by: Michal fojtik <mf...@redhat.com>
---
server/Rakefile | 2 +
.../cimi/collections/cloud_entry_point_test.rb | 43 ++++++++++++++++++++
server/tests/cimi/collections/common.rb | 22 ++++++++++
.../tests/cimi/collections/machine_images_test.rb | 42 +++++++++++++++++++
server/tests/cimi/collections/machines_test.rb | 39 ++++++++++++++++++
5 files changed, 148 insertions(+)
create mode 100644 server/tests/cimi/collections/cloud_entry_point_test.rb
create mode 100644 server/tests/cimi/collections/common.rb
create mode 100644 server/tests/cimi/collections/machine_images_test.rb
create mode 100644 server/tests/cimi/collections/machines_test.rb
diff --git a/server/Rakefile b/server/Rakefile
index ec3984b..184fe6c 100644
--- a/server/Rakefile
+++ b/server/Rakefile
@@ -185,11 +185,13 @@ namespace :test do
namespace :cimi do
Rake::TestTask.new(:models) do |t|
t.ruby_opts << '-r./tests/cimi/spec/spec_helper.rb' # Load SimpleCov when COVERAGE=1 is set
+ t.ruby_opts << '-r./tests/test_helper.rb' # Load SimpleCov when COVERAGE=1 is set
unless RUBY_VERSION < '1.9.0'
t.loader = :testrb
end
t.test_files = FileList[
'tests/cimi/spec/cimi/model/*spec.rb', # CIMI frontend serialization API tests
+ 'tests/cimi/collections/*test.rb', # CIMI frontend API tests
]
end
end
diff --git a/server/tests/cimi/collections/cloud_entry_point_test.rb b/server/tests/cimi/collections/cloud_entry_point_test.rb
new file mode 100644
index 0000000..7603a3d
--- /dev/null
+++ b/server/tests/cimi/collections/cloud_entry_point_test.rb
@@ -0,0 +1,43 @@
+require 'minitest/autorun'
+require_relative './common.rb'
+
+describe CIMI::Collections::CloudEntryPoint do
+
+ before do
+ def app; CIMI::API; end
+ @collection = CIMI::Collections.collection(:cloudEntryPoint)
+ end
+
+ it 'has index operation' do
+ @collection.operation(:index).must_equal Sinatra::Rabbit::CloudentrypointCollection::IndexOperation
+ end
+
+ it 'set the CIMI-Version header' do
+ get root_url
+ headers['X-CIMI-Specification-Version'].wont_be_nil
+ headers['X-CIMI-Specification-Version'].must_equal '1.0.0'
+ end
+
+ it 'advertise CIMI collections in XML format' do
+ get root_url + '/cloudEntryPoint'
+ xml.root.name.must_equal 'CloudEntryPoint'
+ (xml.root/'description').first.text.wont_be_empty
+ (xml.root/'id').first.text.wont_be_empty
+ end
+
+ it 'advertise CIMI collections in JSON format' do
+ get root_url + '/cloudEntryPoint?format=json'
+ json.wont_be_empty
+ json['description'].wont_be_empty
+ json['id'].wont_be_empty
+ end
+
+ it 'allow to force authentication using force_auth parameter in URI' do
+ get root_url + '/cloudEntryPoint?force_auth=1'
+ status.must_equal 401
+ authorize 'mockuser', 'mockpassword'
+ get root_url + '/cloudEntryPoint?force_auth=1'
+ status.must_equal 200
+ end
+
+end
diff --git a/server/tests/cimi/collections/common.rb b/server/tests/cimi/collections/common.rb
new file mode 100644
index 0000000..f24e7b1
--- /dev/null
+++ b/server/tests/cimi/collections/common.rb
@@ -0,0 +1,22 @@
+require_relative File.join('..', '..', '..', 'lib', 'deltacloud_rack.rb')
+
+# Set the default driver used for server API tests
+#
+ENV['API_DRIVER'] = 'mock'
+
+# Setup Deltacloud::API Sinatra instance
+#
+unless Deltacloud::config[:cimi]
+ Deltacloud::configure(:cimi) do |server|
+ server.root_url '/cimi'
+ server.version '1.0.0'
+ server.klass 'CIMI::API'
+ server.logger Rack::DeltacloudLogger.setup(ENV['API_LOG'], ENV['API_VERBOSE'])
+ end
+
+ Deltacloud.require_frontend!(:cimi)
+end
+
+def root_url(url=''); Deltacloud.config[:cimi].root_url + url; end
+def formats; [ 'application/xml', 'application/json' ]; end
+def json; JSON::parse(response_body); end
diff --git a/server/tests/cimi/collections/machine_images_test.rb b/server/tests/cimi/collections/machine_images_test.rb
new file mode 100644
index 0000000..f8df8b5
--- /dev/null
+++ b/server/tests/cimi/collections/machine_images_test.rb
@@ -0,0 +1,42 @@
+require 'minitest/autorun'
+require_relative './common.rb'
+
+describe CIMI::Collections::MachineImages do
+
+ before do
+ def app; CIMI::API; end
+ authorize 'mockuser', 'mockpassword'
+ @collection = CIMI::Collections.collection(:machine_images)
+ end
+
+ it 'has index operation' do
+ @collection.operation(:index).must_equal Sinatra::Rabbit::MachineImagesCollection::IndexOperation
+ end
+
+ it 'has show operation' do
+ @collection.operation(:show).must_equal Sinatra::Rabbit::MachineImagesCollection::ShowOperation
+ end
+
+ it 'returns list of images in various formats with index operation' do
+ formats.each do |format|
+ header 'Accept', format
+ get root_url + '/machine_images'
+ status.must_equal 200
+ end
+ end
+
+ it 'should allow to retrieve the single image' do
+ get root_url '/machine_images/img1'
+ status.must_equal 200
+ xml.root.name.must_equal 'MachineImage'
+ end
+
+ it 'should allow to filter using CIMISelect' do
+ get root_url '/machine_images?CIMISelect=description'
+ status.must_equal 200
+ xml.root.name.must_equal 'MachineImageCollection'
+ (xml/'description').wont_be_empty
+ (xml/'id').must_be_empty
+ end
+
+end
diff --git a/server/tests/cimi/collections/machines_test.rb b/server/tests/cimi/collections/machines_test.rb
new file mode 100644
index 0000000..aa3360e
--- /dev/null
+++ b/server/tests/cimi/collections/machines_test.rb
@@ -0,0 +1,39 @@
+require 'minitest/autorun'
+require_relative './common.rb'
+
+describe CIMI::Collections::Machines do
+
+ before do
+ def app; CIMI::API; end
+ authorize 'mockuser', 'mockpassword'
+ @collection = CIMI::Collections.collection(:machines)
+ end
+
+ it 'has index operation' do
+ @collection.operation(:index).must_equal Sinatra::Rabbit::MachinesCollection::IndexOperation
+ end
+
+ it 'has show operation' do
+ @collection.operation(:show).must_equal Sinatra::Rabbit::MachinesCollection::ShowOperation
+ end
+
+ it 'returns list of machines in various formats with index operation' do
+ formats.each do |format|
+ header 'Accept', format
+ get root_url + '/machines'
+ status.must_equal 200
+ end
+ end
+
+ it 'should allow to retrieve the single machine' do
+ get root_url '/machines/inst1'
+ status.must_equal 200
+ xml.root.name.must_equal 'Machine'
+ end
+
+ it 'should not return non-existing machine' do
+ get root_url '/machines/unknown-machine'
+ status.must_equal 404
+ end
+
+end
--
1.7.10.2