1
0
Fork 0

make dummy integration test pass

This commit is contained in:
ibizaman 2023-03-07 00:21:20 -08:00
parent cf3aed2e82
commit 309360a356
7 changed files with 108 additions and 37 deletions

View file

@ -0,0 +1,6 @@
# Integration Tests
Integration tests configure real virtual machines and run tests on
those to assert some properties.
You can find all integration tests under the [tests/integration](/tests/integration) directory.

View file

@ -0,0 +1,40 @@
{ nixpkgs, pkgs }:
let
generateManifestSrc =
{name, tarball}:
pkgs.stdenv.mkDerivation {
name = "${name}-manifest-src";
buildCommand =
''
mkdir -p $out
cd $out
tar xfvj ${tarball}/tarballs/*.tar.bz2 --strip-components=1
'';
};
in
{
disnixTest = system:
{name, manifest, tarball, networkFile, externalNetworkFile ? false, testScript, dysnomiaStateDir ? "", postActivateTimeout ? 1}:
let
manifestSrc = generateManifestSrc {
inherit name tarball;
};
network = if externalNetworkFile then import networkFile else import "${manifestSrc}/${networkFile}";
in
with import "${nixpkgs}/nixos/lib/testing-python.nix" { inherit system; };
simpleTest {
nodes = network;
inherit name;
testScript = import "${pkgs.disnixos}/share/disnixos/generate-testscript.nix" {
inherit network testScript dysnomiaStateDir postActivateTimeout;
inherit (pkgs) disnix daemon socat libxml2;
inherit (pkgs.lib) concatMapStrings;
manifestFile = "${manifest}/manifest.xml";
};
};
}

View file

@ -0,0 +1,6 @@
{ pkgs
, utils
}:
{
keycloak = pkgs.callPackage ./keycloak.nix {};
}

View file

@ -1,58 +1,75 @@
{ nixpkgs ? <nixpkgs> { nixpkgs ? <nixpkgs>
, system ? builtins.currentSystem , systems ? [ "i686-linux" "x86_64-linux" ]
}: }:
let let
pkgs = import nixpkgs {inherit system;}; pkgs = import nixpkgs {};
disnixos = import "${pkgs.disnixos}/share/disnixos/testing.nix" { disnixos = import "${pkgs.disnixos}/share/disnixos/testing.nix" {
inherit nixpkgs system; inherit nixpkgs;
}; };
version = "1.0"; version = "1.0";
disnixos2 = pkgs.callPackage ./common.nix { inherit nixpkgs; };
in in
rec { rec {
tarball = disnixos.sourceTarball { tarball = disnixos.sourceTarball {
name = "testproject-zip"; name = "testproject-zip";
inherit version; inherit version;
src = ./.; src = ../../.;
officialRelease = false; officialRelease = false;
}; };
manifest = builds = {
simple = pkgs.lib.genAttrs systems (system:
let
pkgs = import nixpkgs { inherit system; };
disnixos = import "${pkgs.disnixos}/share/disnixos/testing.nix" {
inherit nixpkgs system;
};
in
disnixos.buildManifest { disnixos.buildManifest {
name = "test-project-manifest"; name = "test-project-manifest";
version = builtins.readFile ./version; inherit version;
inherit tarball; inherit tarball;
servicesFile = "keycloak/services.nix"; servicesFile = "tests/integration/keycloak/services.nix";
networkFile = "keycloak/network.nix"; networkFile = "tests/integration/keycloak/network.nix";
distributionFile = "keycloak/distribution.nix"; distributionFile = "tests/integration/keycloak/distribution.nix";
# extraParams = {
# "extra-builtins-file" = ../../extra-builtins.nix;
# };
}
);
}; };
tests = tests = {
disnixos.disnixTest { simple = disnixos2.disnixTest builtins.currentSystem {
name = "test-project-tests"; name = "test-project-test";
inherit tarball manifest; inherit tarball;
networkFile = "keycloak/network.nix"; manifest = builtins.getAttr (builtins.currentSystem) builds.simple;
dysnomiaStateDir = /var/state/dysnomia; networkFile = "tests/integration/keycloak/network.nix";
# dysnomiaStateDir = /var/state/dysnomia;
testScript = testScript =
'' ''
# Wait until the front-end application is deployed # Wait until the front-end application is deployed
$test1->waitForFile("/var/tomcat/webapps/testapp"); # $test1->waitForFile("/var/tomcat/webapps/testapp");
# Wait a little longer and capture the output of the entry page # Wait a little longer and capture the output of the entry page
my $result = $test1->mustSucceed("sleep 10; curl --fail http://test2:8080/testapp"); # my $result = $test1->mustSucceed("sleep 10; curl --fail http://test2:8080/testapp");
''; '';
}; };
} };
}.tests
# let # let
# utils = import ../../utils.nix { # utils = import ../../utils.nix {
# inherit pkgs; # inherit pkgs;
# inherit (pkgs) stdenv lib; # inherit (pkgs) stdenv lib;
# }; # };
# keycloak = import ../../pkgs/keycloak/unit.nix { # keycloak = import ../../keycloak/unit.nix {
# inherit pkgs utils; # inherit pkgs utils;
# inherit (pkgs) stdenv lib; # inherit (pkgs) stdenv lib;
# }; # };

View file

@ -8,7 +8,7 @@ rec {
utils = pkgs.lib.callPackageWith pkgs ../../../utils.nix { }; utils = pkgs.lib.callPackageWith pkgs ../../../utils.nix { };
customPkgs = import ../../../pkgs/all-packages.nix { customPkgs = import ../../../all-packages.nix {
inherit system pkgs utils; inherit system pkgs utils;
}; };
in in
@ -26,11 +26,11 @@ rec {
}; };
}; };
deployment.keys = { # deployment.keys = {
keycloakinitialadmin.text = '' # keycloakinitialadmin.text = ''
KEYCLOAK_ADMIN_PASSWORD="${builtins.extraBuiltins.pass "keycloak.${domain}/admin"}" # KEYCLOAK_ADMIN_PASSWORD="${builtins.extraBuiltins.pass "keycloak.${domain}/admin"}"
''; # '';
}; # };
services = { services = {
openssh = { openssh = {

View file

@ -3,11 +3,12 @@
let let
utils = pkgs.lib.callPackageWith pkgs ../../../utils.nix { }; utils = pkgs.lib.callPackageWith pkgs ../../../utils.nix { };
customPkgs = import ../../../pkgs/all-packages.nix { customPkgs = import ../../../all-packages.nix {
inherit system pkgs utils; inherit system pkgs utils;
}; };
in in
{ with utils;
rec {
KeycloakPostgresDB = customPkgs.mkPostgresDB { KeycloakPostgresDB = customPkgs.mkPostgresDB {
name = "KeycloakPostgresDB"; name = "KeycloakPostgresDB";
database = "keycloak"; database = "keycloak";
@ -18,12 +19,13 @@ in
KeycloakService = customPkgs.mkKeycloakService { KeycloakService = customPkgs.mkKeycloakService {
name = "KeycloakService"; name = "KeycloakService";
subdomain = "keycloak";
# Get these from infrastructure.nix # Get these from infrastructure.nix
user = "keycloak"; user = "keycloak";
group = "keycloak"; group = "keycloak";
postgresServiceName = (utils.getTarget "KeycloakPostgresDB").containers.postgresql-database.service_name; postgresServiceName = (getTarget distribution "KeycloakPostgresDB").containers.postgresql-database.service_name;
initialAdminUsername = "admin"; initialAdminUsername = "admin";
keys = { keys = {
@ -32,13 +34,13 @@ in
}; };
logLevel = "INFO"; logLevel = "INFO";
hostname = "keycloak.${getDomain "KeycloakService"}"; hostname = "keycloak.${getDomain distribution "KeycloakService"}";
dbType = "postgres"; dbType = "postgres";
dbDatabase = KeycloakPostgresDB.database; dbDatabase = KeycloakPostgresDB.database;
dbUsername = KeycloakPostgresDB.username; dbUsername = KeycloakPostgresDB.username;
dbHost = {KeycloakPostgresDB}: KeycloakPostgresDB.target.properties.hostname; dbHost = {KeycloakPostgresDB}: KeycloakPostgresDB.target.properties.hostname;
dbPort = (getTarget "KeycloakPostgresDB").containers.postgresql-database.port; dbPort = (getTarget distribution "KeycloakPostgresDB").containers.postgresql-database.port;
inherit KeycloakPostgresDB; inherit KeycloakPostgresDB;
}; };