| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package nebula
- import (
- "bytes"
- "fmt"
- "path/filepath"
- "strings"
- "testing"
- "github.com/slackhq/nebula/commands"
- "github.com/slackhq/nebula/config"
- "github.com/slackhq/nebula/test"
- )
- // TestSSHCommandSurface is a characterization test for the ssh command surface.
- // It pins the registered command set, their descriptions, help text and flag definitions
- // so that moving the registry to a transport neutral package is provably a relocation
- // rather than a rewrite. Regenerate with `go test . -run TestSSHCommandSurface -update`.
- func TestSSHCommandSurface(t *testing.T) {
- got := renderCommandSurface(registeredCommands(t).All())
- test.Golden(t, filepath.Join("testdata", "ssh_commands.golden"), got)
- }
- // registeredCommands returns a registry holding every command nebula serves. The
- // Interface is never dereferenced: attachCommands only closes over it.
- func registeredCommands(t *testing.T) *commands.Registry {
- t.Helper()
- l := test.NewLogger()
- reg := commands.New()
- attachCommands(l, config.NewC(l), reg, &Interface{})
- return reg
- }
- func renderCommandSurface(cmds []*commands.Command) string {
- lines := make([]string, 0, len(cmds))
- for _, cmd := range cmds {
- b := &bytes.Buffer{}
- fmt.Fprintf(b, "%s\n", cmd.Name)
- fmt.Fprintf(b, " short: %s\n", cmd.ShortDescription)
- fmt.Fprintf(b, " help: %s\n", cmd.Help)
- if cmd.Flags != nil {
- fl, _ := cmd.Flags()
- if fl != nil {
- fb := &bytes.Buffer{}
- fl.SetOutput(fb)
- fl.PrintDefaults()
- fmt.Fprintf(b, " flags:\n%s", fb.String())
- }
- }
- lines = append(lines, b.String())
- }
- // In the order All gives, so the golden pins display order too.
- return strings.Join(lines, "")
- }
|