mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
* feat: Add opt-in support for proxy CA cert installation * fix: Code review fixes * fix: Code review fixes * fix: Code review fixes * fix: Code review fixes * fix: Code review fixes * docs: Add limitation for MacOS MDM script
86 lines
2.6 KiB
Go
86 lines
2.6 KiB
Go
//go:build linux
|
|
// +build linux
|
|
|
|
package truststore
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestLinuxUserScopeUnsupported(t *testing.T) {
|
|
assert.False(t, UserScopeSupported())
|
|
assert.ErrorIs(t, Install([]byte("PEM"), ScopeUser), ErrUserScopeUnsupported)
|
|
assert.ErrorIs(t, Uninstall("Test CA", ScopeUser), ErrUserScopeUnsupported)
|
|
}
|
|
|
|
func TestLinuxSystemInstallStagesAnchorAndUpdates(t *testing.T) {
|
|
dir := t.TempDir()
|
|
dest := filepath.Join(dir, "pmg-proxy-ca.crt")
|
|
|
|
origDetect := detectTrustTool
|
|
detectTrustTool = func() (linuxTrustTool, error) {
|
|
return linuxTrustTool{anchorDir: dir, updateCmd: "update-ca-certificates", anchorName: "pmg-proxy-ca.crt"}, nil
|
|
}
|
|
origEUID := euid
|
|
euid = func() int { return 0 } // run as root so no sudo prefix is added
|
|
var calls [][]string
|
|
origRunner := commandRunner
|
|
commandRunner = func(name string, args ...string) ([]byte, error) {
|
|
calls = append(calls, append([]string{name}, args...))
|
|
return nil, nil
|
|
}
|
|
t.Cleanup(func() { detectTrustTool = origDetect; euid = origEUID; commandRunner = origRunner })
|
|
|
|
require.NoError(t, Install([]byte("PEM-BYTES"), ScopeSystem))
|
|
|
|
require.Len(t, calls, 2)
|
|
assert.Equal(t, "install", calls[0][0])
|
|
assert.Contains(t, calls[0], dest)
|
|
assert.Equal(t, "update-ca-certificates", calls[1][0])
|
|
}
|
|
|
|
func TestLinuxSystemInstallElevatesWhenNotRoot(t *testing.T) {
|
|
dir := t.TempDir()
|
|
origDetect := detectTrustTool
|
|
detectTrustTool = func() (linuxTrustTool, error) {
|
|
return linuxTrustTool{anchorDir: dir, updateCmd: "update-ca-certificates", anchorName: "pmg-proxy-ca.crt"}, nil
|
|
}
|
|
origEUID := euid
|
|
euid = func() int { return 1000 }
|
|
var firstName string
|
|
origRunner := commandRunner
|
|
commandRunner = func(name string, _ ...string) ([]byte, error) {
|
|
if firstName == "" {
|
|
firstName = name
|
|
}
|
|
return nil, nil
|
|
}
|
|
t.Cleanup(func() { detectTrustTool = origDetect; euid = origEUID; commandRunner = origRunner })
|
|
|
|
require.NoError(t, Install([]byte("PEM"), ScopeSystem))
|
|
assert.Equal(t, "sudo", firstName)
|
|
}
|
|
|
|
func TestLinuxStatusReflectsAnchorFile(t *testing.T) {
|
|
dir := t.TempDir()
|
|
origDetect := detectTrustTool
|
|
detectTrustTool = func() (linuxTrustTool, error) {
|
|
return linuxTrustTool{anchorDir: dir, updateCmd: "update-ca-certificates", anchorName: "pmg-proxy-ca.crt"}, nil
|
|
}
|
|
t.Cleanup(func() { detectTrustTool = origDetect })
|
|
|
|
_, system, err := Status("Test CA")
|
|
require.NoError(t, err)
|
|
assert.False(t, system)
|
|
|
|
require.NoError(t, os.WriteFile(filepath.Join(dir, "pmg-proxy-ca.crt"), []byte("x"), 0o644))
|
|
_, system, err = Status("Test CA")
|
|
require.NoError(t, err)
|
|
assert.True(t, system)
|
|
}
|