Skip to content

Commit 109f7cd

Browse files
committed
test: enable test
1 parent b6adbcc commit 109f7cd

File tree

5 files changed

+185
-69
lines changed

5 files changed

+185
-69
lines changed

examples/go.sum

+8
Original file line numberDiff line numberDiff line change
@@ -293,10 +293,12 @@ github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmv
293293
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
294294
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
295295
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
296+
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
296297
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
297298
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
298299
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
299300
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
301+
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
300302
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
301303
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
302304
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
@@ -449,6 +451,7 @@ github.com/ipfs/go-merkledag v0.9.0 h1:DFC8qZ96Dz1hMT7dtIpcY524eFFDiEWAF8hNJHWW2
449451
github.com/ipfs/go-merkledag v0.9.0/go.mod h1:bPHqkHt5OZ0p1n3iqPeDiw2jIBkjAytRjS3WSBwjq90=
450452
github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg=
451453
github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY=
454+
github.com/ipfs/go-namesys v0.7.0 h1:xqosk71GIVRkFDtF2UNRcXn4LdNeo7tzuy8feHD6NbU=
452455
github.com/ipfs/go-path v0.3.0 h1:tkjga3MtpXyM5v+3EbRvOHEoo+frwi4oumw5K+KYWyA=
453456
github.com/ipfs/go-path v0.3.0/go.mod h1:NOScsVgxfC/eIw4nz6OiGwK42PjaSJ4Y/ZFPn1Xe07I=
454457
github.com/ipfs/go-peertaskqueue v0.1.0/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U=
@@ -597,6 +600,8 @@ github.com/libp2p/go-libp2p-discovery v0.1.0/go.mod h1:4F/x+aldVHjHDHuX85x1zWoFT
597600
github.com/libp2p/go-libp2p-discovery v0.2.0/go.mod h1:s4VGaxYMbw4+4+tsoQTqh7wfxg97AEdo4GYBt6BadWg=
598601
github.com/libp2p/go-libp2p-discovery v0.3.0/go.mod h1:o03drFnz9BVAZdzC/QUQ+NeQOu38Fu7LJGEOK2gQltw=
599602
github.com/libp2p/go-libp2p-discovery v0.5.0/go.mod h1:+srtPIU9gDaBNu//UHvcdliKBIcr4SfDcm0/PfPJLug=
603+
github.com/libp2p/go-libp2p-kad-dht v0.19.0 h1:2HuiInHZTm9ZvQajaqdaPLHr0PCKKigWiflakimttE0=
604+
github.com/libp2p/go-libp2p-kbucket v0.5.0 h1:g/7tVm8ACHDxH29BGrpsQlnNeu+6OF1A9bno/4/U1oA=
600605
github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90=
601606
github.com/libp2p/go-libp2p-mplex v0.2.0/go.mod h1:Ejl9IyjvXJ0T9iqUTE1jpYATQ9NM3g+OtR+EMMODbKo=
602607
github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE=
@@ -1040,13 +1045,15 @@ github.com/warpfork/go-wish v0.0.0-20190328234359-8b3e70f8e830/go.mod h1:x6AKhvS
10401045
github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
10411046
github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ=
10421047
github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
1048+
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc h1:BCPnHtcboadS0DvysUuJXZ4lWVv5Bh5i7+tbIyi+ck4=
10431049
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 h1:5HZfQkwe0mIfyDmc1Em5GqlNRzcdtlv4HTNmdpt7XH0=
10441050
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11/go.mod h1:Wlo/SzPmxVp6vXpGt/zaXhHH0fn4IxgqZc82aKg6bpQ=
10451051
github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI=
10461052
github.com/whyrusleeping/cbor-gen v0.0.0-20230126041949-52956bd4c9aa h1:EyA027ZAkuaCLoxVX4r1TZMPy1d31fM6hbfQ4OU4I5o=
10471053
github.com/whyrusleeping/cbor-gen v0.0.0-20230126041949-52956bd4c9aa/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ=
10481054
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E=
10491055
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8=
1056+
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k=
10501057
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc=
10511058
github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM=
10521059
github.com/whyrusleeping/go-logging v0.0.1/go.mod h1:lDPYj54zutzG1XYfHAhcc7oNXEburHQBn+Iqd4yS4vE=
@@ -1074,6 +1081,7 @@ go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA=
10741081
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
10751082
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
10761083
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
1084+
go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
10771085
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
10781086
go.opentelemetry.io/otel v1.12.0 h1:IgfC7kqQrRccIKuB7Cl+SRUmsKbEwSGPr0Eu+/ht1SQ=
10791087
go.opentelemetry.io/otel v1.12.0/go.mod h1:geaoz0L0r1BEOR81k7/n9W4TCXYCJ7bPO7K374jQHG0=

