mirror of
https://github.com/caddyserver/caddy.git
synced 2026-04-01 06:42:17 -04:00
147 lines
3.5 KiB
Go
147 lines
3.5 KiB
Go
package internal
|
|
|
|
import (
|
|
"io/fs"
|
|
"testing"
|
|
)
|
|
|
|
func TestSplitUnixSocketPermissionsBits(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input string
|
|
wantPath string
|
|
wantFileMode fs.FileMode
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "no permission bits defaults to 0200",
|
|
input: "/run/caddy.sock",
|
|
wantPath: "/run/caddy.sock",
|
|
wantFileMode: 0o200,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "valid permission 0222",
|
|
input: "/run/caddy.sock|0222",
|
|
wantPath: "/run/caddy.sock",
|
|
wantFileMode: 0o222,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "valid permission 0200",
|
|
input: "/run/caddy.sock|0200",
|
|
wantPath: "/run/caddy.sock",
|
|
wantFileMode: 0o200,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "valid permission 0777",
|
|
input: "/run/caddy.sock|0777",
|
|
wantPath: "/run/caddy.sock",
|
|
wantFileMode: 0o777,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "valid permission 0755",
|
|
input: "/run/caddy.sock|0755",
|
|
wantPath: "/run/caddy.sock",
|
|
wantFileMode: 0o755,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "valid permission 0666",
|
|
input: "/tmp/test.sock|0666",
|
|
wantPath: "/tmp/test.sock",
|
|
wantFileMode: 0o666,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "missing owner write permission 0444",
|
|
input: "/run/caddy.sock|0444",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "missing owner write permission 0044",
|
|
input: "/run/caddy.sock|0044",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "missing owner write permission 0100",
|
|
input: "/run/caddy.sock|0100",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "missing owner write permission 0500",
|
|
input: "/run/caddy.sock|0500",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "invalid octal digits",
|
|
input: "/run/caddy.sock|09ab",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "invalid non-numeric permission",
|
|
input: "/run/caddy.sock|rwxrwxrwx",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "empty permission string",
|
|
input: "/run/caddy.sock|",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "multiple pipes only splits on first",
|
|
input: "/run/caddy|sock|0222",
|
|
wantPath: "/run/caddy",
|
|
wantFileMode: 0, // "sock|0222" is not valid octal
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "empty path with valid permission",
|
|
input: "|0222",
|
|
wantPath: "",
|
|
wantFileMode: 0o222,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "path only with no pipe",
|
|
input: "/var/run/my-app.sock",
|
|
wantPath: "/var/run/my-app.sock",
|
|
wantFileMode: 0o200,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "permission 0300 has write bit",
|
|
input: "/run/caddy.sock|0300",
|
|
wantPath: "/run/caddy.sock",
|
|
wantFileMode: 0o300,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "permission 0422 missing owner write",
|
|
input: "/run/caddy.sock|0422",
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
gotPath, gotMode, err := SplitUnixSocketPermissionsBits(tt.input)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("SplitUnixSocketPermissionsBits(%q) error = %v, wantErr %v", tt.input, err, tt.wantErr)
|
|
return
|
|
}
|
|
if err != nil {
|
|
return
|
|
}
|
|
if gotPath != tt.wantPath {
|
|
t.Errorf("SplitUnixSocketPermissionsBits(%q) path = %q, want %q", tt.input, gotPath, tt.wantPath)
|
|
}
|
|
if gotMode != tt.wantFileMode {
|
|
t.Errorf("SplitUnixSocketPermissionsBits(%q) mode = %04o, want %04o", tt.input, gotMode, tt.wantFileMode)
|
|
}
|
|
})
|
|
}
|
|
}
|