gnu: elixir: Enable more tests and remove patch.

Previously, due to issues in the erlang package, many tests would fail, and
the package would also nondeterministically fail to build. This is now
fixed (by patching occurrences of /bin/sh in the erlang package), so all the
tests can be run.

* gnu/packages/elixir.scm (elixir)[source]: Remove patches.
[arguments]: Remove the fix-or-disable-tests phase. Add a new set-home phase
to set the HOME environment variable prior to running the tests.
* gnu/packages/patches/elixir-disable-failing-tests.patch: Delete this file.
* gnu/local.mk: Remove now deleted patch.
This commit is contained in:
Christopher Baines 2018-06-01 14:32:28 +01:00
parent b5453aa7c3
commit e7a25d2ae7
No known key found for this signature in database
GPG Key ID: 5E28A33B0B84F577
3 changed files with 6 additions and 315 deletions

View File

@ -641,7 +641,6 @@ dist_patch_DATA = \
%D%/packages/patches/e2fsprogs-glibc-2.27.patch \ %D%/packages/patches/e2fsprogs-glibc-2.27.patch \
%D%/packages/patches/eigen-arm-neon-fixes.patch \ %D%/packages/patches/eigen-arm-neon-fixes.patch \
%D%/packages/patches/elfutils-tests-ptrace.patch \ %D%/packages/patches/elfutils-tests-ptrace.patch \
%D%/packages/patches/elixir-disable-failing-tests.patch \
%D%/packages/patches/elogind-glibc-2.27.patch \ %D%/packages/patches/elogind-glibc-2.27.patch \
%D%/packages/patches/einstein-build.patch \ %D%/packages/patches/einstein-build.patch \
%D%/packages/patches/emacs-browse-at-remote-cgit-gnu.patch \ %D%/packages/patches/emacs-browse-at-remote-cgit-gnu.patch \

View File

