Ejemplo n.º 1
0
    def test_required_field(self):
        config = MonitorConfig({"foo": 10})

        self.assertEquals(config.get("foo", required_field=True), 10)
        self.assertRaises(
            BadMonitorConfiguration, config.get, "fo", required_field=True
        )
    def test_get_initial_sleep_delay_jitter_disabled(self):
        logger = mock.Mock()

        # 1. Default value is used
        monitor_config = MonitorConfig(
            {"module": "test_module"}, monitor_module="test_monitor"
        )
        global_config = mock.Mock()
        global_config.global_monitor_sample_interval_enable_jitter = False
        monitor = ScalyrMonitor(
            monitor_config=monitor_config,
            logger=logger,
            sample_interval_secs=None,
            global_config=global_config,
        )

        sleep_delay = monitor._get_initial_sleep_delay()
        self.assertEqual(sleep_delay, 0)

        # 2. Value is overridden on per monitor basis
        monitor_config = MonitorConfig(
            {"module": "test_module", "sample_interval": 10},
            monitor_module="test_monitor",
        )
        global_config = mock.Mock()
        global_config.global_monitor_sample_interval_enable_jitter = False
        monitor = ScalyrMonitor(
            monitor_config=monitor_config,
            logger=logger,
            sample_interval_secs=None,
            global_config=global_config,
        )

        sleep_delay = monitor._get_initial_sleep_delay()
        self.assertEqual(sleep_delay, 0)
Ejemplo n.º 3
0
 def get(self,
         original_value,
         convert_to=None,
         required_field=False,
         max_value=None,
         min_value=None):
     config = MonitorConfig({'foo': original_value})
     return config.get('foo',
                       convert_to=convert_to,
                       required_field=required_field,
                       max_value=max_value,
                       min_value=min_value)
Ejemplo n.º 4
0
    def test_base(self):
        test_array = ["a", 1, False]
        test_obj = {"a": 100, "b": 200}
        config = MonitorConfig({
            "int": 1,
            "bool": True,
            "string": "hi",
            "unicode": u"bye",
            "float": 1.4,
            "long": 1,
            "JsonArray": JsonArray(*test_array),
            "JsonObject": JsonObject(**test_obj),
        })

        self.assertEquals(len(config), 8)
        self.assertTrue("int" in config)
        self.assertFalse("foo" in config)

        self.assertEquals(config["int"], 1)
        self.assertEquals(config["bool"], True)
        self.assertEquals(config["string"], "hi")
        self.assertEquals(config["unicode"], u"bye")
        self.assertEquals(config["float"], 1.4)
        self.assertEquals(config["long"], 1)
        self.assertEquals(config["JsonArray"], JsonArray(*test_array))
        self.assertEquals(config["JsonObject"], JsonObject(**test_obj))

        count = 0
        for _ in config:
            count += 1
        self.assertEquals(count, 8)
    def define_and_get_from_env(
        self,
        environment_value,
        default_value=None,
        convert_to=None,
        required_field=None,
        max_value=None,
        min_value=None,
        env_name=None,
    ):
        """
        Tests the entire process of defining a configuration option that can be set via the environment,
        setting the environment variable, and retrieving its value from an empty MonitorConfig object.

        :param environment_value: The value to set in the environment before trying to retrieve it.  If None, no
            environment value will be set.
        :param default_value: The default value to use when defining the option.
        :param convert_to: The convert_to value to use when defining the option.
        :param required_field: The required_field value to use when defining the option.
        :param max_value: The max_value value to use when defining the option.
        :param min_value: The max_value value to use when defining the option.
        :param env_name: The env_name value to use when defining the option.
        :return: The value retrieved from the option

        :type environment_value: six.text_type|None
        :type convert_to: ArrayOfStrings|JsonArray|six.text_type|Number|bool
        :type default_value: six.text_type
        :type required_field: bool
        :type max_value: Number
        :type min_value: Number
        :type env_name: six.text_type
        :rtype: ArrayOfStrings|JsonArray|six.text_type|Number|bool
        """
        define_config_option(
            "foo_env",
            "foo",
            "Some description",
            default=default_value,
            convert_to=convert_to,
            required_option=required_field,
            max_value=max_value,
            min_value=min_value,
            env_aware=True,
            env_name=env_name,
        )

        if env_name is None:
            env_name = "SCALYR_FOO"

        if environment_value is not None:
            os_environ_unicode[env_name] = environment_value
        else:
            os_environ_unicode.pop(env_name, None)

        try:
            return MonitorConfig(monitor_module="foo_env").get("foo")
        finally:
            os_environ_unicode.pop(env_name, None)
