コード例 #1
0
    def test_allow_attr_access(self):
        config = IntegrationConfig(Config())
        config.setting = 'value'

        # Can be accessed both as item and attr accessor
        assert config.setting == 'value'
        assert config['setting'] == 'value'
コード例 #2
0
    def test_allow_both_access(self):
        config = IntegrationConfig(Config())

        config.setting = 'value'
        assert config['setting'] == 'value'
        assert config.setting == 'value'

        config['setting'] = 'new-value'
        assert config.setting == 'new-value'
        assert config['setting'] == 'new-value'
コード例 #3
0
 def test_deepcopy(self):
     ic = IntegrationConfig(
         self.config, 'foo', analytics_enabled=True, analytics_sample_rate=0.5, deep={"field": "sodeep"}
     )
     cpy = deepcopy(ic)
     assert isinstance(cpy, IntegrationConfig)
     assert cpy == ic
     assert cpy.deep["field"] == ic.deep["field"]
     ic.deep["field"] = ""
     assert cpy.deep["field"] != ic.deep["field"]
コード例 #4
0
    def test_allow_exist_both_global_and_integration_config(self):
        global_config = Config()
        integration_config = IntegrationConfig(global_config)

        global_config.trace_headers('global_header')
        assert integration_config.header_is_traced('global_header')

        integration_config.http.trace_headers('integration_header')
        assert integration_config.header_is_traced('integration_header')
        assert not integration_config.header_is_traced('global_header')
        assert not global_config.header_is_traced('integration_header')
コード例 #5
0
ファイル: test_settings.py プロジェクト: zhammer/dd-trace-py
    def test_analytics_enabled_attribute(self):
        """" Confirm environment variable and kwargs are handled properly """
        ic = IntegrationConfig(self.config, 'foo', analytics_enabled=True)
        self.assertTrue(ic.analytics_enabled)

        ic = IntegrationConfig(self.config, 'foo', analytics_enabled=False)
        self.assertFalse(ic.analytics_enabled)

        with self.override_env(dict(DD_FOO_ANALYTICS_ENABLED='True')):
            ic = IntegrationConfig(self.config, 'foo', analytics_enabled=False)
            self.assertFalse(ic.analytics_enabled)
コード例 #6
0
    def test_copy(self):
        ic = IntegrationConfig(self.config, 'foo', analytics_enabled=True, analytics_sample_rate=0.5)
        copy = ic.copy()
        assert isinstance(copy, IntegrationConfig)

        for key in ic:
            assert key in copy

        for key in copy:
            assert key in ic

        assert ic == copy
コード例 #7
0
    def test_config_attr_and_key(self):
        """
        This is a regression test for when mixing attr attribute and key
        access we would set the value of the attribute but not the key
        """
        integration_config = IntegrationConfig(config)

        # Our key and attribute do not exist
        self.assertFalse(hasattr(integration_config, 'distributed_tracing'))
        self.assertNotIn('distributed_tracing', integration_config)

        # Initially set and access
        integration_config['distributed_tracing'] = True
        self.assertTrue(integration_config['distributed_tracing'])
        self.assertTrue(integration_config.get('distributed_tracing'))
        self.assertTrue(integration_config.distributed_tracing)

        # Override by key and access
        integration_config['distributed_tracing'] = False
        self.assertFalse(integration_config['distributed_tracing'])
        self.assertFalse(integration_config.get('distributed_tracing'))
        self.assertFalse(integration_config.distributed_tracing)

        # Override by attr and access
        integration_config.distributed_tracing = None
        self.assertIsNone(integration_config['distributed_tracing'])
        self.assertIsNone(integration_config.get('distributed_tracing'))
        self.assertIsNone(integration_config.distributed_tracing)
