Ejemplo n.º 1
0
    def test_set_config__twice__with_same_content(self):
        """ Test calling set_config twice with same content to ensure config is not updated. """
        test_datafile = json.dumps(self.config_dict_with_features)
        mock_logger = mock.Mock()
        mock_notification_center = mock.Mock()

        with mock.patch('optimizely.config_manager.BaseConfigManager._validate_instantiation_options'), \
                mock.patch('optimizely.optimizely_config.OptimizelyConfigService.get_config') as mock_opt_service:
            project_config_manager = config_manager.StaticConfigManager(
                datafile=test_datafile,
                logger=mock_logger,
                notification_center=mock_notification_center,
            )

        project_config_manager._set_config(test_datafile)
        mock_logger.debug.assert_called_with(
            'Received new datafile and updated config. '
            'Old revision number: None. New revision number: 1.')
        self.assertEqual(1, mock_logger.debug.call_count)
        mock_notification_center.send_notifications.assert_called_once_with(
            'OPTIMIZELY_CONFIG_UPDATE')
        self.assertEqual(1, mock_opt_service.call_count)

        mock_logger.reset_mock()
        mock_notification_center.reset_mock()
        mock_opt_service.reset_mock()

        # Call set config again and confirm that no new log message denoting config update is there
        project_config_manager._set_config(test_datafile)
        self.assertEqual(0, mock_logger.debug.call_count)
        self.assertEqual(0, mock_notification_center.call_count)
        # Assert that mock_opt_service is not called again.
        self.assertEqual(0, mock_opt_service.call_count)
Ejemplo n.º 2
0
 def test_init__invalid_notification_center_fails(self):
     """ Test that initialization fails if notification_center is invalid. """
     class InvalidNotificationCenter(object):
         pass
     with self.assertRaisesRegexp(optimizely_exceptions.InvalidInputException,
                                  'Provided "notification_center" is in an invalid format.'):
         config_manager.StaticConfigManager(notification_center=InvalidNotificationCenter())
Ejemplo n.º 3
0
    def test_set_config__unsupported_datafile_version(self):
        """ Test set_config when datafile has unsupported version. """

        test_datafile = json.dumps(self.config_dict_with_features)
        mock_logger = mock.Mock()
        mock_notification_center = mock.Mock()

        with mock.patch(
                'optimizely.config_manager.BaseConfigManager._validate_instantiation_options'
        ):
            project_config_manager = config_manager.StaticConfigManager(
                datafile=test_datafile,
                logger=mock_logger,
                notification_center=mock_notification_center,
            )

        invalid_version_datafile = self.config_dict_with_features.copy()
        invalid_version_datafile['version'] = 'invalid_version'
        test_datafile = json.dumps(invalid_version_datafile)

        # Call set_config with datafile having invalid version
        project_config_manager._set_config(test_datafile)
        mock_logger.error.assert_called_once_with(
            'This version of the Python SDK does not support '
            'the given datafile version: "invalid_version".')
        self.assertEqual(0, mock_notification_center.call_count)
Ejemplo n.º 4
0
 def test_init__invalid_error_handler_fails(self):
     """ Test that initialization fails if error_handler is invalid. """
     class InvalidErrorHandler(object):
         pass
     with self.assertRaisesRegexp(optimizely_exceptions.InvalidInputException,
                                  'Provided "error_handler" is in an invalid format.'):
         config_manager.StaticConfigManager(error_handler=InvalidErrorHandler())
Ejemplo n.º 5
0
    def test_get_config(self):
        """ Test get_config. """
        test_datafile = json.dumps(self.config_dict_with_features)
        project_config_manager = config_manager.StaticConfigManager(datafile=test_datafile)

        # Assert that config is set.
        self.assertIsInstance(project_config_manager.get_config(), project_config.ProjectConfig)
    def test_init__invalid_logger_fails(self):
        """ Test that initialization fails if logger is invalid. """
        class InvalidLogger(object):
            pass

        with self.assertRaisesRegex(
                optimizely_exceptions.InvalidInputException,
                'Provided "logger" is in an invalid format.',
        ):
            config_manager.StaticConfigManager(logger=InvalidLogger())