Ejemplo n.º 6
0
    def test_define_config_option(self):
        define_config_option("foo",
                             "a",
                             "Description",
                             required_option=True,
                             convert_to=int)
        self.assertRaises(BadMonitorConfiguration,
                          MonitorConfig, {"b": 1},
                          monitor_module="foo")

        config = MonitorConfig({"a": "5"}, monitor_module="foo")
        self.assertEquals(config.get("a"), 5)

        define_config_option(
            "foo",
            "b",
            "Description",
            min_value=5,
            max_value=10,
            default=7,
            convert_to=int,
        )

        config = MonitorConfig({"a": 5}, monitor_module="foo")
        self.assertEquals(config.get("b"), 7)

        self.assertRaises(
            BadMonitorConfiguration,
            MonitorConfig,
            {
                "a": 5,
                "b": 1
            },
            monitor_module="foo",
        )
        self.assertRaises(
            BadMonitorConfiguration,
            MonitorConfig,
            {
                "a": 5,
                "b": 11
            },
            monitor_module="foo",
        )

        # Test case where no value in config for option with no default value should result in no value in
        # MonitorConfig object
        define_config_option("foo",
                             "c",
                             "Description",
                             min_value=5,
                             max_value=10,
                             convert_to=int)
        config = MonitorConfig({"a": 5}, monitor_module="foo")
        self.assertTrue("c" not in config)
    def test_define_config_option(self):
        define_config_option('foo', 'a', 'Description', required_option=True, convert_to=int)
        self.assertRaises(BadMonitorConfiguration, MonitorConfig, {'b': 1}, monitor_module='foo')

        config = MonitorConfig({'a': '5'}, monitor_module='foo')
        self.assertEquals(config.get('a'), 5)

        define_config_option('foo', 'b', 'Description', min_value=5, max_value=10, default=7, convert_to=int)

        config = MonitorConfig({'a': 5}, monitor_module='foo')
        self.assertEquals(config.get('b'), 7)

        self.assertRaises(BadMonitorConfiguration, MonitorConfig, {'a': 5, 'b': 1}, monitor_module='foo')
        self.assertRaises(BadMonitorConfiguration, MonitorConfig, {'a': 5, 'b': 11}, monitor_module='foo')

        # Test case where no value in config for option with no default value should result in no value in
        # MonitorConfig object
        define_config_option('foo', 'c', 'Description', min_value=5, max_value=10, convert_to=int)
        config = MonitorConfig({'a': 5}, monitor_module='foo')
        self.assertTrue('c' not in config)
Ejemplo n.º 8
0
    def test_malformed_headers(self):
        mock_logger = mock.MagicMock()
        config_data = {
            'url': 'fooUrl',
            'request_method': 'POST',
            'request_data': '{fakejsonthatisnotlegit}',
            'request_headers': 'not legit headers',
            'module': self.module
        }

        config = MonitorConfig(content=config_data)
        with self.assertRaises(Exception):
            _ = UrlMonitor(monitor_config=config, logger=mock_logger)
Ejemplo n.º 9
0
    def test_malformed_headers(self):
        mock_logger = mock.MagicMock()
        config_data = {
            "url": "fooUrl",
            "request_method": "POST",
            "request_data": "{fakejsonthatisnotlegit}",
            "request_headers": "not legit headers",
            "module": self.module,
        }

        config = MonitorConfig(content=config_data)
        self.assertRaises(
            Exception,
            lambda: UrlMonitor(monitor_config=config, logger=mock_logger))
Ejemplo n.º 10
0
    def test_define_config_option(self):
        define_config_option('foo',
                             'a',
                             'Description',
                             required_option=True,
                             convert_to=int)
        self.assertRaises(BadMonitorConfiguration,
                          MonitorConfig, {'b': 1},
                          monitor_module='foo')

        config = MonitorConfig({'a': '5'}, monitor_module='foo')
        self.assertEquals(config.get('a'), 5)

        define_config_option('foo',
                             'b',
                             'Description',
                             min_value=5,
                             max_value=10,
                             default=7,
                             convert_to=int)

        config = MonitorConfig({'a': 5}, monitor_module='foo')
        self.assertEquals(config.get('b'), 7)

        self.assertRaises(BadMonitorConfiguration,
                          MonitorConfig, {
                              'a': 5,
                              'b': 1
                          },
                          monitor_module='foo')
        self.assertRaises(BadMonitorConfiguration,
                          MonitorConfig, {
                              'a': 5,
                              'b': 11
                          },
                          monitor_module='foo')

        # Test case where no value in config for option with no default value should result in no value in
        # MonitorConfig object
        define_config_option('foo',
                             'c',
                             'Description',
                             min_value=5,
                             max_value=10,
                             convert_to=int)
        config = MonitorConfig({'a': 5}, monitor_module='foo')
        self.assertTrue('c' not in config)