コード例 #8
0
    def test_get_analytics_sample_rate(self):
        """" Check method for accessing sample rate based on configuration """
        ic = IntegrationConfig(self.config, "foo", analytics_enabled=True, analytics_sample_rate=0.5)
        self.assertEqual(ic.get_analytics_sample_rate(), 0.5)

        ic = IntegrationConfig(self.config, "foo", analytics_enabled=True)
        self.assertEqual(ic.get_analytics_sample_rate(), 1.0)

        ic = IntegrationConfig(self.config, "foo", analytics_enabled=False)
        self.assertIsNone(ic.get_analytics_sample_rate())

        with self.override_env(dict(DD_ANALYTICS_ENABLED="True")):
            config = Config()
            ic = IntegrationConfig(config, "foo")
            self.assertEqual(ic.get_analytics_sample_rate(use_global_config=True), 1.0)

        with self.override_env(dict(DD_TRACE_ANALYTICS_ENABLED="True")):
            config = Config()
            ic = IntegrationConfig(config, "foo")
            self.assertEqual(ic.get_analytics_sample_rate(use_global_config=True), 1.0)

        with self.override_env(dict(DD_ANALYTICS_ENABLED="False")):
            config = Config()
            ic = IntegrationConfig(config, "foo")
            self.assertIsNone(ic.get_analytics_sample_rate(use_global_config=True))

        with self.override_env(dict(DD_TRACE_ANALYTICS_ENABLED="False")):
            config = Config()
            ic = IntegrationConfig(config, "foo")
            self.assertIsNone(ic.get_analytics_sample_rate(use_global_config=True))
コード例 #9
0
 def test_allow_configuring_http(self):
     global_config = Config()
     integration_config = IntegrationConfig(global_config)
     integration_config.http.trace_headers('integration_header')
     assert integration_config.http.header_is_traced('integration_header')
     assert not integration_config.http.header_is_traced('other_header')
コード例 #10
0
    def test_get_analytics_sample_rate_deprecated_name(self):
        """Check method for accessing sample rate based on configuration"""
        with self.override_env(dict(DD_FOO_ANALYTICS_ENABLED="True")):
            config = Config()
            ic = IntegrationConfig(config, "bar", _deprecated_name="foo")
            self.assertEqual(ic.get_analytics_sample_rate(), 1.0)

        with self.override_env(dict(DD_TRACE_FOO_ANALYTICS_ENABLED="True")):
            config = Config()
            ic = IntegrationConfig(config, "bar", _deprecated_name="foo")
            self.assertEqual(ic.get_analytics_sample_rate(), 1.0)

        with self.override_env(
                dict(DD_FOO_ANALYTICS_ENABLED="True",
                     DD_FOO_ANALYTICS_SAMPLE_RATE="0.5")):
            config = Config()
            ic = IntegrationConfig(config, "bar", _deprecated_name="foo")
            self.assertEqual(ic.get_analytics_sample_rate(), 0.5)

        with self.override_env(
                dict(DD_FOO_ANALYTICS_ENABLED="True",
                     DD_TRACE_FOO_ANALYTICS_SAMPLE_RATE="0.5")):
            config = Config()
            ic = IntegrationConfig(config, "bar", _deprecated_name="foo")
            self.assertEqual(ic.get_analytics_sample_rate(), 0.5)

        with self.override_env(dict(DD_FOO_ANALYTICS_ENABLED="False")):
            config = Config()
            ic = IntegrationConfig(config, "bar", _deprecated_name="foo")
            self.assertIsNone(ic.get_analytics_sample_rate())

        with self.override_env(dict(DD_TRACE_FOO_ANALYTICS_ENABLED="False")):
            config = Config()
            ic = IntegrationConfig(config, "bar", _deprecated_name="foo")
            self.assertIsNone(ic.get_analytics_sample_rate())
