This commit is contained in:
parent
5918b88a8f
commit
4c15ffffdd
|
@ -47,7 +47,7 @@ func TestClientUploadDownloadRawEncrypted(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func testClientUploadDownloadRaw(toEncrypt bool, t *testing.T) {
|
func testClientUploadDownloadRaw(toEncrypt bool, t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
client := NewClient(srv.URL)
|
client := NewClient(srv.URL)
|
||||||
|
@ -88,7 +88,7 @@ func TestClientUploadDownloadFilesEncrypted(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func testClientUploadDownloadFiles(toEncrypt bool, t *testing.T) {
|
func testClientUploadDownloadFiles(toEncrypt bool, t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
client := NewClient(srv.URL)
|
client := NewClient(srv.URL)
|
||||||
|
@ -186,7 +186,7 @@ func newTestDirectory(t *testing.T) string {
|
||||||
// TestClientUploadDownloadDirectory tests uploading and downloading a
|
// TestClientUploadDownloadDirectory tests uploading and downloading a
|
||||||
// directory of files to a swarm manifest
|
// directory of files to a swarm manifest
|
||||||
func TestClientUploadDownloadDirectory(t *testing.T) {
|
func TestClientUploadDownloadDirectory(t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
dir := newTestDirectory(t)
|
dir := newTestDirectory(t)
|
||||||
|
@ -252,7 +252,7 @@ func TestClientFileListEncrypted(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func testClientFileList(toEncrypt bool, t *testing.T) {
|
func testClientFileList(toEncrypt bool, t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
dir := newTestDirectory(t)
|
dir := newTestDirectory(t)
|
||||||
|
@ -310,7 +310,7 @@ func testClientFileList(toEncrypt bool, t *testing.T) {
|
||||||
// TestClientMultipartUpload tests uploading files to swarm using a multipart
|
// TestClientMultipartUpload tests uploading files to swarm using a multipart
|
||||||
// upload
|
// upload
|
||||||
func TestClientMultipartUpload(t *testing.T) {
|
func TestClientMultipartUpload(t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
// define an uploader which uploads testDirFiles with some data
|
// define an uploader which uploads testDirFiles with some data
|
||||||
|
@ -376,7 +376,7 @@ func TestClientCreateResourceMultihash(t *testing.T) {
|
||||||
|
|
||||||
signer, _ := newTestSigner()
|
signer, _ := newTestSigner()
|
||||||
|
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
client := NewClient(srv.URL)
|
client := NewClient(srv.URL)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
|
@ -439,7 +439,7 @@ func TestClientCreateUpdateResource(t *testing.T) {
|
||||||
|
|
||||||
signer, _ := newTestSigner()
|
signer, _ := newTestSigner()
|
||||||
|
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
client := NewClient(srv.URL)
|
client := NewClient(srv.URL)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestError(t *testing.T) {
|
func TestError(t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
|
@ -55,7 +55,7 @@ func TestError(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test404Page(t *testing.T) {
|
func Test404Page(t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
|
@ -81,7 +81,7 @@ func Test404Page(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test500Page(t *testing.T) {
|
func Test500Page(t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
|
@ -106,7 +106,7 @@ func Test500Page(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func Test500PageWith0xHashPrefix(t *testing.T) {
|
func Test500PageWith0xHashPrefix(t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
|
@ -136,7 +136,7 @@ func Test500PageWith0xHashPrefix(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestJsonResponse(t *testing.T) {
|
func TestJsonResponse(t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
|
|
|
@ -27,6 +27,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"math/big"
|
||||||
"mime/multipart"
|
"mime/multipart"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
@ -36,6 +37,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/swarm/api"
|
"github.com/ethereum/go-ethereum/swarm/api"
|
||||||
|
@ -114,7 +116,7 @@ func TestBzzResourceMultihash(t *testing.T) {
|
||||||
|
|
||||||
signer, _ := newTestSigner()
|
signer, _ := newTestSigner()
|
||||||
|
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
// add the data our multihash aliased manifest will point to
|
// add the data our multihash aliased manifest will point to
|
||||||
|
@ -208,7 +210,7 @@ func TestBzzResourceMultihash(t *testing.T) {
|
||||||
|
|
||||||
// Test resource updates using the raw update methods
|
// Test resource updates using the raw update methods
|
||||||
func TestBzzResource(t *testing.T) {
|
func TestBzzResource(t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
signer, _ := newTestSigner()
|
signer, _ := newTestSigner()
|
||||||
|
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
@ -467,7 +469,7 @@ func testBzzGetPath(encrypted bool, t *testing.T) {
|
||||||
|
|
||||||
addr := [3]storage.Address{}
|
addr := [3]storage.Address{}
|
||||||
|
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
for i, mf := range testmanifest {
|
for i, mf := range testmanifest {
|
||||||
|
@ -702,7 +704,7 @@ func TestBzzTar(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func testBzzTar(encrypted bool, t *testing.T) {
|
func testBzzTar(encrypted bool, t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
fileNames := []string{"tmp1.txt", "tmp2.lock", "tmp3.rtf"}
|
fileNames := []string{"tmp1.txt", "tmp2.lock", "tmp3.rtf"}
|
||||||
fileContents := []string{"tmp1textfilevalue", "tmp2lockfilelocked", "tmp3isjustaplaintextfile"}
|
fileContents := []string{"tmp1textfilevalue", "tmp2lockfilelocked", "tmp3isjustaplaintextfile"}
|
||||||
|
@ -827,7 +829,7 @@ func TestBzzRootRedirectEncrypted(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func testBzzRootRedirect(toEncrypt bool, t *testing.T) {
|
func testBzzRootRedirect(toEncrypt bool, t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
// create a manifest with some data at the root path
|
// create a manifest with some data at the root path
|
||||||
|
@ -882,7 +884,7 @@ func testBzzRootRedirect(toEncrypt bool, t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMethodsNotAllowed(t *testing.T) {
|
func TestMethodsNotAllowed(t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
databytes := "bar"
|
databytes := "bar"
|
||||||
for _, c := range []struct {
|
for _, c := range []struct {
|
||||||
|
@ -941,7 +943,7 @@ func httpDo(httpMethod string, url string, reqBody io.Reader, headers map[string
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGet(t *testing.T) {
|
func TestGet(t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
for _, testCase := range []struct {
|
for _, testCase := range []struct {
|
||||||
|
@ -1025,7 +1027,7 @@ func TestGet(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestModify(t *testing.T) {
|
func TestModify(t *testing.T) {
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
swarmClient := swarm.NewClient(srv.URL)
|
swarmClient := swarm.NewClient(srv.URL)
|
||||||
|
@ -1126,7 +1128,7 @@ func TestMultiPartUpload(t *testing.T) {
|
||||||
// POST /bzz:/ Content-Type: multipart/form-data
|
// POST /bzz:/ Content-Type: multipart/form-data
|
||||||
verbose := false
|
verbose := false
|
||||||
// Setup Swarm
|
// Setup Swarm
|
||||||
srv := testutil.NewTestSwarmServer(t, serverFunc)
|
srv := testutil.NewTestSwarmServer(t, serverFunc, nil)
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
|
|
||||||
url := fmt.Sprintf("%s/bzz:/", srv.URL)
|
url := fmt.Sprintf("%s/bzz:/", srv.URL)
|
||||||
|
@ -1153,3 +1155,126 @@ func TestMultiPartUpload(t *testing.T) {
|
||||||
t.Fatalf("expected POST multipart/form-data to return a 64 char manifest but the answer was %d chars long", len(body))
|
t.Fatalf("expected POST multipart/form-data to return a 64 char manifest but the answer was %d chars long", len(body))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestBzzGetFileWithResolver tests fetching a file using a mocked ENS resolver
|
||||||
|
func TestBzzGetFileWithResolver(t *testing.T) {
|
||||||
|
resolver := newTestResolveValidator("")
|
||||||
|
srv := testutil.NewTestSwarmServer(t, serverFunc, resolver)
|
||||||
|
defer srv.Close()
|
||||||
|
fileNames := []string{"dir1/tmp1.txt", "dir2/tmp2.lock", "dir3/tmp3.rtf"}
|
||||||
|
fileContents := []string{"tmp1textfilevalue", "tmp2lockfilelocked", "tmp3isjustaplaintextfile"}
|
||||||
|
|
||||||
|
buf := &bytes.Buffer{}
|
||||||
|
tw := tar.NewWriter(buf)
|
||||||
|
|
||||||
|
for i, v := range fileNames {
|
||||||
|
size := len(fileContents[i])
|
||||||
|
hdr := &tar.Header{
|
||||||
|
Name: v,
|
||||||
|
Mode: 0644,
|
||||||
|
Size: int64(size),
|
||||||
|
ModTime: time.Now(),
|
||||||
|
Xattrs: map[string]string{
|
||||||
|
"user.swarm.content-type": "text/plain",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if err := tw.WriteHeader(hdr); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// copy the file into the tar stream
|
||||||
|
n, err := io.WriteString(tw, fileContents[i])
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
} else if n != size {
|
||||||
|
t.Fatal("size mismatch")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := tw.Close(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
//post tar stream
|
||||||
|
url := srv.URL + "/bzz:/"
|
||||||
|
|
||||||
|
req, err := http.NewRequest("POST", url, buf)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
req.Header.Add("Content-Type", "application/x-tar")
|
||||||
|
client := &http.Client{}
|
||||||
|
serverResponse, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if serverResponse.StatusCode != http.StatusOK {
|
||||||
|
t.Fatalf("err %s", serverResponse.Status)
|
||||||
|
}
|
||||||
|
swarmHash, err := ioutil.ReadAll(serverResponse.Body)
|
||||||
|
serverResponse.Body.Close()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
// set the resolved hash to be the swarm hash of what we've just uploaded
|
||||||
|
hash := common.HexToHash(string(swarmHash))
|
||||||
|
resolver.hash = &hash
|
||||||
|
for _, v := range []struct {
|
||||||
|
addr string
|
||||||
|
path string
|
||||||
|
expectedStatusCode int
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
addr: string(swarmHash),
|
||||||
|
path: fileNames[0],
|
||||||
|
expectedStatusCode: http.StatusOK,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
addr: "somebogusensname",
|
||||||
|
path: fileNames[0],
|
||||||
|
expectedStatusCode: http.StatusOK,
|
||||||
|
},
|
||||||
|
} {
|
||||||
|
req, err := http.NewRequest("GET", fmt.Sprintf(srv.URL+"/bzz:/%s/%s", v.addr, v.path), nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
serverResponse, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer serverResponse.Body.Close()
|
||||||
|
if serverResponse.StatusCode != v.expectedStatusCode {
|
||||||
|
t.Fatalf("expected %d, got %d", v.expectedStatusCode, serverResponse.StatusCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// testResolver implements the Resolver interface and either returns the given
|
||||||
|
// hash if it is set, or returns a "name not found" error
|
||||||
|
type testResolveValidator struct {
|
||||||
|
hash *common.Hash
|
||||||
|
}
|
||||||
|
|
||||||
|
func newTestResolveValidator(addr string) *testResolveValidator {
|
||||||
|
r := &testResolveValidator{}
|
||||||
|
if addr != "" {
|
||||||
|
hash := common.HexToHash(addr)
|
||||||
|
r.hash = &hash
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *testResolveValidator) Resolve(addr string) (common.Hash, error) {
|
||||||
|
if t.hash == nil {
|
||||||
|
return common.Hash{}, fmt.Errorf("DNS name not found: %q", addr)
|
||||||
|
}
|
||||||
|
return *t.hash, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *testResolveValidator) Owner(node [32]byte) (addr common.Address, err error) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func (t *testResolveValidator) HeaderByNumber(context.Context, *big.Int) (header *types.Header, err error) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ func (f *fakeTimeProvider) Now() mru.Timestamp {
|
||||||
return mru.Timestamp{Time: f.currentTime}
|
return mru.Timestamp{Time: f.currentTime}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTestSwarmServer(t *testing.T, serverFunc func(*api.API) TestServer) *TestSwarmServer {
|
func NewTestSwarmServer(t *testing.T, serverFunc func(*api.API) TestServer, resolver api.Resolver) *TestSwarmServer {
|
||||||
dir, err := ioutil.TempDir("", "swarm-storage-test")
|
dir, err := ioutil.TempDir("", "swarm-storage-test")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
@ -77,7 +77,7 @@ func NewTestSwarmServer(t *testing.T, serverFunc func(*api.API) TestServer) *Tes
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
a := api.NewAPI(fileStore, nil, rh.Handler, nil)
|
a := api.NewAPI(fileStore, resolver, rh.Handler, nil)
|
||||||
srv := httptest.NewServer(serverFunc(a))
|
srv := httptest.NewServer(serverFunc(a))
|
||||||
return &TestSwarmServer{
|
return &TestSwarmServer{
|
||||||
Server: srv,
|
Server: srv,
|
||||||
|
|
Loading…
Reference in New Issue