Beispiel #1
0
    def test_precedence(self) -> None:
        class FakeSettings:
            config_override = {}
            config_user = {}
            config_system = {}

        ps = bs.PrioritizedSetting("foo",
                                   env_var="BOKEH_FOO",
                                   convert=int,
                                   default=0,
                                   dev_default=15)
        ps._parent = FakeSettings

        # 0. global default
        assert ps() == 0

        # 1. local default
        assert ps(default=10) == 10

        # 1.5. implicit default (DEV)
        with envset(BOKEH_DEV="yes"):
            assert ps() == 15

        # 2. global config file
        FakeSettings.config_system['foo'] = 20
        assert ps() == 20
        assert ps(default=10) == 20

        # 3. local config file
        FakeSettings.config_user['foo'] = 30
        assert ps() == 30
        assert ps(default=10) == 30

        # 4. environment variable
        with envset(BOKEH_FOO="40"):
            assert ps() == 40
            assert ps(default=10) == 40

            # 5. override config file
            FakeSettings.config_override['foo'] = 50
            assert ps() == 50
            assert ps(default=10) == 50

            # 6. previously user-set value
            ps.set_value(60)
            assert ps() == 60
            assert ps(default=10) == 60

            # 7. immediate values
            assert ps(70) == 70
            assert ps(70, default=10) == 70
Beispiel #2
0
def test_envset_restores() -> None:
    if "foo" in os.environ:
        old_foo = os.environ["foo"]
        os.environ["foo"] = "123"
        with _tue.envset(foo="10"):
            pass
        assert os.environ["foo"] == "123"
        os.environ["foo"] = old_foo
    else:
        os.environ["foo"] = "123"
        with _tue.envset(foo="10"):
            pass
        assert os.environ["foo"] == "123"
        del os.environ["foo"]
Beispiel #3
0
 def test_none_envvar(self) -> None:
     with envset(BOKEH_ICO_PATH="none"):
         with run_bokeh_serve(["--port", "0", "--glob", APPS]) as (p, nbsr):
             port = check_port(nbsr)
             assert port > 0
             r = requests.get(f"http://localhost:{port}/favicon.ico")
             assert r.status_code == 404
def test_dev_resources(ManagedServerLoop: MSL) -> None:
    with envset(BOKEH_DEV="yes"):
        application = Application()
        with ManagedServerLoop(application) as server:
            r = server._tornado.resources()
            assert r.mode == "absolute"
            assert r.dev
Beispiel #5
0
 def test_with_Server_resources_dev(self) -> None:
     from latex_label import LatexLabel
     plot = Plot()
     plot.add_layout(LatexLabel())
     with envset(BOKEH_RESOURCES="server", BOKEH_DEV="true"):
         bundle = beb.bundle_for_objs_and_resources([plot], "server")
     assert len(bundle.js_files) == 2
     assert bundle.js_files[1] == "http://localhost:5006/static/extensions/latex_label/latex_label.js"
Beispiel #6
0
 def test_missing_sysrandom_with_secret_key(
         self, _mock_sysrandom: MagicMock) -> None:
     with envset(BOKEH_SECRET_KEY="foo"):
         with pytest.warns(UserWarning) as warns:
             random, using_sysrandom = _get_sysrandom()
             assert not using_sysrandom
             assert len(warns) == 1
             assert warns[0].message.args[0] == _MERSENNE_MSG
Beispiel #7
0
 def test_explicit_envvar(self) -> None:
     with envset(BOKEH_ICO_PATH=join(HERE, "favicon-dev.ico")):
         with run_bokeh_serve(["--port", "0", "--glob", APPS]) as (p, nbsr):
             port = check_port(nbsr)
             assert port > 0
             r = requests.get(f"http://localhost:{port}/favicon.ico")
             assert r.status_code == 200
             assert r.headers["content-type"] == "image/x-icon"
             assert r.content == open( join(HERE, "favicon-dev.ico"), "rb").read()
Beispiel #8
0
 def test_dev_default(self) -> None:
     ps = bs.PrioritizedSetting("foo",
                                env_var="BOKEH_FOO",
                                default=10,
                                dev_default=25)
     assert ps.dev_default == 25
     with envset(BOKEH_DEV="yes"):
         assert ps() == 25
         assert ps(default=20) == 25
