From 2a14a7f0e619b78353cb006488d8e6b8f20fe01c Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Tue, 4 Feb 2025 16:18:28 +0000 Subject: [PATCH 01/10] test: rename `binary.diff{,erence}` It conflicts with `pytest` files within `binary/diff` directory. Adds the convenience `from binary import Diff, Relative, Tool` imports --- e2e/binary/BUILD.bazel | 3 ++- e2e/binary/__init__.py | 7 +++++++ e2e/binary/b2sum/digest.py | 4 +--- e2e/binary/brotli/roundtrip.py | 4 +--- e2e/binary/bzip2/roundtrip.py | 4 +--- e2e/binary/conftest.py | 6 ++++-- e2e/binary/{diff.py => difference.py} | 0 e2e/binary/gzip/roundtrip.py | 4 +--- e2e/binary/pigz/roundtrip.py | 4 +--- e2e/binary/xz/roundtrip.py | 4 +--- e2e/binary/zstd/roundtrip.py | 4 +--- 11 files changed, 20 insertions(+), 24 deletions(-) create mode 100644 e2e/binary/__init__.py rename e2e/binary/{diff.py => difference.py} (100%) diff --git a/e2e/binary/BUILD.bazel b/e2e/binary/BUILD.bazel index 12a2bf99..ede035ea 100644 --- a/e2e/binary/BUILD.bazel +++ b/e2e/binary/BUILD.bazel @@ -12,8 +12,9 @@ build_test( py_library( name = "pytest", srcs = [ + "__init__.py", "conftest.py", - "diff.py", + "difference.py", "relative.py", "runfile.py", "tool.py", diff --git a/e2e/binary/__init__.py b/e2e/binary/__init__.py new file mode 100644 index 00000000..f79c1894 --- /dev/null +++ b/e2e/binary/__init__.py @@ -0,0 +1,7 @@ +from __future__ import annotations + +from binary.difference import Diff +from binary.relative import Relative +from binary.tool import Tool + +__all__ = ("Diff", "Tool", "Relative") diff --git a/e2e/binary/b2sum/digest.py b/e2e/binary/b2sum/digest.py index 987f41f8..bfe47245 100644 --- a/e2e/binary/b2sum/digest.py +++ b/e2e/binary/b2sum/digest.py @@ -3,9 +3,7 @@ from __future__ import annotations from pathlib import Path from subprocess import run -from binary.diff import Diff -from binary.relative import Relative -from binary.tool import Tool +from binary import Diff, Relative, Tool def test_digest(tool: Tool, relative: Relative, tmp_path: Path) -> None: diff --git a/e2e/binary/brotli/roundtrip.py b/e2e/binary/brotli/roundtrip.py index af04d8fb..e9f67d19 100644 --- a/e2e/binary/brotli/roundtrip.py +++ b/e2e/binary/brotli/roundtrip.py @@ -4,9 +4,7 @@ from pathlib import Path from shutil import copyfileobj from subprocess import PIPE, Popen -from binary.diff import Diff -from binary.relative import Relative -from binary.tool import Tool +from binary import Diff, Relative, Tool def test_roundtrip(tool: Tool, relative: Relative, tmp_path: Path) -> None: diff --git a/e2e/binary/bzip2/roundtrip.py b/e2e/binary/bzip2/roundtrip.py index f2feaa65..5ef47ea5 100644 --- a/e2e/binary/bzip2/roundtrip.py +++ b/e2e/binary/bzip2/roundtrip.py @@ -4,9 +4,7 @@ from pathlib import Path from shutil import copyfileobj from subprocess import PIPE, Popen -from binary.diff import Diff -from binary.relative import Relative -from binary.tool import Tool +from binary import Diff, Relative, Tool def test_roundtrip(tool: Tool, relative: Relative, tmp_path: Path) -> None: diff --git a/e2e/binary/conftest.py b/e2e/binary/conftest.py index 4c98c8bc..f85f9f59 100644 --- a/e2e/binary/conftest.py +++ b/e2e/binary/conftest.py @@ -2,12 +2,14 @@ from __future__ import annotations from pytest import fixture -from .diff import Diff -from .diff import repr as diff +from .difference import Diff +from .difference import repr as diff from .relative import Relative from .runfile import Runfile, SupportsRlocation, create from .tool import Tool +__all__ = ("Diff", "Relative", "Tool", "Runfile") + @fixture def runfiles() -> SupportsRlocation: diff --git a/e2e/binary/diff.py b/e2e/binary/difference.py similarity index 100% rename from e2e/binary/diff.py rename to e2e/binary/difference.py diff --git a/e2e/binary/gzip/roundtrip.py b/e2e/binary/gzip/roundtrip.py index 68a3d112..3e83ebb5 100644 --- a/e2e/binary/gzip/roundtrip.py +++ b/e2e/binary/gzip/roundtrip.py @@ -4,9 +4,7 @@ from pathlib import Path from shutil import copyfileobj from subprocess import PIPE, Popen -from binary.diff import Diff -from binary.relative import Relative -from binary.tool import Tool +from binary import Diff, Relative, Tool def test_roundtrip(tool: Tool, relative: Relative, tmp_path: Path) -> None: diff --git a/e2e/binary/pigz/roundtrip.py b/e2e/binary/pigz/roundtrip.py index af06be6a..a1ee0d78 100644 --- a/e2e/binary/pigz/roundtrip.py +++ b/e2e/binary/pigz/roundtrip.py @@ -4,9 +4,7 @@ from pathlib import Path from shutil import copyfileobj from subprocess import PIPE, Popen -from binary.diff import Diff -from binary.relative import Relative -from binary.tool import Tool +from binary import Diff, Relative, Tool def test_roundtrip(tool: Tool, relative: Relative, tmp_path: Path) -> None: diff --git a/e2e/binary/xz/roundtrip.py b/e2e/binary/xz/roundtrip.py index dc768863..f2c3cda2 100644 --- a/e2e/binary/xz/roundtrip.py +++ b/e2e/binary/xz/roundtrip.py @@ -4,9 +4,7 @@ from pathlib import Path from shutil import copyfileobj from subprocess import PIPE, Popen -from binary.diff import Diff -from binary.relative import Relative -from binary.tool import Tool +from binary import Diff, Relative, Tool def test_roundtrip(tool: Tool, relative: Relative, tmp_path: Path) -> None: diff --git a/e2e/binary/zstd/roundtrip.py b/e2e/binary/zstd/roundtrip.py index 71d2b3e8..3d633609 100644 --- a/e2e/binary/zstd/roundtrip.py +++ b/e2e/binary/zstd/roundtrip.py @@ -4,9 +4,7 @@ from pathlib import Path from shutil import copyfileobj from subprocess import PIPE, Popen -from binary.diff import Diff -from binary.relative import Relative -from binary.tool import Tool +from binary import Diff, Relative, Tool def test_roundtrip(tool: Tool, relative: Relative, tmp_path: Path) -> None: -- GitLab From 8c55c72ebddf1099b0499f5d27177c48dba65cad Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Tue, 4 Feb 2025 16:18:43 +0000 Subject: [PATCH 02/10] test(diff): add version and unified test --- e2e/binary/diff/BUILD.bazel | 34 ++++++++++++++++++++++++++++------ e2e/binary/diff/a.txt | 5 +++++ e2e/binary/diff/b.txt | 8 ++++++++ e2e/binary/diff/expected.txt | 11 +++++++++++ e2e/binary/diff/normal.py | 23 +++++++++++++++++++++++ 5 files changed, 75 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/diff/a.txt create mode 100644 e2e/binary/diff/b.txt create mode 100644 e2e/binary/diff/expected.txt create mode 100644 e2e/binary/diff/normal.py diff --git a/e2e/binary/diff/BUILD.bazel b/e2e/binary/diff/BUILD.bazel index a4d66069..45fa9b5c 100644 --- a/e2e/binary/diff/BUILD.bazel +++ b/e2e/binary/diff/BUILD.bazel @@ -1,11 +1,33 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `diff` +py_pytest_test( + name = "normal", + size = "small", + srcs = ["normal.py"], + data = [ + "a.txt", + "b.txt", + "expected.txt", + "@ape//ape:diff", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "diff", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:diff"], + src = "@ape//ape:diff", + args = ["--version"], +) + +test_suite( + name = "diff", + tests = [ + ":normal", + ":version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/diff/a.txt b/e2e/binary/diff/a.txt new file mode 100644 index 00000000..d47fbf50 --- /dev/null +++ b/e2e/binary/diff/a.txt @@ -0,0 +1,5 @@ +Hello, world! + +This is some text. + +This is some other text. diff --git a/e2e/binary/diff/b.txt b/e2e/binary/diff/b.txt new file mode 100644 index 00000000..00a57ad5 --- /dev/null +++ b/e2e/binary/diff/b.txt @@ -0,0 +1,8 @@ +Hello, world? + +This is text. + + +This is some text. + +This is more text. diff --git a/e2e/binary/diff/expected.txt b/e2e/binary/diff/expected.txt new file mode 100644 index 00000000..cb9c196e --- /dev/null +++ b/e2e/binary/diff/expected.txt @@ -0,0 +1,11 @@ +1c1,4 +< Hello, world! +--- +> Hello, world? +> +> This is text. +> +5c8 +< This is some other text. +--- +> This is more text. diff --git a/e2e/binary/diff/normal.py b/e2e/binary/diff/normal.py new file mode 100644 index 00000000..cb9a9931 --- /dev/null +++ b/e2e/binary/diff/normal.py @@ -0,0 +1,23 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run +from tarfile import REGTYPE, TarFile + +from binary import Diff, Relative, Tool + + +def test_normal(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("diff") + a = relative("a.txt") + b = relative("b.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, str(a), str(b)) + with open(output, "w", encoding="utf-8") as stream: + result = run(cmd, timeout=30, stdout=stream) + assert 1 == result.returncode + + with open(expected) as a, open(output) as b: + assert a.read() == b.read() -- GitLab From 89afc6336c38a7112816d3ba4cee441d6f73f7c0 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Tue, 4 Feb 2025 16:27:16 +0000 Subject: [PATCH 03/10] test(diff3): add version and threeway test --- e2e/binary/diff3/BUILD.bazel | 36 +++++++++++++++++++++++++++++------ e2e/binary/diff3/a.txt | 5 +++++ e2e/binary/diff3/b.txt | 8 ++++++++ e2e/binary/diff3/c.txt | 5 +++++ e2e/binary/diff3/expected.txt | 23 ++++++++++++++++++++++ e2e/binary/diff3/threeway.py | 24 +++++++++++++++++++++++ 6 files changed, 95 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/diff3/a.txt create mode 100644 e2e/binary/diff3/b.txt create mode 100644 e2e/binary/diff3/c.txt create mode 100644 e2e/binary/diff3/expected.txt create mode 100644 e2e/binary/diff3/threeway.py diff --git a/e2e/binary/diff3/BUILD.bazel b/e2e/binary/diff3/BUILD.bazel index 57ddfd71..26e6bf02 100644 --- a/e2e/binary/diff3/BUILD.bazel +++ b/e2e/binary/diff3/BUILD.bazel @@ -1,11 +1,35 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `diff3` +py_pytest_test( + name = "threeway", + size = "small", + srcs = ["threeway.py"], + data = [ + "a.txt", + "b.txt", + "c.txt", + "expected.txt", + "@ape//ape:diff", + "@ape//ape:diff3", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "diff3", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:diff3"], + src = "@ape//ape:diff3", + args = ["--version"], +) + +test_suite( + name = "diff3", + tests = [ + ":threeway", + ":version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/diff3/a.txt b/e2e/binary/diff3/a.txt new file mode 100644 index 00000000..d47fbf50 --- /dev/null +++ b/e2e/binary/diff3/a.txt @@ -0,0 +1,5 @@ +Hello, world! + +This is some text. + +This is some other text. diff --git a/e2e/binary/diff3/b.txt b/e2e/binary/diff3/b.txt new file mode 100644 index 00000000..00a57ad5 --- /dev/null +++ b/e2e/binary/diff3/b.txt @@ -0,0 +1,8 @@ +Hello, world? + +This is text. + + +This is some text. + +This is more text. diff --git a/e2e/binary/diff3/c.txt b/e2e/binary/diff3/c.txt new file mode 100644 index 00000000..13a7ca44 --- /dev/null +++ b/e2e/binary/diff3/c.txt @@ -0,0 +1,5 @@ +Hello, Earth! + +This is some words. + +This is some other text. diff --git a/e2e/binary/diff3/expected.txt b/e2e/binary/diff3/expected.txt new file mode 100644 index 00000000..3d3ec2a1 --- /dev/null +++ b/e2e/binary/diff3/expected.txt @@ -0,0 +1,23 @@ +==== +1:1c + Hello, world! +2:1c + Hello, world? +3:1c + Hello, Earth! +==== +1:3c + This is some text. +2:3c + This is text. +3:3c + This is some words. +====2 +1:5c +3:5c + This is some other text. +2:5,8c + + This is some text. + + This is more text. diff --git a/e2e/binary/diff3/threeway.py b/e2e/binary/diff3/threeway.py new file mode 100644 index 00000000..252e1502 --- /dev/null +++ b/e2e/binary/diff3/threeway.py @@ -0,0 +1,24 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run +from tarfile import REGTYPE, TarFile + +from binary import Diff, Relative, Tool + + +def test_threeway(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("diff3") + diff = tool("diff") + a = relative("a.txt") + b = relative("b.txt") + c = relative("c.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, "--diff-program", str(diff), str(a), str(b), str(c)) + with open(output, "w", encoding="utf-8") as stream: + result = run(cmd, timeout=30, stdout=stream, check=True) + + with open(expected) as a, open(output) as b: + assert a.read() == b.read() -- GitLab From 9e6250dad14a8614d7f1bdd898232846af176d21 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Tue, 4 Feb 2025 16:32:01 +0000 Subject: [PATCH 04/10] test(sdiff): add version and diff test --- e2e/binary/sdiff/BUILD.bazel | 35 +++++++++++++++++++++++++++++------ e2e/binary/sdiff/a.txt | 5 +++++ e2e/binary/sdiff/b.txt | 8 ++++++++ e2e/binary/sdiff/diff.py | 24 ++++++++++++++++++++++++ e2e/binary/sdiff/expected.txt | 8 ++++++++ 5 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/sdiff/a.txt create mode 100644 e2e/binary/sdiff/b.txt create mode 100644 e2e/binary/sdiff/diff.py create mode 100644 e2e/binary/sdiff/expected.txt diff --git a/e2e/binary/sdiff/BUILD.bazel b/e2e/binary/sdiff/BUILD.bazel index b1760484..db219d12 100644 --- a/e2e/binary/sdiff/BUILD.bazel +++ b/e2e/binary/sdiff/BUILD.bazel @@ -1,11 +1,34 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `sdiff` +py_pytest_test( + name = "diff", + size = "small", + srcs = ["diff.py"], + data = [ + "a.txt", + "b.txt", + "expected.txt", + "@ape//ape:diff", + "@ape//ape:sdiff", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "sdiff", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:sdiff"], + src = "@ape//ape:sdiff", + args = ["--version"], +) + +test_suite( + name = "sdiff", + tests = [ + ":diff", + ":version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/sdiff/a.txt b/e2e/binary/sdiff/a.txt new file mode 100644 index 00000000..d47fbf50 --- /dev/null +++ b/e2e/binary/sdiff/a.txt @@ -0,0 +1,5 @@ +Hello, world! + +This is some text. + +This is some other text. diff --git a/e2e/binary/sdiff/b.txt b/e2e/binary/sdiff/b.txt new file mode 100644 index 00000000..00a57ad5 --- /dev/null +++ b/e2e/binary/sdiff/b.txt @@ -0,0 +1,8 @@ +Hello, world? + +This is text. + + +This is some text. + +This is more text. diff --git a/e2e/binary/sdiff/diff.py b/e2e/binary/sdiff/diff.py new file mode 100644 index 00000000..0402883f --- /dev/null +++ b/e2e/binary/sdiff/diff.py @@ -0,0 +1,24 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run +from tarfile import REGTYPE, TarFile + +from binary import Diff, Relative, Tool + + +def test_diff(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("sdiff") + diff = tool("diff") + a = relative("a.txt") + b = relative("b.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, f"--diff-program={diff}", "--width=80", str(a), str(b)) + with open(output, "w", encoding="utf-8") as stream: + result = run(cmd, timeout=30, stdout=stream) + assert 1 == result.returncode + + with open(expected) as a, open(output) as b: + assert a.read() == b.read() diff --git a/e2e/binary/sdiff/expected.txt b/e2e/binary/sdiff/expected.txt new file mode 100644 index 00000000..47e69649 --- /dev/null +++ b/e2e/binary/sdiff/expected.txt @@ -0,0 +1,8 @@ +Hello, world! | Hello, world? + > + > This is text. + > + +This is some text. This is some text. + +This is some other text. | This is more text. -- GitLab From 1f2050341fa44b1ee527f0b46efd1d8e7cbe5d53 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Tue, 4 Feb 2025 16:52:43 +0000 Subject: [PATCH 05/10] test(cmp): add version and text comparison test --- e2e/binary/cmp/BUILD.bazel | 34 ++++++++++++++++++++++++++++------ e2e/binary/cmp/a.txt | 5 +++++ e2e/binary/cmp/b.txt | 8 ++++++++ e2e/binary/cmp/expected.txt | 1 + e2e/binary/cmp/text.py | 23 +++++++++++++++++++++++ 5 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/cmp/a.txt create mode 100644 e2e/binary/cmp/b.txt create mode 100644 e2e/binary/cmp/expected.txt create mode 100644 e2e/binary/cmp/text.py diff --git a/e2e/binary/cmp/BUILD.bazel b/e2e/binary/cmp/BUILD.bazel index 02947c53..5e657eae 100644 --- a/e2e/binary/cmp/BUILD.bazel +++ b/e2e/binary/cmp/BUILD.bazel @@ -1,11 +1,33 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `cmp` +py_pytest_test( + name = "text", + size = "small", + srcs = ["text.py"], + data = [ + "a.txt", + "b.txt", + "expected.txt", + "@ape//ape:cmp", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "cmp", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:cmp"], + src = "@ape//ape:cmp", + args = ["--version"], +) + +test_suite( + name = "cmp", + tests = [ + ":text", + ":version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/cmp/a.txt b/e2e/binary/cmp/a.txt new file mode 100644 index 00000000..d47fbf50 --- /dev/null +++ b/e2e/binary/cmp/a.txt @@ -0,0 +1,5 @@ +Hello, world! + +This is some text. + +This is some other text. diff --git a/e2e/binary/cmp/b.txt b/e2e/binary/cmp/b.txt new file mode 100644 index 00000000..00a57ad5 --- /dev/null +++ b/e2e/binary/cmp/b.txt @@ -0,0 +1,8 @@ +Hello, world? + +This is text. + + +This is some text. + +This is more text. diff --git a/e2e/binary/cmp/expected.txt b/e2e/binary/cmp/expected.txt new file mode 100644 index 00000000..7c963faf --- /dev/null +++ b/e2e/binary/cmp/expected.txt @@ -0,0 +1 @@ +binary/cmp/a.txt binary/cmp/b.txt differ: char 13, line 1 diff --git a/e2e/binary/cmp/text.py b/e2e/binary/cmp/text.py new file mode 100644 index 00000000..fe9e7b81 --- /dev/null +++ b/e2e/binary/cmp/text.py @@ -0,0 +1,23 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run +from tarfile import REGTYPE, TarFile + +from binary import Diff, Relative, Tool + + +def test_normal(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("cmp") + a = relative("a.txt") + b = relative("b.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, str(a), str(b)) + with open(output, "w", encoding="utf-8") as stream: + result = run(cmd, timeout=30, stdout=stream) + assert 1 == result.returncode + + with open(expected) as a, open(output) as b: + assert a.read() == b.read() -- GitLab From 8e87baf210e204d107b10019e40291ec67fd4dcd Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Tue, 4 Feb 2025 12:01:37 +0000 Subject: [PATCH 06/10] test(sha1sum): add version and digest test --- e2e/binary/sha1sum/BUILD.bazel | 33 +++++++++++++++++++++++++++------ e2e/binary/sha1sum/digest.py | 18 ++++++++++++++++++ e2e/binary/sha1sum/expected.txt | 1 + e2e/binary/sha1sum/fixture.txt | 19 +++++++++++++++++++ 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/sha1sum/digest.py create mode 100644 e2e/binary/sha1sum/expected.txt create mode 100644 e2e/binary/sha1sum/fixture.txt diff --git a/e2e/binary/sha1sum/BUILD.bazel b/e2e/binary/sha1sum/BUILD.bazel index 6feeb59d..9dd80c3e 100644 --- a/e2e/binary/sha1sum/BUILD.bazel +++ b/e2e/binary/sha1sum/BUILD.bazel @@ -1,11 +1,32 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `sha1sum` +py_pytest_test( + name = "digest", + size = "small", + srcs = ["digest.py"], + data = [ + "expected.txt", + "fixture.txt", + "@ape//ape:sha1sum", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "sha1sum", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:sha1sum"], + src = "@ape//ape:sha1sum", + args = ["--version"], +) + +test_suite( + name = "sha1sum", + tests = [ + ":digest", + ":version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/sha1sum/digest.py b/e2e/binary/sha1sum/digest.py new file mode 100644 index 00000000..823e85ca --- /dev/null +++ b/e2e/binary/sha1sum/digest.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run + +from binary import Diff, Relative, Tool + + +def test_digest(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("sha1sum") + fixture = relative("fixture.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, fixture) + with open(output, "w") as stream: + run(cmd, check=True, timeout=30, stdout=stream) + assert Diff(expected) == Diff(output) diff --git a/e2e/binary/sha1sum/expected.txt b/e2e/binary/sha1sum/expected.txt new file mode 100644 index 00000000..10070fd0 --- /dev/null +++ b/e2e/binary/sha1sum/expected.txt @@ -0,0 +1 @@ +da26efcfa9c587ccf6810916b71b581412d7e3d8 binary/sha1sum/fixture.txt diff --git a/e2e/binary/sha1sum/fixture.txt b/e2e/binary/sha1sum/fixture.txt new file mode 100644 index 00000000..88797e25 --- /dev/null +++ b/e2e/binary/sha1sum/fixture.txt @@ -0,0 +1,19 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat at risus a sagittis. Suspendisse potenti. Ut efficitur metus eu leo condimentum, sit amet efficitur mi tempus. Duis sit amet efficitur elit. Duis a ultrices massa. In hac habitasse platea dictumst. Integer vitae nibh tristique, tempus quam eget, sodales sem. + +Maecenas dapibus diam turpis, non tempor tellus facilisis a. Suspendisse congue tortor ut nisl egestas, et cursus mauris congue. Nullam vitae metus ultricies, rhoncus nibh a, hendrerit neque. Integer ut dictum tortor. Vivamus ligula sem, viverra nec laoreet rutrum, tempor quis felis. Sed eu ex tempus, consectetur tellus id, facilisis quam. Ut at libero vel diam imperdiet mollis. Vestibulum at dolor nec magna consequat porta. Integer ornare metus sit amet sem hendrerit semper. Duis convallis magna vitae ullamcorper auctor. Donec eu massa eget erat pulvinar scelerisque. Ut feugiat lectus non neque suscipit, a mollis dolor ornare. + +Mauris mi est, feugiat eget ante quis, cursus ultricies ante. Nunc sed magna magna. Quisque vitae mattis diam, vel eleifend nisi. Ut ultrices tincidunt mi sit amet vulputate. Fusce at aliquam justo. Nam a maximus felis, eget viverra arcu. Sed sapien odio, dapibus nec justo ut, maximus dignissim dui. Nam accumsan vitae urna imperdiet maximus. Nam gravida, ante id facilisis placerat, augue sem tincidunt dolor, at eleifend dui tortor ut nunc. In vestibulum lorem elit, at dignissim urna hendrerit vel. Nulla nisl erat, lobortis at neque in, ultrices lacinia tortor. Sed id faucibus ex. Vivamus ultrices magna non metus pretium, ut dapibus felis tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer sollicitudin elit sit amet lectus maximus consequat id sit amet massa. Vivamus iaculis arcu sit amet metus gravida finibus. + +Maecenas orci odio, posuere eu consequat ut, posuere in dui. Pellentesque tincidunt ex lorem, non dignissim nibh elementum et. Nullam non finibus est. Nunc sed nisi eu tellus pulvinar auctor a in tortor. Ut risus tellus, pharetra in turpis vel, pretium laoreet quam. Donec sagittis leo sed porttitor lacinia. Sed ullamcorper laoreet metus, non feugiat metus consectetur at. In molestie congue lacus, quis tristique lacus vulputate sit amet. Vestibulum pharetra bibendum dui eget laoreet. Duis at felis consectetur, suscipit sapien consectetur, congue nibh. Aliquam egestas sagittis tortor, nec eleifend lectus pretium eget. Fusce nec nisl nec augue egestas aliquam ac finibus augue. Vestibulum a lectus et ex lobortis auctor. Donec quis tempus turpis, cursus ultrices arcu. Integer vel dui vehicula, consequat massa eget, feugiat eros. + +Fusce sollicitudin feugiat quam nec tincidunt. Sed non mattis tortor. Curabitur et leo nec neque mollis facilisis ac pellentesque dolor. Praesent faucibus odio ac condimentum facilisis. Pellentesque accumsan a nisi vitae maximus. Praesent pharetra vel nibh nec accumsan. Nam sit amet interdum tellus. Mauris euismod aliquet eros sed sollicitudin. Suspendisse fermentum urna et tempus bibendum. Praesent euismod dui ut efficitur aliquam. Cras eu fringilla tortor. + +Integer aliquet a nibh a rutrum. Sed ornare nisi magna, vitae fringilla massa sollicitudin eget. Ut hendrerit interdum vestibulum. Aenean ut felis consequat odio dapibus sagittis. Ut quis mauris lorem. Duis sollicitudin posuere mi, non suscipit erat. Nunc libero enim, finibus sit amet erat id, interdum semper eros. Aliquam eget ligula dui. Proin feugiat diam neque, sit amet pellentesque odio finibus eget. Phasellus feugiat nisl erat, non porttitor elit suscipit eget. Aenean luctus tortor arcu, vitae tempus enim feugiat non. Praesent feugiat dapibus est. Ut ullamcorper justo eleifend diam pretium, ultricies sagittis neque dapibus. Aliquam ut massa dolor. + +Vestibulum quis rutrum lacus. In hac habitasse platea dictumst. Proin porttitor risus et dapibus facilisis. Vestibulum ac dolor quis orci tempus molestie sit amet in mi. Aenean nisl urna, volutpat id purus a, pellentesque pretium metus. Maecenas convallis eros eget est rhoncus, non gravida justo feugiat. Sed bibendum elit a lacus ultrices blandit. Cras vel dui nibh. Ut gravida id erat quis posuere. Mauris condimentum eget ante et semper. Integer ornare egestas purus, quis efficitur ex. Nam dignissim diam orci. Cras dapibus scelerisque sapien, molestie gravida orci congue in. Mauris sed vulputate nisl, non fringilla lacus. Nam venenatis dui bibendum placerat finibus. Integer id lectus sit amet metus hendrerit rutrum a ac lorem. + +Aenean at lectus vel libero tristique rhoncus nec ut lorem. Aliquam eget massa nec nibh ornare facilisis in vitae libero. Cras rhoncus porttitor elementum. Ut quam ipsum, pellentesque sit amet hendrerit non, scelerisque sit amet nibh. Cras ultrices, erat sed tristique aliquet, mi felis vulputate mauris, eu mattis neque felis non diam. Nulla dapibus turpis vitae gravida euismod. Donec non tempus augue. Etiam lacinia ex sit amet sapien tempor lobortis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce molestie ante rhoncus fringilla convallis. Nullam tristique id lectus a egestas. In bibendum molestie ultricies. Suspendisse quis auctor enim. Morbi pellentesque rhoncus lacinia. + +Fusce consectetur velit at nisl accumsan laoreet. Etiam convallis dignissim ligula at congue. Nunc varius dui consectetur, aliquam urna non, bibendum felis. In a convallis enim. Nullam leo dolor, pretium id tristique ut, posuere sed sem. Proin vehicula, orci ut imperdiet pellentesque, velit magna accumsan purus, id viverra orci tellus eu tortor. Nullam rhoncus id odio ut elementum. Nullam condimentum eget mi quis aliquam. + +Ut posuere dolor vitae eros tempus, at varius dolor vestibulum. Cras venenatis odio gravida nisl viverra, nec imperdiet libero lobortis. Suspendisse potenti. Aenean varius, sapien et mollis sagittis, massa justo placerat nisi, id feugiat nunc nunc sit amet nisi. Nullam in sem id nisl vehicula tincidunt non vitae risus. Vestibulum dapibus, enim sed lacinia laoreet, lorem massa fermentum urna, et ornare nunc nibh ut sem. Fusce nisi arcu, feugiat eget erat vitae, fermentum porta ligula. Aenean in felis at ex vulputate dapibus id quis magna. Suspendisse semper rutrum eleifend. Donec mi felis, scelerisque id justo et, semper interdum libero. Proin sit amet tempor velit. Suspendisse eget dui orci. Sed accumsan tortor at nunc scelerisque dignissim. Mauris vestibulum, massa sit amet interdum egestas, erat sapien hendrerit nisi, quis sagittis ex ipsum pellentesque est. Duis sapien ante, finibus in nisi in, vestibulum semper libero. -- GitLab From edd3b59a304af8f1106a5c14c9dcc9b56fad4ac9 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Tue, 4 Feb 2025 12:02:43 +0000 Subject: [PATCH 07/10] test(sha224sum): add version and digest test --- e2e/binary/sha224sum/BUILD.bazel | 33 +++++++++++++++++++++++++------ e2e/binary/sha224sum/digest.py | 18 +++++++++++++++++ e2e/binary/sha224sum/expected.txt | 1 + e2e/binary/sha224sum/fixture.txt | 19 ++++++++++++++++++ 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/sha224sum/digest.py create mode 100644 e2e/binary/sha224sum/expected.txt create mode 100644 e2e/binary/sha224sum/fixture.txt diff --git a/e2e/binary/sha224sum/BUILD.bazel b/e2e/binary/sha224sum/BUILD.bazel index cc9181a7..ca7557b8 100644 --- a/e2e/binary/sha224sum/BUILD.bazel +++ b/e2e/binary/sha224sum/BUILD.bazel @@ -1,11 +1,32 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `sha224sum` +py_pytest_test( + name = "digest", + size = "small", + srcs = ["digest.py"], + data = [ + "expected.txt", + "fixture.txt", + "@ape//ape:sha224sum", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "sha224sum", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:sha224sum"], + src = "@ape//ape:sha224sum", + args = ["--version"], +) + +test_suite( + name = "sha224sum", + tests = [ + ":digest", + ":version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/sha224sum/digest.py b/e2e/binary/sha224sum/digest.py new file mode 100644 index 00000000..253c0470 --- /dev/null +++ b/e2e/binary/sha224sum/digest.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run + +from binary import Diff, Relative, Tool + + +def test_digest(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("sha224sum") + fixture = relative("fixture.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, fixture) + with open(output, "w") as stream: + run(cmd, check=True, timeout=30, stdout=stream) + assert Diff(expected) == Diff(output) diff --git a/e2e/binary/sha224sum/expected.txt b/e2e/binary/sha224sum/expected.txt new file mode 100644 index 00000000..317a8359 --- /dev/null +++ b/e2e/binary/sha224sum/expected.txt @@ -0,0 +1 @@ +3457a8cafccfaba3724d3fe26b52aadf8cdbaa67b2eab96697314f58 binary/sha224sum/fixture.txt diff --git a/e2e/binary/sha224sum/fixture.txt b/e2e/binary/sha224sum/fixture.txt new file mode 100644 index 00000000..88797e25 --- /dev/null +++ b/e2e/binary/sha224sum/fixture.txt @@ -0,0 +1,19 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat at risus a sagittis. Suspendisse potenti. Ut efficitur metus eu leo condimentum, sit amet efficitur mi tempus. Duis sit amet efficitur elit. Duis a ultrices massa. In hac habitasse platea dictumst. Integer vitae nibh tristique, tempus quam eget, sodales sem. + +Maecenas dapibus diam turpis, non tempor tellus facilisis a. Suspendisse congue tortor ut nisl egestas, et cursus mauris congue. Nullam vitae metus ultricies, rhoncus nibh a, hendrerit neque. Integer ut dictum tortor. Vivamus ligula sem, viverra nec laoreet rutrum, tempor quis felis. Sed eu ex tempus, consectetur tellus id, facilisis quam. Ut at libero vel diam imperdiet mollis. Vestibulum at dolor nec magna consequat porta. Integer ornare metus sit amet sem hendrerit semper. Duis convallis magna vitae ullamcorper auctor. Donec eu massa eget erat pulvinar scelerisque. Ut feugiat lectus non neque suscipit, a mollis dolor ornare. + +Mauris mi est, feugiat eget ante quis, cursus ultricies ante. Nunc sed magna magna. Quisque vitae mattis diam, vel eleifend nisi. Ut ultrices tincidunt mi sit amet vulputate. Fusce at aliquam justo. Nam a maximus felis, eget viverra arcu. Sed sapien odio, dapibus nec justo ut, maximus dignissim dui. Nam accumsan vitae urna imperdiet maximus. Nam gravida, ante id facilisis placerat, augue sem tincidunt dolor, at eleifend dui tortor ut nunc. In vestibulum lorem elit, at dignissim urna hendrerit vel. Nulla nisl erat, lobortis at neque in, ultrices lacinia tortor. Sed id faucibus ex. Vivamus ultrices magna non metus pretium, ut dapibus felis tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer sollicitudin elit sit amet lectus maximus consequat id sit amet massa. Vivamus iaculis arcu sit amet metus gravida finibus. + +Maecenas orci odio, posuere eu consequat ut, posuere in dui. Pellentesque tincidunt ex lorem, non dignissim nibh elementum et. Nullam non finibus est. Nunc sed nisi eu tellus pulvinar auctor a in tortor. Ut risus tellus, pharetra in turpis vel, pretium laoreet quam. Donec sagittis leo sed porttitor lacinia. Sed ullamcorper laoreet metus, non feugiat metus consectetur at. In molestie congue lacus, quis tristique lacus vulputate sit amet. Vestibulum pharetra bibendum dui eget laoreet. Duis at felis consectetur, suscipit sapien consectetur, congue nibh. Aliquam egestas sagittis tortor, nec eleifend lectus pretium eget. Fusce nec nisl nec augue egestas aliquam ac finibus augue. Vestibulum a lectus et ex lobortis auctor. Donec quis tempus turpis, cursus ultrices arcu. Integer vel dui vehicula, consequat massa eget, feugiat eros. + +Fusce sollicitudin feugiat quam nec tincidunt. Sed non mattis tortor. Curabitur et leo nec neque mollis facilisis ac pellentesque dolor. Praesent faucibus odio ac condimentum facilisis. Pellentesque accumsan a nisi vitae maximus. Praesent pharetra vel nibh nec accumsan. Nam sit amet interdum tellus. Mauris euismod aliquet eros sed sollicitudin. Suspendisse fermentum urna et tempus bibendum. Praesent euismod dui ut efficitur aliquam. Cras eu fringilla tortor. + +Integer aliquet a nibh a rutrum. Sed ornare nisi magna, vitae fringilla massa sollicitudin eget. Ut hendrerit interdum vestibulum. Aenean ut felis consequat odio dapibus sagittis. Ut quis mauris lorem. Duis sollicitudin posuere mi, non suscipit erat. Nunc libero enim, finibus sit amet erat id, interdum semper eros. Aliquam eget ligula dui. Proin feugiat diam neque, sit amet pellentesque odio finibus eget. Phasellus feugiat nisl erat, non porttitor elit suscipit eget. Aenean luctus tortor arcu, vitae tempus enim feugiat non. Praesent feugiat dapibus est. Ut ullamcorper justo eleifend diam pretium, ultricies sagittis neque dapibus. Aliquam ut massa dolor. + +Vestibulum quis rutrum lacus. In hac habitasse platea dictumst. Proin porttitor risus et dapibus facilisis. Vestibulum ac dolor quis orci tempus molestie sit amet in mi. Aenean nisl urna, volutpat id purus a, pellentesque pretium metus. Maecenas convallis eros eget est rhoncus, non gravida justo feugiat. Sed bibendum elit a lacus ultrices blandit. Cras vel dui nibh. Ut gravida id erat quis posuere. Mauris condimentum eget ante et semper. Integer ornare egestas purus, quis efficitur ex. Nam dignissim diam orci. Cras dapibus scelerisque sapien, molestie gravida orci congue in. Mauris sed vulputate nisl, non fringilla lacus. Nam venenatis dui bibendum placerat finibus. Integer id lectus sit amet metus hendrerit rutrum a ac lorem. + +Aenean at lectus vel libero tristique rhoncus nec ut lorem. Aliquam eget massa nec nibh ornare facilisis in vitae libero. Cras rhoncus porttitor elementum. Ut quam ipsum, pellentesque sit amet hendrerit non, scelerisque sit amet nibh. Cras ultrices, erat sed tristique aliquet, mi felis vulputate mauris, eu mattis neque felis non diam. Nulla dapibus turpis vitae gravida euismod. Donec non tempus augue. Etiam lacinia ex sit amet sapien tempor lobortis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce molestie ante rhoncus fringilla convallis. Nullam tristique id lectus a egestas. In bibendum molestie ultricies. Suspendisse quis auctor enim. Morbi pellentesque rhoncus lacinia. + +Fusce consectetur velit at nisl accumsan laoreet. Etiam convallis dignissim ligula at congue. Nunc varius dui consectetur, aliquam urna non, bibendum felis. In a convallis enim. Nullam leo dolor, pretium id tristique ut, posuere sed sem. Proin vehicula, orci ut imperdiet pellentesque, velit magna accumsan purus, id viverra orci tellus eu tortor. Nullam rhoncus id odio ut elementum. Nullam condimentum eget mi quis aliquam. + +Ut posuere dolor vitae eros tempus, at varius dolor vestibulum. Cras venenatis odio gravida nisl viverra, nec imperdiet libero lobortis. Suspendisse potenti. Aenean varius, sapien et mollis sagittis, massa justo placerat nisi, id feugiat nunc nunc sit amet nisi. Nullam in sem id nisl vehicula tincidunt non vitae risus. Vestibulum dapibus, enim sed lacinia laoreet, lorem massa fermentum urna, et ornare nunc nibh ut sem. Fusce nisi arcu, feugiat eget erat vitae, fermentum porta ligula. Aenean in felis at ex vulputate dapibus id quis magna. Suspendisse semper rutrum eleifend. Donec mi felis, scelerisque id justo et, semper interdum libero. Proin sit amet tempor velit. Suspendisse eget dui orci. Sed accumsan tortor at nunc scelerisque dignissim. Mauris vestibulum, massa sit amet interdum egestas, erat sapien hendrerit nisi, quis sagittis ex ipsum pellentesque est. Duis sapien ante, finibus in nisi in, vestibulum semper libero. -- GitLab From bf77139ee8a414f1b778d76a33f8c20a3baebe32 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Tue, 4 Feb 2025 12:02:43 +0000 Subject: [PATCH 08/10] test(sha256sum): add version and digest test --- e2e/binary/sha256sum/BUILD.bazel | 33 +++++++++++++++++++++++++------ e2e/binary/sha256sum/digest.py | 18 +++++++++++++++++ e2e/binary/sha256sum/expected.txt | 1 + e2e/binary/sha256sum/fixture.txt | 19 ++++++++++++++++++ 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/sha256sum/digest.py create mode 100644 e2e/binary/sha256sum/expected.txt create mode 100644 e2e/binary/sha256sum/fixture.txt diff --git a/e2e/binary/sha256sum/BUILD.bazel b/e2e/binary/sha256sum/BUILD.bazel index b2f7947b..abeff9e6 100644 --- a/e2e/binary/sha256sum/BUILD.bazel +++ b/e2e/binary/sha256sum/BUILD.bazel @@ -1,11 +1,32 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `sha256sum` +py_pytest_test( + name = "digest", + size = "small", + srcs = ["digest.py"], + data = [ + "expected.txt", + "fixture.txt", + "@ape//ape:sha256sum", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "sha256sum", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:sha256sum"], + src = "@ape//ape:sha256sum", + args = ["--version"], +) + +test_suite( + name = "sha256sum", + tests = [ + ":digest", + ":version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/sha256sum/digest.py b/e2e/binary/sha256sum/digest.py new file mode 100644 index 00000000..3c1cad17 --- /dev/null +++ b/e2e/binary/sha256sum/digest.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run + +from binary import Diff, Relative, Tool + + +def test_digest(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("sha256sum") + fixture = relative("fixture.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, fixture) + with open(output, "w") as stream: + run(cmd, check=True, timeout=30, stdout=stream) + assert Diff(expected) == Diff(output) diff --git a/e2e/binary/sha256sum/expected.txt b/e2e/binary/sha256sum/expected.txt new file mode 100644 index 00000000..a17af283 --- /dev/null +++ b/e2e/binary/sha256sum/expected.txt @@ -0,0 +1 @@ +1ff074cefa09b04a3761b03243a19098ae0b8f38e2f4cdf84a9c4991a9992efe binary/sha256sum/fixture.txt diff --git a/e2e/binary/sha256sum/fixture.txt b/e2e/binary/sha256sum/fixture.txt new file mode 100644 index 00000000..88797e25 --- /dev/null +++ b/e2e/binary/sha256sum/fixture.txt @@ -0,0 +1,19 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat at risus a sagittis. Suspendisse potenti. Ut efficitur metus eu leo condimentum, sit amet efficitur mi tempus. Duis sit amet efficitur elit. Duis a ultrices massa. In hac habitasse platea dictumst. Integer vitae nibh tristique, tempus quam eget, sodales sem. + +Maecenas dapibus diam turpis, non tempor tellus facilisis a. Suspendisse congue tortor ut nisl egestas, et cursus mauris congue. Nullam vitae metus ultricies, rhoncus nibh a, hendrerit neque. Integer ut dictum tortor. Vivamus ligula sem, viverra nec laoreet rutrum, tempor quis felis. Sed eu ex tempus, consectetur tellus id, facilisis quam. Ut at libero vel diam imperdiet mollis. Vestibulum at dolor nec magna consequat porta. Integer ornare metus sit amet sem hendrerit semper. Duis convallis magna vitae ullamcorper auctor. Donec eu massa eget erat pulvinar scelerisque. Ut feugiat lectus non neque suscipit, a mollis dolor ornare. + +Mauris mi est, feugiat eget ante quis, cursus ultricies ante. Nunc sed magna magna. Quisque vitae mattis diam, vel eleifend nisi. Ut ultrices tincidunt mi sit amet vulputate. Fusce at aliquam justo. Nam a maximus felis, eget viverra arcu. Sed sapien odio, dapibus nec justo ut, maximus dignissim dui. Nam accumsan vitae urna imperdiet maximus. Nam gravida, ante id facilisis placerat, augue sem tincidunt dolor, at eleifend dui tortor ut nunc. In vestibulum lorem elit, at dignissim urna hendrerit vel. Nulla nisl erat, lobortis at neque in, ultrices lacinia tortor. Sed id faucibus ex. Vivamus ultrices magna non metus pretium, ut dapibus felis tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer sollicitudin elit sit amet lectus maximus consequat id sit amet massa. Vivamus iaculis arcu sit amet metus gravida finibus. + +Maecenas orci odio, posuere eu consequat ut, posuere in dui. Pellentesque tincidunt ex lorem, non dignissim nibh elementum et. Nullam non finibus est. Nunc sed nisi eu tellus pulvinar auctor a in tortor. Ut risus tellus, pharetra in turpis vel, pretium laoreet quam. Donec sagittis leo sed porttitor lacinia. Sed ullamcorper laoreet metus, non feugiat metus consectetur at. In molestie congue lacus, quis tristique lacus vulputate sit amet. Vestibulum pharetra bibendum dui eget laoreet. Duis at felis consectetur, suscipit sapien consectetur, congue nibh. Aliquam egestas sagittis tortor, nec eleifend lectus pretium eget. Fusce nec nisl nec augue egestas aliquam ac finibus augue. Vestibulum a lectus et ex lobortis auctor. Donec quis tempus turpis, cursus ultrices arcu. Integer vel dui vehicula, consequat massa eget, feugiat eros. + +Fusce sollicitudin feugiat quam nec tincidunt. Sed non mattis tortor. Curabitur et leo nec neque mollis facilisis ac pellentesque dolor. Praesent faucibus odio ac condimentum facilisis. Pellentesque accumsan a nisi vitae maximus. Praesent pharetra vel nibh nec accumsan. Nam sit amet interdum tellus. Mauris euismod aliquet eros sed sollicitudin. Suspendisse fermentum urna et tempus bibendum. Praesent euismod dui ut efficitur aliquam. Cras eu fringilla tortor. + +Integer aliquet a nibh a rutrum. Sed ornare nisi magna, vitae fringilla massa sollicitudin eget. Ut hendrerit interdum vestibulum. Aenean ut felis consequat odio dapibus sagittis. Ut quis mauris lorem. Duis sollicitudin posuere mi, non suscipit erat. Nunc libero enim, finibus sit amet erat id, interdum semper eros. Aliquam eget ligula dui. Proin feugiat diam neque, sit amet pellentesque odio finibus eget. Phasellus feugiat nisl erat, non porttitor elit suscipit eget. Aenean luctus tortor arcu, vitae tempus enim feugiat non. Praesent feugiat dapibus est. Ut ullamcorper justo eleifend diam pretium, ultricies sagittis neque dapibus. Aliquam ut massa dolor. + +Vestibulum quis rutrum lacus. In hac habitasse platea dictumst. Proin porttitor risus et dapibus facilisis. Vestibulum ac dolor quis orci tempus molestie sit amet in mi. Aenean nisl urna, volutpat id purus a, pellentesque pretium metus. Maecenas convallis eros eget est rhoncus, non gravida justo feugiat. Sed bibendum elit a lacus ultrices blandit. Cras vel dui nibh. Ut gravida id erat quis posuere. Mauris condimentum eget ante et semper. Integer ornare egestas purus, quis efficitur ex. Nam dignissim diam orci. Cras dapibus scelerisque sapien, molestie gravida orci congue in. Mauris sed vulputate nisl, non fringilla lacus. Nam venenatis dui bibendum placerat finibus. Integer id lectus sit amet metus hendrerit rutrum a ac lorem. + +Aenean at lectus vel libero tristique rhoncus nec ut lorem. Aliquam eget massa nec nibh ornare facilisis in vitae libero. Cras rhoncus porttitor elementum. Ut quam ipsum, pellentesque sit amet hendrerit non, scelerisque sit amet nibh. Cras ultrices, erat sed tristique aliquet, mi felis vulputate mauris, eu mattis neque felis non diam. Nulla dapibus turpis vitae gravida euismod. Donec non tempus augue. Etiam lacinia ex sit amet sapien tempor lobortis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce molestie ante rhoncus fringilla convallis. Nullam tristique id lectus a egestas. In bibendum molestie ultricies. Suspendisse quis auctor enim. Morbi pellentesque rhoncus lacinia. + +Fusce consectetur velit at nisl accumsan laoreet. Etiam convallis dignissim ligula at congue. Nunc varius dui consectetur, aliquam urna non, bibendum felis. In a convallis enim. Nullam leo dolor, pretium id tristique ut, posuere sed sem. Proin vehicula, orci ut imperdiet pellentesque, velit magna accumsan purus, id viverra orci tellus eu tortor. Nullam rhoncus id odio ut elementum. Nullam condimentum eget mi quis aliquam. + +Ut posuere dolor vitae eros tempus, at varius dolor vestibulum. Cras venenatis odio gravida nisl viverra, nec imperdiet libero lobortis. Suspendisse potenti. Aenean varius, sapien et mollis sagittis, massa justo placerat nisi, id feugiat nunc nunc sit amet nisi. Nullam in sem id nisl vehicula tincidunt non vitae risus. Vestibulum dapibus, enim sed lacinia laoreet, lorem massa fermentum urna, et ornare nunc nibh ut sem. Fusce nisi arcu, feugiat eget erat vitae, fermentum porta ligula. Aenean in felis at ex vulputate dapibus id quis magna. Suspendisse semper rutrum eleifend. Donec mi felis, scelerisque id justo et, semper interdum libero. Proin sit amet tempor velit. Suspendisse eget dui orci. Sed accumsan tortor at nunc scelerisque dignissim. Mauris vestibulum, massa sit amet interdum egestas, erat sapien hendrerit nisi, quis sagittis ex ipsum pellentesque est. Duis sapien ante, finibus in nisi in, vestibulum semper libero. -- GitLab From 18f9540fd0ef5430a445fbc292df730c835f9f52 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Tue, 4 Feb 2025 12:02:43 +0000 Subject: [PATCH 09/10] test(sha384sum): add version and digest test --- e2e/binary/sha384sum/BUILD.bazel | 33 +++++++++++++++++++++++++------ e2e/binary/sha384sum/digest.py | 18 +++++++++++++++++ e2e/binary/sha384sum/expected.txt | 1 + e2e/binary/sha384sum/fixture.txt | 19 ++++++++++++++++++ 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/sha384sum/digest.py create mode 100644 e2e/binary/sha384sum/expected.txt create mode 100644 e2e/binary/sha384sum/fixture.txt diff --git a/e2e/binary/sha384sum/BUILD.bazel b/e2e/binary/sha384sum/BUILD.bazel index 4fbbdce5..c1112fb4 100644 --- a/e2e/binary/sha384sum/BUILD.bazel +++ b/e2e/binary/sha384sum/BUILD.bazel @@ -1,11 +1,32 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `sha384sum` +py_pytest_test( + name = "digest", + size = "small", + srcs = ["digest.py"], + data = [ + "expected.txt", + "fixture.txt", + "@ape//ape:sha384sum", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "sha384sum", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:sha384sum"], + src = "@ape//ape:sha384sum", + args = ["--version"], +) + +test_suite( + name = "sha384sum", + tests = [ + ":digest", + ":version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/sha384sum/digest.py b/e2e/binary/sha384sum/digest.py new file mode 100644 index 00000000..99ac9dd8 --- /dev/null +++ b/e2e/binary/sha384sum/digest.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run + +from binary import Diff, Relative, Tool + + +def test_digest(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("sha384sum") + fixture = relative("fixture.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, fixture) + with open(output, "w") as stream: + run(cmd, check=True, timeout=30, stdout=stream) + assert Diff(expected) == Diff(output) diff --git a/e2e/binary/sha384sum/expected.txt b/e2e/binary/sha384sum/expected.txt new file mode 100644 index 00000000..58c786c6 --- /dev/null +++ b/e2e/binary/sha384sum/expected.txt @@ -0,0 +1 @@ +6918d7e713940673a31774238baf4abc764932f1b319c3e9c5bd85c63611f31741fcb567c2a6bbc58f464ca707ca38eb binary/sha384sum/fixture.txt diff --git a/e2e/binary/sha384sum/fixture.txt b/e2e/binary/sha384sum/fixture.txt new file mode 100644 index 00000000..88797e25 --- /dev/null +++ b/e2e/binary/sha384sum/fixture.txt @@ -0,0 +1,19 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat at risus a sagittis. Suspendisse potenti. Ut efficitur metus eu leo condimentum, sit amet efficitur mi tempus. Duis sit amet efficitur elit. Duis a ultrices massa. In hac habitasse platea dictumst. Integer vitae nibh tristique, tempus quam eget, sodales sem. + +Maecenas dapibus diam turpis, non tempor tellus facilisis a. Suspendisse congue tortor ut nisl egestas, et cursus mauris congue. Nullam vitae metus ultricies, rhoncus nibh a, hendrerit neque. Integer ut dictum tortor. Vivamus ligula sem, viverra nec laoreet rutrum, tempor quis felis. Sed eu ex tempus, consectetur tellus id, facilisis quam. Ut at libero vel diam imperdiet mollis. Vestibulum at dolor nec magna consequat porta. Integer ornare metus sit amet sem hendrerit semper. Duis convallis magna vitae ullamcorper auctor. Donec eu massa eget erat pulvinar scelerisque. Ut feugiat lectus non neque suscipit, a mollis dolor ornare. + +Mauris mi est, feugiat eget ante quis, cursus ultricies ante. Nunc sed magna magna. Quisque vitae mattis diam, vel eleifend nisi. Ut ultrices tincidunt mi sit amet vulputate. Fusce at aliquam justo. Nam a maximus felis, eget viverra arcu. Sed sapien odio, dapibus nec justo ut, maximus dignissim dui. Nam accumsan vitae urna imperdiet maximus. Nam gravida, ante id facilisis placerat, augue sem tincidunt dolor, at eleifend dui tortor ut nunc. In vestibulum lorem elit, at dignissim urna hendrerit vel. Nulla nisl erat, lobortis at neque in, ultrices lacinia tortor. Sed id faucibus ex. Vivamus ultrices magna non metus pretium, ut dapibus felis tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer sollicitudin elit sit amet lectus maximus consequat id sit amet massa. Vivamus iaculis arcu sit amet metus gravida finibus. + +Maecenas orci odio, posuere eu consequat ut, posuere in dui. Pellentesque tincidunt ex lorem, non dignissim nibh elementum et. Nullam non finibus est. Nunc sed nisi eu tellus pulvinar auctor a in tortor. Ut risus tellus, pharetra in turpis vel, pretium laoreet quam. Donec sagittis leo sed porttitor lacinia. Sed ullamcorper laoreet metus, non feugiat metus consectetur at. In molestie congue lacus, quis tristique lacus vulputate sit amet. Vestibulum pharetra bibendum dui eget laoreet. Duis at felis consectetur, suscipit sapien consectetur, congue nibh. Aliquam egestas sagittis tortor, nec eleifend lectus pretium eget. Fusce nec nisl nec augue egestas aliquam ac finibus augue. Vestibulum a lectus et ex lobortis auctor. Donec quis tempus turpis, cursus ultrices arcu. Integer vel dui vehicula, consequat massa eget, feugiat eros. + +Fusce sollicitudin feugiat quam nec tincidunt. Sed non mattis tortor. Curabitur et leo nec neque mollis facilisis ac pellentesque dolor. Praesent faucibus odio ac condimentum facilisis. Pellentesque accumsan a nisi vitae maximus. Praesent pharetra vel nibh nec accumsan. Nam sit amet interdum tellus. Mauris euismod aliquet eros sed sollicitudin. Suspendisse fermentum urna et tempus bibendum. Praesent euismod dui ut efficitur aliquam. Cras eu fringilla tortor. + +Integer aliquet a nibh a rutrum. Sed ornare nisi magna, vitae fringilla massa sollicitudin eget. Ut hendrerit interdum vestibulum. Aenean ut felis consequat odio dapibus sagittis. Ut quis mauris lorem. Duis sollicitudin posuere mi, non suscipit erat. Nunc libero enim, finibus sit amet erat id, interdum semper eros. Aliquam eget ligula dui. Proin feugiat diam neque, sit amet pellentesque odio finibus eget. Phasellus feugiat nisl erat, non porttitor elit suscipit eget. Aenean luctus tortor arcu, vitae tempus enim feugiat non. Praesent feugiat dapibus est. Ut ullamcorper justo eleifend diam pretium, ultricies sagittis neque dapibus. Aliquam ut massa dolor. + +Vestibulum quis rutrum lacus. In hac habitasse platea dictumst. Proin porttitor risus et dapibus facilisis. Vestibulum ac dolor quis orci tempus molestie sit amet in mi. Aenean nisl urna, volutpat id purus a, pellentesque pretium metus. Maecenas convallis eros eget est rhoncus, non gravida justo feugiat. Sed bibendum elit a lacus ultrices blandit. Cras vel dui nibh. Ut gravida id erat quis posuere. Mauris condimentum eget ante et semper. Integer ornare egestas purus, quis efficitur ex. Nam dignissim diam orci. Cras dapibus scelerisque sapien, molestie gravida orci congue in. Mauris sed vulputate nisl, non fringilla lacus. Nam venenatis dui bibendum placerat finibus. Integer id lectus sit amet metus hendrerit rutrum a ac lorem. + +Aenean at lectus vel libero tristique rhoncus nec ut lorem. Aliquam eget massa nec nibh ornare facilisis in vitae libero. Cras rhoncus porttitor elementum. Ut quam ipsum, pellentesque sit amet hendrerit non, scelerisque sit amet nibh. Cras ultrices, erat sed tristique aliquet, mi felis vulputate mauris, eu mattis neque felis non diam. Nulla dapibus turpis vitae gravida euismod. Donec non tempus augue. Etiam lacinia ex sit amet sapien tempor lobortis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce molestie ante rhoncus fringilla convallis. Nullam tristique id lectus a egestas. In bibendum molestie ultricies. Suspendisse quis auctor enim. Morbi pellentesque rhoncus lacinia. + +Fusce consectetur velit at nisl accumsan laoreet. Etiam convallis dignissim ligula at congue. Nunc varius dui consectetur, aliquam urna non, bibendum felis. In a convallis enim. Nullam leo dolor, pretium id tristique ut, posuere sed sem. Proin vehicula, orci ut imperdiet pellentesque, velit magna accumsan purus, id viverra orci tellus eu tortor. Nullam rhoncus id odio ut elementum. Nullam condimentum eget mi quis aliquam. + +Ut posuere dolor vitae eros tempus, at varius dolor vestibulum. Cras venenatis odio gravida nisl viverra, nec imperdiet libero lobortis. Suspendisse potenti. Aenean varius, sapien et mollis sagittis, massa justo placerat nisi, id feugiat nunc nunc sit amet nisi. Nullam in sem id nisl vehicula tincidunt non vitae risus. Vestibulum dapibus, enim sed lacinia laoreet, lorem massa fermentum urna, et ornare nunc nibh ut sem. Fusce nisi arcu, feugiat eget erat vitae, fermentum porta ligula. Aenean in felis at ex vulputate dapibus id quis magna. Suspendisse semper rutrum eleifend. Donec mi felis, scelerisque id justo et, semper interdum libero. Proin sit amet tempor velit. Suspendisse eget dui orci. Sed accumsan tortor at nunc scelerisque dignissim. Mauris vestibulum, massa sit amet interdum egestas, erat sapien hendrerit nisi, quis sagittis ex ipsum pellentesque est. Duis sapien ante, finibus in nisi in, vestibulum semper libero. -- GitLab From 3e407bc83fb7ddf3f0c672c5dea67a0eb1fd2208 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Tue, 4 Feb 2025 12:02:43 +0000 Subject: [PATCH 10/10] test(sha512sum): add version and digest test --- e2e/binary/sha512sum/BUILD.bazel | 33 +++++++++++++++++++++++++------ e2e/binary/sha512sum/digest.py | 18 +++++++++++++++++ e2e/binary/sha512sum/expected.txt | 1 + e2e/binary/sha512sum/fixture.txt | 19 ++++++++++++++++++ 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/sha512sum/digest.py create mode 100644 e2e/binary/sha512sum/expected.txt create mode 100644 e2e/binary/sha512sum/fixture.txt diff --git a/e2e/binary/sha512sum/BUILD.bazel b/e2e/binary/sha512sum/BUILD.bazel index 367f38b6..526f7a46 100644 --- a/e2e/binary/sha512sum/BUILD.bazel +++ b/e2e/binary/sha512sum/BUILD.bazel @@ -1,11 +1,32 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `sha512sum` +py_pytest_test( + name = "digest", + size = "small", + srcs = ["digest.py"], + data = [ + "expected.txt", + "fixture.txt", + "@ape//ape:sha512sum", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "sha512sum", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:sha512sum"], + src = "@ape//ape:sha512sum", + args = ["--version"], +) + +test_suite( + name = "sha512sum", + tests = [ + ":digest", + ":version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/sha512sum/digest.py b/e2e/binary/sha512sum/digest.py new file mode 100644 index 00000000..9d3f6313 --- /dev/null +++ b/e2e/binary/sha512sum/digest.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run + +from binary import Diff, Relative, Tool + + +def test_digest(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("sha512sum") + fixture = relative("fixture.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, fixture) + with open(output, "w") as stream: + run(cmd, check=True, timeout=30, stdout=stream) + assert Diff(expected) == Diff(output) diff --git a/e2e/binary/sha512sum/expected.txt b/e2e/binary/sha512sum/expected.txt new file mode 100644 index 00000000..6cc33e8e --- /dev/null +++ b/e2e/binary/sha512sum/expected.txt @@ -0,0 +1 @@ +32da170d2efb47d067941acc9a79b59d99a0e2ce86b465dabaa25716bff0b336a908fdd386591aa0cefec2c370bcb4e183a34af2554a1fc676fe0931b3b44a60 binary/sha512sum/fixture.txt diff --git a/e2e/binary/sha512sum/fixture.txt b/e2e/binary/sha512sum/fixture.txt new file mode 100644 index 00000000..88797e25 --- /dev/null +++ b/e2e/binary/sha512sum/fixture.txt @@ -0,0 +1,19 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat at risus a sagittis. Suspendisse potenti. Ut efficitur metus eu leo condimentum, sit amet efficitur mi tempus. Duis sit amet efficitur elit. Duis a ultrices massa. In hac habitasse platea dictumst. Integer vitae nibh tristique, tempus quam eget, sodales sem. + +Maecenas dapibus diam turpis, non tempor tellus facilisis a. Suspendisse congue tortor ut nisl egestas, et cursus mauris congue. Nullam vitae metus ultricies, rhoncus nibh a, hendrerit neque. Integer ut dictum tortor. Vivamus ligula sem, viverra nec laoreet rutrum, tempor quis felis. Sed eu ex tempus, consectetur tellus id, facilisis quam. Ut at libero vel diam imperdiet mollis. Vestibulum at dolor nec magna consequat porta. Integer ornare metus sit amet sem hendrerit semper. Duis convallis magna vitae ullamcorper auctor. Donec eu massa eget erat pulvinar scelerisque. Ut feugiat lectus non neque suscipit, a mollis dolor ornare. + +Mauris mi est, feugiat eget ante quis, cursus ultricies ante. Nunc sed magna magna. Quisque vitae mattis diam, vel eleifend nisi. Ut ultrices tincidunt mi sit amet vulputate. Fusce at aliquam justo. Nam a maximus felis, eget viverra arcu. Sed sapien odio, dapibus nec justo ut, maximus dignissim dui. Nam accumsan vitae urna imperdiet maximus. Nam gravida, ante id facilisis placerat, augue sem tincidunt dolor, at eleifend dui tortor ut nunc. In vestibulum lorem elit, at dignissim urna hendrerit vel. Nulla nisl erat, lobortis at neque in, ultrices lacinia tortor. Sed id faucibus ex. Vivamus ultrices magna non metus pretium, ut dapibus felis tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer sollicitudin elit sit amet lectus maximus consequat id sit amet massa. Vivamus iaculis arcu sit amet metus gravida finibus. + +Maecenas orci odio, posuere eu consequat ut, posuere in dui. Pellentesque tincidunt ex lorem, non dignissim nibh elementum et. Nullam non finibus est. Nunc sed nisi eu tellus pulvinar auctor a in tortor. Ut risus tellus, pharetra in turpis vel, pretium laoreet quam. Donec sagittis leo sed porttitor lacinia. Sed ullamcorper laoreet metus, non feugiat metus consectetur at. In molestie congue lacus, quis tristique lacus vulputate sit amet. Vestibulum pharetra bibendum dui eget laoreet. Duis at felis consectetur, suscipit sapien consectetur, congue nibh. Aliquam egestas sagittis tortor, nec eleifend lectus pretium eget. Fusce nec nisl nec augue egestas aliquam ac finibus augue. Vestibulum a lectus et ex lobortis auctor. Donec quis tempus turpis, cursus ultrices arcu. Integer vel dui vehicula, consequat massa eget, feugiat eros. + +Fusce sollicitudin feugiat quam nec tincidunt. Sed non mattis tortor. Curabitur et leo nec neque mollis facilisis ac pellentesque dolor. Praesent faucibus odio ac condimentum facilisis. Pellentesque accumsan a nisi vitae maximus. Praesent pharetra vel nibh nec accumsan. Nam sit amet interdum tellus. Mauris euismod aliquet eros sed sollicitudin. Suspendisse fermentum urna et tempus bibendum. Praesent euismod dui ut efficitur aliquam. Cras eu fringilla tortor. + +Integer aliquet a nibh a rutrum. Sed ornare nisi magna, vitae fringilla massa sollicitudin eget. Ut hendrerit interdum vestibulum. Aenean ut felis consequat odio dapibus sagittis. Ut quis mauris lorem. Duis sollicitudin posuere mi, non suscipit erat. Nunc libero enim, finibus sit amet erat id, interdum semper eros. Aliquam eget ligula dui. Proin feugiat diam neque, sit amet pellentesque odio finibus eget. Phasellus feugiat nisl erat, non porttitor elit suscipit eget. Aenean luctus tortor arcu, vitae tempus enim feugiat non. Praesent feugiat dapibus est. Ut ullamcorper justo eleifend diam pretium, ultricies sagittis neque dapibus. Aliquam ut massa dolor. + +Vestibulum quis rutrum lacus. In hac habitasse platea dictumst. Proin porttitor risus et dapibus facilisis. Vestibulum ac dolor quis orci tempus molestie sit amet in mi. Aenean nisl urna, volutpat id purus a, pellentesque pretium metus. Maecenas convallis eros eget est rhoncus, non gravida justo feugiat. Sed bibendum elit a lacus ultrices blandit. Cras vel dui nibh. Ut gravida id erat quis posuere. Mauris condimentum eget ante et semper. Integer ornare egestas purus, quis efficitur ex. Nam dignissim diam orci. Cras dapibus scelerisque sapien, molestie gravida orci congue in. Mauris sed vulputate nisl, non fringilla lacus. Nam venenatis dui bibendum placerat finibus. Integer id lectus sit amet metus hendrerit rutrum a ac lorem. + +Aenean at lectus vel libero tristique rhoncus nec ut lorem. Aliquam eget massa nec nibh ornare facilisis in vitae libero. Cras rhoncus porttitor elementum. Ut quam ipsum, pellentesque sit amet hendrerit non, scelerisque sit amet nibh. Cras ultrices, erat sed tristique aliquet, mi felis vulputate mauris, eu mattis neque felis non diam. Nulla dapibus turpis vitae gravida euismod. Donec non tempus augue. Etiam lacinia ex sit amet sapien tempor lobortis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce molestie ante rhoncus fringilla convallis. Nullam tristique id lectus a egestas. In bibendum molestie ultricies. Suspendisse quis auctor enim. Morbi pellentesque rhoncus lacinia. + +Fusce consectetur velit at nisl accumsan laoreet. Etiam convallis dignissim ligula at congue. Nunc varius dui consectetur, aliquam urna non, bibendum felis. In a convallis enim. Nullam leo dolor, pretium id tristique ut, posuere sed sem. Proin vehicula, orci ut imperdiet pellentesque, velit magna accumsan purus, id viverra orci tellus eu tortor. Nullam rhoncus id odio ut elementum. Nullam condimentum eget mi quis aliquam. + +Ut posuere dolor vitae eros tempus, at varius dolor vestibulum. Cras venenatis odio gravida nisl viverra, nec imperdiet libero lobortis. Suspendisse potenti. Aenean varius, sapien et mollis sagittis, massa justo placerat nisi, id feugiat nunc nunc sit amet nisi. Nullam in sem id nisl vehicula tincidunt non vitae risus. Vestibulum dapibus, enim sed lacinia laoreet, lorem massa fermentum urna, et ornare nunc nibh ut sem. Fusce nisi arcu, feugiat eget erat vitae, fermentum porta ligula. Aenean in felis at ex vulputate dapibus id quis magna. Suspendisse semper rutrum eleifend. Donec mi felis, scelerisque id justo et, semper interdum libero. Proin sit amet tempor velit. Suspendisse eget dui orci. Sed accumsan tortor at nunc scelerisque dignissim. Mauris vestibulum, massa sit amet interdum egestas, erat sapien hendrerit nisi, quis sagittis ex ipsum pellentesque est. Duis sapien ante, finibus in nisi in, vestibulum semper libero. -- GitLab