1 // SPDX-License-Identifier: GPL-3.0-or-later
2 // Copyright (C) 2021-2024 Simon Ruderich
12 "ruderich.org/simon/safcm"
13 "ruderich.org/simon/safcm/testutil"
16 func TestLoadTriggers(t *testing.T) {
17 cwd, err := os.Getwd()
21 defer os.Chdir(cwd) //nolint:errcheck
23 err = os.Chdir("../testdata/project")
30 exp map[string]*safcm.File
42 map[string]*safcm.File{
45 Mode: fs.ModeDir | 0755,
48 TriggerCommands: []string{
54 Mode: fs.ModeDir | 0755,
70 Data: []byte(`Welcome to
71 {{- if .IsHost "host1.example.org"}} Host ONE
72 {{- else if "host2"}} Host TWO
75 {{if .InGroup "detected_linux"}}
76 This is GNU/Linux host
78 {{if .InGroup "detected_freebsd"}}
85 {{if .InGroup "host1.example.org"}}
88 {{if .InGroup "host2"}}
91 {{if .InGroup "host3.example.net"}}
97 Path: "/etc/rc.local",
101 Data: []byte("#!/bin/sh\n"),
102 TriggerCommands: []string{
106 "/etc/resolv.conf": {
107 Path: "/etc/resolv.conf",
111 Data: []byte("nameserver ::1\n"),
112 TriggerCommands: []string{
113 "echo resolv.conf updated",
118 Mode: fs.ModeSymlink | 0777,
121 Data: []byte("doesnt-exist"),
128 "triggers-invalid-path",
130 fmt.Errorf("triggers-invalid-path/triggers.yaml: \"/etc/resolv.conf\" does not exist in files/"),
134 for _, tc := range tests {
135 t.Run(tc.group, func(t *testing.T) {
136 // Use LoadFiles() so we work on real data and don't
137 // make any mistakes generating it
138 files, err := LoadFiles(tc.group)
140 t.Fatalf("err = %#v, want nil", err)
142 err = LoadTriggers(tc.group, files)
144 testutil.AssertEqual(t, "res", files, tc.exp)
145 testutil.AssertErrorEqual(t, "err", err, tc.expErr)