Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve tests, add new test (for missing Cargo.lock) #63

Merged
merged 3 commits into from
May 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 18 additions & 6 deletions integration_tests/shared.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import subprocess
import urllib.request
from pathlib import Path
from typing import List, Optional
from typing import List, Optional, Tuple

from integration_tests.config import (CARGO_TARGET_DIR, DOWNLOADS_FOLDER,
EXTRACTED_FOLDER, RUST_GIT,
Expand Down Expand Up @@ -35,7 +35,7 @@ def run_docker(
contract_name: Optional[str],
image: str,
output_folder: Path,
):
) -> Tuple[int, str, str]:
CARGO_TARGET_DIR.mkdir(parents=True, exist_ok=True)
RUST_REGISTRY.mkdir(parents=True, exist_ok=True)
RUST_GIT.mkdir(parents=True, exist_ok=True)
Expand Down Expand Up @@ -72,7 +72,19 @@ def run_docker(
entrypoint_args.extend(["--contract", contract_name])

args = docker_args + entrypoint_args
result = subprocess.run(args)
returncode = result.returncode
if returncode != 0:
raise Exception(f"Docker exited with return code {returncode}.")

result = subprocess.run(
args,
capture_output=True,
text=True
)

print("# command:")
print(" ".join(args))
print("# returncode:", result.returncode)
print("# stdout:")
print(result.stdout)
print("# stderr:")
print(result.stderr)

return result.returncode, result.stdout, result.stderr
32 changes: 29 additions & 3 deletions integration_tests/test_basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,35 +24,61 @@ def test_with_symlinks():
os.symlink(workspace / ".github", workspace / "github_symlink", target_is_directory=True)

# Symlinks should be ignored, and the build should succeed.
run_docker(
(code, _, _) = run_docker(
project_path=workspace,
packaged_src_path=None,
contract_name="adder",
image="sdk-rust-contract-builder:next",
output_folder=output_folder
)

assert code == 0
assert (output_folder / "artifacts.json").exists()


def test_has_correct_packaged_source():
workspace_parent = download_project_repository("https://github.com/multiversx/mx-contracts-rs/archive/refs/tags/v0.45.4.zip", "test_with_symlinks")
workspace_parent = download_project_repository("https://github.com/multiversx/mx-contracts-rs/archive/refs/tags/v0.45.4.zip", "test_has_correct_packaged_source")
workspace = workspace_parent / "mx-contracts-rs-0.45.4"

output_folder = PARENT_OUTPUT_FOLDER / "test_has_correct_packaged_source"
shutil.rmtree(output_folder, ignore_errors=True)
output_folder.mkdir(parents=True, exist_ok=True)

run_docker(
(code, _, _) = run_docker(
project_path=workspace,
packaged_src_path=None,
contract_name="adder",
image="sdk-rust-contract-builder:next",
output_folder=output_folder
)

assert code == 0

packaged_source_code = PackagedSourceCode.from_file(output_folder / "adder" / "adder-0.0.0.source.json")

for entry in packaged_source_code.entries:
assert not str(entry.path).startswith("target"), f"Unexpected file: {entry.path}"
assert entry.is_test_file == ("test" in str(entry.path)), f"Unexpected is_test_file marker for: {entry.path}"


def test_fail_if_any_cargo_lock_is_missing():
workspace_parent = download_project_repository("https://github.com/multiversx/mx-contracts-rs/archive/refs/tags/v0.45.4.zip", "test_fail_if_any_cargo_lock_is_missing")
workspace = workspace_parent / "mx-contracts-rs-0.45.4"

output_folder = PARENT_OUTPUT_FOLDER / "test_fail_if_any_cargo_lock_is_missing"
shutil.rmtree(output_folder, ignore_errors=True)
output_folder.mkdir(parents=True, exist_ok=True)

# Remove a (required) Cargo.lock file
(workspace / "contracts" / "adder" / "wasm" / "Cargo.lock").unlink()

(code, _, stderr) = run_docker(
project_path=workspace,
packaged_src_path=None,
contract_name="adder",
image="sdk-rust-contract-builder:next",
output_folder=output_folder
)

assert code != 0
assert "Cargo.lock needs to be updated but --locked was passed to prevent this" in stderr
3 changes: 2 additions & 1 deletion integration_tests/test_previous_builds_are_reproducible.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,14 @@ def main(cli_args: List[str]):
if project_path and build.project_relative_path_in_archive:
project_path = project_path / build.project_relative_path_in_archive

run_docker(
(code, _, _) = run_docker(
project_path=project_path,
packaged_src_path=packaged_src_path,
contract_name=build.contract_name,
image=build.docker_image,
output_folder=output_folder)

assert code == 0
check_code_hashes(build, output_folder)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,24 +35,28 @@ def check_project_folder_and_packaged_src_are_equivalent(
output_using_project.mkdir(parents=True, exist_ok=True)
output_using_packaged_src.mkdir(parents=True, exist_ok=True)

run_docker(
(code, _, _) = run_docker(
project_path=project_path,
packaged_src_path=None,
contract_name=contract,
image="sdk-rust-contract-builder:next",
output_folder=output_using_project
)

assert code == 0

packaged_src_path = next((output_using_project / contract).glob("*.source.json"))

run_docker(
(code, _, _) = run_docker(
project_path=None,
packaged_src_path=packaged_src_path,
contract_name=contract,
image="sdk-rust-contract-builder:next",
output_folder=output_using_packaged_src
)

assert code == 0

# Check that output folders are identical
using_project_output_files = sorted((output_using_project / contract).rglob("*"))
using_packaged_src_output_files = sorted((output_using_packaged_src / contract).rglob("*"))
Expand Down
Loading