Beispiel #9
0
    def test_env_vars_precedence(self) -> None:
        b = beb.bundle_for_objs_and_resources([], INLINE)
        assert all('localhost' not in x for x in b.js_files)

        # this is a cheap test that a BokehJS file is inline
        assert any(len(x) > 5000 for x in b.js_raw)

        with envset(BOKEH_RESOURCES="server-dev"):
            b = beb.bundle_for_objs_and_resources([], INLINE)
        assert any('localhost' in x for x in b.js_files)

        # this is a cheap test that a BokehJS file is NOT inline
        assert all(len(x) < 5000 for x in b.js_raw)

        with envset(BOKEH_RESOURCES="cdn"):
            b = beb.bundle_for_objs_and_resources([], INLINE)
        assert any('cdn' in x for x in b.js_files)

        # this is a cheap test that a BokehJS file is NOT inline
        assert all(len(x) < 5000 for x in b.js_raw)
Beispiel #10
0
def test_xsrf_printed_envar() -> None:
    pat = re.compile(r'XSRF cookie protection enabled')
    m = None
    with envset(BOKEH_XSRF_COOKIES="yes"):
        with run_bokeh_serve(["--enable-xsrf-cookies"]) as p:
            nbsr = NBSR(p.stdout)
            m = None
            for i in range(20):
                o = nbsr.readline(0.5)
                if not o:
                    continue
                m = pat.search(o.decode())
                if m is not None:
                    break
            if m is None:
                pytest.fail("no matching log line in process output")
Beispiel #11
0
    async def test_allow_websocket_origin(self,
                                          ManagedServerLoop: MSL) -> None:
        application = Application()

        # allow good local origin with random port
        with ManagedServerLoop(application, port=0) as server:
            await self.check_http_ok_socket_ok(server,
                                               origin="http://localhost:%s" %
                                               server.port)

        # allow good origin
        with ManagedServerLoop(application,
                               allow_websocket_origin=["example.com"
                                                       ]) as server:
            await self.check_http_ok_socket_ok(server,
                                               origin="http://example.com:80")

        # allow good origin from environment variable
        with ManagedServerLoop(application) as server:
            with envset(BOKEH_ALLOW_WS_ORIGIN="example.com"):
                await self.check_http_ok_socket_ok(
                    server, origin="http://example.com:80")

        # allow good origin with port
        with ManagedServerLoop(application,
                               allow_websocket_origin=["example.com:8080"
                                                       ]) as server:
            await self.check_http_ok_socket_ok(
                server, origin="http://example.com:8080")

        # allow good origin with port from environment variable
        with ManagedServerLoop(application) as server:
            with envset(BOKEH_ALLOW_WS_ORIGIN="example.com:8080"):
                await self.check_http_ok_socket_ok(
                    server, origin="http://example.com:8080")

        # allow good origin header with an implicit 80
        with ManagedServerLoop(application,
                               allow_websocket_origin=["example.com"
                                                       ]) as server:
            await self.check_http_ok_socket_ok(server,
                                               origin="http://example.com")

        # allow good origin header with an implicit 80
        with ManagedServerLoop(application) as server:
            with envset(BOKEH_ALLOW_WS_ORIGIN="example.com"):
                await self.check_http_ok_socket_ok(server,
                                                   origin="http://example.com")

        # block non-Host origins by default even if no extra origins specified
        with ManagedServerLoop(application) as server:
            await self.check_http_ok_socket_blocked(
                server, origin="http://example.com:80")

        # block on a garbage Origin header
        with ManagedServerLoop(application) as server:
            await self.check_http_ok_socket_blocked(
                server, origin="hsdf:::///%#^$#:8080")

        # block bad origin
        with ManagedServerLoop(application,
                               allow_websocket_origin=["example.com"
                                                       ]) as server:
            await self.check_http_ok_socket_blocked(
                server, origin="http://foobar.com:80")

        # block bad origin from environment variable
        with ManagedServerLoop(application) as server:
            with envset(BOKEH_ALLOW_WS_ORIGIN="example.com"):
                await self.check_http_ok_socket_blocked(
                    server, origin="http://foobar.com:80")

        # block bad origin port
        with ManagedServerLoop(application,
                               allow_websocket_origin=["example.com:8080"
                                                       ]) as server:
            await self.check_http_ok_socket_blocked(
                server, origin="http://example.com:8081")

        # block bad origin port from environment variable
        with ManagedServerLoop(application) as server:
            with envset(BOKEH_ALLOW_WS_ORIGIN="example.com:8080"):
                await self.check_http_ok_socket_blocked(
                    server, origin="http://example.com:8081")
