Use GithubAction to run ldap tests
authorJérémy Derussé <jeremy@derusse.com>
Mon, 16 Nov 2020 08:41:36 +0000 (09:41 +0100)
committerJérémy Derussé <jeremy@derusse.com>
Mon, 16 Nov 2020 15:15:08 +0000 (16:15 +0100)
.github/workflows/actions/populate-ldap/Dockerfile [deleted file]
.github/workflows/actions/populate-ldap/action.yml [deleted file]
.github/workflows/actions/populate-ldap/fixtures.ldif [deleted file]
.github/workflows/tests.yml
.travis.yml
src/Symfony/Component/Ldap/Tests/Adapter/ExtLdap/AdapterTest.php
src/Symfony/Component/Ldap/Tests/Adapter/ExtLdap/LdapManagerTest.php
src/Symfony/Component/Ldap/Tests/Fixtures/conf/slapd.conf [deleted file]
src/Symfony/Component/Ldap/Tests/Fixtures/data/base.ldif [deleted file]
src/Symfony/Component/Ldap/Tests/LdapTestCase.php
src/Symfony/Component/Ldap/phpunit.xml.dist

diff --git a/.github/workflows/actions/populate-ldap/Dockerfile b/.github/workflows/actions/populate-ldap/Dockerfile
deleted file mode 100644 (file)
index c256b27..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-FROM osixia/openldap
-LABEL maintainer="wshihadeh.devx@gmail.com"
-ENV LDAP_ORGANISATION="Symfony"
-ENV LDAP_DOMAIN="symfony.com"
-ENV LDAP_ADMIN_PASSWORD="symfony"
-ENV LDAP_BASE_DN="dc=symfony,dc=com"
-ENV LDAP_SEED_INTERNAL_LDIF_PATH="/ldif-data"
-RUN mkdir /ldif-data
-COPY ./fixtures.ldif /ldif-data/50-fixtures.ldif
diff --git a/.github/workflows/actions/populate-ldap/action.yml b/.github/workflows/actions/populate-ldap/action.yml
deleted file mode 100644 (file)
index 971d98a..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-name: 'LDAP Populate'
-description: 'Create a pre-populated LDAP server with symfony test data'
-branding:
-  icon: 'database'
-  color: 'blue'
-
-runs:
-  using: 'docker'
-  image: 'Dockerfile'
diff --git a/.github/workflows/actions/populate-ldap/fixtures.ldif b/.github/workflows/actions/populate-ldap/fixtures.ldif
deleted file mode 100644 (file)
index 4384214..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-dn: cn=Fabien Potencier,dc=symfony,dc=com
-objectClass: inetOrgPerson
-objectClass: organizationalPerson
-objectClass: person
-objectClass: top
-cn: Fabien Potencier
-sn: fabpot
-mail: fabpot@symfony.com
-mail: fabien@potencier.com
-ou: People
-ou: Maintainers
-ou: Founder
-givenName: Fabien Potencier
-description: Founder and project lead @Symfony
-
-dn: ou=Components,dc=symfony,dc=com
-objectclass: organizationalunit
-ou: Components
-
-dn: ou=Ldap,ou=Components,dc=symfony,dc=com
-objectclass: organizationalunit
-ou: Ldap
-
-dn: ou=Ldap scoping,ou=Ldap,ou=Components,dc=symfony,dc=com
-objectclass: organizationalunit
-ou: Ldap scoping
index c12a733..efb905e 100644 (file)
@@ -15,6 +15,17 @@ jobs:
                 php: ['7.1', '7.4']
 
         services:
+            ldap:
+                image: bitnami/openldap
+                ports:
+                    - 3389:3389
+                env:
+                    LDAP_ADMIN_USERNAME: admin
+                    LDAP_ADMIN_PASSWORD: symfony
+                    LDAP_ROOT: dc=symfony,dc=com
+                    LDAP_PORT_NUMBER: 3389
+                    LDAP_USERS: a
+                    LDAP_PASSWORDS: a
             redis:
                 image: redis:6.0.0
                 ports:
