mirror of
https://github.com/Mic92/sops-nix.git
synced 2025-03-05 16:17:47 +00:00
add integration test for sops-pgp-hook
This commit is contained in:
parent
4d928e4d7c
commit
fe7f6360e8
10 changed files with 87 additions and 8 deletions
6
.github/workflows/test.yml
vendored
6
.github/workflows/test.yml
vendored
|
@ -28,5 +28,7 @@ jobs:
|
||||||
run: nix run nixpkgs.nix-build-uncached -c nix-build-uncached default.nix
|
run: nix run nixpkgs.nix-build-uncached -c nix-build-uncached default.nix
|
||||||
- name: Add keys group (needed for go tests)
|
- name: Add keys group (needed for go tests)
|
||||||
run: sudo groupadd keys
|
run: sudo groupadd keys
|
||||||
- name: Run go tests
|
- name: Run sops-install-secrets tests
|
||||||
run: nix-shell --run "sudo unshare --mount --fork go test ./pkgs/sops-install-secrets"
|
run: nix-shell --pure --run "$(command -v sudo) unshare --mount --fork go test ./pkgs/sops-install-secrets"
|
||||||
|
- name: Run sops-pgp-hook tests
|
||||||
|
run: nix-shell --pure --run "NIX_PATH=nixpkgs=$(nix-instantiate --find-file nixpkgs) go test ./pkgs/sops-pgp-hook"
|
||||||
|
|
|
@ -6,6 +6,7 @@ in rec {
|
||||||
inherit vendorSha256;
|
inherit vendorSha256;
|
||||||
};
|
};
|
||||||
sops-pgp-hook = pkgs.callPackage ./pkgs/sops-pgp-hook {};
|
sops-pgp-hook = pkgs.callPackage ./pkgs/sops-pgp-hook {};
|
||||||
|
|
||||||
ssh-to-pgp = pkgs.callPackage ./pkgs/ssh-to-pgp {
|
ssh-to-pgp = pkgs.callPackage ./pkgs/ssh-to-pgp {
|
||||||
inherit vendorSha256;
|
inherit vendorSha256;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
{ makeSetupHook, gnupg, sops }:
|
{ stdenv, makeSetupHook, gnupg, sops, go, nix }:
|
||||||
|
|
||||||
makeSetupHook {
|
(makeSetupHook {
|
||||||
substitutions = {
|
substitutions = {
|
||||||
gpg = "${gnupg}/bin/gpg";
|
gpg = "${gnupg}/bin/gpg";
|
||||||
};
|
};
|
||||||
deps = [ sops gnupg ];
|
deps = [ sops gnupg ];
|
||||||
} ./sops-pgp-hook.bash
|
} ./sops-pgp-hook.bash)
|
||||||
|
|
54
pkgs/sops-pgp-hook/hook_test.go
Normal file
54
pkgs/sops-pgp-hook/hook_test.go
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"path"
|
||||||
|
"path/filepath"
|
||||||
|
"runtime"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ok fails the test if an err is not nil.
|
||||||
|
func ok(tb testing.TB, err error) {
|
||||||
|
if err != nil {
|
||||||
|
_, file, line, _ := runtime.Caller(1)
|
||||||
|
fmt.Printf("\033[31m%s:%d: unexpected error: %s\033[39m\n\n", filepath.Base(file), line, err.Error())
|
||||||
|
tb.FailNow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestShellHook(t *testing.T) {
|
||||||
|
_, filename, _, _ := runtime.Caller(0)
|
||||||
|
assets := path.Join(path.Dir(filename), "test-assets")
|
||||||
|
tempdir, err := ioutil.TempDir("", "testdir")
|
||||||
|
ok(t, err)
|
||||||
|
defer os.RemoveAll(tempdir)
|
||||||
|
|
||||||
|
cmd := exec.Command("nix-shell", "shell.nix", "--run", "echo SOPS_PGP_FP=$SOPS_PGP_FP")
|
||||||
|
cmd.Env = append(os.Environ(), fmt.Sprintf("GNUPGHOME=%s", tempdir))
|
||||||
|
var stdoutBuf, stderrBuf bytes.Buffer
|
||||||
|
cmd.Stdout = &stdoutBuf
|
||||||
|
cmd.Stderr = &stderrBuf
|
||||||
|
cmd.Dir = assets
|
||||||
|
err = cmd.Run()
|
||||||
|
stdout := string(stdoutBuf.Bytes())
|
||||||
|
stderr := string(stderrBuf.Bytes())
|
||||||
|
fmt.Printf("$ %s\nstdout: \n%s\nstderr: \n%s\n", strings.Join(cmd.Args, " "), stdout, stderr)
|
||||||
|
ok(t, err)
|
||||||
|
|
||||||
|
expectedStdout := "SOPS_PGP_FP=C6DA56E69A7C756564A8AFEB4A6B05B714D13EFD,4EC40F8E04A945339F7F7C0032C5225271038E3F,7FB89715AADA920D65D25E63F9BA9DEBD03F57C0"
|
||||||
|
if strings.Index(stdout, expectedStdout) == -1 {
|
||||||
|
t.Fatalf("'%v' not in '%v'", expectedStdout, stdout)
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedStderr := "./non-existing-key.gpg does not exists"
|
||||||
|
if strings.Index(stderr, expectedStderr) == -1 {
|
||||||
|
t.Fatalf("'%v' not in '%v'", expectedStderr, stdout)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -3,18 +3,24 @@ _sopsAddKey() {
|
||||||
local fpr
|
local fpr
|
||||||
fpr=$(@gpg@ --with-fingerprint --with-colons --show-key "$key" \
|
fpr=$(@gpg@ --with-fingerprint --with-colons --show-key "$key" \
|
||||||
| awk -F: '$1 == "fpr" { print $10;}')
|
| awk -F: '$1 == "fpr" { print $10;}')
|
||||||
export SOPS_PGP_FP=''${SOPS_PGP_FP}''${SOPS_PGP_FP:+','}$fpr
|
if [[ $fpr != "" ]]; then
|
||||||
|
export SOPS_PGP_FP=''${SOPS_PGP_FP}''${SOPS_PGP_FP:+','}$fpr
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
sopsPGPHook() {
|
sopsPGPHook() {
|
||||||
local key dir
|
local key dir
|
||||||
for key in $sopsPGPKeys; do
|
for key in $sopsPGPKeys; do
|
||||||
_sopsAddKey "$key"
|
if [[ -f "$key" ]]; then
|
||||||
|
_sopsAddKey "$key"
|
||||||
|
else
|
||||||
|
echo "$key does not exists" >&2
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
for dir in $sopsPGPKeyDirs; do
|
for dir in $sopsPGPKeyDirs; do
|
||||||
while IFS= read -r -d '' key; do
|
while IFS= read -r -d '' key; do
|
||||||
_sopsAddKey "$key"
|
_sopsAddKey "$key"
|
||||||
done < <(find "$dir" -type f -name '*.gpg' -o -name '*.asc' -print0)
|
done < <(find -L "$dir" -type f \( -name '*.gpg' -o -name '*.asc' \) -print0)
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
BIN
pkgs/sops-pgp-hook/test-assets/existing-key.gpg
Normal file
BIN
pkgs/sops-pgp-hook/test-assets/existing-key.gpg
Normal file
Binary file not shown.
1
pkgs/sops-pgp-hook/test-assets/keys/key.asc
Symbolic link
1
pkgs/sops-pgp-hook/test-assets/keys/key.asc
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../../../sops-install-secrets/test-assets/key.asc
|
BIN
pkgs/sops-pgp-hook/test-assets/keys/key.gpg
Normal file
BIN
pkgs/sops-pgp-hook/test-assets/keys/key.gpg
Normal file
Binary file not shown.
14
pkgs/sops-pgp-hook/test-assets/shell.nix
Normal file
14
pkgs/sops-pgp-hook/test-assets/shell.nix
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# shell.nix
|
||||||
|
with import <nixpkgs> {};
|
||||||
|
mkShell {
|
||||||
|
sopsPGPKeyDirs = [
|
||||||
|
"./keys"
|
||||||
|
];
|
||||||
|
sopsPGPKeys = [
|
||||||
|
"./existing-key.gpg"
|
||||||
|
"./non-existing-key.gpg"
|
||||||
|
];
|
||||||
|
nativeBuildInputs = [
|
||||||
|
(pkgs.callPackage ../../.. {}).sops-pgp-hook
|
||||||
|
];
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ pkgs.mkShell {
|
||||||
delve
|
delve
|
||||||
gnupg
|
gnupg
|
||||||
utillinux
|
utillinux
|
||||||
|
nix
|
||||||
];
|
];
|
||||||
# delve does not compile with hardening enabled
|
# delve does not compile with hardening enabled
|
||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
|
|
Loading…
Add table
Reference in a new issue