From e8d89d6a421db4b056bbc4b1d491403959093215 Mon Sep 17 00:00:00 2001 From: Marco Mariani Date: Mon, 17 Apr 2023 10:50:09 +0200 Subject: [PATCH] Test debian packaging WIP because probably docker/test is not the right place for this, but we already have other functional tests (BATS) under test/ --- .github/workflows/tests_deb.yml | 52 +++++++++++++++++++++ Makefile | 10 ++-- debian/rules | 2 +- docker/test/Pipfile | 2 +- docker/test/Pipfile.lock | 82 ++++++++++++++------------------- docker/test/pytest.ini | 2 +- docker/test/tests/conftest.py | 6 +++ docker/test/tests/test_deb.py | 9 ++++ 8 files changed, 112 insertions(+), 53 deletions(-) create mode 100644 .github/workflows/tests_deb.yml create mode 100644 docker/test/tests/test_deb.py diff --git a/.github/workflows/tests_deb.yml b/.github/workflows/tests_deb.yml new file mode 100644 index 000000000..5fc1a499c --- /dev/null +++ b/.github/workflows/tests_deb.yml @@ -0,0 +1,52 @@ +name: Test .deb packaging + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +permissions: + contents: read + +jobs: + build: + name: "Test .deb packages" + runs-on: ubuntu-latest + + steps: + + - name: Check out code into the Go module directory + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: 1.20.3 + + - name: Cache virtualenvs + id: cache-pipenv + uses: actions/cache@v3 + with: + path: ~/.local/share/virtualenvs + key: ${{ runner.os }}-pipenv-${{ hashFiles('**/Pipfile.lock') }} + + - name: Install functional test dependencies + run: | + sudo apt install -y build-essential debhelper devscripts fakeroot lintian + docker network create net-test + python3 -m pip install --upgrade pipenv wheel + cd docker/test + pipenv install --deploy + + - name: Run functional tests + env: + CROWDSEC_TEST_VERSION: dev + CROWDSEC_TEST_FLAVORS: full + CROWDSEC_TEST_NETWORK: net-test + CROWDSEC_TEST_TIMEOUT: 60 + PYTEST_ADDOPTS: --durations=0 -vv --color=yes + run: | + pipenv run pytest -m deb diff --git a/Makefile b/Makefile index 05eb0586b..373a5995e 100644 --- a/Makefile +++ b/Makefile @@ -63,8 +63,12 @@ all: clean test build .PHONY: plugins plugins: http-plugin slack-plugin splunk-plugin email-plugin dummy-plugin +.PHONY: clean-debian +clean-debian: + $(MAKE) -f debian/rules clean + .PHONY: clean -clean: testclean +clean: clean-test @$(MAKE) -C $(CROWDSEC_FOLDER) clean --no-print-directory RM="$(RM)" WIN_IGNORE_ERR="$(WIN_IGNORE_ERR)" CP="$(CP)" CPR="$(CPR)" MKDIR="$(MKDIR)" @$(MAKE) -C $(CSCLI_FOLDER) clean --no-print-directory RM="$(RM)" WIN_IGNORE_ERR="$(WIN_IGNORE_ERR)" CP="$(CP)" CPR="$(CPR)" MKDIR="$(MKDIR)" @$(RM) $(CROWDSEC_BIN) $(WIN_IGNORE_ERR) @@ -99,8 +103,8 @@ email-plugin: goversion dummy-plugin: goversion $(MAKE) -C $(DUMMY_PLUGIN_FOLDER) build --no-print-directory GOARCH=$(GOARCH) GOOS=$(GOOS) RM="$(RM)" WIN_IGNORE_ERR="$(WIN_IGNORE_ERR)" CP="$(CP)" CPR="$(CPR)" MKDIR="$(MKDIR)" -.PHONY: testclean -testclean: bats-clean +.PHONY: clean-test +clean-test: bats-clean @$(RM) pkg/apiserver/ent $(WIN_IGNORE_ERR) @$(RM) pkg/cwhub/hubdir $(WIN_IGNORE_ERR) @$(RM) pkg/cwhub/install $(WIN_IGNORE_ERR) diff --git a/debian/rules b/debian/rules index 9f9258a2f..8d82065a0 100755 --- a/debian/rules +++ b/debian/rules @@ -1,6 +1,6 @@ #!/usr/bin/make -f -export DEB_VERSION=$(shell dpkg-parsechangelog | egrep '^Version:' | cut -f 2 -d ' ') +export DEB_VERSION=$(shell dpkg-parsechangelog | grep -E '^Version:' | cut -f 2 -d ' ') export BUILD_VERSION=v${DEB_VERSION}-debian-pragmatic export GO111MODULE=on diff --git a/docker/test/Pipfile b/docker/test/Pipfile index 6a617720d..2c64c6cf0 100644 --- a/docker/test/Pipfile +++ b/docker/test/Pipfile @@ -1,7 +1,7 @@ [packages] pytest-dotenv = "*" pytest-xdist = "*" -pytest-cs = {ref = "0.4.0", git = "https://github.com/crowdsecurity/pytest-cs.git"} +pytest-cs = {ref = "0.7.0", git = "https://github.com/crowdsecurity/pytest-cs.git"} [dev-packages] gnureadline = "*" diff --git a/docker/test/Pipfile.lock b/docker/test/Pipfile.lock index ec03981db..be4edc4b0 100644 --- a/docker/test/Pipfile.lock +++ b/docker/test/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "da2959f993eb751a5f6d2b1c4537ba39ed414d0e9d300dc513ced5a8f0ab4261" + "sha256": "0f0f784311c14083a66b9951f8dbf420a67fb26a4092af2bad1a3cdf12239125" }, "pipfile-spec": 6, "requires": { @@ -16,14 +16,6 @@ ] }, "default": { - "attrs": { - "hashes": [ - "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836", - "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99" - ], - "markers": "python_version >= '3.6'", - "version": "==22.2.0" - }, "certifi": { "hashes": [ "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", @@ -184,32 +176,28 @@ }, "cryptography": { "hashes": [ - "sha256:103e8f7155f3ce2ffa0049fe60169878d47a4364b277906386f8de21c9234aa1", - "sha256:23df8ca3f24699167daf3e23e51f7ba7334d504af63a94af468f468b975b7dd7", - "sha256:2725672bb53bb92dc7b4150d233cd4b8c59615cd8288d495eaa86db00d4e5c06", - "sha256:30b1d1bfd00f6fc80d11300a29f1d8ab2b8d9febb6ed4a38a76880ec564fae84", - "sha256:35d658536b0a4117c885728d1a7032bdc9a5974722ae298d6c533755a6ee3915", - "sha256:50cadb9b2f961757e712a9737ef33d89b8190c3ea34d0fb6675e00edbe35d074", - "sha256:5f8c682e736513db7d04349b4f6693690170f95aac449c56f97415c6980edef5", - "sha256:6236a9610c912b129610eb1a274bdc1350b5df834d124fa84729ebeaf7da42c3", - "sha256:788b3921d763ee35dfdb04248d0e3de11e3ca8eb22e2e48fef880c42e1f3c8f9", - "sha256:8bc0008ef798231fac03fe7d26e82d601d15bd16f3afaad1c6113771566570f3", - "sha256:8f35c17bd4faed2bc7797d2a66cbb4f986242ce2e30340ab832e5d99ae60e011", - "sha256:b49a88ff802e1993b7f749b1eeb31134f03c8d5c956e3c125c75558955cda536", - "sha256:bc0521cce2c1d541634b19f3ac661d7a64f9555135e9d8af3980965be717fd4a", - "sha256:bc5b871e977c8ee5a1bbc42fa8d19bcc08baf0c51cbf1586b0e87a2694dde42f", - "sha256:c43ac224aabcbf83a947eeb8b17eaf1547bce3767ee2d70093b461f31729a480", - "sha256:d15809e0dbdad486f4ad0979753518f47980020b7a34e9fc56e8be4f60702fac", - "sha256:d7d84a512a59f4412ca8549b01f94be4161c94efc598bf09d027d67826beddc0", - "sha256:e029b844c21116564b8b61216befabca4b500e6816fa9f0ba49527653cae2108", - "sha256:e8a0772016feeb106efd28d4a328e77dc2edae84dfbac06061319fdb669ff828", - "sha256:e944fe07b6f229f4c1a06a7ef906a19652bdd9fd54c761b0ff87e83ae7a30354", - "sha256:eb40fe69cfc6f5cdab9a5ebd022131ba21453cf7b8a7fd3631f45bbf52bed612", - "sha256:fa507318e427169ade4e9eccef39e9011cdc19534f55ca2f36ec3f388c1f70f3", - "sha256:ffd394c7896ed7821a6d13b24657c6a34b6e2650bd84ae063cf11ccffa4f1a97" + "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440", + "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288", + "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b", + "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958", + "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b", + "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d", + "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a", + "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404", + "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b", + "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e", + "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2", + "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c", + "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b", + "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9", + "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b", + "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636", + "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99", + "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e", + "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9" ], "markers": "python_version >= '3.6'", - "version": "==39.0.2" + "version": "==40.0.2" }, "docker": { "hashes": [ @@ -253,11 +241,11 @@ }, "packaging": { "hashes": [ - "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2", - "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" + "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", + "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" ], "markers": "python_version >= '3.7'", - "version": "==23.0" + "version": "==23.1" }, "pluggy": { "hashes": [ @@ -296,15 +284,15 @@ }, "pytest": { "hashes": [ - "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e", - "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4" + "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362", + "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3" ], "markers": "python_version >= '3.7'", - "version": "==7.2.2" + "version": "==7.3.1" }, "pytest-cs": { "git": "https://github.com/crowdsecurity/pytest-cs.git", - "ref": "8c49bd8072672c49855a7991a5900858b3ebb777" + "ref": "19f52b84afe9f9ec3aa17de048307dbabc14f43f" }, "pytest-datadir": { "hashes": [ @@ -497,11 +485,11 @@ }, "ipython": { "hashes": [ - "sha256:5b54478e459155a326bf5f42ee4f29df76258c0279c36f21d71ddb560f88b156", - "sha256:735cede4099dbc903ee540307b9171fbfef4aa75cfcacc5a273b2cda2f02be04" + "sha256:1c183bf61b148b00bcebfa5d9b39312733ae97f6dad90d7e9b4d86c8647f498c", + "sha256:a950236df04ad75b5bc7f816f9af3d74dc118fd42f2ff7e80e8e60ca1f182e2d" ], "markers": "python_version < '3.11' and python_version >= '3.7'", - "version": "==8.11.0" + "version": "==8.12.0" }, "jedi": { "hashes": [ @@ -566,11 +554,11 @@ }, "pygments": { "hashes": [ - "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297", - "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717" + "sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094", + "sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500" ], - "markers": "python_version >= '3.6'", - "version": "==2.14.0" + "markers": "python_version >= '3.7'", + "version": "==2.15.0" }, "six": { "hashes": [ diff --git a/docker/test/pytest.ini b/docker/test/pytest.ini index 4d639c1a6..94f8d3ae8 100644 --- a/docker/test/pytest.ini +++ b/docker/test/pytest.ini @@ -1,6 +1,6 @@ [pytest] # run all tests in parallel, compact output -addopts = -n 4 --no-header +addopts = -n 4 --no-header -m "not (deb or rpm)" required_plugins = pytest-xdist env_files = .env diff --git a/docker/test/tests/conftest.py b/docker/test/tests/conftest.py index 3498da826..93131fe68 100644 --- a/docker/test/tests/conftest.py +++ b/docker/test/tests/conftest.py @@ -3,6 +3,12 @@ pytest_plugins = ("cs",) def pytest_configure(config): + config.addinivalue_line( + 'markers', 'deb: tests for build/install/configure a debian packages' + ) + config.addinivalue_line( + 'markers', 'rpm: tests for build/install/configure rpm packages' + ) config.addinivalue_line( 'markers', 'docker: mark tests for lone or manually orchestrated containers' ) diff --git a/docker/test/tests/test_deb.py b/docker/test/tests/test_deb.py new file mode 100644 index 000000000..ac9edb515 --- /dev/null +++ b/docker/test/tests/test_deb.py @@ -0,0 +1,9 @@ + +import pytest + +pytestmark = pytest.mark.deb + + +def test_buildpackage(deb_package_path): + """Test that the package can be built.""" + assert deb_package_path.exists(), f'Package {deb_package_path} not found'