cmd/drover: UAC re-launch helper for non-admin invocations
CLI subcommands (check/version/update) don't need driver access and
run as user. Bare drover.exe (GUI/engine mode) requires admin for
WinDivertOpen — re-launches via ShellExecute("runas") and exits.
Per spec decision B1: prompt at every launch, no scheduled-task
trampoline.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestIsAdmin_Smoke(t *testing.T) {
|
||||
// Smoke test: IsAdmin returns a bool without panicking.
|
||||
// We can't assert true/false without knowing the test environment,
|
||||
// but we ensure the syscall path doesn't crash.
|
||||
_ = IsAdmin()
|
||||
}
|
||||
|
||||
func TestCmdNeedsAdmin_NoAdminFlags(t *testing.T) {
|
||||
cases := []struct {
|
||||
args []string
|
||||
needsAdm bool
|
||||
}{
|
||||
{[]string{}, true}, // bare drover.exe → GUI mode → needs admin
|
||||
{[]string{"check"}, false}, // diagnostic only, no driver
|
||||
{[]string{"check", "--host", "x"}, false},
|
||||
{[]string{"--version"}, false},
|
||||
{[]string{"version"}, false},
|
||||
{[]string{"update"}, false}, // self-update doesn't need driver
|
||||
}
|
||||
for _, c := range cases {
|
||||
got := CmdNeedsAdmin(c.args)
|
||||
if got != c.needsAdm {
|
||||
t.Errorf("CmdNeedsAdmin(%v) = %v, want %v", c.args, got, c.needsAdm)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user