@@ -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