Ejemplo n.º 11
0
    def test_get_request_no_headers(self):
        mock_logger = mock.MagicMock()
        config_data = {
            'url': 'fooUrl',
            'request_method': 'GET',
            'request_data': None,
            'request_headers': [],
            'module': self.module
        }
        config = MonitorConfig(content=config_data)
        url_monitor = UrlMonitor(monitor_config=config, logger=mock_logger)

        actual_request = url_monitor.build_request()
        self.assertEqual(actual_request.get_method(), 'GET')
        self.assertFalse(actual_request.has_data())
        self.assertEqual(actual_request.header_items(), [])
Ejemplo n.º 12
0
    def test_get_request_no_headers(self):
        mock_logger = mock.MagicMock()
        config_data = {
            "url": "http://fooUrl",
            "request_method": "GET",
            "request_data": None,
            "request_headers": [],
            "module": self.module,
        }
        config = MonitorConfig(content=config_data)
        url_monitor = UrlMonitor(monitor_config=config, logger=mock_logger)

        actual_request = url_monitor.build_request()
        self.assertEqual(actual_request.get_method(), "GET")
        self.assertFalse(actual_request.data is not None)
        self.assertEqual(actual_request.header_items(), [])
Ejemplo n.º 13
0
    def test_post_request_with_data(self):
        mock_logger = mock.MagicMock()
        config_data = {
            'url': 'fooUrl',
            'request_method': 'POST',
            'request_data': '{fakejsonthatisnotlegit}',
            'request_headers': self.legit_headers,
            'module': self.module
        }

        config = MonitorConfig(content=config_data)
        url_monitor = UrlMonitor(monitor_config=config, logger=mock_logger)
        actual_request = url_monitor.build_request()
        self.assertEqual(actual_request.get_method(), 'POST')
        self.assertEqual(actual_request.data, '{fakejsonthatisnotlegit}')
        self.assertEqual(actual_request.header_items(),
                         [('Header_foo', 'foo'), ('Header_bar', 'bar')])
Ejemplo n.º 14
0
 def test_get_request_with_headers(self):
     mock_logger = mock.MagicMock()
     config_data = {
         "url": "http://fooUrl",
         "request_method": "GET",
         "request_data": None,
         "request_headers": self.legit_headers,
         "module": self.module,
     }
     config = MonitorConfig(content=config_data)
     url_monitor = UrlMonitor(monitor_config=config, logger=mock_logger)
     actual_request = url_monitor.build_request()
     self.assertEqual(actual_request.get_method(), "GET")
     self.assertFalse(actual_request.data is not None)
     self.assertEqual(
         sorted(actual_request.header_items()),
         sorted([("Header_foo", "foo"), ("Header_bar", "bar")]),
     )
Ejemplo n.º 15
0
    def test_monitor_run_random_initial_sleep_delay_enabled(self):
        def make_mock_thread_is_stopped(monitor):
            def mock_is_thread_stopped(*args, **kwargs):
                if monitor.counter >= 3:
                    return True

                monitor.counter += 1
                return False

            return mock_is_thread_stopped

        mock_sleep_but_awaken_if_stopped = mock.Mock()

        mock_logger = mock.Mock()
        mock_gather_sample = mock.Mock()
        monitor_config = MonitorConfig(
            {
                "module": "test_module",
                "sample_interval": 10
            },
            monitor_module="test_monitor",
        )
        global_config = mock.Mock()
        global_config.global_monitor_sample_interval_enable_jitter = True
        monitor = ScalyrMonitor(
            monitor_config=monitor_config,
            logger=mock_logger,
            sample_interval_secs=None,
            global_config=global_config,
        )
        monitor.counter = 0
        monitor._sleep_but_awaken_if_stopped = mock_sleep_but_awaken_if_stopped
        monitor._is_thread_stopped = make_mock_thread_is_stopped(monitor)
        monitor.gather_sample = mock_gather_sample

        monitor.run()
        self.assertEqual(monitor.counter, 3)
        # + 1 is for initial sleep delay before first sample gather interval
        self.assertEqual(mock_sleep_but_awaken_if_stopped.call_count, 1 + 3)
        # 1 call is to debug function when we are initially sleeping before the gather
        self.assertEqual(mock_logger.debug.call_count, 1)
        # 1 call is for monitor has finished message
        self.assertEqual(mock_logger.info.call_count, 1)
        self.assertEqual(mock_logger.exception.call_count, 0)
