masakari/masakari/tests/functional/test_process_notifications.py

121 lines
4.9 KiB
Python

# Copyright (C) 2019 NTT DATA
# All Rights Reserved.
#
# 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 oslo_utils import timeutils
from masakari.objects import fields
from masakari.tests.functional import notification_base as base
class NotificationProcessTestCase(base.NotificationTestBase):
NOTIFICATION_TYPE = "PROCESS"
NOTIFICATION_WAIT_INTERVAL = 1
NOTIFICATION_WAIT_PERIOD = 120
def setUp(self, ha_api_version="1.0"):
super(NotificationProcessTestCase, self).setUp(ha_api_version)
def _test_create_notification_event_stopped(self):
# Test to create notification for process with 'STOPPED' event type
notification = self.admin_conn.ha.create_notification(
type=self.NOTIFICATION_TYPE, hostname=self.host.name,
generated_time=timeutils.utcnow().replace(microsecond=0),
payload={"process_name": "nova-compute",
"event": fields.EventType.STOPPED})
self.check_notification_status(notification,
self.NOTIFICATION_WAIT_INTERVAL,
self.NOTIFICATION_WAIT_PERIOD)
notification = self.admin_conn.ha.get_notification(
notification.notification_uuid)
self.assertEqual(fields.NotificationStatus.FINISHED,
notification.status)
host = self.admin_conn.ha.get_host(self.host.uuid,
self.segment.uuid)
self.assertEqual(True, host.on_maintenance)
services = self.admin_conn.compute.services()
for service in services:
if service.binary == 'nova-compute':
if service.host == self.host.name:
# Enable n-cpu service which is disabled during
# DisableComputeNodetask of process recovery notification
# created above.
self.admin_conn.compute.enable_service(service,
service.host,
service.binary)
return notification
def _test_create_notification_event_start(self):
# Test to create notification for process with 'STARTED' event type
notification = self.admin_conn.ha.create_notification(
type=self.NOTIFICATION_TYPE, hostname=self.host.name,
generated_time=timeutils.utcnow().replace(microsecond=0),
payload={"process_name": "nova-compute",
"event": fields.EventType.STARTED})
self.check_notification_status(notification,
self.NOTIFICATION_WAIT_INTERVAL,
self.NOTIFICATION_WAIT_PERIOD)
notification = self.admin_conn.ha.get_notification(
notification.notification_uuid)
self.assertEqual(fields.NotificationStatus.FINISHED,
notification.status)
return notification
def test_create_notification_event_stopped(self):
# Test to create notification for process with 'STOPPED' event type
self._test_create_notification_event_stopped()
def test_create_notification_event_start(self):
# Test to create notification for process with 'STARTED' event type
self._test_create_notification_event_start()
class NotificationProcessTestCase_V1_1(NotificationProcessTestCase):
def setUp(self):
super(NotificationProcessTestCase, self).setUp("1.1")
def test_create_notification_event_stopped(self):
# Test to create notification for process with 'STOPPED' event type
notification = self._test_create_notification_event_stopped()
self.assertIsNotNone(notification.recovery_workflow_details)
recovery_details = notification.recovery_workflow_details
# check the status of each task is successful
for details in recovery_details:
self.assertEqual("SUCCESS", details.state)
def test_create_notification_event_start(self):
# Test to create notification for process with 'STARTED' event type
notification = self._test_create_notification_event_start()
self.assertIsNotNone(notification.recovery_workflow_details)
recovery_details = notification.recovery_workflow_details
# check the status of each task is successful
for details in recovery_details:
self.assertEqual("SUCCESS", details.state)