147 lines
5.9 KiB
Python
147 lines
5.9 KiB
Python
# 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 django.urls import reverse
|
|
from oslo_serialization import jsonutils
|
|
|
|
from openstack_dashboard import api as os_api
|
|
|
|
from sahara_dashboard import api
|
|
from sahara_dashboard.test import helpers as test
|
|
from sahara_dashboard.test.helpers import IsHttpRequest
|
|
|
|
|
|
INDEX_URL = reverse('horizon:project:data_processing.clusters:clusters-tab')
|
|
DETAILS_URL = reverse(
|
|
'horizon:project:data_processing.clusters:details', args=['id'])
|
|
|
|
|
|
class DataProcessingClusterTests(test.TestCase):
|
|
|
|
@test.create_mocks({api.sahara: ('cluster_template_list',
|
|
'image_list',
|
|
'cluster_list',
|
|
'nodegroup_template_list')})
|
|
def test_index(self):
|
|
self.mock_cluster_list.return_value = self.clusters.list()
|
|
res = self.client.get(INDEX_URL)
|
|
self.mock_cluster_list.assert_called_once_with(IsHttpRequest(), {})
|
|
self.assertTemplateUsed(res, 'clusters/index.html')
|
|
self.assertContains(res, 'Clusters')
|
|
self.assertContains(res, 'Name')
|
|
|
|
@test.create_mocks({api.sahara: ('cluster_template_list', 'image_list',
|
|
'plugin_get_version_details'),
|
|
os_api.neutron: ('network_list',),
|
|
os_api.nova: ('keypair_list',)})
|
|
def test_launch_cluster_get_nodata(self):
|
|
self.mock_cluster_template_list.return_value = []
|
|
self.mock_image_list.return_value = []
|
|
url = reverse(
|
|
'horizon:project:data_processing.clusters:configure-cluster')
|
|
res = self.client.get("%s?plugin_name=shoes&hadoop_version=1.1" % url)
|
|
self.mock_cluster_template_list.assert_called_once_with(
|
|
IsHttpRequest())
|
|
self.mock_image_list.assert_called_once_with(IsHttpRequest())
|
|
self.assertContains(res, "No Images Available")
|
|
self.assertContains(res, "No Templates Available")
|
|
|
|
@test.create_mocks({api.sahara: ('cluster_get',)})
|
|
def test_event_log_tab(self):
|
|
cluster = self.clusters.list()[-1]
|
|
self.mock_cluster_get.return_value = cluster
|
|
|
|
url = reverse(
|
|
'horizon:project:data_processing.clusters:events', args=["cl2"])
|
|
res = self.client.get(url)
|
|
data = jsonutils.loads(res.content)
|
|
|
|
self.mock_cluster_get.assert_called_once_with(
|
|
IsHttpRequest(), "cl2", show_progress=True)
|
|
self.assertIn("provision_steps", data)
|
|
self.assertEqual(data["need_update"], False)
|
|
|
|
step_0 = data["provision_steps"][0]
|
|
self.assertEqual(2, step_0["completed"])
|
|
self.assertEqual(2, len(step_0["events"]))
|
|
for evt in step_0["events"]:
|
|
self.assertEqual(True, evt["successful"])
|
|
|
|
step_1 = data["provision_steps"][1]
|
|
self.assertEqual(3, step_1["completed"])
|
|
self.assertEqual(0, len(step_1["events"]))
|
|
|
|
@test.create_mocks({api.sahara: ('cluster_get', )})
|
|
def test_health_checks_tab_sc1(self):
|
|
cluster = self.clusters.list()[-1]
|
|
self.mock_cluster_get.return_value = cluster
|
|
|
|
url = reverse(
|
|
'horizon:project:data_processing.clusters:verifications',
|
|
args=["cl2"])
|
|
res = self.client.get(url)
|
|
data = jsonutils.loads(res.content)
|
|
|
|
self.mock_cluster_get.assert_called_once_with(
|
|
IsHttpRequest(), "cl2")
|
|
self.assertFalse(data['need_update'])
|
|
check0 = data['checks'][0]
|
|
check1 = data['checks'][1]
|
|
self.assertEqual('success', check0['label'])
|
|
self.assertEqual('danger', check1['label'])
|
|
|
|
self.assertEqual('GREEN', check0['status'])
|
|
self.assertEqual('RED', check1['status'])
|
|
self.assertEqual('0:07:40', check0['duration'])
|
|
|
|
@test.create_mocks({api.sahara: ('cluster_get', )})
|
|
def test_health_checks_tab_sc2(self):
|
|
cluster = self.clusters.list()[0]
|
|
cl1_id = 'ec9a0d28-5cfb-4028-a0b5-40afe23f1533'
|
|
self.mock_cluster_get.return_value = cluster
|
|
|
|
url = reverse(
|
|
'horizon:project:data_processing.clusters:verifications',
|
|
args=[cl1_id])
|
|
res = self.client.get(url)
|
|
data = jsonutils.loads(res.content)
|
|
|
|
self.mock_cluster_get.assert_called_once_with(
|
|
IsHttpRequest(), cl1_id)
|
|
self.assertTrue(data['need_update'])
|
|
check0 = data['checks'][0]
|
|
check1 = data['checks'][1]
|
|
self.assertEqual('info', check0['label'])
|
|
self.assertEqual('danger', check1['label'])
|
|
|
|
self.assertEqual('CHECKING', check0['status'])
|
|
self.assertEqual('RED', check1['status'])
|
|
self.assertEqual('Houston, we have a problem', check1['description'])
|
|
|
|
@test.create_mocks({api.sahara: ('cluster_list',
|
|
'cluster_delete')})
|
|
def test_delete(self):
|
|
cluster = self.clusters.first()
|
|
self.mock_cluster_list.return_value = self.clusters.list()
|
|
self.mock_cluster_delete.return_value = None
|
|
|
|
form_data = {'action': 'clusters__delete__%s' % cluster.id}
|
|
res = self.client.post(INDEX_URL, form_data)
|
|
|
|
self.mock_cluster_list.assert_called_once_with(
|
|
IsHttpRequest(), {})
|
|
self.mock_cluster_delete.assert_called_once_with(
|
|
IsHttpRequest(), cluster.id)
|
|
self.assertNoFormErrors(res)
|
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
|
self.assertMessageCount(success=1)
|