コード例 #11
0
class TestIntegrationConfig(BaseTestCase):
    def setUp(self):
        self.config = Config()
        self.integration_config = IntegrationConfig(self.config, 'test')

    def test_is_a_dict(self):
        assert isinstance(self.integration_config, dict)

    def test_allow_item_access(self):
        self.integration_config['setting'] = 'value'

        # Can be accessed both as item and attr accessor
        assert self.integration_config.setting == 'value'
        assert self.integration_config['setting'] == 'value'

    def test_allow_attr_access(self):
        self.integration_config.setting = 'value'

        # Can be accessed both as item and attr accessor
        assert self.integration_config.setting == 'value'
        assert self.integration_config['setting'] == 'value'

    def test_allow_both_access(self):
        self.integration_config.setting = 'value'
        assert self.integration_config['setting'] == 'value'
        assert self.integration_config.setting == 'value'

        self.integration_config['setting'] = 'new-value'
        assert self.integration_config.setting == 'new-value'
        assert self.integration_config['setting'] == 'new-value'

    def test_allow_configuring_http(self):
        self.integration_config.http.trace_headers('integration_header')
        assert self.integration_config.http.header_is_traced(
            'integration_header')
        assert not self.integration_config.http.header_is_traced(
            'other_header')

    def test_allow_exist_both_global_and_integration_config(self):
        self.config.trace_headers('global_header')
        assert self.integration_config.header_is_traced('global_header')

        self.integration_config.http.trace_headers('integration_header')
        assert self.integration_config.header_is_traced('integration_header')
        assert not self.integration_config.header_is_traced('global_header')
        assert not self.config.header_is_traced('integration_header')

    def test_environment_analytics_enabled(self):
        # default
        self.assertFalse(self.config.analytics_enabled)
        self.assertIsNone(self.config.foo.analytics_enabled)

        with self.override_env(dict(DD_ANALYTICS_ENABLED='True')):
            config = Config()
            self.assertTrue(config.analytics_enabled)
            self.assertIsNone(config.foo.analytics_enabled)

        with self.override_env(dict(DD_TRACE_ANALYTICS_ENABLED='True')):
            config = Config()
            self.assertTrue(config.analytics_enabled)
            self.assertIsNone(config.foo.analytics_enabled)

        with self.override_env(dict(DD_FOO_ANALYTICS_ENABLED='True')):
            config = Config()
            self.assertTrue(config.foo.analytics_enabled)
            self.assertEqual(config.foo.analytics_sample_rate, 1.0)

        with self.override_env(dict(DD_TRACE_FOO_ANALYTICS_ENABLED='True')):
            config = Config()
            self.assertTrue(config.foo.analytics_enabled)
            self.assertEqual(config.foo.analytics_sample_rate, 1.0)

        with self.override_env(dict(DD_FOO_ANALYTICS_ENABLED='False')):
            config = Config()
            self.assertFalse(config.foo.analytics_enabled)

        with self.override_env(dict(DD_TRACE_FOO_ANALYTICS_ENABLED='False')):
            config = Config()
            self.assertFalse(config.foo.analytics_enabled)

        with self.override_env(
                dict(DD_FOO_ANALYTICS_ENABLED='True',
                     DD_FOO_ANALYTICS_SAMPLE_RATE='0.5')):
            config = Config()
            self.assertTrue(config.foo.analytics_enabled)
            self.assertEqual(config.foo.analytics_sample_rate, 0.5)

        with self.override_env(
                dict(DD_TRACE_FOO_ANALYTICS_ENABLED='True',
                     DD_TRACE_FOO_ANALYTICS_SAMPLE_RATE='0.5')):
            config = Config()
            self.assertTrue(config.foo.analytics_enabled)
            self.assertEqual(config.foo.analytics_sample_rate, 0.5)

    def test_analytics_enabled_attribute(self):
        """" Confirm environment variable and kwargs are handled properly """
        ic = IntegrationConfig(self.config, 'foo', analytics_enabled=True)
        self.assertTrue(ic.analytics_enabled)

        ic = IntegrationConfig(self.config, 'foo', analytics_enabled=False)
        self.assertFalse(ic.analytics_enabled)

        with self.override_env(dict(DD_FOO_ANALYTICS_ENABLED='True')):
            ic = IntegrationConfig(self.config, 'foo', analytics_enabled=False)
            self.assertFalse(ic.analytics_enabled)

        with self.override_env(dict(DD_TRACE_FOO_ANALYTICS_ENABLED='True')):
            ic = IntegrationConfig(self.config, 'foo', analytics_enabled=False)
            self.assertFalse(ic.analytics_enabled)

    def test_get_analytics_sample_rate(self):
        """" Check method for accessing sample rate based on configuration """
        ic = IntegrationConfig(self.config,
                               'foo',
                               analytics_enabled=True,
                               analytics_sample_rate=0.5)
        self.assertEqual(ic.get_analytics_sample_rate(), 0.5)

        ic = IntegrationConfig(self.config, 'foo', analytics_enabled=True)
        self.assertEqual(ic.get_analytics_sample_rate(), 1.0)

        ic = IntegrationConfig(self.config, 'foo', analytics_enabled=False)
        self.assertIsNone(ic.get_analytics_sample_rate())

        with self.override_env(dict(DD_ANALYTICS_ENABLED='True')):
            config = Config()
            ic = IntegrationConfig(config, 'foo')
            self.assertEqual(
                ic.get_analytics_sample_rate(use_global_config=True), 1.0)

        with self.override_env(dict(DD_TRACE_ANALYTICS_ENABLED='True')):
            config = Config()
            ic = IntegrationConfig(config, 'foo')
            self.assertEqual(
                ic.get_analytics_sample_rate(use_global_config=True), 1.0)

        with self.override_env(dict(DD_ANALYTICS_ENABLED='False')):
            config = Config()
            ic = IntegrationConfig(config, 'foo')
            self.assertIsNone(
                ic.get_analytics_sample_rate(use_global_config=True))

        with self.override_env(dict(DD_TRACE_ANALYTICS_ENABLED='False')):
            config = Config()
            ic = IntegrationConfig(config, 'foo')
            self.assertIsNone(
                ic.get_analytics_sample_rate(use_global_config=True))

    def test_deepcopy(self):
        ic = IntegrationConfig(self.config,
                               'foo',
                               analytics_enabled=True,
                               analytics_sample_rate=0.5,
                               deep={"field": "sodeep"})
        cpy = deepcopy(ic)
        assert isinstance(cpy, IntegrationConfig)
        assert cpy == ic
        assert cpy.deep["field"] == ic.deep["field"]
        ic.deep["field"] = ""
        assert cpy.deep["field"] != ic.deep["field"]

    def test_copy(self):
        ic = IntegrationConfig(self.config,
                               'foo',
                               analytics_enabled=True,
                               analytics_sample_rate=0.5)
        copy = ic.copy()
        assert isinstance(copy, IntegrationConfig)

        for key in ic:
            assert key in copy

        for key in copy:
            assert key in ic

        assert ic == copy

    def test_service(self):
        ic = IntegrationConfig(self.config, "foo")
        assert ic.service is None

    @BaseTestCase.run_in_subprocess(
        env_overrides=dict(DD_FOO_SERVICE="foo-svc"))
    def test_service_env_var(self):
        ic = IntegrationConfig(self.config, "foo")
        assert ic.service == "foo-svc"

    @BaseTestCase.run_in_subprocess(
        env_overrides=dict(DATADOG_FOO_SERVICE="foo-svc"))
    def test_service_env_var_legacy(self):
        ic = IntegrationConfig(self.config, "foo")
        assert ic.service == "foo-svc"

    @BaseTestCase.run_in_subprocess(
        env_overrides=dict(DD_FOO_SERVICE_NAME="foo-svc"))
    def test_service_name_env_var(self):
        ic = IntegrationConfig(self.config, "foo")
        assert ic.service == "foo-svc"

    @BaseTestCase.run_in_subprocess(
        env_overrides=dict(DATADOG_FOO_SERVICE_NAME="foo-svc"))
    def test_service_name_env_var_legacy(self):
        ic = IntegrationConfig(self.config, "foo")
        assert ic.service == "foo-svc"