gateway/gateway_test.go

+105
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package gateway
2+
3+
import (
4+
"context"
5+
"errors"
6+
"strings"
7+
8+
cid "github.com/ipfs/go-cid"
9+
"github.com/ipfs/go-datastore"
10+
syncds "github.com/ipfs/go-datastore/sync"
11+
"github.com/ipfs/go-libipfs/blocks"
12+
"github.com/ipfs/go-libipfs/files"
13+
"github.com/ipfs/go-namesys"
14+
path "github.com/ipfs/go-path"
15+
iface "github.com/ipfs/interface-go-ipfs-core"
16+
nsopts "github.com/ipfs/interface-go-ipfs-core/options/namesys"
17+
ipath "github.com/ipfs/interface-go-ipfs-core/path"
18+
"github.com/libp2p/go-libp2p/core/crypto"
19+
)
20+
21+
type mockNamesys map[string]path.Path
22+
23+
func (m mockNamesys) Resolve(ctx context.Context, name string, opts ...nsopts.ResolveOpt) (value path.Path, err error) {
24+
cfg := nsopts.DefaultResolveOpts()
25+
for _, o := range opts {
26+
o(&cfg)
27+
}
28+
depth := cfg.Depth
29+
if depth == nsopts.UnlimitedDepth {
30+
// max uint
31+
depth = ^uint(0)
32+
}
33+
for strings.HasPrefix(name, "/ipns/") {
34+
if depth == 0 {
35+
return value, namesys.ErrResolveRecursion
36+
}
37+
depth--
38+
39+
var ok bool
40+
value, ok = m[name]
41+
if !ok {
42+
return "", namesys.ErrResolveFailed
43+
}
44+
name = value.String()
45+
}
46+
return value, nil
47+
}
48+
49+
func (m mockNamesys) ResolveAsync(ctx context.Context, name string, opts ...nsopts.ResolveOpt) <-chan namesys.Result {
50+
out := make(chan namesys.Result, 1)
51+
v, err := m.Resolve(ctx, name, opts...)
52+
out <- namesys.Result{Path: v, Err: err}
53+
close(out)
54+
return out
55+
}
56+
57+
func (m mockNamesys) Publish(ctx context.Context, name crypto.PrivKey, value path.Path, opts ...nsopts.PublishOption) error {
58+
return errors.New("not implemented for mockNamesys")
59+
}
60+
61+
func (m mockNamesys) GetResolver(subs string) (namesys.Resolver, bool) {
62+
return nil, false
63+
}
64+
65+
type mockApi struct {
66+
ns mockNamesys
67+
}
68+
69+
func newMockApi() *mockApi {
70+
71+
syncds.MutexWrap(datastore.NewMapDatastore())
72+
73+
return &mockApi{
74+
ns: mockNamesys{},
75+
}
76+
}
77+
78+
func (m *mockApi) GetUnixFsNode(context.Context, ipath.Resolved) (files.Node, error) {
79+
return nil, errors.New("not implemented")
80+
}
81+
82+
func (m *mockApi) LsUnixFsDir(context.Context, ipath.Resolved) (<-chan iface.DirEntry, error) {
83+
return nil, errors.New("not implemented")
84+
}
85+
86+
func (m *mockApi) GetBlock(context.Context, cid.Cid) (blocks.Block, error) {
87+
return nil, errors.New("not implemented")
88+
}
89+
90+
func (m *mockApi) GetIPNSRecord(context.Context, cid.Cid) ([]byte, error) {
91+
return nil, errors.New("not implemented")
92+
}
93+
94+
func (m *mockApi) IsCached(context.Context, ipath.Path) bool {
95+
return false
96+
}
97+
98+
func (m *mockApi) ResolvePath(context.Context, ipath.Path) (ipath.Resolved, error) {
99+
return nil, errors.New("not implemented")
100+
}
101+
102+
func (m *mockApi) HasDNSLinkRecord(ctx context.Context, pth ipath.Path) bool {
103+
_, err := m.ns.Resolve(ctx, pth.String(), nsopts.Depth(1))
104+
return err == nil || err == namesys.ErrResolveRecursion
105+
}

