swarm: Amend comments from @lmars PR 204 second review, part I

This commit is contained in:
lash 2018-01-22 23:48:21 +01:00
parent 400b7d6d1c
commit 0455925ebf
6 changed files with 44 additions and 34 deletions

View file

@ -384,11 +384,7 @@ func (self *Api) ResourceLookup(name string, period uint32, version uint32) (sto
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
key, data, err := self.resource.GetContent(name) return self.resource.GetContent(name)
if err != nil {
return nil, nil, err
}
return key, data, nil
} }
func (self *Api) ResourceCreate(name string, frequency uint64) (err error) { func (self *Api) ResourceCreate(name string, frequency uint64) (err error) {

View file

@ -378,19 +378,19 @@ func (s *Server) handleGetResource(w http.ResponseWriter, r *Request, name strin
if err != nil { if err != nil {
break break
} }
updateKey, data, err = s.api.ResourceLookup(name, uint32(period), uint32(version)) period, err = strconv.ParseUint(params[0], 10, 32)
case 1:
version, err = strconv.ParseUint(params[1], 10, 32)
if err != nil { if err != nil {
break break
} }
updateKey, data, err = s.api.ResourceLookup(name, uint32(period), uint32(version))
case 1:
period, err = strconv.ParseUint(params[0], 10, 32) period, err = strconv.ParseUint(params[0], 10, 32)
if err != nil { if err != nil {
break break
} }
updateKey, data, err = s.api.ResourceLookup(name, uint32(period), uint32(version)) updateKey, data, err = s.api.ResourceLookup(name, uint32(period), uint32(version))
default: default:
s.BadRequest(w, r, fmt.Sprintf("Invalid mutable resource request")) s.BadRequest(w, r, "Invalid mutable resource request")
return return
} }
if err != nil { if err != nil {
@ -463,14 +463,18 @@ func (s *Server) HandleGet(w http.ResponseWriter, r *Request) {
switch { switch {
case r.uri.Raw(): case r.uri.Raw():
m := &api.Manifest{} m := &api.Manifest{}
sz, _ := reader.Size(nil) sz, err := reader.Size(nil)
b := make([]byte, sz) if err == nil {
reader.Read(b) b := make([]byte, sz)
err = json.Unmarshal(b, m) reader.Read(b)
if len(m.Entries) > 0 { err = json.Unmarshal(b, m)
if m.Entries[0].ContentType == api.ResourceContentType { if err == nil {
s.handleGetResource(w, r, m.Entries[0].Path) if len(m.Entries) > 0 {
return if m.Entries[0].ContentType == api.ResourceContentType {
s.handleGetResource(w, r, m.Entries[0].Path)
return
}
}
} }
} }
// allow the request to overwrite the content type using a query // allow the request to overwrite the content type using a query

View file

@ -55,14 +55,14 @@ func TestBzzResource(t *testing.T) {
resp, err := http.Post(url, "application/octet-stream", bytes.NewReader(databytes)) resp, err := http.Post(url, "application/octet-stream", bytes.NewReader(databytes))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} else if resp.StatusCode != http.StatusOK {
t.Fatalf("err %s", resp.Status)
} }
manifesthash, err := ioutil.ReadAll(resp.Body) manifesthash, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
if resp.StatusCode != http.StatusOK { resp.Body.Close()
t.Fatalf("err %s", resp.Status)
}
// update 2 // update 2
url = fmt.Sprintf("%s/bzz-resource:/%x", srv.URL, keybytes) url = fmt.Sprintf("%s/bzz-resource:/%x", srv.URL, keybytes)
@ -79,6 +79,8 @@ func TestBzzResource(t *testing.T) {
resp, err = http.Get(url) resp, err = http.Get(url)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} else if resp.StatusCode != http.StatusOK {
t.Fatalf("err %s", resp.Status)
} }
b, err := ioutil.ReadAll(resp.Body) b, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
@ -86,12 +88,15 @@ func TestBzzResource(t *testing.T) {
} else if !bytes.Equal(data, b) { } else if !bytes.Equal(data, b) {
t.Fatalf("Expected body '%x', got '%x'", data, b) t.Fatalf("Expected body '%x', got '%x'", data, b)
} }
resp.Body.Close()
// get latest update (1.2) through resource directly // get latest update (1.2) through resource directly
url = fmt.Sprintf("%s/bzz-resource:/%x", srv.URL, keybytes) url = fmt.Sprintf("%s/bzz-resource:/%x", srv.URL, keybytes)
resp, err = http.Get(url) resp, err = http.Get(url)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} else if resp.StatusCode != http.StatusOK {
t.Fatalf("err %s", resp.Status)
} }
b, err = ioutil.ReadAll(resp.Body) b, err = ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
@ -99,7 +104,7 @@ func TestBzzResource(t *testing.T) {
} else if !bytes.Equal(data, b) { } else if !bytes.Equal(data, b) {
t.Fatalf("Expected body '%x', got '%x'", data, b) t.Fatalf("Expected body '%x', got '%x'", data, b)
} }
resp.Body.Close()
} }
func TestBzzGetPath(t *testing.T) { func TestBzzGetPath(t *testing.T) {

View file

@ -13,6 +13,7 @@ import (
"golang.org/x/net/idna" "golang.org/x/net/idna"
"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"
) )
@ -60,7 +61,7 @@ type ResourceValidator interface {
} }
type ethApi interface { type ethApi interface {
BlockNumber(context.Context) (big.Int, error) HeaderByNumber(context.Context, *big.Int) (*types.Header, error)
} }
// Mutable resource is an entity which allows updates to a resource // Mutable resource is an entity which allows updates to a resource
@ -124,7 +125,7 @@ type ethApi interface {
// TODO: Include modtime in chunk data + signature // TODO: Include modtime in chunk data + signature
type ResourceHandler struct { type ResourceHandler struct {
ChunkStore ChunkStore
ctx context.Context ctx context.Context // base for new contexts passed to storage layer and ethapi, to ensure teardown when Close() is called
cancelFunc func() cancelFunc func()
validator ResourceValidator validator ResourceValidator
ethClient ethApi ethClient ethApi
@ -609,11 +610,13 @@ func (self *ResourceHandler) Close() {
} }
func (self *ResourceHandler) GetBlock() (uint64, error) { func (self *ResourceHandler) GetBlock() (uint64, error) {
bigblocknumber, err := self.ethClient.BlockNumber(self.ctx) ctx, cancel := context.WithCancel(self.ctx)
defer cancel()
blockheader, err := self.ethClient.HeaderByNumber(ctx, nil)
if err != nil { if err != nil {
return 0, err return 0, err
} }
return bigblocknumber.Uint64(), nil return blockheader.Number.Uint64(), nil
} }
// Calculate the period index (aka major version number) from a given block number // Calculate the period index (aka major version number) from a given block number
@ -771,11 +774,7 @@ func getNextPeriod(start uint64, current uint64, frequency uint64) uint32 {
} }
func ToSafeName(name string) (string, error) { func ToSafeName(name string) (string, error) {
validname, err := idna.ToASCII(name) return idna.ToASCII(name)
if err != nil {
return "", err
}
return validname, nil
} }
// check that name identifiers contain valid bytes // check that name identifiers contain valid bytes

View file

@ -20,6 +20,7 @@ import (
"github.com/ethereum/go-ethereum/contracts/ens" "github.com/ethereum/go-ethereum/contracts/ens"
"github.com/ethereum/go-ethereum/contracts/ens/contract" "github.com/ethereum/go-ethereum/contracts/ens/contract"
"github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core"
"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"
) )
@ -57,10 +58,12 @@ func (f *fakeBackend) Commit() {
f.blocknumber++ f.blocknumber++
} }
func (f *fakeBackend) BlockNumber(context context.Context) (big.Int, error) { func (f *fakeBackend) HeaderByNumber(context context.Context, bigblock *big.Int) (*types.Header, error) {
f.blocknumber++ f.blocknumber++
biggie := big.NewInt(f.blocknumber) biggie := big.NewInt(f.blocknumber)
return *biggie, nil return &types.Header{
Number: biggie,
}, nil
} }
// check that signature address matches update signer address // check that signature address matches update signer address

View file

@ -25,6 +25,7 @@ import (
"strconv" "strconv"
"testing" "testing"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/swarm/api" "github.com/ethereum/go-ethereum/swarm/api"
httpapi "github.com/ethereum/go-ethereum/swarm/api/http" httpapi "github.com/ethereum/go-ethereum/swarm/api/http"
"github.com/ethereum/go-ethereum/swarm/storage" "github.com/ethereum/go-ethereum/swarm/storage"
@ -34,10 +35,12 @@ type fakeBackend struct {
blocknumber int64 blocknumber int64
} }
func (f *fakeBackend) BlockNumber(ctx context.Context) (big.Int, error) { func (f *fakeBackend) HeaderByNumber(context context.Context, bigblock *big.Int) (*types.Header, error) {
f.blocknumber++ f.blocknumber++
biggie := big.NewInt(f.blocknumber) biggie := big.NewInt(f.blocknumber)
return *biggie, nil return &types.Header{
Number: biggie,
}, nil
} }
func NewTestSwarmServer(t *testing.T) *TestSwarmServer { func NewTestSwarmServer(t *testing.T) *TestSwarmServer {