aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/nixos/tests/openldap.nix
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/nixos/tests/openldap.nix')
-rw-r--r--infra/libkookie/nixpkgs/nixos/tests/openldap.nix142
1 files changed, 117 insertions, 25 deletions
diff --git a/infra/libkookie/nixpkgs/nixos/tests/openldap.nix b/infra/libkookie/nixpkgs/nixos/tests/openldap.nix
index f8321a2c522d..392fae243467 100644
--- a/infra/libkookie/nixpkgs/nixos/tests/openldap.nix
+++ b/infra/libkookie/nixpkgs/nixos/tests/openldap.nix
@@ -1,33 +1,125 @@
-import ./make-test-python.nix {
- name = "openldap";
-
- machine = { pkgs, ... }: {
- services.openldap = {
- enable = true;
- suffix = "dc=example";
- rootdn = "cn=root,dc=example";
- rootpw = "notapassword";
- database = "bdb";
- extraDatabaseConfig = ''
- directory /var/db/openldap
- '';
- declarativeContents = ''
- dn: dc=example
- objectClass: domain
- dc: example
-
- dn: ou=users,dc=example
- objectClass: organizationalUnit
- ou: users
- '';
- };
- };
+{ pkgs, system ? builtins.currentSystem, ... }: let
+ dbContents = ''
+ dn: dc=example
+ objectClass: domain
+ dc: example
+ dn: ou=users,dc=example
+ objectClass: organizationalUnit
+ ou: users
+ '';
testScript = ''
machine.wait_for_unit("openldap.service")
machine.succeed(
- "systemctl status openldap.service",
'ldapsearch -LLL -D "cn=root,dc=example" -w notapassword -b "dc=example"',
)
'';
+in {
+ # New-style configuration
+ current = import ./make-test-python.nix {
+ inherit testScript;
+ name = "openldap";
+
+ machine = { pkgs, ... }: {
+ environment.etc."openldap/root_password".text = "notapassword";
+ services.openldap = {
+ enable = true;
+ settings = {
+ children = {
+ "cn=schema".includes = [
+ "${pkgs.openldap}/etc/schema/core.ldif"
+ "${pkgs.openldap}/etc/schema/cosine.ldif"
+ "${pkgs.openldap}/etc/schema/inetorgperson.ldif"
+ "${pkgs.openldap}/etc/schema/nis.ldif"
+ ];
+ "olcDatabase={1}mdb" = {
+ # This tests string, base64 and path values, as well as lists of string values
+ attrs = {
+ objectClass = [ "olcDatabaseConfig" "olcMdbConfig" ];
+ olcDatabase = "{1}mdb";
+ olcDbDirectory = "/var/db/openldap";
+ olcSuffix = "dc=example";
+ olcRootDN = {
+ # cn=root,dc=example
+ base64 = "Y249cm9vdCxkYz1leGFtcGxl";
+ };
+ olcRootPW = {
+ path = "/etc/openldap/root_password";
+ };
+ };
+ };
+ };
+ };
+ declarativeContents."dc=example" = dbContents;
+ };
+ };
+ };
+
+ # Old-style configuration
+ oldOptions = import ./make-test-python.nix {
+ inherit testScript;
+ name = "openldap";
+
+ machine = { pkgs, ... }: {
+ services.openldap = {
+ enable = true;
+ logLevel = "stats acl";
+ defaultSchemas = true;
+ database = "mdb";
+ suffix = "dc=example";
+ rootdn = "cn=root,dc=example";
+ rootpw = "notapassword";
+ declarativeContents."dc=example" = dbContents;
+ };
+ };
+ };
+
+ # Manually managed configDir, for example if dynamic config is essential
+ manualConfigDir = import ./make-test-python.nix {
+ name = "openldap";
+
+ machine = { pkgs, ... }: {
+ services.openldap = {
+ enable = true;
+ configDir = "/var/db/slapd.d";
+ };
+ };
+
+ testScript = let
+ contents = pkgs.writeText "data.ldif" dbContents;
+ config = pkgs.writeText "config.ldif" ''
+ dn: cn=config
+ cn: config
+ objectClass: olcGlobal
+ olcLogLevel: stats
+ olcPidFile: /run/slapd/slapd.pid
+
+ dn: cn=schema,cn=config
+ cn: schema
+ objectClass: olcSchemaConfig
+
+ include: file://${pkgs.openldap}/etc/schema/core.ldif
+ include: file://${pkgs.openldap}/etc/schema/cosine.ldif
+ include: file://${pkgs.openldap}/etc/schema/inetorgperson.ldif
+
+ dn: olcDatabase={1}mdb,cn=config
+ objectClass: olcDatabaseConfig
+ objectClass: olcMdbConfig
+ olcDatabase: {1}mdb
+ olcDbDirectory: /var/db/openldap
+ olcDbIndex: objectClass eq
+ olcSuffix: dc=example
+ olcRootDN: cn=root,dc=example
+ olcRootPW: notapassword
+ '';
+ in ''
+ machine.succeed(
+ "mkdir -p /var/db/slapd.d /var/db/openldap",
+ "slapadd -F /var/db/slapd.d -n0 -l ${config}",
+ "slapadd -F /var/db/slapd.d -n1 -l ${contents}",
+ "chown -R openldap:openldap /var/db/slapd.d /var/db/openldap",
+ "systemctl restart openldap",
+ )
+ '' + testScript;
+ };
}