diff --git a/cmd/mapresponses/main.go b/cmd/mapresponses/main.go new file mode 100644 index 00000000..5d7ad07d --- /dev/null +++ b/cmd/mapresponses/main.go @@ -0,0 +1,61 @@ +package main + +import ( + "encoding/json" + "fmt" + "os" + + "github.com/creachadair/command" + "github.com/creachadair/flax" + "github.com/juanfont/headscale/hscontrol/mapper" + "github.com/juanfont/headscale/integration/integrationutil" +) + +type MapConfig struct { + Directory string `flag:"directory,Directory to read map responses from"` +} + +var mapConfig MapConfig + +func main() { + root := command.C{ + Name: "mapresponses", + Help: "MapResponses is a tool to map and compare map responses from a directory", + Commands: []*command.C{ + { + Name: "online", + Help: "", + Usage: "run [test-pattern] [flags]", + SetFlags: command.Flags(flax.MustBind, &mapConfig), + Run: runOnline, + }, + command.HelpCommand(nil), + }, + } + + env := root.NewEnv(nil).MergeFlags(true) + command.RunOrFail(env, os.Args[1:]) +} + +// runIntegrationTest executes the integration test workflow. +func runOnline(env *command.Env) error { + if mapConfig.Directory == "" { + return fmt.Errorf("directory is required") + } + + resps, err := mapper.ReadMapResponsesFromDirectory(mapConfig.Directory) + if err != nil { + return fmt.Errorf("reading map responses from directory: %w", err) + } + + expected := integrationutil.BuildExpectedOnlineMap(resps) + + out, err := json.MarshalIndent(expected, "", " ") + if err != nil { + return fmt.Errorf("marshaling expected online map: %w", err) + } + + os.Stderr.Write(out) + os.Stderr.Write([]byte("\n")) + return nil +}