func TestBot(t *testing.T) { flagSet := flag.NewFlagSet("test", flag.ExitOnError) app := cli.NewApp() ctx := cli.NewContext(app, flagSet, nil) io := &testInput{ send: make(chan *input.Event), recv: make(chan *input.Event), exit: make(chan bool), } inputs := map[string]input.Input{ "test": io, } commands := map[string]command.Command{ "^echo ": command.NewCommand("echo", "test usage", "test description", func(args ...string) ([]byte, error) { return []byte(strings.Join(args[1:], " ")), nil }), } bot := newBot(ctx, inputs, commands) if err := bot.start(); err != nil { t.Fatal(err) } // send command select { case io.recv <- &input.Event{ Meta: map[string]interface{}{}, Type: input.TextEvent, Data: []byte("echo test"), }: case <-time.After(time.Second): t.Fatal("timed out sending event") } // recv output select { case ev := <-io.send: if string(ev.Data) != "test" { t.Fatal("expected 'test', got: ", string(ev.Data)) } case <-time.After(time.Second): t.Fatal("timed out receiving event") } if err := bot.stop(); err != nil { t.Fatal(err) } }
func newCmd(opts ...Option) Cmd { options := Options{ Broker: &broker.DefaultBroker, Client: &client.DefaultClient, Registry: ®istry.DefaultRegistry, Server: &server.DefaultServer, Selector: &selector.DefaultSelector, Transport: &transport.DefaultTransport, Brokers: DefaultBrokers, Registries: DefaultRegistries, Selectors: DefaultSelectors, Transports: DefaultTransports, } for _, o := range opts { o(&options) } if len(options.Description) == 0 { options.Description = "a go-micro service" } cmd := new(cmd) cmd.opts = options cmd.app = cli.NewApp() cmd.app.Name = cmd.opts.Name cmd.app.Version = cmd.opts.Version cmd.app.Usage = cmd.opts.Description cmd.app.Before = cmd.Before cmd.app.Flags = DefaultFlags cmd.app.Action = func(c *cli.Context) {} if len(options.Version) == 0 { cmd.app.HideVersion = true } return cmd }