Add list-tests protocol message, test subcommands, extract test handlers
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user