mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 08:58:59 +00:00
90 lines
2.8 KiB
Python
90 lines
2.8 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
|
|
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,
|
|
'digital_ocean.conf')
|
|
self.provider_name = 'digitalocean-config'
|
|
self.image_name = '14.04.5 x64'
|
|
|
|
# Use a --list-images salt-cloud call to see if the Digital Ocean 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)
|