@@ -45,17 +56,20 @@ jobs:
             -   name: Checkout
                 uses: actions/checkout@v2
 
-            - name: Populate LDAP
-                  uses: ./.github/actions/populate-ldap
-
             -   name: Setup PHP
                 uses: shivammathur/setup-php@v2
                 with:
                     coverage: "none"
-                    extensions: "memcached,redis,xsl"
+                    extensions: "memcached,redis,xsl,ldap"
                     ini-values: "memory_limit=-1"
                     php-version: "${{ matrix.php }}"
 
+            -   name: Load fixtures
+                uses: docker://bitnami/openldap
+                with:
+                  entrypoint: /bin/bash
+                  args: -c "(ldapwhoami -h localhost:3389 -D cn=admin,dc=symfony,dc=com -w symfony||sleep 5) && ldapadd -h ldap:3389 -D cn=admin,dc=symfony,dc=com -w symfony -f src/Symfony/Component/Ldap/Tests/Fixtures/data/fixtures.ldif && ldapdelete -h ldap:3389 -D cn=admin,dc=symfony,dc=com -w symfony cn=a,ou=users,dc=symfony,dc=com"
+
             -   name: Configure composer
                 run: |
                     COMPOSER_HOME="$(composer config home)"
@@ -83,7 +97,7 @@ jobs:
                     echo "::endgroup::"
 
             -   name: Run tests
-                run: ./phpunit --group integration
+                run: ./phpunit --group integration -v
                 env:
                     REDIS_HOST: localhost
                     REDIS_CLUSTER_HOSTS: 'localhost:7000 localhost:7001 localhost:7002 localhost:7003 localhost:7004 localhost:7005'
index cbb8984..582625f 100644 (file)
@@ -9,8 +9,6 @@ addons:
     apt_packages:
         - parallel
         - language-pack-fr-base
-        - ldap-utils
-        - slapd
         - zookeeperd
         - libzookeeper-mt-dev
 
@@ -164,13 +162,6 @@ before_install:
           tfold ext.redis tpecl redis-5.2.3 redis.so $INI "no"
       done
 
-    - |
-      # Load fixtures
-      if [[ ! $skip ]]; then
-          ldapadd -h localhost:3389 -D cn=admin,dc=symfony,dc=com -w symfony -f src/Symfony/Component/Ldap/Tests/Fixtures/data/base.ldif &&
-          ldapadd -h localhost:3389 -D cn=admin,dc=symfony,dc=com -w symfony -f src/Symfony/Component/Ldap/Tests/Fixtures/data/fixtures.ldif
-      fi
-
 install:
     - |
       # Install the phpunit-bridge from a PR if required