Beispiel #12
0
def test_envset_accepts_items() -> None:
    with _tue.envset([(UNLIKELY_KEY1, "10"), (UNLIKELY_KEY2, "20")]):
        assert os.environ[UNLIKELY_KEY1] == "10"
        assert os.environ[UNLIKELY_KEY2] == "20"
    assert UNLIKELY_KEY1 not in os.environ
    assert UNLIKELY_KEY2 not in os.environ
Beispiel #13
0
def test_envset_accepts_kwargs() -> None:
    with _tue.envset(**{UNLIKELY_KEY1: "10", UNLIKELY_KEY2: "20"}):
        assert os.environ[UNLIKELY_KEY1] == "10"
        assert os.environ[UNLIKELY_KEY2] == "20"
    assert UNLIKELY_KEY1 not in os.environ
    assert UNLIKELY_KEY2 not in os.environ
Beispiel #14
0
def test_envset_accepts_mix() -> None:
    with _tue.envset([(UNLIKELY_KEY1, "10")], **{UNLIKELY_KEY2: "20"}):
        assert os.environ[UNLIKELY_KEY1] == "10"
        assert os.environ[UNLIKELY_KEY2] == "20"
    assert UNLIKELY_KEY1 not in os.environ
    assert UNLIKELY_KEY2 not in os.environ
Beispiel #15
0
def test_envset_applies_kwargs_last() -> None:
    with _tue.envset([(UNLIKELY_KEY1, "10")], **{UNLIKELY_KEY1: "30", UNLIKELY_KEY2: "20"}):
        assert os.environ[UNLIKELY_KEY1] == "30"
        assert os.environ[UNLIKELY_KEY2] == "20"
    assert UNLIKELY_KEY1 not in os.environ
    assert UNLIKELY_KEY2 not in os.environ
Beispiel #16
0
 def test_printed_envar(self) -> None:
     pat = re.compile(r'XSRF cookie protection enabled')
     with envset(BOKEH_XSRF_COOKIES="yes"):
         with run_bokeh_serve(["--enable-xsrf-cookies"]) as (p, nbsr):
             assert_pattern(nbsr, pat)
Beispiel #17
0
def test_get_browser_controller_value_with_env(mock_get: MagicMock) -> None:
    with envset(BOKEH_BROWSER="bar"):
        bub.get_browser_controller('foo')
        assert mock_get.called
        assert mock_get.call_args[0] == ("foo", )
        assert mock_get.call_args[1] == {}
Beispiel #18
0
 def test_simple_ids_yes(self) -> None:
     bus._simple_id = 999
     with envset(BOKEH_SIMPLE_IDS="yes"):
         assert bus.make_id() == "1000"
         assert bus.make_id() == "1001"
         assert bus.make_id() == "1002"
Beispiel #19
0
 def test_env_var(self) -> None:
     with envset(BOKEH_FOO="30"):
         ps = bs.PrioritizedSetting("foo", env_var="BOKEH_FOO")
         assert ps.env_var == "BOKEH_FOO"
         assert ps() == "30"
         assert ps(default=20) == "30"
def test_env_resources(ManagedServerLoop: MSL) -> None:
    with envset(BOKEH_RESOURCES="cdn"):
        application = Application()
        with ManagedServerLoop(application) as server:
            r = server._tornado.resources()
            assert r.mode == "cdn"
Beispiel #21
0
 def test_env_var_converts(self) -> None:
     with envset(BOKEH_FOO="30"):
         ps = bs.PrioritizedSetting("foo", convert=int, env_var="BOKEH_FOO")
         assert ps() == 30
Beispiel #22
0
def test_get_browser_controller_dummy_with_env(mock_get: MagicMock) -> None:
    with envset(BOKEH_BROWSER="bar"):
        bub.get_browser_controller('none')
Beispiel #23
0
 def test_simple_ids_no(self) -> None:
     with envset(BOKEH_SIMPLE_IDS="no"):
         assert len(bus.make_id()) == 36
         assert isinstance(bus.make_id(), str)
Beispiel #24
0
def test_envset_preserves_id() -> None:
    env = os.environ
    with _tue.envset(foo="10"):
        assert os.environ is env
    assert os.environ is env