diff options
author | Lukas Larsson <[email protected]> | 2017-02-20 10:31:42 +0100 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2017-02-20 10:34:07 +0100 |
commit | 44ab65763bbeb307a3431de284805325114a3d35 (patch) | |
tree | af4f268b84381924b41a7c8485bdef3add1de694 /lib/kernel | |
parent | 818989e624cebf061c1fc6311080350a95cb1e66 (diff) | |
download | otp-44ab65763bbeb307a3431de284805325114a3d35.tar.gz otp-44ab65763bbeb307a3431de284805325114a3d35.tar.bz2 otp-44ab65763bbeb307a3431de284805325114a3d35.zip |
kernel: Fail sticky_dir tc if module not sticky
Running this test when for some reason stdlib has been
unstickied could cause the emulator to die. So we check first
to make sure that the expected files are sticky.
Diffstat (limited to 'lib/kernel')
-rw-r--r-- | lib/kernel/test/code_SUITE.erl | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/lib/kernel/test/code_SUITE.erl b/lib/kernel/test/code_SUITE.erl index c5167efa56..5777b397b8 100644 --- a/lib/kernel/test/code_SUITE.erl +++ b/lib/kernel/test/code_SUITE.erl @@ -588,20 +588,28 @@ sticky_compiler(Files, PrivDir) -> [R || R <- Rets, R =/= ok]. do_sticky_compile(Mod, Dir) -> - %% Make sure that the module is loaded. A module being sticky - %% only prevents it from begin reloaded, not from being loaded - %% from the wrong place to begin with. - Mod = Mod:module_info(module), - File = filename:append(Dir, atom_to_list(Mod)), - Src = io_lib:format("-module(~s).\n" - "-export([test/1]).\n" - "test(me) -> fail.\n", [Mod]), - ok = file:write_file(File++".erl", Src), - case c:c(File, [{outdir,Dir}]) of - {ok,Module} -> - Module:test(me); - {error,sticky_directory} -> - ok + case code:is_sticky(Mod) of + true -> + %% Make sure that the module is loaded. A module being sticky + %% only prevents it from begin reloaded, not from being loaded + %% from the wrong place to begin with. + Mod = Mod:module_info(module), + File = filename:append(Dir, atom_to_list(Mod)), + Src = io_lib:format("-module(~s).\n" + "-export([test/1]).\n" + "test(me) -> fail.\n", [Mod]), + ok = file:write_file(File++".erl", Src), + case c:c(File, [{outdir,Dir}]) of + {ok,Module} -> + Module:test(me); + {error,sticky_directory} -> + ok + end; + false -> + %% For some reason the module is not sticky + %% could be that the .erlang file has + %% unstuck it? + {Mod, is_not_sticky} end. %% Test that the -pa and -pz options work as expected. |