index 3447cdd..d7b06c6 100644 (file)
@@ -22,6 +22,7 @@ use Symfony\Component\Ldap\Tests\LdapTestCase;
 
 /**
  * @requires extension ldap
+ * @group integration
  */
 class AdapterTest extends LdapTestCase
 {
@@ -116,7 +117,7 @@ class AdapterTest extends LdapTestCase
 
     public function testLdapPagination()
     {
-        $ldap = new Adapter(array_merge($this->getLdapConfig()));
+        $ldap = new Adapter($this->getLdapConfig());
         $ldap->getConnection()->bind('cn=admin,dc=symfony,dc=com', 'symfony');
         $entries = $this->setupTestUsers($ldap);
 
@@ -147,7 +148,7 @@ class AdapterTest extends LdapTestCase
             $this->assertEquals(\count($fully_paged_query->getResources()), 1);
             $this->assertEquals(\count($paged_query->getResources()), 5);
 
-            if (\PHP_MAJOR_VERSION > 7 || (\PHP_MAJOR_VERSION == 7 && \PHP_MINOR_VERSION >= 2)) {
+            if (\PHP_VERSION_ID >= 70200) {
                 // This last query is to ensure that we haven't botched the state of our connection
                 // by not resetting pagination properly. extldap <= PHP 7.1 do not implement the necessary
                 // bits to work around an implementation flaw, so we simply can't guarantee this to work there.
@@ -199,7 +200,7 @@ class AdapterTest extends LdapTestCase
 
     public function testLdapPaginationLimits()
     {
-        $ldap = new Adapter(array_merge($this->getLdapConfig()));
+        $ldap = new Adapter($this->getLdapConfig());
         $ldap->getConnection()->bind('cn=admin,dc=symfony,dc=com', 'symfony');
 
         $entries = $this->setupTestUsers($ldap);
index 0fcbbfa..bfdd7d5 100644 (file)
@@ -96,9 +96,8 @@ class LdapManagerTest extends LdapTestCase
         $em->add($entry);
         try {
             $em->add($entry);
-        } catch (LdapException $e) {
+        } finally {
             $em->remove($entry);
-            throw $e;
         }
     }
 
@@ -215,12 +214,12 @@ class LdapManagerTest extends LdapTestCase
         $newEntry = $result[0];
         $originalCN = $entry->getAttribute('cn')[0];
 
-        $this->assertContains($originalCN, $newEntry->getAttribute('cn'));
-        $this->assertContains('Kevin', $newEntry->getAttribute('cn'));
-
-        $entryManager->rename($newEntry, 'cn='.$originalCN);
-
-        $this->executeSearchQuery(1);
+        try {
+            $this->assertContains($originalCN, $newEntry->getAttribute('cn'));
+            $this->assertContains('Kevin', $newEntry->getAttribute('cn'));
+        } finally {
+            $entryManager->rename($newEntry, 'cn='.$originalCN);
+        }
     }
 
     public function testLdapAddRemoveAttributeValues()
diff --git a/src/Symfony/Component/Ldap/Tests/Fixtures/conf/slapd.conf b/src/Symfony/Component/Ldap/Tests/Fixtures/conf/slapd.conf
deleted file mode 100644 (file)
index 24eebcb..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-# See slapd.conf(5) for details on configuration options.
-include   /etc/ldap/schema/core.schema
-include   /etc/ldap/schema/cosine.schema
-include   /etc/ldap/schema/inetorgperson.schema
-include   /etc/ldap/schema/nis.schema
-
-pidfile  /tmp/slapd/slapd.pid
-argsfile /tmp/slapd/slapd.args
-
-modulepath /tmp/slapd-modules
-moduleload back_hdb
-
-database  hdb
-directory /tmp/slapd
-
-suffix    "dc=symfony,dc=com"
-rootdn    "cn=admin,dc=symfony,dc=com"
-rootpw    {SSHA}btWUi971ytYpVMbZLkaQ2A6ETh3VA0lL
diff --git a/src/Symfony/Component/Ldap/Tests/Fixtures/data/base.ldif b/src/Symfony/Component/Ldap/Tests/Fixtures/data/base.ldif
deleted file mode 100644 (file)
index 25abb29..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-dn: dc=symfony,dc=com
-objectClass: dcObject
-objectClass: organizationalUnit
-ou: Organization
index 6caf659..606065e 100644 (file)
@@ -9,7 +9,7 @@ class LdapTestCase extends TestCase
     protected function getLdapConfig()
     {
         $h = @ldap_connect(getenv('LDAP_HOST'), getenv('LDAP_PORT'));
-        ldap_set_option($h, LDAP_OPT_PROTOCOL_VERSION, 3);
+        @ldap_set_option($h, LDAP_OPT_PROTOCOL_VERSION, 3);
 
         if (!$h || !@ldap_bind($h)) {
             $this->markTestSkipped('No server is listening on LDAP_HOST:LDAP_PORT');
index e9861f8..a679848 100644 (file)
@@ -10,7 +10,7 @@
 >
     <php>
         <ini name="error_reporting" value="-1" />
-        <env name="LDAP_HOST" value="127.0.0.1" />
+        <env name="LDAP_HOST" value="localhost" />
         <env name="LDAP_PORT" value="3389" />
     </php>