1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-08-02 17:22:42 +08:00
Files
kubo/commands/legacy/legacy_test.go
Steven Allen 3eba14aa24 gx update
Updates:

* go-kad-dht: Query performance improvements, DHT client fixes, validates
  records on *local* put.
* go-libp2p-swarm/go-libp2p-transport: Timeout improvements.
* go-multiaddr-net: Exposes useful Conn methods (CloseWrite, CloseRead, etc.)
* go-log: fixes possible panic when enabling/disabling events.
* go-multiaddr: fixes possible panic when stringifying malformed multiaddrs,
  adds support for consuming /p2p/ multiaddrs.

fixes #5113
unblocks #4895

License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2018-06-26 17:11:33 -07:00

155 lines
3.2 KiB
Go

package legacy
import (
"bytes"
"context"
"io"
"testing"
oldcmds "github.com/ipfs/go-ipfs/commands"
cmds "gx/ipfs/QmNueRyPRQiV7PUEpnP4GgGLuK1rKQLaRW7sfPvUetYig1/go-ipfs-cmds"
cmdkit "gx/ipfs/QmdE4gMduCKCGAcczM2F5ioYDfdeKuPix138wrES1YSr7f/go-ipfs-cmdkit"
)
type WriteNopCloser struct {
io.Writer
}
func (wc WriteNopCloser) Close() error {
return nil
}
func TestNewCommand(t *testing.T) {
root := &cmds.Command{
Subcommands: map[string]*cmds.Command{
"test": NewCommand(&oldcmds.Command{
Run: func(req oldcmds.Request, res oldcmds.Response) {
res.SetOutput("Test.")
},
Marshalers: map[oldcmds.EncodingType]oldcmds.Marshaler{
oldcmds.Text: func(res oldcmds.Response) (io.Reader, error) {
ch, ok := res.Output().(<-chan interface{})
if !ok {
t.Fatalf("output is not <-chan interface{} but %T", ch)
}
v := <-ch
str, ok := v.(string)
if !ok {
t.Fatalf("read value is not string but %T", v)
}
buf := bytes.NewBuffer(nil)
_, err := io.WriteString(buf, str)
if err != nil {
t.Fatal(err)
}
return buf, nil
},
},
Subcommands: map[string]*oldcmds.Command{
"sub": &oldcmds.Command{
Options: []cmdkit.Option{
cmdkit.NewOption(cmdkit.String, "test", "t", "some random test flag"),
},
},
},
}),
},
}
path := []string{"test"}
req, err := cmds.NewRequest(context.TODO(), path, nil, nil, nil, root)
if err != nil {
t.Fatal(err)
}
buf := bytes.NewBuffer(nil)
// test calling "test" command
testCmd := root.Subcommands["test"]
enc := testCmd.Encoders[oldcmds.Text]
if enc == nil {
t.Fatal("got nil encoder")
}
re := cmds.NewWriterResponseEmitter(WriteNopCloser{buf}, req, enc)
var env oldcmds.Context
root.Call(req, re, &env)
expected := `{"Value":"Test."}
`
if buf.String() != expected {
t.Fatalf("expected string %#v but got %#v", expected, buf.String())
}
// test getting subcommand
subCmd := testCmd.Subcommands["sub"]
if subCmd == nil {
t.Fatal("got nil subcommand")
}
if nOpts := len(subCmd.Options); nOpts != 1 {
t.Fatalf("subcommand has %v options, expected 1", nOpts)
}
opt := subCmd.Options[0]
if nNames := len(opt.Names()); nNames != 2 {
t.Fatalf("option has %v names, expected 2", nNames)
}
names := opt.Names()
if names[0] != "test" {
t.Fatalf("option has name %q, expected %q", names[0], "test")
}
if names[1] != "t" {
t.Fatalf("option has name %q, expected %q", names[1], "t")
}
}
func TestPipePair(t *testing.T) {
cmd := &cmds.Command{Type: "string"}
req, err := cmds.NewRequest(context.TODO(), nil, nil, nil, nil, cmd)
if err != nil {
t.Fatal(err)
}
r, w := io.Pipe()
re := cmds.NewWriterResponseEmitter(w, req, cmds.Encoders[cmds.JSON])
res := cmds.NewReaderResponse(r, cmds.JSON, req)
wait := make(chan interface{})
expect := "abc"
go func() {
err := re.Emit(expect)
if err != nil {
t.Fatal(err)
}
close(wait)
}()
v, err := res.Next()
if err != nil {
t.Fatal(err)
}
str, ok := v.(*string)
if !ok {
t.Fatalf("expected type %T but got %T", expect, v)
}
if *str != expect {
t.Fatalf("expected value %#v but got %#v", expect, v)
}
<-wait
}