Esempio n. 1
0
    def test_notify_triggers_end_timestamp_none(self):
        liveaction_db = LiveActionDB(action='core.local')
        liveaction_db.id = bson.ObjectId()
        liveaction_db.description = ''
        liveaction_db.status = 'succeeded'
        liveaction_db.parameters = {}
        on_success = NotificationSubSchema(message='Action succeeded.')
        on_failure = NotificationSubSchema(message='Action failed.')
        liveaction_db.notify = NotificationSchema(on_success=on_success,
                                                  on_failure=on_failure)
        liveaction_db.start_timestamp = date_utils.get_datetime_utc_now()

        # This tests for end_timestamp being set to None, which can happen when a policy cancels
        # a request.
        # The assertions within "MockDispatcher.dispatch" will validate that the underlying code
        # handles this properly, so all we need to do is keep the call to "notifier.process" below
        liveaction_db.end_timestamp = None
        LiveAction.add_or_update(liveaction_db)

        execution = MOCK_EXECUTION
        execution.liveaction = vars(LiveActionAPI.from_model(liveaction_db))
        execution.status = liveaction_db.status

        dispatcher = NotifierTestCase.MockDispatcher(self)
        notifier = Notifier(connection=None,
                            queues=[],
                            trigger_dispatcher=dispatcher)
        notifier.process(execution)
    def test_liveaction_create_with_notify_on_success_only(self):
        created = LiveActionDB()
        created.action = 'core.local'
        created.description = ''
        created.status = 'running'
        created.parameters = {}
        notify_db = NotificationSchema()
        notify_sub_schema = NotificationSubSchema()
        notify_sub_schema.message = 'Action succeeded.'
        notify_sub_schema.data = {'foo': 'bar', 'bar': 1, 'baz': {'k1': 'v1'}}
        notify_db.on_success = notify_sub_schema
        created.notify = notify_db
        saved = LiveActionModelTest._save_liveaction(created)
        retrieved = LiveAction.get_by_id(saved.id)
        self.assertEqual(saved.action, retrieved.action,
                         'Same triggertype was not returned.')

        # Assert notify settings saved are right.
        self.assertEqual(notify_sub_schema.message,
                         retrieved.notify.on_success.message)
        self.assertDictEqual(notify_sub_schema.data,
                             retrieved.notify.on_success.data)
        self.assertListEqual(notify_sub_schema.routes,
                             retrieved.notify.on_success.routes)
        self.assertEqual(retrieved.notify.on_failure, None)
        self.assertEqual(retrieved.notify.on_complete, None)
Esempio n. 3
0
    def test_liveaction_create_with_notify_on_success_only(self):
        created = LiveActionDB()
        created.action = 'core.local'
        created.description = ''
        created.status = 'running'
        created.parameters = {}
        notify_db = NotificationSchema()
        notify_sub_schema = NotificationSubSchema()
        notify_sub_schema.message = 'Action succeeded.'
        notify_sub_schema.data = {
            'foo': 'bar',
            'bar': 1,
            'baz': {'k1': 'v1'}
        }
        notify_db.on_success = notify_sub_schema
        created.notify = notify_db
        saved = LiveActionModelTest._save_liveaction(created)
        retrieved = LiveAction.get_by_id(saved.id)
        self.assertEqual(saved.action, retrieved.action,
                         'Same triggertype was not returned.')

        # Assert notify settings saved are right.
        self.assertEqual(notify_sub_schema.message,
                         retrieved.notify.on_success.message)
        self.assertDictEqual(notify_sub_schema.data, retrieved.notify.on_success.data)
        self.assertListEqual(notify_sub_schema.routes, retrieved.notify.on_success.routes)
        self.assertEqual(retrieved.notify.on_failure, None)
        self.assertEqual(retrieved.notify.on_complete, None)
