25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

195 lines
8.7 KiB

  1. -module(rebar_release_SUITE).
  2. -compile(export_all).
  3. -include_lib("common_test/include/ct.hrl").
  4. -include_lib("eunit/include/eunit.hrl").
  5. all() -> [release,
  6. dev_mode_release,
  7. profile_dev_mode_override_release,
  8. tar,
  9. profile_ordering_sys_config_extend,
  10. profile_ordering_sys_config_extend_3_tuple_merge,
  11. extend_release,
  12. user_output_dir].
  13. init_per_testcase(Case, Config0) ->
  14. Config = rebar_test_utils:init_rebar_state(Config0),
  15. Name = rebar_test_utils:create_random_name(atom_to_list(Case)),
  16. AppDir = ?config(apps, Config),
  17. application:load(rebar),
  18. ok = ec_file:mkdir_p(AppDir),
  19. State = rebar_state:new([{base_dir, filename:join([AppDir, "_build"])}]),
  20. rebar_test_utils:create_app(AppDir, Name, "1.0.0", [kernel, stdlib]),
  21. [{name, Name}, {apps, AppDir}, {state, State} | Config].
  22. end_per_testcase(_, Config) ->
  23. meck:unload(),
  24. Config.
  25. release(Config) ->
  26. AppDir = ?config(apps, Config),
  27. Name = ?config(name, Config),
  28. Vsn = "1.0.0",
  29. {ok, RebarConfig} =
  30. file:consult(rebar_test_utils:create_config(AppDir,
  31. [{relx, [{release, {list_to_atom(Name), Vsn},
  32. [list_to_atom(Name)]},
  33. {lib_dirs, [AppDir]}]}])),
  34. rebar_test_utils:run_and_check(
  35. Config, RebarConfig,
  36. ["release"],
  37. {ok, [{release, list_to_atom(Name), Vsn, false}]}
  38. ).
  39. dev_mode_release(Config) ->
  40. AppDir = ?config(apps, Config),
  41. Name = ?config(name, Config),
  42. Vsn = "1.0.0",
  43. {ok, RebarConfig} =
  44. file:consult(rebar_test_utils:create_config(AppDir,
  45. [{relx, [{release, {list_to_atom(Name), Vsn},
  46. [list_to_atom(Name)]},
  47. {lib_dirs, [AppDir]},
  48. {dev_mode, true}]}])),
  49. rebar_test_utils:run_and_check(
  50. Config, RebarConfig,
  51. ["release"],
  52. {ok, [{release, list_to_atom(Name), Vsn, true}]}
  53. ).
  54. profile_dev_mode_override_release(Config) ->
  55. AppDir = ?config(apps, Config),
  56. Name = ?config(name, Config),
  57. Vsn = "1.0.0",
  58. {ok, RebarConfig} =
  59. file:consult(rebar_test_utils:create_config(AppDir,
  60. [{relx, [{release, {list_to_atom(Name), Vsn},
  61. [list_to_atom(Name)]},
  62. {lib_dirs, [AppDir]},
  63. {dev_mode, true}]},
  64. {profiles,
  65. [{ct,
  66. [{relx, [{dev_mode, false}]}]}]}])),
  67. rebar_test_utils:run_and_check(
  68. Config, RebarConfig,
  69. ["as", "ct", "release"],
  70. {ok, [{release, list_to_atom(Name), Vsn, false}]}
  71. ).
  72. tar(Config) ->
  73. AppDir = ?config(apps, Config),
  74. Name = ?config(name, Config),
  75. Vsn = "1.0.0",
  76. {ok, RebarConfig} =
  77. file:consult(rebar_test_utils:create_config(AppDir,
  78. [{relx, [{release, {list_to_atom(Name), Vsn},
  79. [list_to_atom(Name)]},
  80. {lib_dirs, [AppDir]}]}])),
  81. rebar_test_utils:run_and_check(
  82. Config, RebarConfig,
  83. ["tar"],
  84. {ok, [{release, list_to_atom(Name), Vsn, false}, {tar, Name, Vsn}]}
  85. ).
  86. %% Test that the order of release config args is not lost. If it is extend would fail.
  87. extend_release(Config) ->
  88. AppDir = ?config(apps, Config),
  89. Name = ?config(name, Config),
  90. Vsn = "1.0.0",
  91. {ok, RebarConfig} =
  92. file:consult(rebar_test_utils:create_config(AppDir,
  93. [{relx, [{release, {list_to_atom(Name), Vsn},
  94. [list_to_atom(Name)]},
  95. {release, {extended, Vsn, {extend, list_to_atom(Name)}},
  96. []},
  97. {lib_dirs, [AppDir]}]}])),
  98. rebar_test_utils:run_and_check(
  99. Config, RebarConfig,
  100. ["release", "-n", "extended"],
  101. {ok, [{release, extended, Vsn, false}]}
  102. ).
  103. %% Ensure proper ordering of sys_config and extended releases in profiles
  104. profile_ordering_sys_config_extend(Config) ->
  105. AppDir = ?config(apps, Config),
  106. Name = ?config(name, Config),
  107. Vsn = "1.0.0",
  108. TestSysConfig = filename:join(AppDir, "test.config"),
  109. OtherSysConfig = filename:join(AppDir, "other.config"),
  110. ok = file:write_file(TestSysConfig, "[]."),
  111. ok = file:write_file(OtherSysConfig, "[{some, content}]."),
  112. {ok, RebarConfig} =
  113. file:consult(rebar_test_utils:create_config(AppDir,
  114. [{relx, [{release, {list_to_atom(Name), Vsn},
  115. [list_to_atom(Name)]},
  116. {sys_config, OtherSysConfig},
  117. {lib_dirs, [AppDir]}]},
  118. {profiles, [{extended,
  119. [{relx, [
  120. {sys_config, TestSysConfig}]}]}]}])),
  121. rebar_test_utils:run_and_check(
  122. Config, RebarConfig,
  123. ["as", "extended", "release"],
  124. {ok, [{release, list_to_atom(Name), Vsn, false}]}
  125. ),
  126. ReleaseDir = filename:join([AppDir, "./_build/extended/rel/", Name, "releases", Vsn]),
  127. {ok, [[]]} = file:consult(filename:join(ReleaseDir, "sys.config")).
  128. %% test that tup_umerge works with tuples of different sizes
  129. profile_ordering_sys_config_extend_3_tuple_merge(Config) ->
  130. AppDir = ?config(apps, Config),
  131. Name = ?config(name, Config),
  132. Vsn = "1.0.0",
  133. TestSysConfig = filename:join(AppDir, "test.config"),
  134. OtherSysConfig = filename:join(AppDir, "other.config"),
  135. ok = file:write_file(TestSysConfig, "[]."),
  136. ok = file:write_file(OtherSysConfig, "[{some, content}]."),
  137. {ok, RebarConfig} =
  138. file:consult(rebar_test_utils:create_config(AppDir,
  139. [{relx, [{release, {list_to_atom(Name), Vsn},
  140. [list_to_atom(Name)]},
  141. {sys_config, OtherSysConfig},
  142. {lib_dirs, [AppDir]}]},
  143. {profiles, [{extended,
  144. [{relx, [
  145. {release, {extended, Vsn, {extend, list_to_atom(Name)}},
  146. []},
  147. {sys_config, TestSysConfig}]}]}]}])),
  148. rebar_test_utils:run_and_check(
  149. Config, RebarConfig,
  150. ["as", "extended", "release", "-n", Name],
  151. {ok, [{release, list_to_atom(Name), Vsn, false}]}
  152. ),
  153. ReleaseDir = filename:join([AppDir, "./_build/extended/rel/", Name, "releases", Vsn]),
  154. {ok, [[]]} = file:consult(filename:join(ReleaseDir, "sys.config")).
  155. user_output_dir(Config) ->
  156. AppDir = ?config(apps, Config),
  157. Name = ?config(name, Config),
  158. ReleaseDir = filename:join(AppDir, "./_rel"),
  159. Vsn = "1.0.0",
  160. {ok, RebarConfig} =
  161. file:consult(rebar_test_utils:create_config(AppDir,
  162. [{relx, [{release, {list_to_atom(Name), Vsn},
  163. [list_to_atom(Name)]},
  164. {lib_dirs, [AppDir]},
  165. {dev_mode, true}]}])),
  166. rebar_test_utils:run_and_check(
  167. Config, RebarConfig,
  168. ["release", "-o", ReleaseDir],
  169. {ok, []}
  170. ),
  171. RelxState = rlx_state:new("", [], []),
  172. RelxState1 = rlx_state:base_output_dir(RelxState, ReleaseDir),
  173. {ok, RelxState2} = rlx_prv_app_discover:do(RelxState1),
  174. {ok, RelxState3} = rlx_prv_rel_discover:do(RelxState2),
  175. rlx_state:get_realized_release(RelxState3, list_to_atom(Name), Vsn).