コード例 #12
0
 def test_is_a_dict(self):
     integration_config = IntegrationConfig(Config())
     assert isinstance(integration_config, dict)
コード例 #13
0
 def integration_config(self, config):
     yield IntegrationConfig(config, "test")
コード例 #14
0
 def test_service_name_env_var_legacy(self):
     ic = IntegrationConfig(self.config, "foo")
     assert ic.service == "foo-svc"
コード例 #15
0
 def test_service(self):
     ic = IntegrationConfig(self.config, "foo")
     assert ic.service is None
コード例 #16
0
 def setUp(self):
     self.config = Config()
     self.integration_config = IntegrationConfig(self.config, "test")
コード例 #17
0
class TestIntegrationConfig(BaseTestCase):
    def setUp(self):
        self.config = Config()
        self.integration_config = IntegrationConfig(self.config, "test")

    def test_is_a_dict(self):
        assert isinstance(self.integration_config, dict)

    def test_allow_item_access(self):
        self.integration_config["setting"] = "value"

        # Can be accessed both as item and attr accessor
        assert self.integration_config.setting == "value"
        assert self.integration_config["setting"] == "value"

    def test_allow_attr_access(self):
        self.integration_config.setting = "value"

        # Can be accessed both as item and attr accessor
        assert self.integration_config.setting == "value"
        assert self.integration_config["setting"] == "value"

    def test_allow_both_access(self):
        self.integration_config.setting = "value"
        assert self.integration_config["setting"] == "value"
        assert self.integration_config.setting == "value"

        self.integration_config["setting"] = "new-value"
        assert self.integration_config.setting == "new-value"
        assert self.integration_config["setting"] == "new-value"

    def test_allow_configuring_http(self):
        self.integration_config.http.trace_headers("integration_header")
        assert self.integration_config.http.header_is_traced("integration_header")
        assert not self.integration_config.http.header_is_traced("other_header")

    def test_allow_exist_both_global_and_integration_config(self):
        self.config.trace_headers("global_header")
        assert self.integration_config.header_is_traced("global_header")

        self.integration_config.http.trace_headers("integration_header")
        assert self.integration_config.header_is_traced("integration_header")
        assert not self.integration_config.header_is_traced("global_header")
        assert not self.config.header_is_traced("integration_header")

    def test_environment_analytics_enabled(self):
        # default
        self.assertFalse(self.config.analytics_enabled)
        self.assertIsNone(self.config.foo.analytics_enabled)

        with self.override_env(dict(DD_ANALYTICS_ENABLED="True")):
            config = Config()
            self.assertTrue(config.analytics_enabled)
            self.assertIsNone(config.foo.analytics_enabled)

        with self.override_env(dict(DD_TRACE_ANALYTICS_ENABLED="True")):
            config = Config()
            self.assertTrue(config.analytics_enabled)
            self.assertIsNone(config.foo.analytics_enabled)

        with self.override_env(dict(DD_FOO_ANALYTICS_ENABLED="True")):
            config = Config()
            self.assertTrue(config.foo.analytics_enabled)
            self.assertEqual(config.foo.analytics_sample_rate, 1.0)

        with self.override_env(dict(DD_TRACE_FOO_ANALYTICS_ENABLED="True")):
            config = Config()
            self.assertTrue(config.foo.analytics_enabled)
            self.assertEqual(config.foo.analytics_sample_rate, 1.0)

        with self.override_env(dict(DD_FOO_ANALYTICS_ENABLED="False")):
            config = Config()
            self.assertFalse(config.foo.analytics_enabled)

        with self.override_env(dict(DD_TRACE_FOO_ANALYTICS_ENABLED="False")):
            config = Config()
            self.assertFalse(config.foo.analytics_enabled)

        with self.override_env(dict(DD_FOO_ANALYTICS_ENABLED="True", DD_FOO_ANALYTICS_SAMPLE_RATE="0.5")):
            config = Config()
            self.assertTrue(config.foo.analytics_enabled)
            self.assertEqual(config.foo.analytics_sample_rate, 0.5)

        with self.override_env(dict(DD_TRACE_FOO_ANALYTICS_ENABLED="True", DD_TRACE_FOO_ANALYTICS_SAMPLE_RATE="0.5")):
            config = Config()
            self.assertTrue(config.foo.analytics_enabled)
            self.assertEqual(config.foo.analytics_sample_rate, 0.5)

    def test_analytics_enabled_attribute(self):
        """" Confirm environment variable and kwargs are handled properly """
        ic = IntegrationConfig(self.config, "foo", analytics_enabled=True)
        self.assertTrue(ic.analytics_enabled)

        ic = IntegrationConfig(self.config, "foo", analytics_enabled=False)
        self.assertFalse(ic.analytics_enabled)

        with self.override_env(dict(DD_FOO_ANALYTICS_ENABLED="True")):
            ic = IntegrationConfig(self.config, "foo", analytics_enabled=False)
            self.assertFalse(ic.analytics_enabled)

        with self.override_env(dict(DD_TRACE_FOO_ANALYTICS_ENABLED="True")):
            ic = IntegrationConfig(self.config, "foo", analytics_enabled=False)
            self.assertFalse(ic.analytics_enabled)

    def test_get_analytics_sample_rate(self):
        """" Check method for accessing sample rate based on configuration """
        ic = IntegrationConfig(self.config, "foo", analytics_enabled=True, analytics_sample_rate=0.5)
        self.assertEqual(ic.get_analytics_sample_rate(), 0.5)

        ic = IntegrationConfig(self.config, "foo", analytics_enabled=True)
        self.assertEqual(ic.get_analytics_sample_rate(), 1.0)

        ic = IntegrationConfig(self.config, "foo", analytics_enabled=False)
        self.assertIsNone(ic.get_analytics_sample_rate())

        with self.override_env(dict(DD_ANALYTICS_ENABLED="True")):
            config = Config()
            ic = IntegrationConfig(config, "foo")
            self.assertEqual(ic.get_analytics_sample_rate(use_global_config=True), 1.0)

        with self.override_env(dict(DD_TRACE_ANALYTICS_ENABLED="True")):
            config = Config()
            ic = IntegrationConfig(config, "foo")
            self.assertEqual(ic.get_analytics_sample_rate(use_global_config=True), 1.0)

        with self.override_env(dict(DD_ANALYTICS_ENABLED="False")):
            config = Config()
            ic = IntegrationConfig(config, "foo")
            self.assertIsNone(ic.get_analytics_sample_rate(use_global_config=True))

        with self.override_env(dict(DD_TRACE_ANALYTICS_ENABLED="False")):
            config = Config()
            ic = IntegrationConfig(config, "foo")
            self.assertIsNone(ic.get_analytics_sample_rate(use_global_config=True))

    def test_service(self):
        ic = IntegrationConfig(self.config, "foo")
        assert ic.service is None

    @BaseTestCase.run_in_subprocess(env_overrides=dict(DD_FOO_SERVICE="foo-svc"))
    def test_service_env_var(self):
        ic = IntegrationConfig(self.config, "foo")
        assert ic.service == "foo-svc"

    @BaseTestCase.run_in_subprocess(env_overrides=dict(DATADOG_FOO_SERVICE="foo-svc"))
    def test_service_env_var_legacy(self):
        ic = IntegrationConfig(self.config, "foo")
        assert ic.service == "foo-svc"

    @BaseTestCase.run_in_subprocess(env_overrides=dict(DD_FOO_SERVICE_NAME="foo-svc"))
    def test_service_name_env_var(self):
        ic = IntegrationConfig(self.config, "foo")
        assert ic.service == "foo-svc"

    @BaseTestCase.run_in_subprocess(env_overrides=dict(DATADOG_FOO_SERVICE_NAME="foo-svc"))
    def test_service_name_env_var_legacy(self):
        ic = IntegrationConfig(self.config, "foo")
        assert ic.service == "foo-svc"