Esempio n. 4
0
    def test_liveaction_create_with_notify_on_success_only(self):
        created = LiveActionDB()
        created.action = "core.local"
        created.description = ""
        created.status = "running"
        created.parameters = {}
        notify_db = NotificationSchema()
        notify_sub_schema = NotificationSubSchema()
        notify_sub_schema.message = "Action succeeded."
        notify_sub_schema.data = {"foo": "bar", "bar": 1, "baz": {"k1": "v1"}}
        notify_db.on_success = notify_sub_schema
        created.notify = notify_db
        saved = LiveActionModelTest._save_liveaction(created)
        retrieved = LiveAction.get_by_id(saved.id)
        self.assertEqual(saved.action, retrieved.action,
                         "Same triggertype was not returned.")

        # Assert notify settings saved are right.
        self.assertEqual(notify_sub_schema.message,
                         retrieved.notify.on_success.message)
        self.assertDictEqual(notify_sub_schema.data,
                             retrieved.notify.on_success.data)
        self.assertListEqual(notify_sub_schema.routes,
                             retrieved.notify.on_success.routes)
        self.assertEqual(retrieved.notify.on_failure, None)
        self.assertEqual(retrieved.notify.on_complete, None)
Esempio n. 5
0
 def _to_model_sub_schema(notification_settings_json):
     notify_sub_schema = NotificationSubSchema()
     notify_sub_schema.message = notification_settings_json.get('message'
                                                                or None)
     notify_sub_schema.data = notification_settings_json.get('data' or {})
     notify_sub_schema.channels = notification_settings_json.get('channels'
                                                                 or [])
     return notify_sub_schema
Esempio n. 6
0
 def _get_notify_field(self, payload):
     on_complete = NotificationSubSchema()
     on_complete.channels = [payload.notification_channel]
     on_complete.data = {
         'user': payload.user,
         'source_channel': payload.source_channel
     }
     notify = NotificationSchema()
     notify.on_complete = on_complete
     return notify
Esempio n. 7
0
 def _get_notify_field(self, payload):
     on_complete = NotificationSubSchema()
     on_complete.channels = [payload.notification_channel]
     on_complete.data = {
         'user': payload.user,
         'source_channel': payload.source_channel
     }
     notify = NotificationSchema()
     notify.on_complete = on_complete
     return notify
Esempio n. 8
0
 def _get_notify_field(self, payload):
     on_complete = NotificationSubSchema()
     route = (getattr(payload, 'notification_route', None)
              or getattr(payload, 'notification_channel', None))
     on_complete.routes = [route]
     on_complete.data = {
         'user': payload.user,
         'source_channel': payload.source_channel
     }
     notify = NotificationSchema()
     notify.on_complete = on_complete
     return notify
Esempio n. 9
0
 def _get_notify_field(self, payload):
     on_complete = NotificationSubSchema()
     route = (getattr(payload, 'notification_route', None) or
              getattr(payload, 'notification_channel', None))
     on_complete.routes = [route]
     on_complete.data = {
         'user': payload.user,
         'source_channel': payload.source_channel
     }
     notify = NotificationSchema()
     notify.on_complete = on_complete
     return notify
Esempio n. 10
0
 def _get_notify_field(self, payload):
     on_complete = NotificationSubSchema()
     route = getattr(payload, "notification_route", None) or getattr(
         payload, "notification_channel", None)
     on_complete.routes = [route]
     on_complete.data = {
         "user": payload.user,
         "source_channel": payload.source_channel,
         "source_context": getattr(payload, "source_context", None),
     }
     notify = NotificationSchema()
     notify.on_complete = on_complete
     return notify
Esempio n. 11
0
    def test_notify_triggers(self):
        liveaction = LiveActionDB(action='core.local')
        liveaction.description = ''
        liveaction.status = 'succeeded'
        liveaction.parameters = {}
        on_success = NotificationSubSchema(message='Action succeeded.')
        on_failure = NotificationSubSchema(message='Action failed.')
        liveaction.notify = NotificationSchema(on_success=on_success,
                                               on_failure=on_failure)
        liveaction.start_timestamp = date_utils.get_datetime_utc_now()

        dispatcher = NotifierTestCase.MockDispatcher(self)
        notifier = Notifier(connection=None, queues=[], trigger_dispatcher=dispatcher)
        notifier.process(liveaction)
