@@ -9,7 +9,7 @@ defmodule Mix.Tasks.ReleaseTest do
99 defmacrop release_node ( name ) , do: :"#{ name } @#{ @ hostname } "
1010
1111 describe "customize" do
12- test "rel with EEx" do
12+ test "env and vm.args with EEx" do
1313 in_fixture ( "release_test" , fn ->
1414 Mix.Project . in_project ( :release_test , "." , fn _ ->
1515 File . mkdir_p! ( "rel" )
@@ -36,7 +36,106 @@ defmodule Mix.Tasks.ReleaseTest do
3636 end )
3737 end
3838
39- test "tar" do
39+ test "steps" do
40+ in_fixture ( "release_test" , fn ->
41+ last_step = fn release ->
42+ send ( self ( ) , { :last_step , release } )
43+ release
44+ end
45+
46+ first_step = fn release ->
47+ send ( self ( ) , { :first_step , release } )
48+ update_in ( release . steps , & ( & 1 ++ [ last_step ] ) )
49+ end
50+
51+ config = [ releases: [ demo: [ steps: [ first_step , :assemble ] ] ] ]
52+
53+ Mix.Project . in_project ( :release_test , "." , config , fn _ ->
54+ Mix.Task . run ( "release" )
55+ assert_received { :mix_shell , :info , [ "* assembling demo-0.1.0 on MIX_ENV=dev" ] }
56+
57+ # Discard info messages from inbox for upcoming assertions
58+ Mix . shell ( ) . flush ( & & 1 )
59+
60+ { :messages ,
61+ [
62+ { :first_step , % Mix.Release { steps: [ :assemble ] } } ,
63+ { :last_step , % Mix.Release { steps: [ ] } }
64+ ] } = Process . info ( self ( ) , :messages )
65+ end )
66+ end )
67+ end
68+
69+ test "include_executables_for" do
70+ in_fixture ( "release_test" , fn ->
71+ config = [ releases: [ release_test: [ include_executables_for: [ ] ] ] ]
72+
73+ Mix.Project . in_project ( :release_test , "." , config , fn _ ->
74+ root = Path . absname ( "_build/dev/rel/release_test" )
75+ Mix.Task . run ( "release" )
76+ assert_received { :mix_shell , :info , [ "* assembling release_test-0.1.0 on MIX_ENV=dev" ] }
77+
78+ refute root |> Path . join ( "bin/start" ) |> File . exists? ( )
79+ refute root |> Path . join ( "bin/start.bat" ) |> File . exists? ( )
80+ refute root |> Path . join ( "releases/0.1.0/elixir" ) |> File . exists? ( )
81+ refute root |> Path . join ( "releases/0.1.0/elixir.bat" ) |> File . exists? ( )
82+ refute root |> Path . join ( "releases/0.1.0/iex" ) |> File . exists? ( )
83+ refute root |> Path . join ( "releases/0.1.0/iex.bat" ) |> File . exists? ( )
84+ end )
85+ end )
86+ end
87+
88+ test "default overlays" do
89+ in_fixture ( "release_test" , fn ->
90+ Mix.Project . in_project ( :release_test , "." , fn _ ->
91+ File . mkdir_p! ( "rel/overlays/empty/directory" )
92+ File . write! ( "rel/overlays/hello" , "world" )
93+
94+ root = Path . absname ( "_build/dev/rel/release_test" )
95+ Mix.Task . run ( "release" )
96+
97+ assert root |> Path . join ( "empty/directory" ) |> File . dir? ( )
98+ assert root |> Path . join ( "hello" ) |> File . read! ( ) == "world"
99+ end )
100+ end )
101+ end
102+
103+ test "custom overlays" do
104+ in_fixture ( "release_test" , fn ->
105+ config = [ releases: [ release_test: [ overlays: "rel/another" ] ] ]
106+
107+ Mix.Project . in_project ( :release_test , "." , config , fn _ ->
108+ assert_raise Mix.Error , ~r" a string pointing to an existing directory" , fn ->
109+ Mix.Task . run ( "release" , [ "--overwrite" ] )
110+ end
111+
112+ File . mkdir_p! ( "rel/another/empty/directory" )
113+ File . write! ( "rel/another/hello" , "world" )
114+
115+ root = Path . absname ( "_build/dev/rel/release_test" )
116+ Mix.Task . rerun ( "release" , [ "--overwrite" ] )
117+
118+ assert root |> Path . join ( "empty/directory" ) |> File . dir? ( )
119+ assert root |> Path . join ( "hello" ) |> File . read! ( ) == "world"
120+ end )
121+ end )
122+ end
123+ end
124+
125+ describe "errors" do
126+ test "requires a matching name" do
127+ in_fixture ( "release_test" , fn ->
128+ Mix.Project . in_project ( :release_test , "." , fn _ ->
129+ assert_raise Mix.Error , ~r" Unknown release :unknown" , fn ->
130+ Mix.Task . run ( "release" , [ "unknown" ] )
131+ end
132+ end )
133+ end )
134+ end
135+ end
136+
137+ describe "tar" do
138+ test "with ERTS" do
40139 in_fixture ( "release_test" , fn ->
41140 config = [ releases: [ demo: [ steps: [ :assemble , :tar ] ] ] ]
42141
@@ -51,6 +150,10 @@ defmodule Mix.Tasks.ReleaseTest do
51150 File . mkdir_p! ( ignored_release_path )
52151 File . touch ( Path . join ( ignored_release_path , "ignored" ) )
53152
153+ # Overlays
154+ File . mkdir_p! ( "rel/overlays/empty/directory" )
155+ File . write! ( "rel/overlays/hello" , "world" )
156+
54157 Mix.Task . run ( "release" )
55158 tar_path = Path . expand ( Path . join ( [ root , ".." , ".." , "demo-0.1.0.tar.gz" ] ) )
56159 message = "* building #{ tar_path } "
@@ -67,6 +170,8 @@ defmodule Mix.Tasks.ReleaseTest do
67170 assert "releases/0.1.0/vm.args" in files
68171 assert "releases/COOKIE" in files
69172 assert "releases/start_erl.data" in files
173+ assert "hello" in files
174+ assert "empty/directory" in files
70175 assert Enum . any? ( files , & ( & 1 =~ "erts" ) )
71176 assert Enum . any? ( files , & ( & 1 =~ "stdlib" ) )
72177
@@ -81,7 +186,7 @@ defmodule Mix.Tasks.ReleaseTest do
81186 end )
82187 end
83188
84- test "tar without ERTS" do
189+ test "without ERTS" do
85190 in_fixture ( "release_test" , fn ->
86191 config = [ releases: [ demo: [ include_erts: false , steps: [ :assemble , :tar ] ] ] ]
87192
@@ -103,55 +208,6 @@ defmodule Mix.Tasks.ReleaseTest do
103208 end )
104209 end )
105210 end
106-
107- test "steps" do
108- in_fixture ( "release_test" , fn ->
109- last_step = fn release ->
110- send ( self ( ) , { :last_step , release } )
111- release
112- end
113-
114- first_step = fn release ->
115- send ( self ( ) , { :first_step , release } )
116- update_in ( release . steps , & ( & 1 ++ [ last_step ] ) )
117- end
118-
119- config = [ releases: [ demo: [ steps: [ first_step , :assemble ] ] ] ]
120-
121- Mix.Project . in_project ( :release_test , "." , config , fn _ ->
122- Mix.Task . run ( "release" )
123- assert_received { :mix_shell , :info , [ "* assembling demo-0.1.0 on MIX_ENV=dev" ] }
124-
125- # Discard info messages from inbox for upcoming assertions
126- Mix . shell ( ) . flush ( & & 1 )
127-
128- { :messages ,
129- [
130- { :first_step , % Mix.Release { steps: [ :assemble ] } } ,
131- { :last_step , % Mix.Release { steps: [ ] } }
132- ] } = Process . info ( self ( ) , :messages )
133- end )
134- end )
135- end
136-
137- test "include_executables_for" do
138- in_fixture ( "release_test" , fn ->
139- config = [ releases: [ release_test: [ include_executables_for: [ ] ] ] ]
140-
141- Mix.Project . in_project ( :release_test , "." , config , fn _ ->
142- root = Path . absname ( "_build/dev/rel/release_test" )
143- Mix.Task . run ( "release" )
144- assert_received { :mix_shell , :info , [ "* assembling release_test-0.1.0 on MIX_ENV=dev" ] }
145-
146- refute root |> Path . join ( "bin/start" ) |> File . exists? ( )
147- refute root |> Path . join ( "bin/start.bat" ) |> File . exists? ( )
148- refute root |> Path . join ( "releases/0.1.0/elixir" ) |> File . exists? ( )
149- refute root |> Path . join ( "releases/0.1.0/elixir.bat" ) |> File . exists? ( )
150- refute root |> Path . join ( "releases/0.1.0/iex" ) |> File . exists? ( )
151- refute root |> Path . join ( "releases/0.1.0/iex.bat" ) |> File . exists? ( )
152- end )
153- end )
154- end
155211 end
156212
157213 test "assembles a bootable release with ERTS" do
@@ -555,16 +611,6 @@ defmodule Mix.Tasks.ReleaseTest do
555611 end )
556612 end
557613
558- test "requires a matching name" do
559- in_fixture ( "release_test" , fn ->
560- Mix.Project . in_project ( :release_test , "." , fn _ ->
561- assert_raise Mix.Error , ~r" Unknown release :unknown" , fn ->
562- Mix.Task . run ( "release" , [ "unknown" ] )
563- end
564- end )
565- end )
566- end
567-
568614 defp open_port ( command , args , env \\ [ ] ) do
569615 Port . open ( { :spawn_executable , to_charlist ( command ) } , [ :hide , args: args , env: env ] )
570616 end
0 commit comments