kubo/test/cli/gateway_range_test.go
Adin Schmahmann 353dd49be2
refactor: switch gateway code to new API from go-libipfs (#9681)
Co-authored-by: Marcin Rataj <lidel@lidel.org>
Co-authored-by: Henrique Dias <hacdias@gmail.com>
2023-03-30 13:20:37 +00:00

76 lines
2.5 KiB
Go

package cli
import (
"fmt"
"net/http"
"os"
"testing"
"github.com/ipfs/kubo/test/cli/harness"
"github.com/stretchr/testify/assert"
)
func TestGatewayHAMTDirectory(t *testing.T) {
t.Parallel()
const (
// The CID of the HAMT-sharded directory that has 10k items
hamtCid = "bafybeiggvykl7skb2ndlmacg2k5modvudocffxjesexlod2pfvg5yhwrqm"
// fixtureCid is the CID of root of the DAG that is a subset of hamtCid DAG
// representing the minimal set of blocks necessary for directory listing.
// It also includes a "files_refs" file with the list of the references
// we do NOT needs to fetch (files inside the directory)
fixtureCid = "bafybeig3yoibxe56aolixqa4zk55gp5sug3qgaztkakpndzk2b2ynobd4i"
)
// Start node
h := harness.NewT(t)
node := h.NewNode().Init("--empty-repo", "--profile=test").StartDaemon("--offline")
client := node.GatewayClient()
// Import fixtures
r, err := os.Open("./fixtures/TestGatewayHAMTDirectory.car")
assert.Nil(t, err)
defer r.Close()
err = node.IPFSDagImport(r, fixtureCid)
assert.Nil(t, err)
// Fetch HAMT directory succeeds with minimal refs
resp := client.Get(fmt.Sprintf("/ipfs/%s/", hamtCid))
assert.Equal(t, http.StatusOK, resp.StatusCode)
}
func TestGatewayMultiRange(t *testing.T) {
t.Parallel()
const (
// fileCid is the CID of the large HAMT-sharded file.
fileCid = "bafybeiae5abzv6j3ucqbzlpnx3pcqbr2otbnpot7d2k5pckmpymin4guau"
// fixtureCid is the CID of root of the DAG that is a subset of fileCid DAG
// representing the minimal set of blocks necessary for a simple byte range request.
fixtureCid = "bafybeicgsg3lwyn3yl75lw7sn4zhyj5dxtb7wfxwscpq6yzippetmr2w3y"
)
// Start node
h := harness.NewT(t)
node := h.NewNode().Init("--empty-repo", "--profile=test").StartDaemon("--offline")
client := node.GatewayClient()
// Import fixtures
r, err := os.Open("./fixtures/TestGatewayMultiRange.car")
assert.Nil(t, err)
defer r.Close()
err = node.IPFSDagImport(r, fixtureCid)
assert.Nil(t, err)
// Succeeds fetching a range of blocks we have
resp := client.Get(fmt.Sprintf("/ipfs/%s", fileCid), func(r *http.Request) {
r.Header.Set("Range", "bytes=1276-1279, 29839070-29839080")
})
assert.Equal(t, http.StatusPartialContent, resp.StatusCode)
assert.Contains(t, resp.Body, "Content-Range: bytes 1276-1279/109266405\r\nContent-Type: text/plain; charset=utf-8\r\n\r\niana\r\n")
assert.Contains(t, resp.Body, "Content-Range: bytes 29839070-29839080/109266405\r\nContent-Type: text/plain; charset=utf-8\r\n\r\nEXAMPLE.COM\r\n")
}