Skip to content

Commit b4acf46

Browse files
committed
feat: run tests for both V1+V2 and V2 records
1 parent 4ac4c26 commit b4acf46

File tree

2 files changed

+123
-101
lines changed

2 files changed

+123
-101
lines changed

routing/http/client/client_test.go

Lines changed: 49 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -467,15 +467,15 @@ func makeName(t *testing.T) (crypto.PrivKey, ipns.Name) {
467467
return sk, ipns.NameFromPeer(pid)
468468
}
469469

470-
func makeIPNSRecord(t *testing.T, sk crypto.PrivKey) (*ipns.Record, []byte) {
470+
func makeIPNSRecord(t *testing.T, sk crypto.PrivKey, opts ...ipns.Option) (*ipns.Record, []byte) {
471471
cid, err := cid.Decode("bafkreifjjcie6lypi6ny7amxnfftagclbuxndqonfipmb64f2km2devei4")
472472
require.NoError(t, err)
473473

474474
path := path.IpfsPath(cid)
475475
eol := time.Now().Add(time.Hour * 48)
476476
ttl := time.Second * 20
477477

478-
record, err := ipns.NewRecord(sk, ipfspath.FromString(path.String()), 1, eol, ttl)
478+
record, err := ipns.NewRecord(sk, ipfspath.FromString(path.String()), 1, eol, ttl, opts...)
479479
require.NoError(t, err)
480480

481481
rawRecord, err := ipns.MarshalRecord(record)
@@ -485,62 +485,72 @@ func makeIPNSRecord(t *testing.T, sk crypto.PrivKey) (*ipns.Record, []byte) {
485485
}
486486

487487
func TestClient_IPNS(t *testing.T) {
488-
t.Run("Find IPNS Record", func(t *testing.T) {
489-
sk, name := makeName(t)
490-
record, _ := makeIPNSRecord(t, sk)
488+
t.Run("Find IPNS Record returns error if server errors", func(t *testing.T) {
489+
_, name := makeName(t)
491490

492491
deps := makeTestDeps(t, nil, nil)
493492
client := deps.client
494493
router := deps.router
495494

496-
router.On("FindIPNSRecord", mock.Anything, name).Return(record, nil)
495+
router.On("FindIPNSRecord", mock.Anything, name).Return(nil, errors.New("something wrong happened"))
497496

498497
receivedRecord, err := client.FindIPNSRecord(context.Background(), name)
499-
require.NoError(t, err)
500-
require.Equal(t, record, receivedRecord)
498+
require.Error(t, err)
499+
require.Nil(t, receivedRecord)
501500
})
502501

503-
t.Run("Find IPNS Record returns error if server sends bad data", func(t *testing.T) {
504-
sk, _ := makeName(t)
505-
record, _ := makeIPNSRecord(t, sk)
506-
_, name2 := makeName(t)
502+
runWithRecordOptions := func(t *testing.T, opts ...ipns.Option) {
503+
t.Run("Find IPNS Record", func(t *testing.T) {
504+
sk, name := makeName(t)
505+
record, _ := makeIPNSRecord(t, sk, opts...)
507506

508-
deps := makeTestDeps(t, nil, nil)
509-
client := deps.client
510-
router := deps.router
507+
deps := makeTestDeps(t, nil, nil)
508+
client := deps.client
509+
router := deps.router
511510

512-
router.On("FindIPNSRecord", mock.Anything, name2).Return(record, nil)
511+
router.On("FindIPNSRecord", mock.Anything, name).Return(record, nil)
513512

514-
receivedRecord, err := client.FindIPNSRecord(context.Background(), name2)
515-
require.Error(t, err)
516-
require.Nil(t, receivedRecord)
517-
})
513+
receivedRecord, err := client.FindIPNSRecord(context.Background(), name)
514+
require.NoError(t, err)
515+
require.Equal(t, record, receivedRecord)
516+
})
518517

519-
t.Run("Find IPNS Record returns error if server errors", func(t *testing.T) {
520-
_, name := makeName(t)
518+
t.Run("Find IPNS Record returns error if server sends bad data", func(t *testing.T) {
519+
sk, _ := makeName(t)
520+
record, _ := makeIPNSRecord(t, sk, opts...)
521+
_, name2 := makeName(t)
521522

522-
deps := makeTestDeps(t, nil, nil)
523-
client := deps.client
524-
router := deps.router
523+
deps := makeTestDeps(t, nil, nil)
524+
client := deps.client
525+
router := deps.router
525526

526-
router.On("FindIPNSRecord", mock.Anything, name).Return(nil, errors.New("something wrong happened"))
527+
router.On("FindIPNSRecord", mock.Anything, name2).Return(record, nil)
527528

528-
receivedRecord, err := client.FindIPNSRecord(context.Background(), name)
529-
require.Error(t, err)
530-
require.Nil(t, receivedRecord)
531-
})
529+
receivedRecord, err := client.FindIPNSRecord(context.Background(), name2)
530+
require.Error(t, err)
531+
require.Nil(t, receivedRecord)
532+
})
532533

533-
t.Run("Provide IPNS Record", func(t *testing.T) {
534-
sk, name := makeName(t)
535-
record, _ := makeIPNSRecord(t, sk)
534+
t.Run("Provide IPNS Record", func(t *testing.T) {
535+
sk, name := makeName(t)
536+
record, _ := makeIPNSRecord(t, sk, opts...)
536537

537-
deps := makeTestDeps(t, nil, nil)
538-
client := deps.client
539-
router := deps.router
538+
deps := makeTestDeps(t, nil, nil)
539+
client := deps.client
540+
router := deps.router
540541

541-
router.On("ProvideIPNSRecord", mock.Anything, name, record).Return(nil)
542+
router.On("ProvideIPNSRecord", mock.Anything, name, record).Return(nil)
543+
544+
err := client.ProvideIPNSRecord(context.Background(), name, record)
545+
require.NoError(t, err)
546+
})
547+
}
548+
549+
t.Run("V1+V2 IPNS Records", func(t *testing.T) {
550+
runWithRecordOptions(t, ipns.WithV1Compatibility(true))
551+
})
542552

543-
err := client.ProvideIPNSRecord(context.Background(), name, record)
544-
require.NoError(t, err)
553+
t.Run("V2 IPNS Records", func(t *testing.T) {
554+
runWithRecordOptions(t, ipns.WithV1Compatibility(false))
545555
})
546556
}

routing/http/server/server_test.go

Lines changed: 74 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -133,12 +133,12 @@ func makeName(t *testing.T) (crypto.PrivKey, ipns.Name) {
133133
return sk, ipns.NameFromPeer(pid)
134134
}
135135

136-
func makeIPNSRecord(t *testing.T, cid cid.Cid, sk crypto.PrivKey) (*ipns.Record, []byte) {
136+
func makeIPNSRecord(t *testing.T, cid cid.Cid, sk crypto.PrivKey, opts ...ipns.Option) (*ipns.Record, []byte) {
137137
path := path.IpfsPath(cid)
138138
eol := time.Now().Add(time.Hour * 48)
139139
ttl := time.Second * 20
140140

141-
record, err := ipns.NewRecord(sk, ipfspath.FromString(path.String()), 1, eol, ttl)
141+
record, err := ipns.NewRecord(sk, ipfspath.FromString(path.String()), 1, eol, ttl, opts...)
142142
require.NoError(t, err)
143143

144144
rawRecord, err := ipns.MarshalRecord(record)
@@ -151,11 +151,6 @@ func TestIPNS(t *testing.T) {
151151
cid1, err := cid.Decode("bafkreifjjcie6lypi6ny7amxnfftagclbuxndqonfipmb64f2km2devei4")
152152
require.NoError(t, err)
153153

154-
sk, name1 := makeName(t)
155-
record1, rawRecord1 := makeIPNSRecord(t, cid1, sk)
156-
157-
_, name2 := makeName(t)
158-
159154
makeRequest := func(t *testing.T, router *mockContentRouter, path string) *http.Response {
160155
server := httptest.NewServer(Handler(router))
161156
t.Cleanup(server.Close)
@@ -169,77 +164,94 @@ func TestIPNS(t *testing.T) {
169164
return resp
170165
}
171166

172-
t.Run("GET /routing/v1/ipns/{cid-peer-id} returns 200", func(t *testing.T) {
173-
t.Parallel()
167+
runWithRecordOptions := func(t *testing.T, opts ...ipns.Option) {
168+
sk, name1 := makeName(t)
169+
record1, rawRecord1 := makeIPNSRecord(t, cid1, sk)
174170

175-
rec, err := ipns.UnmarshalRecord(rawRecord1)
176-
require.NoError(t, err)
171+
_, name2 := makeName(t)
177172

178-
router := &mockContentRouter{}
179-
router.On("FindIPNSRecord", mock.Anything, name1).Return(rec, nil)
173+
t.Run("GET /routing/v1/ipns/{cid-peer-id} returns 200", func(t *testing.T) {
174+
t.Parallel()
180175

181-
resp := makeRequest(t, router, "/routing/v1/ipns/"+name1.String())
182-
require.Equal(t, 200, resp.StatusCode)
183-
require.Equal(t, mediaTypeIPNSRecord, resp.Header.Get("Content-Type"))
184-
require.NotEmpty(t, resp.Header.Get("Etag"))
185-
require.Equal(t, "max-age=20", resp.Header.Get("Cache-Control"))
176+
rec, err := ipns.UnmarshalRecord(rawRecord1)
177+
require.NoError(t, err)
186178

187-
body, err := io.ReadAll(resp.Body)
188-
require.NoError(t, err)
189-
require.Equal(t, body, rawRecord1)
190-
})
179+
router := &mockContentRouter{}
180+
router.On("FindIPNSRecord", mock.Anything, name1).Return(rec, nil)
191181

192-
t.Run("GET /routing/v1/ipns/{non-peer-cid} returns 400", func(t *testing.T) {
193-
t.Parallel()
194-
router := &mockContentRouter{}
195-
resp := makeRequest(t, router, "/routing/v1/ipns/"+cid1.String())
196-
require.Equal(t, 400, resp.StatusCode)
197-
})
182+
resp := makeRequest(t, router, "/routing/v1/ipns/"+name1.String())
183+
require.Equal(t, 200, resp.StatusCode)
184+
require.Equal(t, mediaTypeIPNSRecord, resp.Header.Get("Content-Type"))
185+
require.NotEmpty(t, resp.Header.Get("Etag"))
186+
require.Equal(t, "max-age=20", resp.Header.Get("Cache-Control"))
198187

199-
t.Run("GET /routing/v1/ipns/{peer-id} returns 400", func(t *testing.T) {
200-
t.Parallel()
201-
router := &mockContentRouter{}
202-
resp := makeRequest(t, router, "/routing/v1/ipns/"+name1.Peer().String())
203-
require.Equal(t, 400, resp.StatusCode)
204-
})
188+
body, err := io.ReadAll(resp.Body)
189+
require.NoError(t, err)
190+
require.Equal(t, body, rawRecord1)
191+
})
205192

206-
t.Run("PUT /routing/v1/ipns/{cid-peer-id} returns 200", func(t *testing.T) {
207-
t.Parallel()
193+
t.Run("GET /routing/v1/ipns/{non-peer-cid} returns 400", func(t *testing.T) {
194+
t.Parallel()
208195

209-
router := &mockContentRouter{}
210-
router.On("ProvideIPNSRecord", mock.Anything, name1, record1).Return(nil)
196+
router := &mockContentRouter{}
197+
resp := makeRequest(t, router, "/routing/v1/ipns/"+cid1.String())
198+
require.Equal(t, 400, resp.StatusCode)
199+
})
211200

212-
server := httptest.NewServer(Handler(router))
213-
t.Cleanup(server.Close)
214-
serverAddr := "http://" + server.Listener.Addr().String()
215-
urlStr := serverAddr + "/routing/v1/ipns/" + name1.String()
201+
t.Run("GET /routing/v1/ipns/{peer-id} returns 400", func(t *testing.T) {
202+
t.Parallel()
216203

217-
req, err := http.NewRequest(http.MethodPut, urlStr, bytes.NewReader(rawRecord1))
218-
require.NoError(t, err)
219-
req.Header.Set("Content-Type", mediaTypeIPNSRecord)
204+
router := &mockContentRouter{}
205+
resp := makeRequest(t, router, "/routing/v1/ipns/"+name1.Peer().String())
206+
require.Equal(t, 400, resp.StatusCode)
207+
})
220208

221-
resp, err := http.DefaultClient.Do(req)
222-
require.NoError(t, err)
223-
require.Equal(t, 200, resp.StatusCode)
224-
})
209+
t.Run("PUT /routing/v1/ipns/{cid-peer-id} returns 200", func(t *testing.T) {
210+
t.Parallel()
225211

226-
t.Run("PUT /routing/v1/ipns/{cid-peer-id} returns 400 for wrong record", func(t *testing.T) {
227-
t.Parallel()
212+
router := &mockContentRouter{}
213+
router.On("ProvideIPNSRecord", mock.Anything, name1, record1).Return(nil)
228214

229-
router := &mockContentRouter{}
215+
server := httptest.NewServer(Handler(router))
216+
t.Cleanup(server.Close)
217+
serverAddr := "http://" + server.Listener.Addr().String()
218+
urlStr := serverAddr + "/routing/v1/ipns/" + name1.String()
230219

231-
server := httptest.NewServer(Handler(router))
232-
t.Cleanup(server.Close)
233-
serverAddr := "http://" + server.Listener.Addr().String()
234-
urlStr := serverAddr + "/routing/v1/ipns/" + name2.String()
220+
req, err := http.NewRequest(http.MethodPut, urlStr, bytes.NewReader(rawRecord1))
221+
require.NoError(t, err)
222+
req.Header.Set("Content-Type", mediaTypeIPNSRecord)
235223

236-
req, err := http.NewRequest(http.MethodPut, urlStr, bytes.NewReader(rawRecord1))
237-
require.NoError(t, err)
238-
req.Header.Set("Content-Type", mediaTypeIPNSRecord)
224+
resp, err := http.DefaultClient.Do(req)
225+
require.NoError(t, err)
226+
require.Equal(t, 200, resp.StatusCode)
227+
})
239228

240-
resp, err := http.DefaultClient.Do(req)
241-
require.NoError(t, err)
242-
require.Equal(t, 400, resp.StatusCode)
229+
t.Run("PUT /routing/v1/ipns/{cid-peer-id} returns 400 for wrong record", func(t *testing.T) {
230+
t.Parallel()
231+
232+
router := &mockContentRouter{}
233+
234+
server := httptest.NewServer(Handler(router))
235+
t.Cleanup(server.Close)
236+
serverAddr := "http://" + server.Listener.Addr().String()
237+
urlStr := serverAddr + "/routing/v1/ipns/" + name2.String()
238+
239+
req, err := http.NewRequest(http.MethodPut, urlStr, bytes.NewReader(rawRecord1))
240+
require.NoError(t, err)
241+
req.Header.Set("Content-Type", mediaTypeIPNSRecord)
242+
243+
resp, err := http.DefaultClient.Do(req)
244+
require.NoError(t, err)
245+
require.Equal(t, 400, resp.StatusCode)
246+
})
247+
}
248+
249+
t.Run("V1+V2 IPNS Records", func(t *testing.T) {
250+
runWithRecordOptions(t, ipns.WithV1Compatibility(true))
251+
})
252+
253+
t.Run("V2 IPNS Records", func(t *testing.T) {
254+
runWithRecordOptions(t, ipns.WithV1Compatibility(false))
243255
})
244256
}
245257

0 commit comments

Comments
 (0)