Example #1
0
 def test_find_image_differences_all_diffs(self):
     images_with_all = copy.deepcopy(TEST_IMAGES)
     images_with_all.pop(0)
     images_with_all.pop(0)
     images_with_all.append(sb.ImageInput("Ubuntu", "aaab", "abce"))
     images_with_all.append(sb.ImageInput("SteamOS", "ffff", "uvwx"))
     self.assertEqual({'new': set(['SteamOS']),
                       'changed': set(['Ubuntu']),
                       'retired': set(['CentOS'])},
                      sb.find_image_differences(TEST_IMAGES,
                                                images_with_all))
Example #2
0
 def _setup_weights(self):
     self.NO_WEIGHTS = {}
     self.WEIGHTED_IMAGES = {
         'Ubuntu': 5,
         'CoreOS': 10,
         'Windows': 3,
         'Redhat': 2,
         'CentOS': 4,
         'Arch': 1,
         'TempleOS': 8,
         'Minix': 4
     }
     self.IMAGE_WEIGHT_SUM = sum(
         [w for i, w in six.iteritems(self.WEIGHTED_IMAGES)])
     self.EJECTION_IMAGES = [
         sb.ImageInput('Ubuntu', "aaaa", "abcd"),
         sb.ImageInput('CoreOS', "bbbb", "efgh"),
         sb.ImageInput('Windows', "cccc", "ijkl"),
         sb.ImageInput('Redhat', "dddd", "mnop"),
         sb.ImageInput('CentOS', "eeee", "qrst"),
         sb.ImageInput('Arch', "ffff", "uvwx"),
         sb.ImageInput('TempleOS', "gggg", "yzzy"),
         sb.ImageInput('Minix', "hhhh", "xwvu"),
     ]
     self.EJECTION_IMAGES_BY_NAME = {image.name: image
                                     for image in self.EJECTION_IMAGES}
Example #3
0
 def test_find_image_differences_new_images(self):
     images_with_new = copy.deepcopy(TEST_IMAGES)
     images_with_new.append(sb.ImageInput("SteamOS", "ffff", "uvwx"))
     self.assertEqual({'new': set(['SteamOS']),
                       'changed': set(),
                       'retired': set()},
                      sb.find_image_differences(TEST_IMAGES,
                                                images_with_new))
     images_with_new.append(sb.ImageInput("WindowsServer2012", "gggg",
                                          "yzab"))
     self.assertEqual({'new': set(["SteamOS", "WindowsServer2012"]),
                       'changed': set(),
                       'retired': set()},
                      sb.find_image_differences(TEST_IMAGES,
                                                images_with_new))
Example #4
0
 def test_find_image_differences_changed_images(self):
     images_with_changed = copy.deepcopy(TEST_IMAGES)
     images_with_changed.pop(0)
     images_with_changed.append(sb.ImageInput("Ubuntu", "aaab", "abce"))
     self.assertEqual({'new': set(),
                       'changed': set(['Ubuntu']),
                       'retired': set()},
                      sb.find_image_differences(TEST_IMAGES,
                                                images_with_changed))
     images_with_changed.pop(0)
     images_with_changed.append(sb.ImageInput("CentOS", "bbbc", "efgi"))
     self.assertEqual({'new': set(),
                       'changed': set(['Ubuntu', 'CentOS']),
                       'retired': set()},
                      sb.find_image_differences(TEST_IMAGES,
                                                images_with_changed))
Example #5
0
 def test_retrieve_image_data_only_returns_onmetal(self, wrapper_call_mock):
     wrapper_call_mock.return_value = TEST_GLANCE_IMAGE_DATA
     result = self.scout.retrieve_image_data()
     expected_images = ('ubuntu-14.04', 'ubuntu-14.10', 'coreos')
     expected_result = [
         strat_base.ImageInput(i, GLANCE_IMAGE_DATA_BY_NAME[i]['id'],
                               GLANCE_IMAGE_DATA_BY_NAME[i]['checksum'])
         for i in expected_images
     ]
     self.assertItemsEqual([e.name for e in expected_result],
                           [r.name for r in result],
                           "retrieve_image_data did not properly filter "
                           "for onmetal images!")