@ -40,15 +40,7 @@
(file-name (string-append name "-" version ".tar.gz")) (file-name (string-append name "-" version ".tar.gz"))
(sha256 (sha256
(base32 (base32
"0acnxfwvkx1m1d0h5z051mz95n35zm468hcvc3wpmn17c15h5ihg")) "0acnxfwvkx1m1d0h5z051mz95n35zm468hcvc3wpmn17c15h5ihg"))))
;; FIXME: 27 tests (out of 4K) had to be disabled as
;; they fail in the build environment. Common failures
;; are:
;; - Mix.Shell.cmd() fails with error 130
;; - The git_repo fixture cannot be found
;; - Communication with spawned processes fails with EPIPE
;; - Failure to copy files
(patches (search-patches "elixir-disable-failing-tests.patch"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(arguments (arguments
`(#:test-target "test" `(#:test-target "test"
@ -70,27 +62,6 @@
(("#!/usr/bin/env elixir") (("#!/usr/bin/env elixir")
(string-append "#!" out "/bin/elixir")))) (string-append "#!" out "/bin/elixir"))))
#t)) #t))
(add-after 'unpack 'fix-or-disable-tests
(lambda* (#:key inputs #:allow-other-keys)
;; Some tests require access to a home directory.
(setenv "HOME" "/tmp")
;; FIXME: These tests fail because the "git_repo" fixture does
;; not exist or cannot be found.
(delete-file "lib/mix/test/mix/tasks/deps.git_test.exs")
;; FIXME: Mix.Shell.cmd() always fails with error code 130.
(delete-file "lib/mix/test/mix/shell_test.exs")
;; FIXME:
;; disabled failing impure tests to make it build again.
;; related discussion: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=28034#14
(delete-file "lib/elixir/test/elixir/kernel/cli_test.exs")
(delete-file "lib/elixir/test/elixir/kernel/dialyzer_test.exs")
(delete-file "lib/iex/test/iex/helpers_test.exs")
(delete-file "lib/ex_unit/test/ex_unit/capture_io_test.exs")
#t))
(add-before 'build 'make-current (add-before 'build 'make-current
;; The Elixir compiler checks whether or not to compile files by ;; The Elixir compiler checks whether or not to compile files by
;; inspecting their timestamps. When the timestamp is equal to the ;; inspecting their timestamps. When the timestamp is equal to the
@ -102,6 +73,11 @@
(utime file recent recent 0 0))) (utime file recent recent 0 0)))
(find-files "." ".*")) (find-files "." ".*"))
#t)) #t))
(add-before 'check 'set-home
(lambda* (#:key inputs #:allow-other-keys)
;; Some tests require access to a home directory.
(setenv "HOME" "/tmp")
#t))
(delete 'configure)))) (delete 'configure))))
(inputs (inputs
`(("erlang" ,erlang) `(("erlang" ,erlang)

View File

@ -1,284 +0,0 @@
Most of these tests fail for unknown reasons when run in the chroot
environment of a Guix build process.
Common failures are:
* Mix.Shell.cmd() fails with error 130
* The git_repo fixture cannot be found
* Communication with spawned processes fails with EPIPE
* Failure to copy files
diff --git a/lib/elixir/test/elixir/kernel/cli_test.exs b/lib/elixir/test/elixir/kernel/cli_test.exs
index 3ffd56c..1232d19 100644
--- a/lib/elixir/test/elixir/kernel/cli_test.exs
+++ b/lib/elixir/test/elixir/kernel/cli_test.exs
@@ -39,6 +39,7 @@ end
defmodule Kernel.CLI.OptionParsingTest do
use ExUnit.Case, async: true
+ @tag :skip
test "properly parses paths" do
root = fixture_path("../../..") |> to_charlist
list = elixir('-pa "#{root}/*" -pz "#{root}/lib/*" -e "IO.inspect(:code.get_path, limit: :infinity)"')
@@ -57,6 +58,7 @@ end
defmodule Kernel.CLI.AtExitTest do
use ExUnit.Case, async: true
+ @tag :skip
test "invokes at_exit callbacks" do
assert elixir(fixture_path("at_exit.exs") |> to_charlist) ==
'goodbye cruel world with status 1\n'
@@ -66,6 +68,7 @@ end
defmodule Kernel.CLI.ErrorTest do
use ExUnit.Case, async: true
+ @tag :skip
test "properly format errors" do
assert :string.str('** (throw) 1', elixir('-e "throw 1"')) == 0
assert :string.str('** (ErlangError) erlang error: 1', elixir('-e "error 1"')) == 0
@@ -86,6 +89,7 @@ defmodule Kernel.CLI.CompileTest do
{:ok, [tmp_dir_path: tmp_dir_path, beam_file_path: beam_file_path, fixture: fixture]}
end
+ @tag :skip
test "compiles code", context do
assert elixirc('#{context[:fixture]} -o #{context[:tmp_dir_path]}') == ''
assert File.regular?(context[:beam_file_path])
@@ -96,6 +100,7 @@ defmodule Kernel.CLI.CompileTest do
Code.delete_path context[:tmp_dir_path]
end
+ @tag :skip
test "fails on missing patterns", context do
output = elixirc('#{context[:fixture]} non_existing.ex -o #{context[:tmp_dir_path]}')
assert :string.str(output, 'non_existing.ex') > 0, "expected non_existing.ex to be mentioned"
@@ -103,6 +108,7 @@ defmodule Kernel.CLI.CompileTest do
refute File.exists?(context[:beam_file_path]), "expected the sample to not be compiled"
end
+ @tag :skip
test "fails on missing write access to .beam file", context do
compilation_args = '#{context[:fixture]} -o #{context[:tmp_dir_path]}'
diff --git a/lib/elixir/test/elixir/kernel/dialyzer_test.exs b/lib/elixir/test/elixir/kernel/dialyzer_test.exs
index 801d852..40fc5bc 100644
--- a/lib/elixir/test/elixir/kernel/dialyzer_test.exs
+++ b/lib/elixir/test/elixir/kernel/dialyzer_test.exs
@@ -60,16 +60,19 @@ defmodule Kernel.DialyzerTest do
assert_dialyze_no_warnings! context
end
+ @tag :skip
test "no warnings on rewrites", context do
copy_beam! context, Dialyzer.Rewrite
assert_dialyze_no_warnings! context
end
+ @tag :skip
test "no warnings on raise", context do
copy_beam! context, Dialyzer.Raise
assert_dialyze_no_warnings! context
end
+ @tag :skip
test "no warnings on macrocallback", context do
copy_beam! context, Dialyzer.Macrocallback
copy_beam! context, Dialyzer.Macrocallback.Impl
diff --git a/lib/elixir/test/elixir/system_test.exs b/lib/elixir/test/elixir/system_test.exs
index aafa559..0f9c178 100644
--- a/lib/elixir/test/elixir/system_test.exs
+++ b/lib/elixir/test/elixir/system_test.exs
@@ -53,7 +53,8 @@ defmodule SystemTest do
assert System.endianness in [:little, :big]
assert System.endianness == System.compiled_endianness
end
-
+
+ @tag :skip
test "argv/0" do
list = elixir('-e "IO.inspect System.argv" -- -o opt arg1 arg2 --long-opt 10')
{args, _} = Code.eval_string list, []
diff --git a/lib/mix/test/mix/dep_test.exs b/lib/mix/test/mix/dep_test.exs
index fff3351..d6ed1b3 100644
--- a/lib/mix/test/mix/dep_test.exs
+++ b/lib/mix/test/mix/dep_test.exs
@@ -244,6 +244,7 @@ defmodule Mix.DepTest do
end
end
+ @tag :skip
test "remote converger" do
deps = [{:deps_repo, "0.1.0", path: "custom/deps_repo"},
{:git_repo, "0.2.0", git: MixTest.Case.fixture_path("git_repo")}]
@@ -301,6 +302,7 @@ defmodule Mix.DepTest do
end
end
+ @tag :skip
test "remote converger is not invoked if deps diverge" do
deps = [{:deps_repo, "0.1.0", path: "custom/deps_repo"},
{:git_repo, "0.2.0", git: MixTest.Case.fixture_path("git_repo"), only: :test}]
diff --git a/lib/mix/test/mix/shell/io_test.exs b/lib/mix/test/mix/shell/io_test.exs
index 9bfb6b4..d982ef3 100644
--- a/lib/mix/test/mix/shell/io_test.exs
+++ b/lib/mix/test/mix/shell/io_test.exs
@@ -29,6 +29,7 @@ defmodule Mix.Shell.IOTest do
assert capture_io("", fn -> refute yes?("Ok?") end)
end
+ @tag :skip
test "runs a given command" do
assert capture_io("", fn -> assert cmd("echo hello") == 0 end) == "hello\n"
diff --git a/lib/mix/test/mix/shell/quiet_test.exs b/lib/mix/test/mix/shell/quiet_test.exs
index 626429b..99fab35 100644
--- a/lib/mix/test/mix/shell/quiet_test.exs
+++ b/lib/mix/test/mix/shell/quiet_test.exs
@@ -29,6 +29,7 @@ defmodule Mix.Shell.QuietTest do
assert capture_io("", fn -> refute yes?("Ok?") end)
end
+ @tag :skip
test "runs a given command" do
assert capture_io("", fn -> assert cmd("echo hello") == 0 end) == ""
diff --git a/lib/mix/test/mix/tasks/cmd_test.exs b/lib/mix/test/mix/tasks/cmd_test.exs
index db4bf06..4d441f7 100644
--- a/lib/mix/test/mix/tasks/cmd_test.exs
+++ b/lib/mix/test/mix/tasks/cmd_test.exs
@@ -3,6 +3,7 @@ Code.require_file "../../test_helper.exs", __DIR__
defmodule Mix.Tasks.CmdTest do
use MixTest.Case
+ @tag :skip
test "runs the command for each app" do
in_fixture "umbrella_dep/deps/umbrella", fn ->
Mix.Project.in_project(:umbrella, ".", fn _ ->
diff --git a/lib/mix/test/mix/tasks/deps.tree_test.exs b/lib/mix/test/mix/tasks/deps.tree_test.exs
index 4f09ff3..c371997 100644
--- a/lib/mix/test/mix/tasks/deps.tree_test.exs
+++ b/lib/mix/test/mix/tasks/deps.tree_test.exs
@@ -29,6 +29,7 @@ defmodule Mix.Tasks.Deps.TreeTest do
end
end
+ @tag :skip
test "shows the dependency tree", context do
Mix.Project.push ConvergedDepsApp
@@ -109,6 +110,7 @@ defmodule Mix.Tasks.Deps.TreeTest do
end
end
+ @tag :skip
test "shows the dependency tree in DOT graph format", context do
Mix.Project.push ConvergedDepsApp
diff --git a/lib/mix/test/mix/tasks/deps_test.exs b/lib/mix/test/mix/tasks/deps_test.exs
index b061777..cc45cf8 100644
--- a/lib/mix/test/mix/tasks/deps_test.exs
+++ b/lib/mix/test/mix/tasks/deps_test.exs
@@ -96,6 +96,7 @@
end
end
+ @tag :skip
test "prints list of dependencies and their lock status" do
Mix.Project.push DepsApp
@@ -409,6 +409,7 @@ defmodule Mix.Tasks.DepsTest do
end
end
+ @tag :skip
test "fails on diverged dependencies by requirement" do
Mix.Project.push ConvergedDepsApp
@@ -440,6 +441,7 @@ defmodule Mix.Tasks.DepsTest do
end
end
+ @tag :skip
test "fails on diverged dependencies even when optional" do
Mix.Project.push ConvergedDepsApp
@@ -469,6 +471,7 @@ defmodule Mix.Tasks.DepsTest do
end
end
+ @tag :skip
test "works with converged dependencies" do
Mix.Project.push ConvergedDepsApp
@@ -491,6 +494,7 @@ defmodule Mix.Tasks.DepsTest do
purge [GitRepo, GitRepo.Mixfile]
end
+ @tag :skip
test "works with overridden dependencies" do
Mix.Project.push OverriddenDepsApp
diff --git a/lib/mix/test/mix/umbrella_test.exs b/lib/mix/test/mix/umbrella_test.exs
index 69f9428..406668a 100644
--- a/lib/mix/test/mix/umbrella_test.exs
+++ b/lib/mix/test/mix/umbrella_test.exs
@@ -98,6 +98,7 @@ defmodule Mix.UmbrellaTest do
end
end
+ @tag :skip
test "loads umbrella child dependencies in all environments" do
in_fixture "umbrella_dep/deps/umbrella", fn ->
Mix.Project.in_project :umbrella, ".", fn _ ->
diff --git a/lib/elixir/test/elixir/kernel/dialyzer_test.exs b/lib/elixir/test/elixir/kernel/dialyzer_test.exs
index 792222c..e90beb9 100644
--- a/lib/elixir/test/elixir/kernel/dialyzer_test.exs
+++ b/lib/elixir/test/elixir/kernel/dialyzer_test.exs
@@ -54,6 +54,7 @@ defmodule Kernel.DialyzerTest do
{:ok, [outdir: dir, dialyzer: dialyzer]}
end
+ @tag :skip
test "no warnings on valid remote calls", context do
copy_beam! context, Dialyzer.RemoteCall
assert_dialyze_no_warnings! context
@@ -78,11 +79,13 @@ defmodule Kernel.DialyzerTest do
assert_dialyze_no_warnings! context
end
+ @tag :skip
test "no warnings on struct update", context do
copy_beam! context, Dialyzer.StructUpdate
assert_dialyze_no_warnings! context
end
+ @tag :skip
test "no warnings on protocol calls with opaque types", context do
copy_beam! context, Dialyzer.ProtocolOpaque
copy_beam! context, Dialyzer.ProtocolOpaque.Entity
@@ -90,6 +93,7 @@ defmodule Kernel.DialyzerTest do
assert_dialyze_no_warnings! context
end
+ @tag :skip
test "no warnings on and/2 and or/2", context do
copy_beam! context, Dialyzer.BooleanCheck
assert_dialyze_no_warnings! context
diff --git a/Makefile b/Makefile
index 2fc4f9a..aef8366 100644
--- a/Makefile
+++ b/Makefile
@@ -201,7 +201,7 @@ $(TEST_EBIN)/%.beam: $(TEST_ERL)/%.erl
$(Q) mkdir -p $(TEST_EBIN)
$(Q) $(ERLC) -o $(TEST_EBIN) $<
-test_elixir: test_stdlib test_ex_unit test_logger test_mix test_eex test_iex
+test_elixir: test_stdlib test_ex_unit test_logger test_eex test_iex
test_stdlib: compile
@ echo "==> elixir (exunit)"