gateway/hostname_test.go

+52-69
Original file line numberDiff line numberDiff line change
@@ -7,80 +7,63 @@ import (
77
"testing"
88

99
cid "github.com/ipfs/go-cid"
10+
path "github.com/ipfs/go-path"
1011
)
1112

12-
// import (
13-
// "errors"
14-
// "net/http"
15-
// "net/http/httptest"
16-
// "testing"
13+
func TestToSubdomainURL(t *testing.T) {
14+
gwAPI := newMockApi()
15+
testCID, err := cid.Decode("bafkqaglimvwgy3zakrsxg5cun5jxkyten5wwc2lokvjeycq")
16+
if err != nil {
17+
t.Fatal(err)
18+
}
19+
20+
gwAPI.ns["/ipns/dnslink.long-name.example.com"] = path.FromString(testCID.String())
21+
gwAPI.ns["/ipns/dnslink.too-long.f1siqrebi3vir8sab33hu5vcy008djegvay6atmz91ojesyjs8lx350b7y7i1nvyw2haytfukfyu2f2x4tocdrfa0zgij6p4zpl4u5o.example.com"] = path.FromString(testCID.String())
22+
httpRequest := httptest.NewRequest("GET", "http://127.0.0.1:8080", nil)
23+
httpsRequest := httptest.NewRequest("GET", "https://https-request-stub.example.com", nil)
24+
httpsProxiedRequest := httptest.NewRequest("GET", "http://proxied-https-request-stub.example.com", nil)
25+
httpsProxiedRequest.Header.Set("X-Forwarded-Proto", "https")
1726

18-
// cid "github.com/ipfs/go-cid"
19-
// "github.com/ipfs/go-libipfs/files"
20-
// path "github.com/ipfs/go-path"
21-
// config "github.com/ipfs/kubo/config"
22-
// coreapi "github.com/ipfs/kubo/core/coreapi"
23-
// )
27+
for _, test := range []struct {
28+
// in:
29+
request *http.Request
30+
gwHostname string
31+
inlineDNSLink bool
32+
path string
33+
// out:
34+
url string
35+
err error
36+
}{
2437

25-
// func TestToSubdomainURL(t *testing.T) {
26-
// ns := mockNamesys{}
27-
// n, err := newNodeWithMockNamesys(ns)
28-
// if err != nil {
29-
// t.Fatal(err)
30-
// }
31-
// coreAPI, err := coreapi.NewCoreAPI(n)
32-
// if err != nil {
33-
// t.Fatal(err)
34-
// }
35-
// testCID, err := coreAPI.Unixfs().Add(n.Context(), files.NewBytesFile([]byte("fnord")))
36-
// if err != nil {
37-
// t.Fatal(err)
38-
// }
39-
// ns["/ipns/dnslink.long-name.example.com"] = path.FromString(testCID.String())
40-
// ns["/ipns/dnslink.too-long.f1siqrebi3vir8sab33hu5vcy008djegvay6atmz91ojesyjs8lx350b7y7i1nvyw2haytfukfyu2f2x4tocdrfa0zgij6p4zpl4u5o.example.com"] = path.FromString(testCID.String())
41-
// httpRequest := httptest.NewRequest("GET", "http://127.0.0.1:8080", nil)
42-
// httpsRequest := httptest.NewRequest("GET", "https://https-request-stub.example.com", nil)
43-
// httpsProxiedRequest := httptest.NewRequest("GET", "http://proxied-https-request-stub.example.com", nil)
44-
// httpsProxiedRequest.Header.Set("X-Forwarded-Proto", "https")
38+
// DNSLink
39+
{httpRequest, "localhost", false, "/ipns/dnslink.io", "http://dnslink.io.ipns.localhost/", nil},
40+
// Hostname with port
41+
{httpRequest, "localhost:8080", false, "/ipns/dnslink.io", "http://dnslink.io.ipns.localhost:8080/", nil},
42+
// CIDv0 → CIDv1base32
43+
{httpRequest, "localhost", false, "/ipfs/QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n", "http://bafybeif7a7gdklt6hodwdrmwmxnhksctcuav6lfxlcyfz4khzl3qfmvcgu.ipfs.localhost/", nil},
44+
// CIDv1 with long sha512
45+
{httpRequest, "localhost", false, "/ipfs/bafkrgqe3ohjcjplc6n4f3fwunlj6upltggn7xqujbsvnvyw764srszz4u4rshq6ztos4chl4plgg4ffyyxnayrtdi5oc4xb2332g645433aeg", "", errors.New("CID incompatible with DNS label length limit of 63: kf1siqrebi3vir8sab33hu5vcy008djegvay6atmz91ojesyjs8lx350b7y7i1nvyw2haytfukfyu2f2x4tocdrfa0zgij6p4zpl4u5oj")},
46+
// PeerID as CIDv1 needs to have libp2p-key multicodec
47+
{httpRequest, "localhost", false, "/ipns/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD", "http://k2k4r8n0flx3ra0y5dr8fmyvwbzy3eiztmtq6th694k5a3rznayp3e4o.ipns.localhost/", nil},
48+
{httpRequest, "localhost", false, "/ipns/bafybeickencdqw37dpz3ha36ewrh4undfjt2do52chtcky4rxkj447qhdm", "http://k2k4r8l9ja7hkzynavdqup76ou46tnvuaqegbd04a4o1mpbsey0meucb.ipns.localhost/", nil},
49+
// PeerID: ed25519+identity multihash → CIDv1Base36
50+
{httpRequest, "localhost", false, "/ipns/12D3KooWFB51PRY9BxcXSH6khFXw1BZeszeLDy7C8GciskqCTZn5", "http://k51qzi5uqu5di608geewp3nqkg0bpujoasmka7ftkyxgcm3fh1aroup0gsdrna.ipns.localhost/", nil},
51+
{httpRequest, "sub.localhost", false, "/ipfs/QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n", "http://bafybeif7a7gdklt6hodwdrmwmxnhksctcuav6lfxlcyfz4khzl3qfmvcgu.ipfs.sub.localhost/", nil},
52+
// HTTPS requires DNSLink name to fit in a single DNS label – see "Option C" from https://github.com/ipfs/in-web-browsers/issues/169
53+
{httpRequest, "dweb.link", false, "/ipns/dnslink.long-name.example.com", "http://dnslink.long-name.example.com.ipns.dweb.link/", nil},
54+
{httpsRequest, "dweb.link", false, "/ipns/dnslink.long-name.example.com", "https://dnslink-long--name-example-com.ipns.dweb.link/", nil},
55+
{httpsProxiedRequest, "dweb.link", false, "/ipns/dnslink.long-name.example.com", "https://dnslink-long--name-example-com.ipns.dweb.link/", nil},
56+
// HTTP requests can also be converted to fit into a single DNS label - https://github.com/ipfs/kubo/issues/9243
57+
{httpRequest, "localhost", true, "/ipns/dnslink.long-name.example.com", "http://dnslink-long--name-example-com.ipns.localhost/", nil},
58+
{httpRequest, "dweb.link", true, "/ipns/dnslink.long-name.example.com", "http://dnslink-long--name-example-com.ipns.dweb.link/", nil},
59+
} {
4560

46-
// for _, test := range []struct {
47-
// // in:
48-
// request *http.Request
49-
// gwHostname string
50-
// inlineDNSLink bool
51-
// path string
52-
// // out:
53-
// url string
54-
// err error
55-
// }{
56-
// // DNSLink
57-
// {httpRequest, "localhost", false, "/ipns/dnslink.io", "http://dnslink.io.ipns.localhost/", nil},
58-
// // Hostname with port
59-
// {httpRequest, "localhost:8080", false, "/ipns/dnslink.io", "http://dnslink.io.ipns.localhost:8080/", nil},
60-
// // CIDv0 → CIDv1base32
61-
// {httpRequest, "localhost", false, "/ipfs/QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n", "http://bafybeif7a7gdklt6hodwdrmwmxnhksctcuav6lfxlcyfz4khzl3qfmvcgu.ipfs.localhost/", nil},
62-
// // CIDv1 with long sha512
63-
// {httpRequest, "localhost", false, "/ipfs/bafkrgqe3ohjcjplc6n4f3fwunlj6upltggn7xqujbsvnvyw764srszz4u4rshq6ztos4chl4plgg4ffyyxnayrtdi5oc4xb2332g645433aeg", "", errors.New("CID incompatible with DNS label length limit of 63: kf1siqrebi3vir8sab33hu5vcy008djegvay6atmz91ojesyjs8lx350b7y7i1nvyw2haytfukfyu2f2x4tocdrfa0zgij6p4zpl4u5oj")},
64-
// // PeerID as CIDv1 needs to have libp2p-key multicodec
65-
// {httpRequest, "localhost", false, "/ipns/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD", "http://k2k4r8n0flx3ra0y5dr8fmyvwbzy3eiztmtq6th694k5a3rznayp3e4o.ipns.localhost/", nil},
66-
// {httpRequest, "localhost", false, "/ipns/bafybeickencdqw37dpz3ha36ewrh4undfjt2do52chtcky4rxkj447qhdm", "http://k2k4r8l9ja7hkzynavdqup76ou46tnvuaqegbd04a4o1mpbsey0meucb.ipns.localhost/", nil},
67-
// // PeerID: ed25519+identity multihash → CIDv1Base36
68-
// {httpRequest, "localhost", false, "/ipns/12D3KooWFB51PRY9BxcXSH6khFXw1BZeszeLDy7C8GciskqCTZn5", "http://k51qzi5uqu5di608geewp3nqkg0bpujoasmka7ftkyxgcm3fh1aroup0gsdrna.ipns.localhost/", nil},
69-
// {httpRequest, "sub.localhost", false, "/ipfs/QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n", "http://bafybeif7a7gdklt6hodwdrmwmxnhksctcuav6lfxlcyfz4khzl3qfmvcgu.ipfs.sub.localhost/", nil},
70-
// // HTTPS requires DNSLink name to fit in a single DNS label – see "Option C" from https://github.com/ipfs/in-web-browsers/issues/169
71-
// {httpRequest, "dweb.link", false, "/ipns/dnslink.long-name.example.com", "http://dnslink.long-name.example.com.ipns.dweb.link/", nil},
72-
// {httpsRequest, "dweb.link", false, "/ipns/dnslink.long-name.example.com", "https://dnslink-long--name-example-com.ipns.dweb.link/", nil},
73-
// {httpsProxiedRequest, "dweb.link", false, "/ipns/dnslink.long-name.example.com", "https://dnslink-long--name-example-com.ipns.dweb.link/", nil},
74-
// // HTTP requests can also be converted to fit into a single DNS label - https://github.com/ipfs/kubo/issues/9243
75-
// {httpRequest, "localhost", true, "/ipns/dnslink.long-name.example.com", "http://dnslink-long--name-example-com.ipns.localhost/", nil},
76-
// {httpRequest, "dweb.link", true, "/ipns/dnslink.long-name.example.com", "http://dnslink-long--name-example-com.ipns.dweb.link/", nil},
77-
// } {
78-
// url, err := toSubdomainURL(test.gwHostname, test.path, test.request, test.inlineDNSLink, coreAPI)
79-
// if url != test.url || !equalError(err, test.err) {
80-
// t.Errorf("(%s, %v, %s) returned (%s, %v), expected (%s, %v)", test.gwHostname, test.inlineDNSLink, test.path, url, err, test.url, test.err)
81-
// }
82-
// }
83-
// }
61+
url, err := toSubdomainURL(test.gwHostname, test.path, test.request, test.inlineDNSLink, gwAPI)
62+
if url != test.url || !equalError(err, test.err) {
63+
t.Errorf("(%s, %v, %s) returned (%s, %v), expected (%s, %v)", test.gwHostname, test.inlineDNSLink, test.path, url, err, test.url, test.err)
64+
}
65+
}
66+
}
8467

