124 lines
4.7 KiB
Python
124 lines
4.7 KiB
Python
# Copyright (c) 2015 Intel Inc.
|
|
#
|
|
# 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.
|
|
|
|
import mock
|
|
|
|
from sahara import conductor
|
|
from sahara import context
|
|
from sahara.tests.unit import base
|
|
from sahara.tests.unit.conductor import test_api
|
|
from sahara.utils import cluster as cluster_utils
|
|
|
|
|
|
class UtilsClusterTest(base.SaharaWithDbTestCase):
|
|
def setUp(self):
|
|
super(UtilsClusterTest, self).setUp()
|
|
self.api = conductor.API
|
|
|
|
def _make_sample(self):
|
|
ctx = context.ctx()
|
|
cluster = self.api.cluster_create(ctx, test_api.SAMPLE_CLUSTER)
|
|
return cluster
|
|
|
|
def test_change_cluster_status(self):
|
|
cluster = self._make_sample()
|
|
cluster = cluster_utils.change_cluster_status(
|
|
cluster, cluster_utils.CLUSTER_STATUS_DELETING, "desc")
|
|
self.assertEqual(cluster_utils.CLUSTER_STATUS_DELETING, cluster.status)
|
|
self.assertEqual("desc", cluster.status_description)
|
|
cluster_utils.change_cluster_status(
|
|
cluster, cluster_utils.CLUSTER_STATUS_SPAWNING)
|
|
self.assertEqual(cluster_utils.CLUSTER_STATUS_DELETING, cluster.status)
|
|
|
|
def test_change_status_description(self):
|
|
ctx = context.ctx()
|
|
cluster = self._make_sample()
|
|
cluster_id = cluster.id
|
|
cluster = cluster_utils.change_cluster_status_description(
|
|
cluster, "desc")
|
|
self.assertEqual('desc', cluster.status_description)
|
|
self.api.cluster_destroy(ctx, cluster)
|
|
cluster = cluster_utils.change_cluster_status_description(
|
|
cluster_id, "desc")
|
|
self.assertIsNone(cluster)
|
|
|
|
def test_get_instances(self):
|
|
cluster = self._make_sample()
|
|
ctx = context.ctx()
|
|
idx = 0
|
|
ids = []
|
|
for ng in cluster.node_groups:
|
|
for i in range(ng.count):
|
|
idx += 1
|
|
ids.append(self.api.instance_add(ctx, ng, {
|
|
'instance_id': str(idx),
|
|
'instance_name': str(idx),
|
|
}))
|
|
cluster = self.api.cluster_get(ctx, cluster)
|
|
instances = cluster_utils.get_instances(cluster, ids)
|
|
ids = set()
|
|
for inst in instances:
|
|
ids.add(inst.instance_id)
|
|
self.assertEqual(idx, len(ids))
|
|
for i in range(1, idx):
|
|
self.assertIn(str(i), ids)
|
|
|
|
instances = cluster_utils.get_instances(cluster)
|
|
ids = set()
|
|
for inst in instances:
|
|
ids.add(inst.instance_id)
|
|
self.assertEqual(idx, len(ids))
|
|
for i in range(1, idx):
|
|
self.assertIn(str(i), ids)
|
|
|
|
def test_clean_cluster_from_empty_ng(self):
|
|
ctx = context.ctx()
|
|
cluster = self._make_sample()
|
|
ng = cluster.node_groups[0]
|
|
ng_len = len(cluster.node_groups)
|
|
self.api.node_group_update(ctx, ng, {'count': 0})
|
|
cluster = self.api.cluster_get(ctx, cluster.id)
|
|
cluster_utils.clean_cluster_from_empty_ng(cluster)
|
|
cluster = self.api.cluster_get(ctx, cluster.id)
|
|
self.assertEqual(ng_len - 1, len(cluster.node_groups))
|
|
|
|
def test_generate_etc_hosts(self):
|
|
cluster = self._make_sample()
|
|
ctx = context.ctx()
|
|
idx = 0
|
|
for ng in cluster.node_groups:
|
|
for i in range(ng.count):
|
|
idx += 1
|
|
self.api.instance_add(ctx, ng, {
|
|
'instance_id': str(idx),
|
|
'instance_name': str(idx),
|
|
'internal_ip': str(idx),
|
|
})
|
|
cluster = self.api.cluster_get(ctx, cluster)
|
|
with mock.patch("sahara.utils.openstack.base.url_for") as mock_url:
|
|
mock_url.side_effect = ["http://keystone.local:1234/v13",
|
|
"http://swift.local:5678/v42"]
|
|
with mock.patch("socket.gethostbyname") as mock_get_host:
|
|
mock_get_host.side_effect = ["1.2.3.4", "5.6.7.8"]
|
|
value = cluster_utils.generate_etc_hosts(cluster)
|
|
expected = ("127.0.0.1 localhost\n"
|
|
"1 1.novalocal 1\n"
|
|
"2 2.novalocal 2\n"
|
|
"3 3.novalocal 3\n"
|
|
"4 4.novalocal 4\n"
|
|
"1.2.3.4 keystone.local\n"
|
|
"5.6.7.8 swift.local\n")
|
|
self.assertEqual(expected, value)
|