コード例 #18
0
ファイル: test_settings.py プロジェクト: zhammer/dd-trace-py
class TestIntegrationConfig(BaseTestCase):
    def setUp(self):
        self.config = Config()
        self.integration_config = IntegrationConfig(self.config, 'test')

    def test_is_a_dict(self):
        assert isinstance(self.integration_config, dict)

    def test_allow_item_access(self):
        self.integration_config['setting'] = 'value'

        # Can be accessed both as item and attr accessor
        assert self.integration_config.setting == 'value'
        assert self.integration_config['setting'] == 'value'

    def test_allow_attr_access(self):
        self.integration_config.setting = 'value'

        # Can be accessed both as item and attr accessor
        assert self.integration_config.setting == 'value'
        assert self.integration_config['setting'] == 'value'

    def test_allow_both_access(self):
        self.integration_config.setting = 'value'
        assert self.integration_config['setting'] == 'value'
        assert self.integration_config.setting == 'value'

        self.integration_config['setting'] = 'new-value'
        assert self.integration_config.setting == 'new-value'
        assert self.integration_config['setting'] == 'new-value'

    def test_allow_configuring_http(self):
        self.integration_config.http.trace_headers('integration_header')
        assert self.integration_config.http.header_is_traced(
            'integration_header')
        assert not self.integration_config.http.header_is_traced(
            'other_header')

    def test_allow_exist_both_global_and_integration_config(self):
        self.config.trace_headers('global_header')
        assert self.integration_config.header_is_traced('global_header')

        self.integration_config.http.trace_headers('integration_header')
        assert self.integration_config.header_is_traced('integration_header')
        assert not self.integration_config.header_is_traced('global_header')
        assert not self.config.header_is_traced('integration_header')

    def test_environment_analytics_enabled(self):
        # default
        self.assertFalse(self.config.analytics_enabled)
        self.assertIsNone(self.config.foo.analytics_enabled)

        with self.override_env(dict(DD_ANALYTICS_ENABLED='True')):
            config = Config()
            self.assertTrue(config.analytics_enabled)
            self.assertIsNone(config.foo.analytics_enabled)

        with self.override_env(dict(DD_FOO_ANALYTICS_ENABLED='True')):
            config = Config()
            self.assertTrue(config.foo.analytics_enabled)
            self.assertEqual(config.foo.analytics_sample_rate, 1.0)

        with self.override_env(dict(DD_FOO_ANALYTICS_ENABLED='False')):
            config = Config()
            self.assertFalse(config.foo.analytics_enabled)

        with self.override_env(
                dict(DD_FOO_ANALYTICS_ENABLED='True',
                     DD_FOO_ANALYTICS_SAMPLE_RATE='0.5')):
            config = Config()
            self.assertTrue(config.foo.analytics_enabled)
            self.assertEqual(config.foo.analytics_sample_rate, 0.5)

    def test_analytics_enabled_attribute(self):
        """" Confirm environment variable and kwargs are handled properly """
        ic = IntegrationConfig(self.config, 'foo', analytics_enabled=True)
        self.assertTrue(ic.analytics_enabled)

        ic = IntegrationConfig(self.config, 'foo', analytics_enabled=False)
        self.assertFalse(ic.analytics_enabled)

        with self.override_env(dict(DD_FOO_ANALYTICS_ENABLED='True')):
            ic = IntegrationConfig(self.config, 'foo', analytics_enabled=False)
            self.assertFalse(ic.analytics_enabled)

    def test_get_analytics_sample_rate(self):
        """" Check method for accessing sample rate based on configuration """
        ic = IntegrationConfig(self.config,
                               'foo',
                               analytics_enabled=True,
                               analytics_sample_rate=0.5)
        self.assertEqual(ic.get_analytics_sample_rate(), 0.5)

        ic = IntegrationConfig(self.config, 'foo', analytics_enabled=True)
        self.assertEqual(ic.get_analytics_sample_rate(), 1.0)

        ic = IntegrationConfig(self.config, 'foo', analytics_enabled=False)
        self.assertIsNone(ic.get_analytics_sample_rate())

        with self.override_env(dict(DD_ANALYTICS_ENABLED='True')):
            config = Config()
            ic = IntegrationConfig(config, 'foo')
            self.assertEqual(
                ic.get_analytics_sample_rate(use_global_config=True), 1.0)

        with self.override_env(dict(DD_ANALYTICS_ENABLED='False')):
            config = Config()
            ic = IntegrationConfig(config, 'foo')
            self.assertIsNone(
                ic.get_analytics_sample_rate(use_global_config=True))