Skip to content

Commit 09dc9f1

Browse files
committed
feat(routing/http): DefaultProtocolFilter
1 parent 08fb71d commit 09dc9f1

File tree

2 files changed

+59
-19
lines changed

2 files changed

+59
-19
lines changed

routing/http/client/client.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ import (
3333
var (
3434
_ contentrouter.Client = &Client{}
3535
logger = logging.Logger("routing/http/client")
36+
37+
DefaultProtocolFilter = []string{"unknown", "transport-bitswap"} // IPIP-484
3638
)
3739

3840
const (
@@ -175,10 +177,11 @@ func WithStreamResultsRequired() Option {
175177
// The Provider and identity parameters are option. If they are nil, the [client.ProvideBitswap] method will not function.
176178
func New(baseURL string, opts ...Option) (*Client, error) {
177179
client := &Client{
178-
baseURL: baseURL,
179-
httpClient: newDefaultHTTPClient(defaultUserAgent),
180-
clock: clock.New(),
181-
accepts: strings.Join([]string{mediaTypeNDJSON, mediaTypeJSON}, ","),
180+
baseURL: baseURL,
181+
httpClient: newDefaultHTTPClient(defaultUserAgent),
182+
clock: clock.New(),
183+
accepts: strings.Join([]string{mediaTypeNDJSON, mediaTypeJSON}, ","),
184+
protocolFilter: DefaultProtocolFilter, // can be customized via WithProtocolFilter
182185
}
183186

184187
for _, opt := range opts {

routing/http/client/client_test.go

Lines changed: 52 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,22 @@ func (e *osErrContains) errContains(t *testing.T, err error) {
223223
}
224224

225225
func TestClient_FindProviders(t *testing.T) {
226+
unknownPeerRecord := makePeerRecord([]string{})
226227
bitswapPeerRecord := makePeerRecord([]string{"transport-bitswap"})
227228
httpPeerRecord := makePeerRecord([]string{"transport-ipfs-gateway-http"})
229+
fooPeerRecord := makePeerRecord([]string{"transport-foo"})
230+
228231
peerProviders := []iter.Result[types.Record]{
232+
{Val: &unknownPeerRecord},
229233
{Val: &bitswapPeerRecord},
230234
{Val: &httpPeerRecord},
235+
{Val: &fooPeerRecord},
236+
}
237+
238+
// DefaultProtocolFilter
239+
defaultFilterPeerProviders := []iter.Result[types.Record]{
240+
{Val: &unknownPeerRecord},
241+
{Val: &bitswapPeerRecord},
231242
}
232243

233244
bitswapRecord := makeBitswapRecord()
@@ -249,16 +260,23 @@ func TestClient_FindProviders(t *testing.T) {
249260
expJSONResponse bool
250261
}{
251262
{
252-
name: "happy case",
263+
name: "happy case with DefaultProtocolFilter",
264+
routerResult: peerProviders,
265+
expResult: defaultFilterPeerProviders,
266+
expStreamingResponse: true,
267+
},
268+
{
269+
name: "pass through with protocol filter disabled",
270+
filterProtocols: []string{},
253271
routerResult: peerProviders,
254272
expResult: peerProviders,
255273
expStreamingResponse: true,
256274
},
257275
{
258-
name: "happy case with protocol filter",
259-
filterProtocols: []string{"transport-bitswap"},
276+
name: "happy case with custom protocol filter",
277+
filterProtocols: []string{"transport-foo"},
260278
routerResult: peerProviders,
261-
expResult: []iter.Result[types.Record]{{Val: &bitswapPeerRecord}},
279+
expResult: []iter.Result[types.Record]{{Val: &fooPeerRecord}},
262280
expStreamingResponse: true,
263281
},
264282
{
@@ -270,7 +288,7 @@ func TestClient_FindProviders(t *testing.T) {
270288
{
271289
name: "server doesn't support streaming",
272290
routerResult: peerProviders,
273-
expResult: peerProviders,
291+
expResult: defaultFilterPeerProviders,
274292
serverStreamingDisabled: true,
275293
expJSONResponse: true,
276294
},
@@ -497,13 +515,25 @@ func TestClient_Provide(t *testing.T) {
497515
}
498516

499517
func TestClient_FindPeers(t *testing.T) {
500-
peerRecord1 := makePeerRecord([]string{"transport-bitswap"})
501-
peerRecord2 := makePeerRecord([]string{"transport-ipfs-gateway-http"})
518+
unknownPeerRecord := makePeerRecord([]string{})
519+
bitswapPeerRecord := makePeerRecord([]string{"transport-bitswap"})
520+
httpPeerRecord := makePeerRecord([]string{"transport-ipfs-gateway-http"})
521+
fooPeerRecord := makePeerRecord([]string{"transport-foo"})
522+
502523
peerRecords := []iter.Result[*types.PeerRecord]{
503-
{Val: &peerRecord1},
504-
{Val: &peerRecord2},
524+
{Val: &unknownPeerRecord},
525+
{Val: &bitswapPeerRecord},
526+
{Val: &httpPeerRecord},
527+
{Val: &fooPeerRecord},
528+
}
529+
530+
// DefaultProtocolFilter
531+
defaultFilterPeerRecords := []iter.Result[*types.PeerRecord]{
532+
{Val: &unknownPeerRecord},
533+
{Val: &bitswapPeerRecord},
505534
}
506-
pid := *peerRecord1.ID
535+
536+
pid := *bitswapPeerRecord.ID
507537

508538
cases := []struct {
509539
name string
@@ -521,22 +551,29 @@ func TestClient_FindPeers(t *testing.T) {
521551
expJSONResponse bool
522552
}{
523553
{
524-
name: "happy case",
554+
name: "happy case with DefaultProtocolFilter",
555+
routerResult: peerRecords,
556+
expResult: defaultFilterPeerRecords,
557+
expStreamingResponse: true,
558+
},
559+
{
560+
name: "pass through with protocol filter disabled",
561+
filterProtocols: []string{},
525562
routerResult: peerRecords,
526563
expResult: peerRecords,
527564
expStreamingResponse: true,
528565
},
529566
{
530-
name: "happy case with protocol filter",
531-
filterProtocols: []string{"transport-bitswap"},
567+
name: "happy case with custom protocol filter",
568+
filterProtocols: []string{"transport-foo"},
532569
routerResult: peerRecords,
533-
expResult: []iter.Result[*types.PeerRecord]{{Val: &peerRecord1}},
570+
expResult: []iter.Result[*types.PeerRecord]{{Val: &fooPeerRecord}},
534571
expStreamingResponse: true,
535572
},
536573
{
537574
name: "server doesn't support streaming",
538575
routerResult: peerRecords,
539-
expResult: peerRecords,
576+
expResult: defaultFilterPeerRecords,
540577
serverStreamingDisabled: true,
541578
expJSONResponse: true,
542579
},

0 commit comments

Comments
 (0)