153 lines
5.9 KiB
Python
153 lines
5.9 KiB
Python
# Copyright 2016 Canonical Ltd
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed 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.
|
|
|
|
from pylxd import client
|
|
|
|
from tempest.api.compute import base
|
|
from tempest import config
|
|
from tempest.lib.common.utils import data_utils
|
|
|
|
CONF = config.CONF
|
|
|
|
|
|
class LXDServersTestJSON(base.BaseV2ComputeAdminTest):
|
|
disk_config = 'AUTO'
|
|
|
|
@classmethod
|
|
def setup_credentials(cls):
|
|
cls.prepare_instance_network()
|
|
super(LXDServersTestJSON, cls).setup_credentials()
|
|
|
|
@classmethod
|
|
def setup_clients(cls):
|
|
super(LXDServersTestJSON, cls).setup_clients()
|
|
cls.lxd = client.Client()
|
|
cls.client = cls.os_admin.servers_client
|
|
cls.flavors_client = cls.os_admin.flavors_client
|
|
|
|
@classmethod
|
|
def resource_setup(cls):
|
|
cls.set_validation_resources()
|
|
super(LXDServersTestJSON, cls).resource_setup()
|
|
cls.meta = {'hello': 'world'}
|
|
cls.accessIPv4 = '1.1.1.1'
|
|
cls.accessIPv6 = '0000:0000:0000:0000:0000:babe:220.12.22.2'
|
|
cls.name = data_utils.rand_name(cls.__name__ + '-server')
|
|
cls.password = data_utils.rand_password()
|
|
disk_config = cls.disk_config
|
|
cls.server_initial = cls.create_test_server(
|
|
validatable=True,
|
|
wait_until='ACTIVE',
|
|
name=cls.name,
|
|
metadata=cls.meta,
|
|
accessIPv4=cls.accessIPv4,
|
|
accessIPv6=cls.accessIPv6,
|
|
disk_config=disk_config,
|
|
adminPass=cls.password)
|
|
cls.server = (
|
|
cls.client.show_server(cls.server_initial['id'])['server'])
|
|
|
|
def test_profile_configuration(self):
|
|
# Verify that the profile was created
|
|
profile = self.lxd.profiles.get(
|
|
self.server['OS-EXT-SRV-ATTR:instance_name'])
|
|
|
|
self.assertEqual(
|
|
self.server['OS-EXT-SRV-ATTR:instance_name'], profile.name)
|
|
|
|
self.assertIn('raw.lxc', profile.config)
|
|
self.assertIn('boot.autostart', profile.config)
|
|
self.assertIn('limits.cpu', profile.config)
|
|
self.assertIn('limits.memory', profile.config)
|
|
|
|
self.assertIn('root', profile.devices)
|
|
|
|
def test_verify_created_server_vcpus(self):
|
|
# Verify that the number of vcpus reported by the instance matches
|
|
# the amount stated by the flavor
|
|
flavor = self.flavors_client.show_flavor(self.flavor_ref)['flavor']
|
|
|
|
profile = self.lxd.profiles.get(
|
|
self.server['OS-EXT-SRV-ATTR:instance_name'])
|
|
self.assertEqual(
|
|
'%s' % flavor['vcpus'], profile.config['limits.cpu'])
|
|
|
|
def test_verify_created_server_memory(self):
|
|
# Verify that the memory reported by the instance matches
|
|
# the amount stated by the flavor
|
|
flavor = self.flavors_client.show_flavor(self.flavor_ref)['flavor']
|
|
|
|
profile = self.lxd.profiles.get(
|
|
self.server['OS-EXT-SRV-ATTR:instance_name'])
|
|
self.assertEqual(
|
|
'%sMB' % flavor['ram'], profile.config['limits.memory'])
|
|
|
|
def test_verify_server_root_size(self):
|
|
flavor = self.flavors_client.show_flavor(self.flavor_ref)['flavor']
|
|
|
|
profile = self.lxd.profiles.get(
|
|
self.server['OS-EXT-SRV-ATTR:instance_name'])
|
|
self.assertEqual(
|
|
'%sGB' % flavor['disk'], profile.devices['root']['size'])
|
|
|
|
def test_verify_console_log(self):
|
|
# Verify that the console log for the container exists
|
|
profile = self.lxd.profiles.get(
|
|
self.server['OS-EXT-SRV-ATTR:instance_name'])
|
|
self.assertIn('lxc.console.logfile', profile.config['raw.lxc'])
|
|
|
|
def test_verify_network_configuration(self):
|
|
# Verify network is configured for the instance
|
|
profile = self.lxd.profiles.get(
|
|
self.server['OS-EXT-SRV-ATTR:instance_name'])
|
|
for device in profile.devices:
|
|
if 'root' not in device:
|
|
network_device = device
|
|
self.assertEqual('nic', profile.devices[network_device]['type'])
|
|
self.assertEqual('bridged', profile.devices[network_device]['nictype'])
|
|
self.assertEqual(
|
|
network_device, profile.devices[network_device]['parent'])
|
|
|
|
def test_container_configuration_valid(self):
|
|
# Verify container configuration is correct
|
|
profile = self.lxd.profiles.get(
|
|
self.server['OS-EXT-SRV-ATTR:instance_name'])
|
|
container = self.lxd.containers.get(
|
|
self.server['OS-EXT-SRV-ATTR:instance_name'])
|
|
flavor = self.flavors_client.show_flavor(self.flavor_ref)['flavor']
|
|
|
|
self.assertEqual(profile.name, container.profiles[0])
|
|
self.assertIn('raw.lxc', container.expanded_config)
|
|
self.assertEqual(
|
|
'%s' % flavor['vcpus'], container.expanded_config['limits.cpu'])
|
|
self.assertEqual(
|
|
'%sMB' % flavor['ram'], container.expanded_config['limits.memory'])
|
|
|
|
self.assertEqual(
|
|
'%sGB' % flavor['disk'],
|
|
container.expanded_devices['root']['size'])
|
|
|
|
for device in profile.devices:
|
|
if 'root' not in device:
|
|
network_device = device
|
|
self.assertIn(network_device, container.expanded_devices)
|
|
self.assertEqual(
|
|
'nic', container.expanded_devices[network_device]['type'])
|
|
self.assertEqual(
|
|
'bridged', container.expanded_devices[network_device]['nictype'])
|
|
self.assertEqual(
|
|
network_device,
|
|
container.expanded_devices[network_device]['parent'])
|