Esempio n. 12
0
    def test_action_with_notify_crud(self):
        runnertype = self._create_save_runnertype(metadata=False)
        saved = self._create_save_action(runnertype, metadata=False)

        # Update action with notification settings
        on_complete = NotificationSubSchema(message='Action complete.')
        saved.notify = NotificationSchema(on_complete=on_complete)
        saved = Action.add_or_update(saved)

        # Check if notification settings were set correctly.
        retrieved = Action.get_by_id(saved.id)
        self.assertEqual(retrieved.notify.on_complete.message, on_complete.message)

        # Now reset notify in action to empty and validate it's gone.
        retrieved.notify = NotificationSchema(on_complete=None)
        saved = Action.add_or_update(retrieved)
        retrieved = Action.get_by_id(saved.id)
        self.assertEqual(retrieved.notify.on_complete, None)

        # cleanup
        self._delete([retrieved])
        try:
            retrieved = Action.get_by_id(saved.id)
        except StackStormDBObjectNotFoundError:
            retrieved = None
        self.assertIsNone(retrieved, 'managed to retrieve after failure.')
Esempio n. 13
0
    def test_notify_triggers_jinja_patterns(self, dispatch):
        liveaction_db = LiveActionDB(action='core.local')
        liveaction_db.id = bson.ObjectId()
        liveaction_db.description = ''
        liveaction_db.status = 'succeeded'
        liveaction_db.parameters = {'cmd': 'mamma mia', 'runner_foo': 'foo'}
        on_success = NotificationSubSchema(message='Command {{action_parameters.cmd}} succeeded.',
                                           data={'stdout': '{{action_results.stdout}}'})
        liveaction_db.notify = NotificationSchema(on_success=on_success)
        liveaction_db.start_timestamp = date_utils.get_datetime_utc_now()
        liveaction_db.end_timestamp = \
            (liveaction_db.start_timestamp + datetime.timedelta(seconds=50))

        LiveAction.add_or_update(liveaction_db)

        execution = MOCK_EXECUTION
        execution.liveaction = vars(LiveActionAPI.from_model(liveaction_db))
        execution.status = liveaction_db.status

        notifier = Notifier(connection=None, queues=[])
        notifier.process(execution)
        exp = {'status': 'succeeded',
               'start_timestamp': isotime.format(liveaction_db.start_timestamp),
               'route': 'notify.default', 'runner_ref': 'local-shell-cmd',
               'channel': 'notify.default', 'message': u'Command mamma mia succeeded.',
               'data': {'result': '{}', 'stdout': 'stuff happens'},
               'action_ref': u'core.local',
               'execution_id': str(MOCK_EXECUTION.id),
               'end_timestamp': isotime.format(liveaction_db.end_timestamp)}
        dispatch.assert_called_once_with('core.st2.generic.notifytrigger', payload=exp,
                                         trace_context={})
        notifier.process(execution)
Esempio n. 14
0
    def _to_model_sub_schema(notification_settings_json):
        message = notification_settings_json.get('message' or None)
        data = notification_settings_json.get('data' or {})
        routes = (notification_settings_json.get('routes') or
                  notification_settings_json.get('channels', []))

        model = NotificationSubSchema(message=message, data=data, routes=routes)
        return model
Esempio n. 15
0
 def test_liveaction_create_with_notify_both_on_success_and_on_error(self):
     created = LiveActionDB()
     created.action = 'core.local'
     created.description = ''
     created.status = 'running'
     created.parameters = {}
     on_success = NotificationSubSchema(message='Action succeeded.')
     on_failure = NotificationSubSchema(message='Action failed.')
     created.notify = NotificationSchema(on_success=on_success,
                                         on_failure=on_failure)
     saved = LiveActionModelTest._save_liveaction(created)
     retrieved = LiveAction.get_by_id(saved.id)
     self.assertEqual(saved.action, retrieved.action,
                      'Same triggertype was not returned.')
     # Assert notify settings saved are right.
     self.assertEqual(on_success.message, retrieved.notify.on_success.message)
     self.assertEqual(on_failure.message, retrieved.notify.on_failure.message)
     self.assertEqual(retrieved.notify.on_complete, None)