Ejemplo n.º 7
0
    def test_set_config__schema_validation(self):
        """ Test set_config calls or does not call schema validation based on skip_json_validation value. """

        test_datafile = json.dumps(self.config_dict_with_features)
        mock_logger = mock.Mock()

        # Test that schema is validated.
        # Note: set_config is called in __init__ itself.
        with mock.patch('optimizely.helpers.validator.is_datafile_valid',
                        return_value=True) as mock_validate_datafile:
            config_manager.StaticConfigManager(datafile=test_datafile,
                                               logger=mock_logger)
        mock_validate_datafile.assert_called_once_with(test_datafile)

        # Test that schema is not validated if skip_json_validation option is set to True.
        with mock.patch('optimizely.helpers.validator.is_datafile_valid',
                        return_value=True) as mock_validate_datafile:
            config_manager.StaticConfigManager(datafile=test_datafile,
                                               logger=mock_logger,
                                               skip_json_validation=True)
        mock_validate_datafile.assert_not_called()
Ejemplo n.º 8
0
    def test_set_config__success(self):
        """ Test set_config when datafile is valid. """
        test_datafile = json.dumps(self.config_dict_with_features)
        mock_logger = mock.Mock()
        mock_notification_center = mock.Mock()

        with mock.patch('optimizely.config_manager.BaseConfigManager._validate_instantiation_options'):
            project_config_manager = config_manager.StaticConfigManager(datafile=test_datafile,
                                                                        logger=mock_logger,
                                                                        notification_center=mock_notification_center)

        project_config_manager._set_config(test_datafile)
        mock_logger.debug.assert_called_with('Received new datafile and updated config. '
                                             'Old revision number: None. New revision number: 1.')
        mock_notification_center.send_notifications.assert_called_once_with('OPTIMIZELY_CONFIG_UPDATE')
Ejemplo n.º 9
0
    def test_set_config__invalid_datafile(self):
        """ Test set_config when datafile is invalid. """

        test_datafile = json.dumps(self.config_dict_with_features)
        mock_logger = mock.Mock()
        mock_notification_center = mock.Mock()

        with mock.patch('optimizely.config_manager.BaseConfigManager._validate_instantiation_options'):
            project_config_manager = config_manager.StaticConfigManager(datafile=test_datafile,
                                                                        logger=mock_logger,
                                                                        notification_center=mock_notification_center)

        # Call set_config with invalid content
        project_config_manager._set_config('invalid_datafile')
        mock_logger.error.assert_called_once_with('Provided "datafile" is in an invalid format.')
        self.assertEqual(0, mock_notification_center.call_count)
Ejemplo n.º 10
0
    def test_set_config__twice__with_diff_content(self):
        """ Test calling set_config twice with different content to ensure config is updated. """
        test_datafile = json.dumps(self.config_dict_with_features)
        mock_logger = mock.Mock()
        mock_notification_center = mock.Mock()

        with mock.patch(
                'optimizely.config_manager.BaseConfigManager._validate_instantiation_options'
        ):
            project_config_manager = config_manager.StaticConfigManager(
                datafile=test_datafile,
                logger=mock_logger,
                notification_center=mock_notification_center,
            )

        mock_logger.debug.assert_called_with(
            'Received new datafile and updated config. '
            'Old revision number: None. New revision number: 1.')
        self.assertEqual(1, mock_logger.debug.call_count)
        mock_notification_center.send_notifications.assert_called_once_with(
            'OPTIMIZELY_CONFIG_UPDATE')
        self.assertEqual('1',
                         project_config_manager.optimizely_config.revision)

        mock_logger.reset_mock()
        mock_notification_center.reset_mock()

        # Call set config again
        other_datafile = json.dumps(self.config_dict_with_multiple_experiments)
        project_config_manager._set_config(other_datafile)
        mock_logger.debug.assert_called_with(
            'Received new datafile and updated config. '
            'Old revision number: 1. New revision number: 42.')
        self.assertEqual(1, mock_logger.debug.call_count)
        mock_notification_center.send_notifications.assert_called_once_with(
            'OPTIMIZELY_CONFIG_UPDATE')
        self.assertEqual('42',
                         project_config_manager.optimizely_config.revision)