8568
func TestToDNSLinkDNSLabel(t *testing.T) {
8669
for _, test := range []struct {

go.mod

+7
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ require (
2727
github.com/ipfs/go-log v1.0.5
2828
github.com/ipfs/go-log/v2 v2.5.1
2929
github.com/ipfs/go-metrics-interface v0.0.1
30+
github.com/ipfs/go-namesys v0.7.0
3031
github.com/ipfs/go-path v0.3.0
3132
github.com/ipfs/go-peertaskqueue v0.8.0
3233
github.com/ipfs/interface-go-ipfs-core v0.10.0
@@ -64,6 +65,8 @@ require (
6465
github.com/go-logr/stdr v1.2.2 // indirect
6566
github.com/golang/protobuf v1.5.2 // indirect
6667
github.com/google/gopacket v1.1.19 // indirect
68+
github.com/hashicorp/errwrap v1.1.0 // indirect
69+
github.com/hashicorp/go-multierror v1.1.1 // indirect
6770
github.com/hashicorp/golang-lru v0.5.4 // indirect
6871
github.com/huin/goupnp v1.0.3 // indirect
6972
github.com/ipfs/bbloom v0.0.4 // indirect
@@ -82,6 +85,8 @@ require (
8285
github.com/koron/go-ssdp v0.0.3 // indirect
8386
github.com/libp2p/go-cidranger v1.1.0 // indirect
8487
github.com/libp2p/go-libp2p-asn-util v0.2.0 // indirect
88+
github.com/libp2p/go-libp2p-kad-dht v0.19.0 // indirect
89+
github.com/libp2p/go-libp2p-kbucket v0.5.0 // indirect
8590
github.com/libp2p/go-nat v0.1.0 // indirect
8691
github.com/libp2p/go-netroute v0.2.0 // indirect
8792
github.com/libp2p/go-openssl v0.1.0 // indirect
@@ -106,7 +111,9 @@ require (
106111
github.com/spaolacci/murmur3 v1.1.0 // indirect
107112
github.com/stretchr/objx v0.5.0 // indirect
108113
github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb // indirect
114+
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect
109115
github.com/whyrusleeping/cbor-gen v0.0.0-20221220214510-0333c149dec0 // indirect
116+
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect
110117
go.uber.org/atomic v1.10.0 // indirect
111118
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect
112119
golang.org/x/exp v0.0.0-20220916125017-b168a2c6b86b // indirect

0 commit comments

Comments
 (0)