def test_swap(): env = Env(VAR='wakka') assert_equal(env['VAR'], 'wakka') # positional arg with env.swap({'VAR': 'foo'}): assert_equal(env['VAR'], 'foo') # make sure the environment goes back outside the context manager assert_equal(env['VAR'], 'wakka') # kwargs only with env.swap(VAR1='foo', VAR2='bar'): assert_equal(env['VAR1'], 'foo') assert_equal(env['VAR2'], 'bar') # positional and kwargs with env.swap({'VAR3': 'baz'}, VAR1='foo', VAR2='bar'): assert_equal(env['VAR1'], 'foo') assert_equal(env['VAR2'], 'bar') assert_equal(env['VAR3'], 'baz') # make sure the environment goes back outside the context manager assert_equal(env['VAR'], 'wakka') assert 'VAR1' not in env assert 'VAR2' not in env assert 'VAR3' not in env
def test_swap(): env = Env(VAR="wakka") assert env["VAR"] == "wakka" # positional arg with env.swap({"VAR": "foo"}): assert env["VAR"] == "foo" # make sure the environment goes back outside the context manager assert env["VAR"] == "wakka" # kwargs only with env.swap(VAR1="foo", VAR2="bar"): assert env["VAR1"] == "foo" assert env["VAR2"] == "bar" # positional and kwargs with env.swap({"VAR3": "baz"}, VAR1="foo", VAR2="bar"): assert env["VAR1"] == "foo" assert env["VAR2"] == "bar" assert env["VAR3"] == "baz" # make sure the environment goes back outside the context manager assert env["VAR"] == "wakka" assert "VAR1" not in env assert "VAR2" not in env assert "VAR3" not in env
def test_swap_exception_replacement(): env = Env(VAR="original value") try: with env.swap(VAR="inner value"): assert env["VAR"] == "inner value" raise Exception() except Exception: assert env["VAR"] == "original value" assert env["VAR"] == "original value"
def test_thread_local_swap(): env = Env(a="orig") iter_count = 10 num_threads = 4 success_variables = [False] * (num_threads + 1) def loop(index, swapped_values=None): if swapped_values: if env["a"] != "orig": success_variables[index] = False return env.set_swapped_values(swapped_values) for _ in range(iter_count): if env["a"] != "swapped": success_variables[index] = False break with env.swap(a=index): sleep(0.01) if env["a"] == index: success_variables[index] = True else: success_variables[index] = False break sleep(0.01) with env.swap(a="swapped"): threads = [ Thread(target=loop, args=(i, env.get_swapped_values())) for i in range(1, num_threads + 1) ] for t in threads: t.start() loop(0) for t in threads: t.join() assert all(success_variables)