From: Tong Li <liton...@us.ibm.com> --- server/Rakefile | 9 ++ server/lib/cimi/server.rb | 2 +- server/tests/cimi/cimi.rb | 3 + server/tests/cimi/common/cloud_entry_point_test.rb | 92 ++++++++++++++++++++ .../cimi/common/machine_configuration_test.rb | 60 +++++++++++++ server/tests/cimi/common/machine_image_test.rb | 60 +++++++++++++ server/tests/cimi/common/machine_test.rb | 60 +++++++++++++ server/tests/cimi/common/volume_test.rb | 60 +++++++++++++ server/tests/common.rb | 6 +- 9 files changed, 350 insertions(+), 2 deletions(-) create mode 100644 server/tests/cimi/cimi.rb create mode 100644 server/tests/cimi/common/cloud_entry_point_test.rb create mode 100644 server/tests/cimi/common/machine_configuration_test.rb create mode 100644 server/tests/cimi/common/machine_image_test.rb create mode 100644 server/tests/cimi/common/machine_test.rb create mode 100644 server/tests/cimi/common/volume_test.rb
diff --git a/server/Rakefile b/server/Rakefile index 27605d5..f07a6ce 100644 --- a/server/Rakefile +++ b/server/Rakefile @@ -62,6 +62,15 @@ namespace :test do t.warning = false } end + + desc "Run CIMI frontend tests" + Rake::TestTask.new "cimi" do |t| + t.test_files = ["tests/cimi/cimi.rb", "tests/cimi/common/*_test.rb"] + t.options = "-v -v" + t.verbose = true + t.warning = false + end + end desc "Call our Test::Unit suite" diff --git a/server/lib/cimi/server.rb b/server/lib/cimi/server.rb index 17285bd..cfb77ea 100644 --- a/server/lib/cimi/server.rb +++ b/server/lib/cimi/server.rb @@ -40,7 +40,7 @@ configure do set :views, File::join($top_srcdir, 'views', 'cimi') # NOTE: Change :public to :public_folder once we update sinatra to 1.3 # set :public_folder, File::join($top_srcdir, 'public') - set :public, File::join($top_srcdir, 'public') + set :public_folder, File::join($top_srcdir, 'public') # Try to load the driver on startup to fail early if there are issues driver set :store, STOREROOT diff --git a/server/tests/cimi/cimi.rb b/server/tests/cimi/cimi.rb new file mode 100644 index 0000000..8d351ad --- /dev/null +++ b/server/tests/cimi/cimi.rb @@ -0,0 +1,3 @@ +ENV['API_FRONTEND'] = "cimi" +ENV['API_USER'] = 'mockuser' +ENV['API_PASSWORD'] = 'mockpassword' diff --git a/server/tests/cimi/common/cloud_entry_point_test.rb b/server/tests/cimi/common/cloud_entry_point_test.rb new file mode 100644 index 0000000..dc7cb36 --- /dev/null +++ b/server/tests/cimi/common/cloud_entry_point_test.rb @@ -0,0 +1,92 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the +# License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..') +require 'tests/common' +require 'nokogiri' + +module CimiUnitTest + class CloudEntryPointTest < Test::Unit::TestCase + include Rack::Test::Methods + + def app + Sinatra::Application + end + + def test_it_redirect_client_to_entrypoint + get_url '/cimi' + last_response.status.should == 301 + last_response.header['Location'].should == 'http://example.org/cimi/cloudEntryPoint' + end + + def test_it_return_valid_content_type + get_url '/cimi/cloudEntryPoint' + last_response.content_type.should == 'application/CIMI-CloudEntryPoint+xml;charset=utf-8' + end + + def test_it_return_valid_xmlns + get_url '/cimi/cloudEntryPoint' + (last_xml_response/'CloudEntryPoint').first.namespace.href.should == CMWG_NAMESPACE + end + + def test_it_return_valid_root_element + get_url '/cimi/cloudEntryPoint' + last_xml_response.root.name == "CloudEntryPoint" + end + + def test_it_include_all_properties + get_url '/cimi/cloudEntryPoint' + properties = ['uri', 'name', 'description', 'created', 'volumes', 'machines', 'machineImages', 'machineConfigurations'].sort + (last_xml_response/'CloudEntryPoint/*').collect { |p| p.name }.sort.should == properties + end + + def test_collection_have_href_attributes + get_url '/cimi/cloudEntryPoint' + collections = [ 'volumes', 'machines', 'machineImages', 'machineConfigurations' ] + (last_xml_response/'CloudEntryPoint/*').each do |collection| + collection[:href].should_not nil + end + end + + def test_collection_href_attributes_are_valid + valid_uris = { + 'volumes' => 'cimi/volumes', + 'machines' => 'cimi/machines', + 'machineImages' => 'cimi/machine_images', + 'machineConfiguration' => 'cimi/machine_configurations' + } + get_url '/cimi/cloudEntryPoint' + (last_xml_response/'CloudEntryPoint/*').each do |collection| + next unless valid_uris.keys.include? collection.name + collection[:href].should =~ /#{valid_uris[collection.name]}$/ + end + end + + def test_it_respond_to_json + get_url '/cimi/cloudEntryPoint', {}, :format => :json + JSON::parse(last_response.body).class.should == Hash + end + + def test_json_include_all_properties + get_url '/cimi/cloudEntryPoint', {}, :format => :json + properties = ['uri', 'name', 'description', 'created', 'volumes', 'machines', 'machineImages', 'machineConfigurations'].sort + properties.each do |property| + JSON::parse(last_response.body).keys.include?(property).should == true + end + end + + end +end diff --git a/server/tests/cimi/common/machine_configuration_test.rb b/server/tests/cimi/common/machine_configuration_test.rb new file mode 100644 index 0000000..c28312f --- /dev/null +++ b/server/tests/cimi/common/machine_configuration_test.rb @@ -0,0 +1,60 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the +# License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..') +require 'tests/common' +require 'nokogiri' + +module CimiUnitTest + class MachineConfigurationTest < Test::Unit::TestCase + include Rack::Test::Methods + + def app + Sinatra::Application + end + + #setup the url to access a machine. this will be used by all the test cases in this class + def setup + if @checked.nil? + get_url '/cimi/cloudEntryPoint' + configurations = last_xml_response/'CloudEntryPoint/machineConfigurations' + if configurations + get_auth_url configurations.attr('href') + elements = last_xml_response/'MachineConfigurationCollection/machineConfiguration' + if elements.size > 0 + @access_url = elements[0].attr('href') + end + end + @checked = true + end + end + + def test_machine_configuration_read_to_xml + if @access_url + get_auth_url @access_url, {}, :format => :xml + last_response.status.should == 200 + end + end + + def test_machine_configuration_read_to_json + if @access_url + get_auth_url @access_url, {}, :format => :json + last_response.status.should == 200 + end + end + + end +end diff --git a/server/tests/cimi/common/machine_image_test.rb b/server/tests/cimi/common/machine_image_test.rb new file mode 100644 index 0000000..e271449 --- /dev/null +++ b/server/tests/cimi/common/machine_image_test.rb @@ -0,0 +1,60 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the +# License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..') +require 'tests/common' +require 'nokogiri' + +module CimiUnitTest + class MachineImageTest < Test::Unit::TestCase + include Rack::Test::Methods + + def app + Sinatra::Application + end + + #setup the url to access a machine. this will be used by all the test cases in this class + def setup + if @checked.nil? + get_url '/cimi/cloudEntryPoint' + images = last_xml_response/'CloudEntryPoint/machineImages' + if images + get_auth_url images.attr('href') + elements = last_xml_response/'MachineImageCollection/machineImage' + if elements.size > 0 + @access_url = elements[0].attr('href') + end + end + @checked = true + end + end + + def test_machine_image_read_to_xml + if @access_url + get_auth_url @access_url, {}, :format => :xml + last_response.status.should == 200 + end + end + + def test_machine_image_read_to_json + if @access_url + get_auth_url @access_url, {}, :format => :json + last_response.status.should == 200 + end + end + + end +end diff --git a/server/tests/cimi/common/machine_test.rb b/server/tests/cimi/common/machine_test.rb new file mode 100644 index 0000000..2fda201 --- /dev/null +++ b/server/tests/cimi/common/machine_test.rb @@ -0,0 +1,60 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the +# License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..') +require 'tests/common' +require 'nokogiri' + +module CimiUnitTest + class MachineTest < Test::Unit::TestCase + include Rack::Test::Methods + + def app + Sinatra::Application + end + + #setup the url to access a machine. this will be used by all the test cases in this class + def setup + if @checked.nil? + get_url '/cimi/cloudEntryPoint' + machines = (last_xml_response/'CloudEntryPoint/machines') + if machines + get_auth_url machines.attr('href') + elements = last_xml_response/'MachineCollection/machine' + if elements.size > 0 + @access_url = elements[0].attr('href') + end + end + @checked = true + end + end + + def test_machine_read_to_xml + if @access_url + get_auth_url @access_url, {}, :format => :xml + last_response.status.should == 200 + end + end + + def test_machine_read_to_json + if @access_url + get_auth_url @access_url, {}, :format => :json + last_response.status.should == 200 + end + end + + end +end diff --git a/server/tests/cimi/common/volume_test.rb b/server/tests/cimi/common/volume_test.rb new file mode 100644 index 0000000..9788309 --- /dev/null +++ b/server/tests/cimi/common/volume_test.rb @@ -0,0 +1,60 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the +# License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..') +require 'tests/common' +require 'nokogiri' + +module CimiUnitTest + class VolumeTest < Test::Unit::TestCase + include Rack::Test::Methods + + def app + Sinatra::Application + end + + #setup the url to access a machine. this will be used by all the test cases in this class + def setup + if @checked.nil? + get_url '/cimi/cloudEntryPoint' + volumes = (last_xml_response/'CloudEntryPoint/volumes') + if volumes + get_auth_url volumes.attr('href') + elements = last_xml_response/'VolumeCollection/volume' + if elements.size > 0 + @access_url = elements[0].attr('href') + end + end + @checked = true + end + end + + def test_volume_read_to_xml + if @access_url + get_auth_url @access_url, {}, :format => :xml + last_response.status.should == 200 + end + end + + def test_volume_read_to_json + if @access_url + get_auth_url @access_url, {}, :format => :json + last_response.status.should == 200 + end + end + + end +end diff --git a/server/tests/common.rb b/server/tests/common.rb index e86f818..a0272ae 100644 --- a/server/tests/common.rb +++ b/server/tests/common.rb @@ -13,6 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. # +ENV.delete 'API_VERBOSE' $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') $top_srcdir = File::dirname(File::dirname(__FILE__)) @@ -26,7 +27,10 @@ require 'json' require 'digest/sha1' require 'base64' require 'rack/test' -require 'deltacloud/server' + +server_dir = ENV['API_FRONTEND'] == 'cimi' ? 'cimi' : 'deltacloud' +load File.join($top_srcdir, 'lib', server_dir, 'server.rb') + driver -- 1.7.4.1