Ejemplo n.º 16
0
    def test_post_request_with_data(self):
        mock_logger = mock.MagicMock()
        config_data = {
            "url": "fooUrl",
            "request_method": "POST",
            "request_data": "{fakejsonthatisnotlegit}",
            "request_headers": self.legit_headers,
            "module": self.module,
        }

        config = MonitorConfig(content=config_data)
        url_monitor = UrlMonitor(monitor_config=config, logger=mock_logger)
        actual_request = url_monitor.build_request()
        self.assertEqual(actual_request.get_method(), "POST")
        self.assertEqual(actual_request.data, "{fakejsonthatisnotlegit}")
        self.assertEqual(
            actual_request.header_items(),
            [("Header_foo", "foo"), ("Header_bar", "bar")],
        )
    def test_default_value(self):
        config = MonitorConfig({'foo': 10})

        self.assertEquals(config.get('foo', default=20), 10)
        self.assertEquals(config.get('fee', default=20), 20)
Ejemplo n.º 18
0
    def test_default_value(self):
        config = MonitorConfig({"foo": 10})

        self.assertEquals(config.get("foo", default=20), 10)
        self.assertEquals(config.get("fee", default=20), 20)
 def get(self, original_value, convert_to=None, required_field=False, max_value=None,
         min_value=None):
     config = MonitorConfig({'foo': original_value})
     return config.get('foo', convert_to=convert_to, required_field=required_field,
                       max_value=max_value, min_value=min_value)
    def test_get_initial_sleep_delay_with_random_jitter_enabled(self):
        logger = mock.Mock()

        # 1. Default value is used
        monitor_sample_interval = ScalyrMonitor.DEFAULT_SAMPLE_INTERVAL_SECS
        monitor_config = MonitorConfig(
            {"module": "test_module"}, monitor_module="test_monitor"
        )
        global_config = mock.Mock()
        global_config.global_monitor_sample_interval_enable_jitter = True
        monitor = ScalyrMonitor(
            monitor_config=monitor_config,
            logger=logger,
            sample_interval_secs=None,
            global_config=global_config,
        )

        for i in range(0, 100):
            sleep_delay = monitor._get_initial_sleep_delay()

            min_jitter = round(monitor_sample_interval / 10) * 2
            max_jitter = round(monitor_sample_interval / 10) * 8

            self.assertFalse(sleep_delay == monitor_sample_interval)
            self.assertTrue(sleep_delay >= min_jitter and sleep_delay <= max_jitter)

        # 2. Value is overridden on per monitor basis
        monitor_sample_interval = 10
        monitor_config = MonitorConfig(
            {"module": "test_module", "sample_interval": 10},
            monitor_module="test_monitor",
        )
        global_config = mock.Mock()
        global_config.global_monitor_sample_interval_enable_jitter = True
        monitor = ScalyrMonitor(
            monitor_config=monitor_config,
            logger=logger,
            sample_interval_secs=None,
            global_config=global_config,
        )

        for i in range(0, 100):
            sleep_delay = monitor._get_initial_sleep_delay()

            min_jitter = round(monitor_sample_interval / 10) * 2
            max_jitter = round(monitor_sample_interval / 10) * 8

            self.assertFalse(sleep_delay == monitor_sample_interval)
            self.assertTrue(sleep_delay >= min_jitter and sleep_delay <= max_jitter)

        # 3. Verify there is an upper bound of 40 seconds
        monitor_sample_interval = 1000
        monitor_config = MonitorConfig(
            {"module": "test_module", "sample_interval": 1000},
            monitor_module="test_monitor",
        )
        global_config = mock.Mock()
        global_config.global_monitor_sample_interval_enable_jitter = True
        monitor = ScalyrMonitor(
            monitor_config=monitor_config,
            logger=logger,
            sample_interval_secs=None,
            global_config=global_config,
        )

        for i in range(0, 100):
            sleep_delay = monitor._get_initial_sleep_delay()
            min_jitter = MIN_INITIAL_GATHER_SAMPLE_SLEEP_SECS
            max_jitter = MAX_INITIAL_GATHER_SAMPLE_SLEEP_SECS

            self.assertTrue(sleep_delay >= min_jitter and sleep_delay <= max_jitter)
Ejemplo n.º 21
0
    def test_default_value(self):
        config = MonitorConfig({'foo': 10})

        self.assertEquals(config.get('foo', default=20), 10)
        self.assertEquals(config.get('fee', default=20), 20)
    def test_required_field(self):
        config = MonitorConfig({'foo': 10})

        self.assertEquals(config.get('foo', required_field=True), 10)
        self.assertRaises(BadMonitorConfiguration, config.get, 'fo', required_field=True)