Skip to content

Commit

Permalink
Replace EF tests submodule with a makefile
Browse files Browse the repository at this point in the history
  • Loading branch information
paulhauner committed Sep 7, 2019
1 parent 9b062e0 commit 9461b50
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 16 deletions.
3 changes: 0 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +0,0 @@
[submodule "tests/ef_tests/eth2.0-spec-tests"]
path = tests/ef_tests/eth2.0-spec-tests
url = https://github.com/ethereum/eth2.0-spec-tests
31 changes: 31 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
TESTS_TAG := v0.8.3
TESTS = general minimal mainnet

TESTS_BASE_DIR := ./tests/ef_tests
REPO_NAME := eth2.0-spec-tests
OUTPUT_DIR := $(TESTS_BASE_DIR)/$(REPO_NAME)

BASE_URL := https://github.com/ethereum/$(REPO_NAME)/releases/download/$(SPEC_VERSION)

release:
cargo build --all --release

clean_ef_tests:
rm -r $(OUTPUT_DIR)

ef_tests: download_tests extract_tests
mkdir $(OUTPUT_DIR)
for test in $(TESTS); do \
tar -C $(OUTPUT_DIR) -xvf $(TESTS_BASE_DIR)/$$test.tar ;\
rm $(TESTS_BASE_DIR)/$$test.tar ;\
done

extract_tests:
for test in $(TESTS); do \
gzip -df $(TESTS_BASE_DIR)/$$test.tar.gz ;\
done

download_tests:
for test in $(TESTS); do \
wget -P $(TESTS_BASE_DIR) $(BASE_URL)/$$test.tar.gz; \
done
40 changes: 28 additions & 12 deletions book/src/setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,8 @@ See the [Quick instructions](#quick-instructions) for a summary or the

1. Install Rust + Cargo with [rustup](https://rustup.rs/).
1. Install build dependencies using your package manager.
- `$ <package-manager> clang protobuf libssl-dev cmake git-lfs`
- Ensure [git-lfs](https://git-lfs.github.com/) is installed with `git lfs
install`.
1. Clone the [sigp/lighthouse](https://github.com/sigp/lighthouse), ensuring to
**initialize submodules**.
- `$ <package-manager> clang protobuf libssl-dev cmake`
1. Clone the [sigp/lighthouse](https://github.com/sigp/lighthouse).
1. In the root of the repo, run the tests with `cargo test --all --release`.
1. Then, build the binaries with `cargo build --all --release`.
1. Lighthouse is now fully built and tested.
Expand All @@ -37,13 +34,8 @@ steps:
- `protobuf`: required for protobuf serialization (gRPC)
- `libssl-dev`: also gRPC
- `cmake`: required for building protobuf
- `git-lfs`: The Git extension for [Large File
Support](https://git-lfs.github.com/) (required for Ethereum Foundation
test vectors).
1. Clone the repository with submodules: `git clone --recursive
https://github.com/sigp/lighthouse`. If you're already cloned the repo,
ensure testing submodules are present: `$ git submodule init; git
submodule update`
1. Clone the repository with submodules: `git clone
https://github.com/sigp/lighthouse`.
1. Change directory to the root of the repository.
1. Run the test suite with `cargo test --all --release`. The build and test
process can take several minutes. If you experience any failures on
Expand All @@ -63,3 +55,27 @@ Perl](http://strawberryperl.com/), or alternatively use a choco install command
Additionally, the dependency `protoc-grpcio v0.3.1` is reported to have issues
compiling in Windows. You can specify a known working version by editing
version in `protos/Cargo.toml` section to `protoc-grpcio = "<=0.3.0"`.

## eth2.0-spec-tests

The
[ethereum/eth2.0-spec-tests](https://github.com/ethereum/eth2.0-spec-tests/)
repository contains a large set of tests that verify Lighthouse behaviour
against the Ethereum Foundation specifications.

The `tests/ef_tests` crate runs these tests and it has some interesting
behaviours:

- If the `tests/ef_tests/eth2.0-spec-tests` directory is not present, all tests
indicate a `pass` when they did not actually run.
- If that directory _is_ present, the tests are executed faithfully, failing if
a discrepancy is found.

The `tests/ef_tests/eth2.0-spec-tests` directory is not present by default. To
obtain it, use the Makefile in the root of the repository:

```
make ef_tests
```

_Note: this will download 100+ MB of test files from the [ethereum/eth2.0-spec-tests](https://github.com/ethereum/eth2.0-spec-tests/)._
1 change: 1 addition & 0 deletions tests/ef_tests/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/eth2.0-spec-tests
1 change: 0 additions & 1 deletion tests/ef_tests/eth2.0-spec-tests
Submodule eth2.0-spec-tests deleted from ae6dd9
5 changes: 5 additions & 0 deletions tests/ef_tests/src/handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ pub trait Handler {
.join(Self::runner_name())
.join(Self::handler_name());

// If the directory containing the tests does not exist, just let all tests pass.
if !handler_path.exists() {
return;
}

// Iterate through test suites
let test_cases = fs::read_dir(&handler_path)
.expect("handler dir exists")
Expand Down

0 comments on commit 9461b50

Please sign in to comment.