mirror of
https://github.com/ipfs/kubo.git
synced 2025-05-28 04:38:08 +08:00

This still works over "loosely defined" .car files Please refer to the sharness tests for extra info We can tighten this up if the sentiment is "Postel was wrong"
251 lines
4.4 KiB
Go
251 lines
4.4 KiB
Go
package commands
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
cmds "github.com/ipfs/go-ipfs-cmds"
|
|
)
|
|
|
|
func collectPaths(prefix string, cmd *cmds.Command, out map[string]struct{}) {
|
|
for name, sub := range cmd.Subcommands {
|
|
path := prefix + "/" + name
|
|
out[path] = struct{}{}
|
|
collectPaths(path, sub, out)
|
|
}
|
|
}
|
|
|
|
func TestROCommands(t *testing.T) {
|
|
list := []string{
|
|
"/block",
|
|
"/block/get",
|
|
"/block/stat",
|
|
"/cat",
|
|
"/commands",
|
|
"/dag",
|
|
"/dag/get",
|
|
"/dag/resolve",
|
|
"/dns",
|
|
"/get",
|
|
"/ls",
|
|
"/name",
|
|
"/name/resolve",
|
|
"/object",
|
|
"/object/data",
|
|
"/object/get",
|
|
"/object/links",
|
|
"/object/stat",
|
|
"/refs",
|
|
"/resolve",
|
|
"/version",
|
|
}
|
|
|
|
cmdSet := make(map[string]struct{})
|
|
collectPaths("", RootRO, cmdSet)
|
|
|
|
for _, path := range list {
|
|
if _, ok := cmdSet[path]; !ok {
|
|
t.Errorf("%q not in result", path)
|
|
} else {
|
|
delete(cmdSet, path)
|
|
}
|
|
}
|
|
|
|
for path := range cmdSet {
|
|
t.Errorf("%q in result but shouldn't be", path)
|
|
}
|
|
|
|
for _, path := range list {
|
|
path = path[1:] // remove leading slash
|
|
split := strings.Split(path, "/")
|
|
sub, err := RootRO.Get(split)
|
|
if err != nil {
|
|
t.Errorf("error getting subcommand %q: %v", path, err)
|
|
} else if sub == nil {
|
|
t.Errorf("subcommand %q is nil even though there was no error", path)
|
|
}
|
|
}
|
|
}
|
|
func TestCommands(t *testing.T) {
|
|
list := []string{
|
|
"/add",
|
|
"/bitswap",
|
|
"/bitswap/ledger",
|
|
"/bitswap/reprovide",
|
|
"/bitswap/stat",
|
|
"/bitswap/wantlist",
|
|
"/block",
|
|
"/block/get",
|
|
"/block/put",
|
|
"/block/rm",
|
|
"/block/stat",
|
|
"/bootstrap",
|
|
"/bootstrap/add",
|
|
"/bootstrap/add/default",
|
|
"/bootstrap/list",
|
|
"/bootstrap/rm",
|
|
"/bootstrap/rm/all",
|
|
"/cat",
|
|
"/commands",
|
|
"/config",
|
|
"/config/edit",
|
|
"/config/replace",
|
|
"/config/show",
|
|
"/config/profile",
|
|
"/config/profile/apply",
|
|
"/dag",
|
|
"/dag/get",
|
|
"/dag/export",
|
|
"/dag/put",
|
|
"/dag/import",
|
|
"/dag/resolve",
|
|
"/dht",
|
|
"/dht/findpeer",
|
|
"/dht/findprovs",
|
|
"/dht/get",
|
|
"/dht/provide",
|
|
"/dht/put",
|
|
"/dht/query",
|
|
"/diag",
|
|
"/diag/cmds",
|
|
"/diag/cmds/clear",
|
|
"/diag/cmds/set-time",
|
|
"/diag/sys",
|
|
"/dns",
|
|
"/file",
|
|
"/file/ls",
|
|
"/files",
|
|
"/files/chcid",
|
|
"/files/cp",
|
|
"/files/flush",
|
|
"/files/ls",
|
|
"/files/mkdir",
|
|
"/files/mv",
|
|
"/files/read",
|
|
"/files/rm",
|
|
"/files/stat",
|
|
"/filestore",
|
|
"/filestore/dups",
|
|
"/filestore/ls",
|
|
"/filestore/verify",
|
|
"/files/write",
|
|
"/get",
|
|
"/id",
|
|
"/key",
|
|
"/key/gen",
|
|
"/key/list",
|
|
"/key/rename",
|
|
"/key/rm",
|
|
"/log",
|
|
"/log/level",
|
|
"/log/ls",
|
|
"/log/tail",
|
|
"/ls",
|
|
"/mount",
|
|
"/name",
|
|
"/name/publish",
|
|
"/name/pubsub",
|
|
"/name/pubsub/state",
|
|
"/name/pubsub/subs",
|
|
"/name/pubsub/cancel",
|
|
"/name/resolve",
|
|
"/object",
|
|
"/object/data",
|
|
"/object/diff",
|
|
"/object/get",
|
|
"/object/links",
|
|
"/object/new",
|
|
"/object/patch",
|
|
"/object/patch/add-link",
|
|
"/object/patch/append-data",
|
|
"/object/patch/rm-link",
|
|
"/object/patch/set-data",
|
|
"/object/put",
|
|
"/object/stat",
|
|
"/p2p",
|
|
"/p2p/close",
|
|
"/p2p/forward",
|
|
"/p2p/listen",
|
|
"/p2p/ls",
|
|
"/p2p/stream",
|
|
"/p2p/stream/close",
|
|
"/p2p/stream/ls",
|
|
"/pin",
|
|
"/pin/add",
|
|
"/ping",
|
|
"/pin/ls",
|
|
"/pin/rm",
|
|
"/pin/update",
|
|
"/pin/verify",
|
|
"/pubsub",
|
|
"/pubsub/ls",
|
|
"/pubsub/peers",
|
|
"/pubsub/pub",
|
|
"/pubsub/sub",
|
|
"/refs",
|
|
"/refs/local",
|
|
"/repo",
|
|
"/repo/fsck",
|
|
"/repo/gc",
|
|
"/repo/stat",
|
|
"/repo/verify",
|
|
"/repo/version",
|
|
"/resolve",
|
|
"/shutdown",
|
|
"/stats",
|
|
"/stats/bitswap",
|
|
"/stats/bw",
|
|
"/stats/repo",
|
|
"/swarm",
|
|
"/swarm/addrs",
|
|
"/swarm/addrs/listen",
|
|
"/swarm/addrs/local",
|
|
"/swarm/connect",
|
|
"/swarm/disconnect",
|
|
"/swarm/filters",
|
|
"/swarm/filters/add",
|
|
"/swarm/filters/rm",
|
|
"/swarm/peers",
|
|
"/tar",
|
|
"/tar/add",
|
|
"/tar/cat",
|
|
"/update",
|
|
"/urlstore",
|
|
"/urlstore/add",
|
|
"/version",
|
|
"/version/deps",
|
|
"/cid",
|
|
"/cid/format",
|
|
"/cid/base32",
|
|
"/cid/codecs",
|
|
"/cid/bases",
|
|
"/cid/hashes",
|
|
}
|
|
|
|
cmdSet := make(map[string]struct{})
|
|
collectPaths("", Root, cmdSet)
|
|
|
|
for _, path := range list {
|
|
if _, ok := cmdSet[path]; !ok {
|
|
t.Errorf("%q not in result", path)
|
|
} else {
|
|
delete(cmdSet, path)
|
|
}
|
|
}
|
|
|
|
for path := range cmdSet {
|
|
t.Errorf("%q in result but shouldn't be", path)
|
|
}
|
|
|
|
for _, path := range list {
|
|
path = path[1:] // remove leading slash
|
|
split := strings.Split(path, "/")
|
|
sub, err := Root.Get(split)
|
|
if err != nil {
|
|
t.Errorf("error getting subcommand %q: %v", path, err)
|
|
} else if sub == nil {
|
|
t.Errorf("subcommand %q is nil even though there was no error", path)
|
|
}
|
|
}
|
|
}
|