From 86d145f0692df7b6d5883c6caa88c19b7d725161 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@arthur-schiwon.de>
Date: Thu, 15 Mar 2018 18:39:27 +0100
Subject: [PATCH] behat integration tests for LDAP, basic setup

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
---
 .drone.yml                                    | 22 +++++++++++++++++++
 .../features/bootstrap/LDAPContext.php        | 22 +++++++++++++++++++
 .../ldap_features/ldap-openldap.feature       | 10 +++++++++
 build/integration/run.sh                      |  5 ++++-
 4 files changed, 58 insertions(+), 1 deletion(-)
 create mode 100644 build/integration/ldap_features/ldap-openldap.feature

diff --git a/.drone.yml b/.drone.yml
index da877a95d50..84a6d0495f2 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -562,6 +562,16 @@ pipeline:
       when:
         matrix:
           TESTS: integration-ldap-features
+  integration-ldap-openldap-features:
+      image: nextcloudci/integration-php7.0:integration-php7.0-6
+      commands:
+        - ./occ maintenance:install --admin-pass=admin --data-dir=/dev/shm/nc_int
+        - ./occ app:enable user_ldap
+        - cd build/integration
+        - ./run.sh ldap_features/ldap-openldap.feature
+      when:
+        matrix:
+          TESTS: integration-ldap-openldap-features
   integration-trashbin:
     image: nextcloudci/integration-php7.0:integration-php7.0-8
     commands:
@@ -828,6 +838,8 @@ matrix:
     - TESTS: integration-filesdrop-features
     - TESTS: integration-transfer-ownership-features
     - TESTS: integration-ldap-features
+    - TESTS: integration-ldap-openldap-features
+      ENABLE_OPENLDAP: true
     - TESTS: integration-trashbin
     - TESTS: integration-remote-api
     - TESTS: integration-download
@@ -1007,5 +1019,15 @@ services:
     when:
       matrix:
         TESTS: acceptance
+  openldap:
+    image: nextcloudci/openldap:openldap-4
+    environment:
+      - SLAPD_DOMAIN=nextcloud.ci
+      - SLAPD_ORGANIZATION=Nextcloud
+      - SLAPD_PASSWORD=admin
+      - SLAPD_ADDITIONAL_MODULES=memberof
+    when:
+      matrix:
+        ENABLE_OPENLDAP: true
 
 branches: [ master, stable* ]
diff --git a/build/integration/features/bootstrap/LDAPContext.php b/build/integration/features/bootstrap/LDAPContext.php
index e2b30011515..5d7bb34a90a 100644
--- a/build/integration/features/bootstrap/LDAPContext.php
+++ b/build/integration/features/bootstrap/LDAPContext.php
@@ -82,4 +82,26 @@ class LDAPContext implements Context {
 	public function settingTheLDAPConfigurationTo(TableNode $configData) {
 		$this->sendingToWith('PUT', $this->apiUrl . '/' . $this->configID, $configData);
 	}
+
+	/**
+	 * @Given /^having a valid LDAP configuration$/
+	 */
+	public function havingAValidLDAPConfiguration() {
+		$this->asAn('admin');
+		$this->creatingAnLDAPConfigurationAt('/apps/user_ldap/api/v1/config');
+		$data = new TableNode([
+			['configData[ldapHost]', 'openldap'],
+			['configData[ldapPort]', '389'],
+			['configData[ldapBase]', 'dc=nextcloud,dc=ci'],
+			['configData[ldapAgentName]', 'cn=admin,dc=nextcloud,dc=ci'],
+			['configData[ldapAgentPassword]', 'admin'],
+			['configData[ldapUserFilter]', '(&(objectclass=inetorgperson))'],
+			['configData[ldapLoginFilter]', '(&(objectclass=inetorgperson)(uid=%uid))'],
+			['configData[ldapUserDisplayName]', 'displayname'],
+			['configData[ldapEmailAttribute]', 'mail'],
+			['configData[ldapConfigurationActive]', '1'],
+		]);
+		$this->settingTheLDAPConfigurationTo($data);
+		$this->asAn('');
+	}
 }
diff --git a/build/integration/ldap_features/ldap-openldap.feature b/build/integration/ldap_features/ldap-openldap.feature
new file mode 100644
index 00000000000..e52ab600aec
--- /dev/null
+++ b/build/integration/ldap_features/ldap-openldap.feature
@@ -0,0 +1,10 @@
+Feature: LDAP
+  Background:
+    Given using api version "2"
+
+  Scenario: Test valid configuration by logging in
+    Given having a valid LDAP configuration
+    When Logging in using web as "alice"
+    #When As an "alice"
+    And sending "GET" to "/cloud/user"
+    Then the HTTP status code should be "200"
diff --git a/build/integration/run.sh b/build/integration/run.sh
index b747bb52c6b..56f4ee7b07d 100755
--- a/build/integration/run.sh
+++ b/build/integration/run.sh
@@ -22,6 +22,7 @@ else
         exit 1
     fi
 fi
+NC_DATADIR=$($OCC config:system:get datadirectory)
 
 composer install
 
@@ -48,6 +49,7 @@ if [ "$INSTALLED" == "true" ]; then
 
     #Enable external storage app
     $OCC app:enable files_external
+    $OCC app:enable user_ldap
 
     mkdir -p work/local_storage
     OUTPUT_CREATE_STORAGE=`$OCC files_external:create local_storage local null::null -c datadir=$PWD/work/local_storage`
@@ -70,10 +72,11 @@ if [ "$INSTALLED" == "true" ]; then
 
     #Disable external storage app
     $OCC app:disable files_external
+    $OCC app:disable user_ldap
 fi
 
 if [ -z $HIDE_OC_LOGS ]; then
-	tail "${OC_PATH}/data/nextcloud.log"
+	tail "${NC_DATADIR}/nextcloud.log"
 fi
 
 echo "runsh: Exit code: $RESULT"
-- 
GitLab