Example #6
0
from arsenal.tests.unit import base as test_base

CONF = cfg.CONF


def name_starts_with(node, letter):
    return node.node_uuid[0] == letter

TEST_FLAVORS = [
    sb.FlavorInput("IO", lambda node: name_starts_with(node, 'I')),
    sb.FlavorInput("Compute", lambda node: name_starts_with(node, 'C')),
    sb.FlavorInput("Memory", lambda node: name_starts_with(node, 'M')),
]

TEST_IMAGES = [
    sb.ImageInput("Ubuntu", "aaaa", "abcd"),
    sb.ImageInput("CentOS", "bbbb", "efgh"),
    sb.ImageInput("CoreOS", "cccc", "ijkl"),
    sb.ImageInput("Redhat", "dddd", "mnop"),
    sb.ImageInput("Windows", "eeee", "qrst")
]


class TestStrategyBase(test_base.TestCase):

    def setUp(self):
        super(TestStrategyBase, self).setUp()

    def test_find_image_differences_no_difference(self):
        empty_diff_dict = {'new': set(), 'changed': set(), 'retired': set()}
        self.assertEqual(empty_diff_dict,
Example #7
0
def convert_glance_image(glance_image):
    return sb.ImageInput(glance_image.get('name'), glance_image.get('id'),
                         glance_image.get('checksum'))
behavior appears to be correct.
"""

from __future__ import division
import random

from oslo_config import cfg

from arsenal.strategy import base as sb
from arsenal.strategy import simple_proportional_strategy as sps
from arsenal.tests import base as test_base
from arsenal.tests.strategy import test_strategy_base as sb_test

CONF = cfg.CONF

INVALID_IMAGE = sb.ImageInput("Windows95", "abcd", "uvwx")


class TestSimpleProportionalStrategy(test_base.TestCase):

    def setUp(self):
        super(TestSimpleProportionalStrategy, self).setUp()
        # Setup a few simple cases, that are mostly defaults.
        self.environments = {
            'one_unprovisioned_node_environment': {
                'nodes': [sb.NodeInput("caaa", "Compute", False, False, None)],
            },
            'one_provisioned_node_environment': {
                'nodes': [sb.NodeInput("caaa", "Compute", True, False, None)],
            },
            'two_node_environment': {
Example #9
0
        sb.CacheNode('node-e', 'image-e', 'checksum-e'),
        sb.EjectNode('node-f'),
        sb.EjectNode('node-g'),
        sb.EjectNode('node-h'),
        sb.EjectNode('node-i'),
        sb.EjectNode('node-J'),
    ]

FAKE_FLAVOR_DATA = [
    sb.FlavorInput('io-flavor', lambda n: True),
    sb.FlavorInput('memory-flavor', lambda n: True),
    sb.FlavorInput('cpu-flavor', lambda n: True)
]

FAKE_IMAGE_DATA = [
    sb.ImageInput('Ubuntu', 'aaaa', 'ubuntu-checksum'),
    sb.ImageInput('CoreOS', 'aaaa', 'coreos-checksum'),
    sb.ImageInput('ArchLinux', 'aaaa', 'archlinux-checksum')
]

FAKE_NODE_DATA = [
    sb.NodeInput('abcd', 'io-flavor', False, False),
    sb.NodeInput('hjkl', 'memory-flavor', False, False),
    sb.NodeInput('asdf', 'compute-flavor', False, False)
]


class TestScheduler(base.TestCase):

    @mock.patch.object(scheduler.DirectorScheduler, 'periodic_tasks')
    @mock.patch('arsenal.director.onmetal_scout.OnMetalV1Scout')