Add list-tests protocol message, test subcommands, extract test handlers

This commit is contained in:
Ian Gulliver
2026-04-11 07:25:16 +09:00
parent f6d8847bcf
commit 34efaeefd5
8 changed files with 183 additions and 115 deletions

View File

@@ -33,7 +33,7 @@ func main() {
case "log":
err = cmdLog(args)
case "test":
err = cmdTest(args)
err = cmdTestGroup(args)
default:
slog.Error("usage: picomap <info|load|log|test> [args...]")
os.Exit(1)
@@ -329,18 +329,11 @@ func cmdLoad(args []string) error {
return nil
}
func cmdTest(args []string) error {
if len(args) < 1 {
return fmt.Errorf("usage: picomap test <name>")
}
name := args[0]
func findTestDevice() (string, error) {
devs, err := client.ListSerial()
if err != nil {
return err
return "", err
}
var testDev string
for _, dev := range devs {
log := slog.With("dev", dev)
c, err := client.NewSerial(dev, 500*time.Millisecond)
@@ -354,20 +347,63 @@ func cmdTest(args []string) error {
log.Warn("info error", "err", err)
continue
}
log.Info("got info", "firmware", info.FirmwareName)
if info.FirmwareName == "picomap_test" {
testDev = dev
break
return dev, nil
}
}
if testDev == "" {
return fmt.Errorf("no picomap_test device found")
return "", fmt.Errorf("no picomap_test device found")
}
func cmdTestGroup(args []string) error {
if len(args) < 1 {
return fmt.Errorf("usage: picomap test <list|run> [args...]")
}
switch args[0] {
case "list":
return cmdTestList(args[1:])
case "run":
return cmdTestRun(args[1:])
default:
return fmt.Errorf("usage: picomap test <list|run> [args...]")
}
}
func cmdTestList(_ []string) error {
dev, err := findTestDevice()
if err != nil {
return err
}
c, err := client.NewSerial(dev, 10*time.Second)
if err != nil {
return err
}
defer c.Close()
result, err := c.ListTests()
if err != nil {
return fmt.Errorf("remote: %w", err)
}
for _, name := range result.Names {
slog.Info("test", "dev", dev, "name", name)
}
return nil
}
func cmdTestRun(args []string) error {
if len(args) < 1 {
return fmt.Errorf("usage: picomap test run <name>")
}
name := args[0]
dev, err := findTestDevice()
if err != nil {
return err
}
log := slog.With("dev", testDev)
log := slog.With("dev", dev)
log.Info("running test", "name", name)
c, err := client.NewSerial(testDev, 10*time.Second)
c, err := client.NewSerial(dev, 10*time.Second)
if err != nil {
return err
}