From: Michal Fojtik <[email protected]>
Signed-off-by: Michal fojtik <[email protected]> --- server/Rakefile | 6 ++ server/tests/cimi/features/machines.feature | 35 +++++++++ .../features/step_definitions/machines_steps.rb | 80 ++++++++++++++++++++ server/tests/cimi/features/support/env.rb | 21 +++++ 4 files changed, 142 insertions(+), 0 deletions(-) create mode 100644 server/tests/cimi/features/machines.feature create mode 100644 server/tests/cimi/features/step_definitions/machines_steps.rb create mode 100644 server/tests/cimi/features/support/env.rb diff --git a/server/Rakefile b/server/Rakefile index 53fb7bf..0d52f81 100644 --- a/server/Rakefile +++ b/server/Rakefile @@ -50,6 +50,12 @@ begin end end end + namespace :cimi do + Cucumber::Rake::Task.new(:machines) do |t| + t.cucumber_opts = "tests/cimi/features/machines.feature --format pretty" + t.rcov = false + end + end rescue LoadError end diff --git a/server/tests/cimi/features/machines.feature b/server/tests/cimi/features/machines.feature new file mode 100644 index 0000000..f3264d6 --- /dev/null +++ b/server/tests/cimi/features/machines.feature @@ -0,0 +1,35 @@ +Feature: Managing Machines + In order to interact with the provider + We must first be provided a URL to the main entry point (CEP). + + Scenario: Create a New Machine + Given Cloud Entry Point URL is provided + And client retrieve the Cloud Entry Point + When client specifies a Machine Image + | machineImage | http://example.com/cimi/machine_images/img1 | + And client specifies a Machine Configuration + | machineConfig | http://example.com/cimi/machine_configurations/m1-small | + And client specifies a new Machine using + | name | sampleMachine1 | + | description | sampleMachine1Description | + Then client should be able to create this Machine + + Scenario: Querying created Machine + Given Cloud Entry Point URL is provided + And client retrieve the Cloud Entry Point + When client query for 'sampleMachine1' Machine + And client should verify that this machine exists + + Scenario: Stopping Machine + Given Cloud Entry Point URL is provided + And client retrieve the Cloud Entry Point + When client executes stop operation on Machine 'sampleMAchine1' + Then client should be able to query this Machine + And client should verify that this machine is stopped + + Scenario: Starting Machine + Given Cloud Entry Point URL is provided + And client retrieve the Cloud Entry Point + When client executes start operation on Machine 'sampleMAchine1' + Then client should be able to query this Machine + And client should verify that this machine is started diff --git a/server/tests/cimi/features/step_definitions/machines_steps.rb b/server/tests/cimi/features/step_definitions/machines_steps.rb new file mode 100644 index 0000000..54c63a0 --- /dev/null +++ b/server/tests/cimi/features/step_definitions/machines_steps.rb @@ -0,0 +1,80 @@ +World(Rack::Test::Methods) + +Given /^Cloud Entry Point URL is provided$/ do + get '/cimi' + last_response.status.should == 301 + last_response.location.should == "http://example.org/cimi/cloudEntryPoint" +end + +Given /^client retrieve the Cloud Entry Point$/ do + get "/cimi/cloudEntryPoint" + header 'Accept', 'application/xml' + last_response.status.should == 200 +end + +When /^client specifies a Machine Image$/ do |machine_image| + header 'Accept', 'application/xml' + authorize 'mockuser', 'mockpassword' + get machine_image.raw[0][1] + last_response.status.should == 200 + @machine_image = CIMI::Model::MachineImage.from_xml(last_response.body) + @machine_image.should_not be_nil + @machine_image.uri.should == machine_image.raw[0][1] +end + +When /^client specifies a Machine Configuration$/ do |machine_conf| + header 'Accept', 'application/xml' + authorize 'mockuser', 'mockpassword' + get machine_conf.raw[0][1] + last_response.status.should == 200 + @machine_configuration = CIMI::Model::MachineImage.from_xml(last_response.body) + @machine_configuration.should_not be_nil + @machine_configuration.uri.should == machine_conf.raw[0][1] +end + +When /^client specifies a new Machine using$/ do |machine| + @machine_image.should_not be_nil + @machine_configuration.should_not be_nil + @builder = Nokogiri::XML::Builder.new do |xml| + xml.Machine(:xmlns => CMWG_NAMESPACE) { + xml.name machine.raw[0][1] + xml.description machine.raw[1][1] + xml.MachineTemplate { + xml.MachineConfig( :href => @machine_configuration.uri ) + xml.MachineImage( :href => @machine_image.uri ) + } + } + end +end + +Then /^client should be able to create this Machine$/ do + pending "NOTE: There is an inconsistency between Primer and CIMI spec\n" + @machine = CIMI::Model::Machine.from_xml(@builder.to_xml) + authorize 'mockuser', 'mockpassword' + post '/cimi/machines', @machine + last_response.status.should == 201 +end + +When /^client query for '(\w+)' Machine$/ do |machine_id| + header 'Accept', 'application/xml' + authorize 'mockuser', 'mockpassword' + get "/cimi/machines/%s" % machine_id +end + +Then /^client should verify that this machine exists$/ do + last_xml_response.root.name == 'Machine' + last_response.status == 200 + @new_machine = last_xml_response +end + +Then /^client should be able to query this Machine$/ do + get "/cimi/machines/%s" % (@new_machine/'') +end + +When /^client executes (\w+) operation on Machine '(\w+)'$/ do |operation, machine_id| + pending # express the regexp above with the code you wish you had +end + +Then /^client should verify that this machine is (\w+)$/ do |status| + pending # express the regexp above with the code you wish you had +end diff --git a/server/tests/cimi/features/support/env.rb b/server/tests/cimi/features/support/env.rb new file mode 100644 index 0000000..2cd7f73 --- /dev/null +++ b/server/tests/cimi/features/support/env.rb @@ -0,0 +1,21 @@ +require 'rubygems' +require 'nokogiri' + +ENV['API_DRIVER'] = 'mock' +ENV['API_FRONTEND'] = 'cimi' +ENV.delete('API_VERBOSE') + +$top_srcdir = File.join(File.dirname(__FILE__), '..', '..', '..', '..') +$:.unshift File.join($top_srcdir, 'lib') + +load File.join($top_srcdir, 'lib', 'cimi', 'server.rb') + +require 'rack/test' + +def last_xml_response + Nokogiri::XML(last_response.body) +end + +def app + Sinatra::Application +end -- 1.7.4.4
