blob: 2dd944ab47aa8c0b258e6140eb58b1252375b2d0 [file] [log] [blame]
#
# 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 "test_helper.rb"
class SystemTemplate < CIMI::Test::Spec
RESOURCE_URI = "http://schemas.dmtf.org/cimi/1/System"
ROOTS = [ "machines" , "systemTemplates" , "volumeTemplates"]
need_capability('add', 'systems')
need_collection("systems")
# Cleanup for resources created for the test
MiniTest::Unit.after_tests { teardown(@@created_resources, api.basic_auth) }
# Ensure test executes in test plan order
i_suck_and_my_tests_are_order_dependent!
# 1.1: Query the CEP
model :subject, :cache => true do |fmt|
cep(:accept => fmt)
end
# CEP.machines, CEP.systemTemplates and CEP.volumeTemplates must be set
query_the_cep(ROOTS)
# 1.2 Query the systemTemplate collection
cep_json = cep(:accept => :json)
#model :system_template do |fmt|
# get(cep_json.json[ROOTS[1]]["href"], :accept => :fmt)
#end
it "should return a 200 code" do
get(cep_json.json[ROOTS[1]]["href"], :accept => :json).code.must_equal 200
get(cep_json.json[ROOTS[1]]["href"], :accept => :xml).code.must_equal 200
end
# Retrieve existing system templates or the address to create a new system template
begin
# systemplate_add_uri = discover_uri_for("add", "system_templates")
it "should have at least one system template" do
r = ROOTS[1].underscore.to_sym
model = fetch(subject.send(r).href)
log.info(model.attribute_values[r][0])
assert_equal model.attribute_values[r][0].nil?(), false
model.attribute_values[r][0].id.must_be_uri
# 1.3 Select or Create a System Template
log.info "Picked SystemTemplate " + get_a(cep_json, "systemTemplate")
end
rescue RuntimeError =>e
end
if collection_supported("systems")
system_add_uri = discover_uri_for("add", "systems")
# 1.4 Create a new system from the systemTemplate
system_created = post(system_add_uri,
"<SystemCreate xmlns=\"#{CIMI::Test::CIMI_NAMESPACE}\">" +
"<name>dc_test_system_#{Time.now.to_i}</name>" +
"<systemTemplate href=\"" + get_a(cep_json, "systemTemplate") + "\"/>" +
"</SystemCreate>", :content_type => :xml)
end
model :systems do |fmt|
get cep_json.json["systems"]["href"], :accept => fmt
end
it "should add system resource for cleanup", :only => :json do
@@created_resources ||= {}
@@created_resources[:systems] ||= []
@@created_resources[:systems] << system_created.headers[:location]
end
it "should allow a system to be created" do
system_created.headers[:location].must_be_uri
system_created.code.must_be_one_of [201, 202]
end
# model :test_system_created do |fmt|
# get(system_created.headers[:location], :accept => fmt)
# end
# 1.5 Query the new System
it "should return a representation of a system", :only => :json do
test_system_created = fetch(system_created.headers[:location]).id
log.info "Created system #{test_system_created}"
last_response.code.must_equal 200
last_response.json["resourceURI"].must_equal RESOURCE_URI
end
# 1.6 Query the System SystemMachine collection
it "should have a SystemMachine collection with two entries", :only => :json do
#test_system_created
test_system_created = get(fetch(system_created.headers[:location]).id, :accept => :json)
system_machines = get(test_system_created.json["machines"]["href"], :accept => :json)
#system_machines.json["count"].must_equal 2
#system_machines.json["systemMachines"][0]["id"]. end
end
# 1.7 Query the System SystemVolume collection
#OPTIONAL for this pf - commenting out for now (created system from template1.json[mock] has no volumes)
# it "should contain a single entry referencing a Volume named as indicated in the SystemTemplate", :only => :json do
#test_system_created
# test_system_created = get(fetch(system_created.headers[:location]).id, :accept => :json)
# system_volumes = get(test_system_created.json["volumes"]["href"], :accept => :json)
# system_volumes.json["count"].must_equal 1
# #system_volumes.json["systemVolumes"][0]["id"].must_equal "volume from template"
# end
# 1.8 Check that the volume is attached to machine(s)
# Optional - skipping
# 1.9 Query the System SystemCredential collection
# Optional - skipping
# 1.10 Starting the new System
it "should be able to start the system", :only => :json do
sys = fetch(system_created.headers[:location])
# ensure the system has reached a stable state (STOPPED, MIXED or STARTED)
sys = poll_state(sys, "STARTED", "STOPPED", "MIXED")
unless sys.state.eql?("STARTED")
uri = discover_uri_for("start", nil, sys.operations)
response = post( uri,
"<Action xmlns=\"http://schemas.dmtf.org/cimi/1\">" +
"<action>http://schemas.dmtf.org/cimi/1/action/start</action>" +
"</Action>",
:accept => :xml, :content_type => :xml)
response.code.must_equal 202
sys = poll_state(sys, "STARTED")
end
sys.state.upcase.must_equal "STARTED"
end
# 1.11 Check that the machines are started
it "should check that the system machines were started successfully", :only => :json do
test_system_created = fetch(system_created.headers[:location])
sys_mach_coll = fetch(test_system_created.machines.href)
sys_mach_coll.system_machines.each do |sys_mach|
fetch(sys_mach.machine.href).state.upcase.must_equal "STARTED"
end
end
# 1.12 Stop the new System
it "should be able to stop the system", :only => :json do
sys = fetch(system_created.headers[:location])
# ensure the system has reached a stable state (STOPPED, MIXED or STARTED)
sys = poll_state(sys, "STARTED", "STOPPED", "MIXED")
unless sys.state.upcase.eql?("STOPPED")
uri = discover_uri_for("stop", nil, sys.operations)
response = post( uri,
"<Action xmlns=\"http://schemas.dmtf.org/cimi/1\">" +
"<action>http://schemas.dmtf.org/cimi/1/action/stop</action>" +
"</Action>",
:accept => :xml, :content_type => :xml)
response.code.must_equal 202
poll_state(fetch(system_created.headers[:location]), "STOPPED")
get(fetch(system_created.headers[:location]).id, :accept => :json).json["state"].upcase.must_equal "STOPPED"
end
end
# 1.13 Check that the machines are stopped
it "should check that the system machines were stopped successfully", :only => :json do
test_system_created = fetch(system_created.headers[:location])
sys_mach_coll = fetch(test_system_created.machines.href)
sys_mach_coll.system_machines.each do |sys_mach|
fetch(sys_mach.machine.href).state.upcase.must_equal "STOPPED"
end
end
end