master
go 255 lines 4.64 KB
Raw
1 package commands
2
3 import (
4 "strings"
5 "testing"
6
7 cmds "github.com/ipfs/go-ipfs-cmds"
8 )
9
10 func collectPaths(prefix string, cmd *cmds.Command, out map[string]struct{}) {
11 for name, sub := range cmd.Subcommands {
12 path := prefix + "/" + name
13 out[path] = struct{}{}
14 collectPaths(path, sub, out)
15 }
16 }
17
18 func TestCommands(t *testing.T) {
19 list := []string{
20 "/add",
21 "/bitswap",
22 "/bitswap/ledger",
23 "/bitswap/reprovide",
24 "/bitswap/stat",
25 "/bitswap/wantlist",
26 "/block",
27 "/block/get",
28 "/block/put",
29 "/block/rm",
30 "/block/stat",
31 "/bootstrap",
32 "/bootstrap/add",
33 "/bootstrap/list",
34 "/bootstrap/rm",
35 "/bootstrap/rm/all",
36 "/cat",
37 "/cid",
38 "/cid/base32",
39 "/cid/bases",
40 "/cid/codecs",
41 "/cid/format",
42 "/cid/hashes",
43 "/cid/inspect",
44 "/commands",
45 "/commands/completion",
46 "/commands/completion/bash",
47 "/commands/completion/fish",
48 "/commands/completion/zsh",
49 "/config",
50 "/config/edit",
51 "/config/profile",
52 "/config/profile/apply",
53 "/config/replace",
54 "/config/show",
55 "/dag",
56 "/dag/export",
57 "/dag/get",
58 "/dag/import",
59 "/dag/put",
60 "/dag/resolve",
61 "/dag/stat",
62 "/dht",
63 "/dht/query",
64 "/dht/findprovs",
65 "/dht/findpeer",
66 "/dht/get",
67 "/dht/provide",
68 "/dht/put",
69 "/routing",
70 "/routing/put",
71 "/routing/get",
72 "/routing/findpeer",
73 "/routing/findprovs",
74 "/routing/provide",
75 "/routing/reprovide",
76 "/diag",
77 "/diag/cmds",
78 "/diag/cmds/clear",
79 "/diag/cmds/set-time",
80 "/diag/datastore",
81 "/diag/datastore/count",
82 "/diag/datastore/get",
83 "/diag/datastore/put",
84 "/diag/healthy",
85 "/diag/profile",
86 "/diag/sys",
87 "/files",
88 "/files/chcid",
89 "/files/cp",
90 "/files/flush",
91 "/files/ls",
92 "/files/mkdir",
93 "/files/mv",
94 "/files/read",
95 "/files/rm",
96 "/files/stat",
97 "/files/write",
98 "/files/chmod",
99 "/files/chroot",
100 "/files/touch",
101 "/filestore",
102 "/filestore/dups",
103 "/filestore/ls",
104 "/filestore/verify",
105 "/get",
106 "/id",
107 "/key",
108 "/key/export",
109 "/key/gen",
110 "/key/import",
111 "/key/list",
112 "/key/ls",
113 "/key/rename",
114 "/key/rm",
115 "/key/rotate",
116 "/key/sign",
117 "/key/verify",
118 "/log",
119 "/log/level",
120 "/log/ls",
121 "/log/tail",
122 "/ls",
123 "/mount",
124 "/multibase",
125 "/multibase/decode",
126 "/multibase/encode",
127 "/multibase/transcode",
128 "/multibase/list",
129 "/name",
130 "/name/get",
131 "/name/inspect",
132 "/name/publish",
133 "/name/pubsub",
134 "/name/pubsub/cancel",
135 "/name/pubsub/state",
136 "/name/pubsub/subs",
137 "/name/put",
138 "/name/resolve",
139 "/object",
140 "/object/data",
141 "/object/diff",
142 "/object/get",
143 "/object/links",
144 "/object/new",
145 "/object/patch",
146 "/object/patch/add-link",
147 "/object/patch/append-data",
148 "/object/patch/rm-link",
149 "/object/patch/set-data",
150 "/object/put",
151 "/object/stat",
152 "/p2p",
153 "/p2p/close",
154 "/p2p/forward",
155 "/p2p/listen",
156 "/p2p/ls",
157 "/p2p/stream",
158 "/p2p/stream/close",
159 "/p2p/stream/ls",
160 "/pin",
161 "/pin/add",
162 "/pin/ls",
163 "/pin/remote",
164 "/pin/remote/add",
165 "/pin/remote/ls",
166 "/pin/remote/rm",
167 "/pin/remote/service",
168 "/pin/remote/service/add",
169 "/pin/remote/service/ls",
170 "/pin/remote/service/rm",
171 "/pin/rm",
172 "/pin/update",
173 "/pin/verify",
174 "/ping",
175 "/provide",
176 "/provide/clear",
177 "/provide/once",
178 "/provide/stat",
179 "/pubsub",
180 "/pubsub/ls",
181 "/pubsub/peers",
182 "/pubsub/pub",
183 "/pubsub/reset",
184 "/pubsub/sub",
185 "/refs",
186 "/refs/local",
187 "/repo",
188 "/repo/gc",
189 "/repo/migrate",
190 "/repo/stat",
191 "/repo/verify",
192 "/repo/version",
193 "/repo/ls",
194 "/resolve",
195 "/shutdown",
196 "/stats",
197 "/stats/bitswap",
198 "/stats/bw",
199 "/stats/dht",
200 "/stats/provide",
201 "/stats/reprovide",
202 "/stats/repo",
203 "/swarm",
204 "/swarm/addrs",
205 "/swarm/addrs/autonat",
206 "/swarm/addrs/listen",
207 "/swarm/addrs/local",
208 "/swarm/connect",
209 "/swarm/disconnect",
210 "/swarm/filters",
211 "/swarm/filters/add",
212 "/swarm/filters/rm",
213 "/swarm/peers",
214 "/swarm/peering",
215 "/swarm/peering/add",
216 "/swarm/peering/ls",
217 "/swarm/peering/rm",
218 "/swarm/resources",
219 "/update",
220 "/update/check",
221 "/update/clean",
222 "/update/install",
223 "/update/revert",
224 "/update/versions",
225 "/version",
226 "/version/check",
227 "/version/deps",
228 }
229
230 cmdSet := make(map[string]struct{})
231 collectPaths("", Root, cmdSet)
232
233 for _, path := range list {
234 if _, ok := cmdSet[path]; !ok {
235 t.Errorf("%q not in result", path)
236 } else {
237 delete(cmdSet, path)
238 }
239 }
240
241 for path := range cmdSet {
242 t.Errorf("%q in result but shouldn't be", path)
243 }
244
245 for _, path := range list {
246 path = path[1:] // remove leading slash
247 split := strings.Split(path, "/")
248 sub, err := Root.Get(split)
249 if err != nil {
250 t.Errorf("error getting subcommand %q: %v", path, err)
251 } else if sub == nil {
252 t.Errorf("subcommand %q is nil even though there was no error", path)
253 }
254 }
255 }