From 52cc18efc0baa916b23350fe5fbb0b0081af5def Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Sun, 29 Oct 2023 18:51:33 +0100 Subject: [PATCH] fix(tests): Ensure ldap server can be reached in integration tests on GitHub Actions and other improvments * Run integration tests for every pull request * Also print docker logs of service containers (ldap, redis) * Ensure consistent `datadir` for test assertions * Test openldap features separatly * Only the LDAP tests rely on `/dev/shm` while `federated.feature` rely on real directory access Signed-off-by: Ferdinand Thiessen --- .github/workflows/integration-sqlite.yml | 18 +++++++++-------- build/integration/config/behat.yml | 20 +++++++++++++++++++ .../features/bootstrap/LDAPContext.php | 5 ++++- .../openldap-uid-username.feature | 0 .../openldap-numerical-id.feature | 0 5 files changed, 34 insertions(+), 9 deletions(-) rename build/integration/{ldap_features => openldap_features}/openldap-uid-username.feature (100%) rename build/integration/{ldap_features => openldap_numerical_features}/openldap-numerical-id.feature (100%) diff --git a/.github/workflows/integration-sqlite.yml b/.github/workflows/integration-sqlite.yml index 036e8770830..66b654561a1 100644 --- a/.github/workflows/integration-sqlite.yml +++ b/.github/workflows/integration-sqlite.yml @@ -2,10 +2,6 @@ name: Integration sqlite on: pull_request: - paths: - # Only running on PR for this file to save CI time (otherwise pgsql only) - - '.github/workflows/integration-sqlite.yml' - push: branches: - main @@ -63,6 +59,8 @@ jobs: - 'federation_features' - '--tags ~@large files_features' - 'filesdrop_features' + - 'openldap_features' + - 'openldap_numerical_features' - 'ldap_features' - 'remoteapi_features' - 'setup_features' @@ -85,6 +83,8 @@ jobs: - 6379:6379 openldap: image: ghcr.io/nextcloud/continuous-integration-openldap:openldap-7 + ports: + - 389:389 env: SLAPD_DOMAIN: nextcloud.ci SLAPD_ORGANIZATION: Nextcloud @@ -129,15 +129,13 @@ jobs: run: composer i --no-dev - name: Set up Nextcloud - env: - DB_PORT: 4444 run: | mkdir data - ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + ./occ maintenance:install --verbose ${{ contains(matrix.test-suite,'ldap') && '--data-dir=/dev/shm/nc_int' || '' }} --database=sqlite --database-name=nextcloud --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin ./occ config:system:set hashing_default_password --value=true --type=boolean - name: Configure caching - if: ${{ matrix.test-suite == 'ldap_features' }} + if: ${{ contains(matrix.test-suite,'ldap') }} run: | ./occ config:system:set redis host --value=localhost ./occ config:system:set redis port --value=6379 --type=integer @@ -147,12 +145,16 @@ jobs: - name: Run integration working-directory: build/integration + env: + LDAP_HOST: localhost run: bash run.sh ${{ matrix.test-suite }} no-tail-log - name: Print logs if: always() run: | cat data/nextcloud.log + docker ps -a + docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done summary: permissions: diff --git a/build/integration/config/behat.yml b/build/integration/config/behat.yml index 080752a3d6f..8401b841cdd 100644 --- a/build/integration/config/behat.yml +++ b/build/integration/config/behat.yml @@ -192,6 +192,26 @@ default: - admin - admin regular_user_password: 123456 + openldap_numerical: + paths: + - "%paths.base%/../openldap_numerical_features" + contexts: + - LDAPContext: + baseUrl: http://localhost:8080 + admin: + - admin + - admin + regular_user_password: 123456 + openldap: + paths: + - "%paths.base%/../openldap_features" + contexts: + - LDAPContext: + baseUrl: http://localhost:8080 + admin: + - admin + - admin + regular_user_password: 123456 remoteapi: paths: - "%paths.base%/../remoteapi_features" diff --git a/build/integration/features/bootstrap/LDAPContext.php b/build/integration/features/bootstrap/LDAPContext.php index e0315bce84e..fd4a448b5e9 100644 --- a/build/integration/features/bootstrap/LDAPContext.php +++ b/build/integration/features/bootstrap/LDAPContext.php @@ -104,7 +104,7 @@ class LDAPContext implements Context { $this->asAn('admin'); $this->creatingAnLDAPConfigurationAt('/apps/user_ldap/api/v1/config'); $data = new TableNode([ - ['configData[ldapHost]', 'openldap'], + ['configData[ldapHost]', getenv('LDAP_HOST') ?: 'openldap'], ['configData[ldapPort]', '389'], ['configData[ldapBase]', 'dc=nextcloud,dc=ci'], ['configData[ldapAgentName]', 'cn=admin,dc=nextcloud,dc=ci'], @@ -141,6 +141,9 @@ class LDAPContext implements Context { $this->asAn('admin'); $configData = $table->getRows(); foreach ($configData as &$row) { + if (str_contains($row[0], 'Host') && getenv('LDAP_HOST')) { + $row[1] = str_replace('openldap', getenv('LDAP_HOST'), $row[1]); + } $row[0] = 'configData[' . $row[0] . ']'; } $this->settingTheLDAPConfigurationTo(new TableNode($configData)); diff --git a/build/integration/ldap_features/openldap-uid-username.feature b/build/integration/openldap_features/openldap-uid-username.feature similarity index 100% rename from build/integration/ldap_features/openldap-uid-username.feature rename to build/integration/openldap_features/openldap-uid-username.feature diff --git a/build/integration/ldap_features/openldap-numerical-id.feature b/build/integration/openldap_numerical_features/openldap-numerical-id.feature similarity index 100% rename from build/integration/ldap_features/openldap-numerical-id.feature rename to build/integration/openldap_numerical_features/openldap-numerical-id.feature -- 2.39.5