func TestRoutingResolve(t *testing.T) { d := mockrouting.NewServer().Client(testutil.RandIdentityOrFatal(t)) resolver := NewRoutingResolver(d) publisher := NewRoutingPublisher(d) privk, pubk, err := testutil.RandTestKeyPair(512) if err != nil { t.Fatal(err) } h := path.FromString("/ipfs/QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN") err = publisher.Publish(context.Background(), privk, h) if err != nil { t.Fatal(err) } pubkb, err := pubk.Bytes() if err != nil { t.Fatal(err) } pkhash := u.Hash(pubkb) res, err := resolver.Resolve(context.Background(), key.Key(pkhash).Pretty()) if err != nil { t.Fatal(err) } if res != h { t.Fatal("Got back incorrect value.") } }
// resolveOnce implements resolver. Decodes the proquint string. func (r *ProquintResolver) resolveOnce(ctx context.Context, name string) (path.Path, error) { ok, err := proquint.IsProquint(name) if err != nil || !ok { return "", errors.New("not a valid proquint string") } return path.FromString(string(proquint.Decode(name))), nil }
func Cat(n *core.IpfsNode, pstr string) (*uio.DagReader, error) { p := path.FromString(pstr) dagNode, err := n.Resolver.ResolvePath(n.Context(), p) if err != nil { return nil, err } return uio.NewDagReader(n.Context(), dagNode, n.DAG) }
func TestIPNSHostnameRedirect(t *testing.T) { ns := mockNamesys{} ts, n := newTestServerAndNode(t, ns) t.Logf("test server url: %s", ts.URL) defer ts.Close() // create /ipns/example.net/foo/index.html _, dagn1, err := coreunix.AddWrapped(n, strings.NewReader("_"), "_") if err != nil { t.Fatal(err) } _, dagn2, err := coreunix.AddWrapped(n, strings.NewReader("_"), "index.html") if err != nil { t.Fatal(err) } dagn1.AddNodeLink("foo", dagn2) if err != nil { t.Fatal(err) } err = n.DAG.AddRecursive(dagn1) if err != nil { t.Fatal(err) } k, err := dagn1.Key() if err != nil { t.Fatal(err) } t.Logf("k: %s\n", k) ns["/ipns/example.net"] = path.FromString("/ipfs/" + k.String()) // make request to directory containing index.html req, err := http.NewRequest("GET", ts.URL+"/foo", nil) if err != nil { t.Fatal(err) } req.Host = "example.net" res, err := doWithoutRedirect(req) if err != nil { t.Fatal(err) } // expect 302 redirect to same path, but with trailing slash if res.StatusCode != 302 { t.Errorf("status is %d, expected 302", res.StatusCode) } hdr := res.Header["Location"] if len(hdr) < 1 { t.Errorf("location header not present") } else if hdr[0] != "/foo/" { t.Errorf("location header is %v, expected /foo/", hdr[0]) } }
func TestGatewayGet(t *testing.T) { ns := mockNamesys{} ts, n := newTestServerAndNode(t, ns) defer ts.Close() k, err := coreunix.Add(n, strings.NewReader("fnord")) if err != nil { t.Fatal(err) } ns["/ipns/example.com"] = path.FromString("/ipfs/" + k) t.Log(ts.URL) for _, test := range []struct { host string path string status int text string }{ {"localhost:5001", "/", http.StatusNotFound, "404 page not found\n"}, {"localhost:5001", "/" + k, http.StatusNotFound, "404 page not found\n"}, {"localhost:5001", "/ipfs/" + k, http.StatusOK, "fnord"}, {"localhost:5001", "/ipns/nxdomain.example.com", http.StatusBadRequest, "Path Resolve error: " + namesys.ErrResolveFailed.Error()}, {"localhost:5001", "/ipns/example.com", http.StatusOK, "fnord"}, {"example.com", "/", http.StatusOK, "fnord"}, } { var c http.Client r, err := http.NewRequest("GET", ts.URL+test.path, nil) if err != nil { t.Fatal(err) } r.Host = test.host resp, err := c.Do(r) urlstr := "http://" + test.host + test.path if err != nil { t.Errorf("error requesting %s: %s", urlstr, err) continue } defer resp.Body.Close() if resp.StatusCode != test.status { t.Errorf("got %d, expected %d from %s", resp.StatusCode, test.status, urlstr) continue } body, err := ioutil.ReadAll(resp.Body) if err != nil { t.Fatalf("error reading response from %s: %s", urlstr, err) } if string(body) != test.text { t.Errorf("unexpected response body from %s: expected %q; got %q", urlstr, test.text, body) continue } } }
func TestIPNSHostnameBacklinks(t *testing.T) { ns := mockNamesys{} ts, n := newTestServerAndNode(t, ns) t.Logf("test server url: %s", ts.URL) defer ts.Close() // create /ipns/example.net/foo/ _, dagn1, err := coreunix.AddWrapped(n, strings.NewReader("1"), "file.txt") if err != nil { t.Fatal(err) } _, dagn2, err := coreunix.AddWrapped(n, strings.NewReader("2"), "file.txt") if err != nil { t.Fatal(err) } _, dagn3, err := coreunix.AddWrapped(n, strings.NewReader("3"), "file.txt") if err != nil { t.Fatal(err) } dagn2.AddNodeLink("bar", dagn3) dagn1.AddNodeLink("foo", dagn2) if err != nil { t.Fatal(err) } err = n.DAG.AddRecursive(dagn1) if err != nil { t.Fatal(err) } k, err := dagn1.Key() if err != nil { t.Fatal(err) } t.Logf("k: %s\n", k) ns["/ipns/example.net"] = path.FromString("/ipfs/" + k.String()) // make request to directory listing req, err := http.NewRequest("GET", ts.URL+"/foo/", nil) if err != nil { t.Fatal(err) } req.Host = "example.net" res, err := doWithoutRedirect(req) if err != nil { t.Fatal(err) } // expect correct backlinks body, err := ioutil.ReadAll(res.Body) if err != nil { t.Fatalf("error reading response: %s", err) } s := string(body) t.Logf("body: %s\n", string(body)) if !strings.Contains(s, "Index of /foo/") { t.Fatalf("expected a path in directory listing") } if !strings.Contains(s, "<a href=\"/\">") { t.Fatalf("expected backlink in directory listing") } if !strings.Contains(s, "<a href=\"/foo/file.txt\">") { t.Fatalf("expected file in directory listing") } // make request to directory listing req, err = http.NewRequest("GET", ts.URL, nil) if err != nil { t.Fatal(err) } req.Host = "example.net" res, err = doWithoutRedirect(req) if err != nil { t.Fatal(err) } // expect correct backlinks body, err = ioutil.ReadAll(res.Body) if err != nil { t.Fatalf("error reading response: %s", err) } s = string(body) t.Logf("body: %s\n", string(body)) if !strings.Contains(s, "Index of /") { t.Fatalf("expected a path in directory listing") } if !strings.Contains(s, "<a href=\"/\">") { t.Fatalf("expected backlink in directory listing") } if !strings.Contains(s, "<a href=\"/file.txt\">") { t.Fatalf("expected file in directory listing") } // make request to directory listing req, err = http.NewRequest("GET", ts.URL+"/foo/bar/", nil) if err != nil { t.Fatal(err) } req.Host = "example.net" res, err = doWithoutRedirect(req) if err != nil { t.Fatal(err) } // expect correct backlinks body, err = ioutil.ReadAll(res.Body) if err != nil { t.Fatalf("error reading response: %s", err) } s = string(body) t.Logf("body: %s\n", string(body)) if !strings.Contains(s, "Index of /foo/bar/") { t.Fatalf("expected a path in directory listing") } if !strings.Contains(s, "<a href=\"/foo/\">") { t.Fatalf("expected backlink in directory listing") } if !strings.Contains(s, "<a href=\"/foo/bar/file.txt\">") { t.Fatalf("expected file in directory listing") } }