Files
warewulf/internal/app/wwctl/overlay/mkdir/main_test.go
Christian Goll 6f4fd60d8f refactored overlay class
overlay.GetOverlay(name) returns now an error if the overlay doesn't
exist. This is the most canonical way to act if there is no overlay.
2025-08-27 22:24:31 -06:00

90 lines
2.0 KiB
Go

package mkdir
import (
"bytes"
"io/fs"
"os"
"path/filepath"
"strconv"
"testing"
"github.com/stretchr/testify/assert"
"github.com/warewulf/warewulf/internal/pkg/testenv"
"github.com/warewulf/warewulf/internal/pkg/warewulfd"
)
func Test_OverlayMkdir(t *testing.T) {
tests := []struct {
name string
overlayName string
dirName string
perm string
wantErr bool
system bool
}{
{
name: "simple mkdir",
overlayName: "test-overlay",
dirName: "testdir",
perm: "0755",
wantErr: false,
system: false,
},
{
name: "system overlay mkdir",
overlayName: "wwinit", // A known system overlay
dirName: "init.d",
perm: "0700",
wantErr: false,
system: true,
},
}
warewulfd.SetNoDaemon()
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
env := testenv.New(t)
conf := env.Configure()
// Setup overlay
var overlayDir string
if tt.system {
overlayDir = filepath.Join(conf.Paths.DistributionOverlaydir(), tt.overlayName)
err := os.MkdirAll(overlayDir, 0755)
assert.NoError(t, err)
} else {
overlayDir = filepath.Join(conf.Paths.WWOverlaydir, tt.overlayName)
err := os.MkdirAll(overlayDir, 0755)
assert.NoError(t, err)
}
baseCmd := GetCommand()
baseCmd.SetArgs([]string{"-m", tt.perm, tt.overlayName, tt.dirName})
buf := new(bytes.Buffer)
baseCmd.SetOut(buf)
baseCmd.SetErr(buf)
err := baseCmd.Execute()
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
// Check permissions
// for system overlays, the file is copied to a site overlay
if tt.system {
overlayDir = filepath.Join(conf.Paths.WWOverlaydir, tt.overlayName)
}
dirPath := filepath.Join(overlayDir, tt.dirName)
stat, err := os.Stat(dirPath)
assert.NoError(t, err)
if !tt.wantErr {
mode, err := strconv.ParseUint(tt.perm, 8, 32)
assert.NoError(t, err)
assert.Equal(t, fs.FileMode(mode), stat.Mode().Perm())
}
})
}
}