salt/tests/integration/cloud/test_cloud.py
2018-01-04 13:39:59 -06:00

90 lines
2.9 KiB
Python

# -*- coding: utf-8 -*-
'''
Integration tests for functions located in the salt.cloud.__init__.py file.
'''
# Import Python Libs
from __future__ import absolute_import, print_function, unicode_literals
import os
import random
import string
# Import Salt Testing libs
from tests.support.case import ShellCase
from tests.support.helpers import expensiveTest
from tests.support.runtests import RUNTIME_VARS
# Import Salt libs
import salt.cloud
from salt.ext.six.moves import range
def __random_name(size=6):
'''
Generates a random cloud instance name
'''
return 'CLOUD-TEST-' + ''.join(
random.choice(string.ascii_uppercase + string.digits)
for x in range(size)
)
# Create the cloud instance name to be used throughout the tests
INSTANCE_NAME = __random_name()
class CloudClientTestCase(ShellCase):
'''
Integration tests for the CloudClient class. Uses DigitalOcean as a salt-cloud provider.
'''
@expensiveTest
def setUp(self):
self.config_file = os.path.join(RUNTIME_VARS.TMP_CONF_CLOUD_PROVIDER_INCLUDES,
'digitalocean.conf')
self.provider_name = 'digitalocean-config'
self.image_name = '14.04.5 x64'
# Use a --list-images salt-cloud call to see if the DigitalOcean provider is
# configured correctly before running any tests.
images = self.run_cloud('--list-images {0}'.format(self.provider_name))
if self.image_name not in [i.strip() for i in images]:
self.skipTest(
'Image \'{0}\' was not found in image search. Is the {1} provider '
'configured correctly for this test?'.format(
self.provider_name,
self.image_name
)
)
def test_cloud_client_create_and_delete(self):
'''
Tests that a VM is created successfully when calling salt.cloud.CloudClient.create(),
which does not require a profile configuration.
Also checks that salt.cloud.CloudClient.destroy() works correctly since this test needs
to remove the VM after creating it.
This test was created as a regression check against Issue #41971.
'''
cloud_client = salt.cloud.CloudClient(self.config_file)
# Create the VM using salt.cloud.CloudClient.create() instead of calling salt-cloud
created = cloud_client.create(
provider=self.provider_name,
names=[INSTANCE_NAME],
image=self.image_name,
location='sfo1',
size='512mb',
vm_size='512mb'
)
# Check that the VM was created correctly
self.assertIn(INSTANCE_NAME, created)
# Clean up after ourselves and delete the VM
deleted = cloud_client.destroy(names=[INSTANCE_NAME])
# Check that the VM was deleted correctly
self.assertIn(INSTANCE_NAME, deleted)