package main import ( "log/slog" "os" "time" "github.com/theater/picomap/lib/client" ) func main() { if len(os.Args) < 2 { slog.Error("usage: test ") os.Exit(1) } if err := run(os.Args[1]); err != nil { slog.Error("fatal", "err", err) os.Exit(1) } } func run(name string) error { devs, err := client.ListSerial() if err != nil { return err } var testDev string for _, dev := range devs { log := slog.With("dev", dev) log.Info("connecting for info") c, err := client.NewSerial(dev, 2*time.Second) if err != nil { log.Warn("connect error", "err", err) continue } info, err := c.Info() c.Close() if err != nil { log.Warn("info error", "err", err) continue } log.Info("got info", "firmware", info.FirmwareName) if info.FirmwareName == "picomap_test" { testDev = dev break } } if testDev == "" { slog.Error("no picomap_test device found") os.Exit(1) } log := slog.With("dev", testDev) log.Info("running test", "name", name) c, err := client.NewSerial(testDev, 10*time.Second) if err != nil { return err } defer c.Close() result, err := c.Test(name) if err != nil { slog.Error("remote error", "dev", testDev, "err", err) os.Exit(1) } for _, msg := range result.Messages { log.Info("remote", "msg", msg) } if result.Pass { log.Info("PASS") } else { log.Error("FAIL") os.Exit(1) } return nil }