Esempio n. 16
0
    def _to_model_sub_schema(notification_settings_json):
        message = notification_settings_json.get("message", None)
        data = notification_settings_json.get("data", {})
        routes = notification_settings_json.get(
            "routes", None) or notification_settings_json.get("channels", [])

        model = NotificationSubSchema(message=message,
                                      data=data,
                                      routes=routes)
        return model
Esempio n. 17
0
    def test_notify_triggers(self):
        liveaction_db = LiveActionDB(action='core.local')
        liveaction_db.id = bson.ObjectId()
        liveaction_db.description = ''
        liveaction_db.status = 'succeeded'
        liveaction_db.parameters = {}
        on_success = NotificationSubSchema(message='Action succeeded.')
        on_failure = NotificationSubSchema(message='Action failed.')
        liveaction_db.notify = NotificationSchema(on_success=on_success,
                                                  on_failure=on_failure)
        liveaction_db.start_timestamp = date_utils.get_datetime_utc_now()
        liveaction_db.end_timestamp = \
            (liveaction_db.start_timestamp + datetime.timedelta(seconds=50))
        LiveAction.add_or_update(liveaction_db)

        execution = MOCK_EXECUTION
        execution.liveaction = vars(LiveActionAPI.from_model(liveaction_db))
        execution.status = liveaction_db.status

        dispatcher = NotifierTestCase.MockDispatcher(self)
        notifier = Notifier(connection=None, queues=[], trigger_dispatcher=dispatcher)
        notifier.process(execution)
Esempio n. 18
0
    def test_notify_triggers_jinja_patterns(self, dispatch):
        liveaction_db = LiveActionDB(action="core.local")
        liveaction_db.id = bson.ObjectId()
        liveaction_db.description = ""
        liveaction_db.status = "succeeded"
        liveaction_db.parameters = {"cmd": "mamma mia", "runner_foo": "foo"}
        on_success = NotificationSubSchema(
            message="Command {{action_parameters.cmd}} succeeded.",
            data={"stdout": "{{action_results.stdout}}"},
        )
        liveaction_db.notify = NotificationSchema(on_success=on_success)
        liveaction_db.start_timestamp = date_utils.get_datetime_utc_now()
        liveaction_db.end_timestamp = (liveaction_db.start_timestamp +
                                       datetime.timedelta(seconds=50))

        LiveAction.add_or_update(liveaction_db)

        execution = MOCK_EXECUTION
        execution.liveaction = vars(LiveActionAPI.from_model(liveaction_db))
        execution.status = liveaction_db.status

        notifier = Notifier(connection=None, queues=[])
        notifier.process(execution)
        exp = {
            "status": "succeeded",
            "start_timestamp": isotime.format(liveaction_db.start_timestamp),
            "route": "notify.default",
            "runner_ref": "local-shell-cmd",
            "channel": "notify.default",
            "message": "Command mamma mia succeeded.",
            "data": {
                "result": "{}",
                "stdout": "stuff happens"
            },
            "action_ref": "core.local",
            "execution_id": str(MOCK_EXECUTION.id),
            "end_timestamp": isotime.format(liveaction_db.end_timestamp),
        }
        dispatch.assert_called_once_with("core.st2.generic.notifytrigger",
                                         payload=exp,
                                         trace_context={})
        notifier.process(execution)
Esempio n. 19
0
 def _to_model_sub_schema(notification_settings_json):
     notify_sub_schema = NotificationSubSchema()
     notify_sub_schema.message = notification_settings_json.get('message' or None)
     notify_sub_schema.data = notification_settings_json.get('data' or {})
     notify_sub_schema.channels = notification_settings_json.get('channels' or [])
     return notify_sub_schema