puppet-infracloud/spec/acceptance/allinone_spec.rb

146 lines
5.4 KiB
Ruby

require 'puppet-openstack_infra_spec_helper/spec_helper_acceptance'
describe 'allinone', :if => os[:family] == 'ubuntu' && os[:release] != '16.04' do
fixtures_path = File.join(File.dirname(__FILE__), 'fixtures')
controller_path = File.join(fixtures_path, 'allinone_controller.pp')
compute_path = File.join(fixtures_path, 'allinone_compute.pp')
controller_pp = File.read(controller_path)
compute_pp = File.read(compute_path)
before :all do
# set up bridge
shell('apt-get install -y vlan bridge-utils')
shell('echo -e "auto eth0.2\niface eth0.2 inet manual\n" >> /etc/network/interfaces')
shell('modprobe 8021q')
shell('ifup eth0.2')
shell('brctl addbr br_infracloud')
shell('brctl addif br_infracloud eth0.2')
shell('ip addr add 10.1.0.42/255.255.240.0 dev br_infracloud')
shell('ip link set dev br_infracloud up')
# set hostname
shell('echo 127.0.1.1 infracloud.local infracloud >> /etc/hosts')
shell('echo infracloud > /etc/hostname')
shell('hostname infracloud')
end
# The controller and compute are meant to run on separate nodes, so
# applying them together gives duplicate definition errors. Otherwise
# they should be able to cohabitate a single node.
it 'should apply the controller with no errors' do
apply_manifest(controller_pp, catch_failures: true)
end
it 'should apply the compute with no errors' do
apply_manifest(compute_pp, catch_failures: true)
end
it 'should be idempotent' do
apply_manifest(controller_pp, catch_changes: true)
apply_manifest(compute_pp, catch_changes: true)
end
credentials = 'OS_USERNAME=admin'
credentials += ' OS_PASSWORD=XXX'
credentials += ' OS_PROJECT_NAME=openstack'
credentials += ' OS_USER_DOMAIN_NAME=default'
credentials += ' OS_PROJECT_DOMAIN_NAME=default'
credentials += ' OS_IDENTITY_API_VERSION=3'
credentials += ' OS_AUTH_URL=https://infracloud.local:5000/v3'
it 'should have keystone projects' do
result = shell("#{credentials} openstack project list")
expect(result.stdout).to match(/openstack/)
expect(result.exit_code).to eq(0)
end
it 'should have keystone users' do
result = shell("#{credentials} openstack user list")
expect(result.stdout).to match(/admin/)
expect(result.exit_code).to eq(0)
end
it 'should have keystone services' do
result = shell("#{credentials} openstack service list")
expect(result.stdout).to match(/identity/)
expect(result.stdout).to match(/compute/)
expect(result.stdout).to match(/network/)
expect(result.stdout).to match(/image/)
expect(result.exit_code).to eq(0)
end
it 'should have keystone endpoints' do
result = shell("#{credentials} openstack endpoint list")
expect(result.stdout).to match(/infracloud.local:5000/)
expect(result.stdout).to match(/infracloud.local:9696/)
expect(result.stdout).to match(/infracloud.local:9292/)
expect(result.stdout).to match(/infracloud.local:8774/)
expect(result.exit_code).to eq(0)
end
it 'should have nova flavors' do
result = shell("#{credentials} openstack flavor list")
expect(result.stdout).to match(/m1.tiny/)
expect(result.exit_code).to eq(0)
end
it 'should have nova services running' do
result = shell("#{credentials} openstack compute service list")
expect(result.stdout).to match(/conductor.*up/)
expect(result.stdout).to match(/scheduler.*up/)
expect(result.stdout).to match(/compute.*up/)
expect(result.exit_code).to eq(0)
end
it 'should have a neutron network' do
result = shell("#{credentials} openstack network list")
expect(result.stdout).to match(/public/)
expect(result.exit_code).to eq(0)
end
it 'should have a neutron subnet' do
result = shell("#{credentials} neutron subnet-list")
expect(result.stdout).to match(/provider-subnet-infracloud/)
expect(result.exit_code).to eq(0)
end
it 'should be able to upload an image' do
command = 'OS_IMAGE_API_VERSION=1 openstack image create \
--copy-from http://download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-disk.img \
--public \
--container-format bare \
--disk-format qcow2 \
cirros'
result = shell("#{credentials} #{command}")
expect(result.exit_code).to eq(0)
list_command = "#{credentials} openstack image list --long"
timeout = 60
end_time = Time.now + timeout
image_list = shell(list_command)
while image_list.stdout =~ /saving/ && Time.now() < end_time
sleep(10)
image_list = shell(list_command)
end
expect(image_list.stdout).to match(/cirros.*active/)
expect(image_list.exit_code).to eq(0)
end
it 'should be able to upload a keypair' do
shell('ssh-keygen -f ~/.ssh/id_rsa -q -N ""')
result = shell("#{credentials} openstack keypair create --public-key ~/.ssh/id_rsa.pub newkey")
expect(result.exit_code).to eq(0)
result = shell("#{credentials} openstack keypair list")
expect(result.stdout).to match('newkey')
expect(result.exit_code).to eq(0)
end
it 'should be able to boot a node' do
result = shell("#{credentials} openstack server create --flavor 1 --image cirros --key-name newkey testnode")
expect(result.exit_code).to eq(0)
sleep(8) # command returns immediately but node needs time to boot
result = shell("#{credentials} openstack server list")
expect(result.stdout).to match(/testnode.*ACTIVE/)
expect(result.exit_code).to eq(0)
end
end