From e9928f76916023d5a8372e2635c46e2e746dcfd1 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 25 Apr 2018 10:53:24 -0700 Subject: [PATCH] add test for 4973 License: MIT Signed-off-by: Steven Allen --- core/corehttp/gateway_test.go | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/core/corehttp/gateway_test.go b/core/corehttp/gateway_test.go index af7a2b72694..b9ffb260eae 100644 --- a/core/corehttp/gateway_test.go +++ b/core/corehttp/gateway_test.go @@ -4,6 +4,7 @@ import ( "context" "errors" "io/ioutil" + "math" "net/http" "net/http/httptest" "strings" @@ -31,11 +32,25 @@ var emptyDir = "/ipfs/QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn" type mockNamesys map[string]path.Path func (m mockNamesys) Resolve(ctx context.Context, name string, opts ...nsopts.ResolveOpt) (value path.Path, err error) { - p, ok := m[name] - if !ok { - return "", namesys.ErrResolveFailed + cfg := nsopts.DefaultResolveOpts() + for _, o := range opts { + o(cfg) } - return p, nil + depth := cfg.Depth + if depth == nsopts.UnlimitedDepth { + depth = math.MaxUint64 + } + for depth > 0 && strings.HasPrefix(name, "/ipns/") { + depth-- + + var ok bool + value, ok = m[name] + if !ok { + return "", namesys.ErrResolveFailed + } + name = value.String() + } + return value, nil } func (m mockNamesys) Publish(ctx context.Context, name ci.PrivKey, value path.Path) error { @@ -130,6 +145,10 @@ func TestGatewayGet(t *testing.T) { t.Fatal(err) } ns["/ipns/example.com"] = path.FromString("/ipfs/" + k) + ns["/ipns/working.example.com"] = path.FromString("/ipfs/" + k) + ns["/ipns/double.example.com"] = path.FromString("/ipns/working.example.com") + ns["/ipns/triple.example.com"] = path.FromString("/ipns/double.example.com") + ns["/ipns/broken.example.com"] = path.FromString("/ipns/" + k) t.Log(ts.URL) for _, test := range []struct { @@ -145,6 +164,13 @@ func TestGatewayGet(t *testing.T) { {"localhost:5001", "/ipns/%0D%0A%0D%0Ahello", http.StatusNotFound, "ipfs resolve -r /ipns/%0D%0A%0D%0Ahello: " + namesys.ErrResolveFailed.Error() + "\n"}, {"localhost:5001", "/ipns/example.com", http.StatusOK, "fnord"}, {"example.com", "/", http.StatusOK, "fnord"}, + + {"working.example.com", "/", http.StatusOK, "fnord"}, + {"double.example.com", "/", http.StatusOK, "fnord"}, + {"triple.example.com", "/", http.StatusOK, "fnord"}, + {"working.example.com", "/ipfs/" + k, http.StatusNotFound, "ipfs resolve -r /ipns/working.example.com/ipfs/" + k + ": no link named \"ipfs\" under " + k + "\n"}, + {"broken.example.com", "/", http.StatusNotFound, "ipfs resolve -r /ipns/broken.example.com/: " + namesys.ErrResolveFailed.Error() + "\n"}, + {"broken.example.com", "/ipfs/" + k, http.StatusNotFound, "ipfs resolve -r /ipns/broken.example.com/ipfs/" + k + ": " + namesys.ErrResolveFailed.Error() + "\n"}, } { var c http.Client r, err := http.NewRequest("GET", ts.URL+test.path, nil)