nixos/tests/man: test common functionality of both man impls
This commit is contained in:
parent
f4f7238860
commit
d110798747
|
@ -255,6 +255,7 @@ in
|
||||||
magnetico = handleTest ./magnetico.nix {};
|
magnetico = handleTest ./magnetico.nix {};
|
||||||
mailcatcher = handleTest ./mailcatcher.nix {};
|
mailcatcher = handleTest ./mailcatcher.nix {};
|
||||||
mailhog = handleTest ./mailhog.nix {};
|
mailhog = handleTest ./mailhog.nix {};
|
||||||
|
man = handleTest ./man.nix {};
|
||||||
mariadb-galera-mariabackup = handleTest ./mysql/mariadb-galera-mariabackup.nix {};
|
mariadb-galera-mariabackup = handleTest ./mysql/mariadb-galera-mariabackup.nix {};
|
||||||
mariadb-galera-rsync = handleTest ./mysql/mariadb-galera-rsync.nix {};
|
mariadb-galera-rsync = handleTest ./mysql/mariadb-galera-rsync.nix {};
|
||||||
matomo = handleTest ./matomo.nix {};
|
matomo = handleTest ./matomo.nix {};
|
||||||
|
|
100
nixos/tests/man.nix
Normal file
100
nixos/tests/man.nix
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
|
||||||
|
import ./make-test-python.nix ({ pkgs, lib, ... }: let
|
||||||
|
manImplementations = [
|
||||||
|
"mandoc"
|
||||||
|
"man-db"
|
||||||
|
];
|
||||||
|
|
||||||
|
machineNames = builtins.map machineSafe manImplementations;
|
||||||
|
|
||||||
|
makeConfig = useImpl: {
|
||||||
|
# Note: mandoc currently can't index symlinked section directories.
|
||||||
|
# So if a man section comes from one package exclusively (e. g.
|
||||||
|
# 1p from man-pages-posix and 2 from man-pages), it isn't searchable.
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.man-pages
|
||||||
|
pkgs.openssl
|
||||||
|
pkgs.libunwind
|
||||||
|
];
|
||||||
|
|
||||||
|
documentation = {
|
||||||
|
enable = true;
|
||||||
|
nixos.enable = lib.mkForce true;
|
||||||
|
dev.enable = true;
|
||||||
|
man = {
|
||||||
|
enable = true;
|
||||||
|
generateCaches = true;
|
||||||
|
} // lib.listToAttrs (builtins.map (impl: {
|
||||||
|
name = impl;
|
||||||
|
value = {
|
||||||
|
enable = useImpl == impl;
|
||||||
|
};
|
||||||
|
}) manImplementations);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
machineSafe = builtins.replaceStrings [ "-" ] [ "_" ];
|
||||||
|
in {
|
||||||
|
name = "man";
|
||||||
|
meta.maintainers = [ lib.maintainers.sternenseemann ];
|
||||||
|
|
||||||
|
nodes = lib.listToAttrs (builtins.map (i: {
|
||||||
|
name = machineSafe i;
|
||||||
|
value = makeConfig i;
|
||||||
|
}) manImplementations);
|
||||||
|
|
||||||
|
testScript = ''
|
||||||
|
import re
|
||||||
|
start_all()
|
||||||
|
|
||||||
|
def match_man_k(page, section, haystack):
|
||||||
|
"""
|
||||||
|
Check if the man page {page}({section}) occurs in
|
||||||
|
the output of `man -k` given as haystack. Note:
|
||||||
|
This is not super reliable, e. g. it can't deal
|
||||||
|
with man pages that are in multiple sections.
|
||||||
|
"""
|
||||||
|
|
||||||
|
for line in haystack.split("\n"):
|
||||||
|
# man -k can look like this:
|
||||||
|
# page(3) - bla
|
||||||
|
# page (3) - bla
|
||||||
|
# pagea, pageb (3, 3P) - foo
|
||||||
|
# pagea, pageb, pagec(3) - bar
|
||||||
|
pages = line.split("(")[0]
|
||||||
|
sections = re.search("\\([a-zA-Z1-9, ]+\\)", line)
|
||||||
|
if sections is None:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
sections = sections.group(0)[1:-1]
|
||||||
|
|
||||||
|
if page in pages and f'{section}' in sections:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
'' + lib.concatMapStrings (machine: ''
|
||||||
|
with subtest("Test direct man page lookups in ${machine}"):
|
||||||
|
# man works
|
||||||
|
${machine}.succeed("man man > /dev/null")
|
||||||
|
# devman works
|
||||||
|
${machine}.succeed("man 3 libunwind > /dev/null")
|
||||||
|
# NixOS configuration man page is installed
|
||||||
|
${machine}.succeed("man configuration.nix > /dev/null")
|
||||||
|
|
||||||
|
with subtest("Test generateCaches via man -k in ${machine}"):
|
||||||
|
expected = [
|
||||||
|
("openssl", "ssl", 3),
|
||||||
|
("unwind", "libunwind", 3),
|
||||||
|
("user", "useradd", 8),
|
||||||
|
("user", "userdel", 8),
|
||||||
|
("mem", "free", 3),
|
||||||
|
("mem", "free", 1),
|
||||||
|
]
|
||||||
|
|
||||||
|
for (keyword, page, section) in expected:
|
||||||
|
matches = ${machine}.succeed(f"man -k {keyword}")
|
||||||
|
if not match_man_k(page, section, matches):
|
||||||
|
raise Exception(f"{page}({section}) missing in matches: {matches}")
|
||||||
|
'') machineNames;
|
||||||
|
})
|
|
@ -1,4 +1,4 @@
|
||||||
{ lib, stdenv, fetchurl, pkg-config, libpipeline, db, groff, libiconv, makeWrapper, buildPackages }:
|
{ lib, stdenv, fetchurl, pkg-config, libpipeline, db, groff, libiconv, makeWrapper, buildPackages, nixosTests }:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "man-db";
|
pname = "man-db";
|
||||||
|
@ -73,6 +73,10 @@ stdenv.mkDerivation rec {
|
||||||
|
|
||||||
doCheck = !stdenv.hostPlatform.isMusl /* iconv binary */ && !stdenv.hostPlatform.isDarwin;
|
doCheck = !stdenv.hostPlatform.isMusl /* iconv binary */ && !stdenv.hostPlatform.isDarwin;
|
||||||
|
|
||||||
|
passthru.tests = {
|
||||||
|
nixos = nixosTests.man;
|
||||||
|
};
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "http://man-db.nongnu.org";
|
homepage = "http://man-db.nongnu.org";
|
||||||
description = "An implementation of the standard Unix documentation system accessed using the man command";
|
description = "An implementation of the standard Unix documentation system accessed using the man command";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ lib, stdenv, fetchurl, zlib, perl }:
|
{ lib, stdenv, fetchurl, zlib, perl, nixosTests }:
|
||||||
|
|
||||||
let
|
let
|
||||||
# check if we can execute binaries for the host platform on the build platform
|
# check if we can execute binaries for the host platform on the build platform
|
||||||
|
@ -62,6 +62,10 @@ stdenv.mkDerivation rec {
|
||||||
checkInputs = [ perl ];
|
checkInputs = [ perl ];
|
||||||
preCheck = "patchShebangs --build regress/regress.pl";
|
preCheck = "patchShebangs --build regress/regress.pl";
|
||||||
|
|
||||||
|
passthru.tests = {
|
||||||
|
nixos = nixosTests.man;
|
||||||
|
};
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://mandoc.bsd.lv/";
|
homepage = "https://mandoc.bsd.lv/";
|
||||||
description = "suite of tools compiling mdoc and man";
|
description = "suite of tools compiling mdoc and man";
|
||||||
|
|
Loading…
Reference in a new issue