mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-17 09:23:48 +00:00
swarm: Amend comments from @lmars PR 204 second review, part I
This commit is contained in:
parent
400b7d6d1c
commit
0455925ebf
6 changed files with 44 additions and 34 deletions
|
|
@ -384,11 +384,7 @@ func (self *Api) ResourceLookup(name string, period uint32, version uint32) (sto
|
|||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
key, data, err := self.resource.GetContent(name)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
return key, data, nil
|
||||
return self.resource.GetContent(name)
|
||||
}
|
||||
|
||||
func (self *Api) ResourceCreate(name string, frequency uint64) (err error) {
|
||||
|
|
|
|||
|
|
@ -378,19 +378,19 @@ func (s *Server) handleGetResource(w http.ResponseWriter, r *Request, name strin
|
|||
if err != nil {
|
||||
break
|
||||
}
|
||||
updateKey, data, err = s.api.ResourceLookup(name, uint32(period), uint32(version))
|
||||
case 1:
|
||||
version, err = strconv.ParseUint(params[1], 10, 32)
|
||||
period, err = strconv.ParseUint(params[0], 10, 32)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
updateKey, data, err = s.api.ResourceLookup(name, uint32(period), uint32(version))
|
||||
case 1:
|
||||
period, err = strconv.ParseUint(params[0], 10, 32)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
updateKey, data, err = s.api.ResourceLookup(name, uint32(period), uint32(version))
|
||||
default:
|
||||
s.BadRequest(w, r, fmt.Sprintf("Invalid mutable resource request"))
|
||||
s.BadRequest(w, r, "Invalid mutable resource request")
|
||||
return
|
||||
}
|
||||
if err != nil {
|
||||
|
|
@ -463,14 +463,18 @@ func (s *Server) HandleGet(w http.ResponseWriter, r *Request) {
|
|||
switch {
|
||||
case r.uri.Raw():
|
||||
m := &api.Manifest{}
|
||||
sz, _ := reader.Size(nil)
|
||||
b := make([]byte, sz)
|
||||
reader.Read(b)
|
||||
err = json.Unmarshal(b, m)
|
||||
if len(m.Entries) > 0 {
|
||||
if m.Entries[0].ContentType == api.ResourceContentType {
|
||||
s.handleGetResource(w, r, m.Entries[0].Path)
|
||||
return
|
||||
sz, err := reader.Size(nil)
|
||||
if err == nil {
|
||||
b := make([]byte, sz)
|
||||
reader.Read(b)
|
||||
err = json.Unmarshal(b, m)
|
||||
if err == nil {
|
||||
if len(m.Entries) > 0 {
|
||||
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
|
||||
|
|
|
|||
|
|
@ -55,14 +55,14 @@ func TestBzzResource(t *testing.T) {
|
|||
resp, err := http.Post(url, "application/octet-stream", bytes.NewReader(databytes))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
} else if resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("err %s", resp.Status)
|
||||
}
|
||||
manifesthash, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("err %s", resp.Status)
|
||||
}
|
||||
resp.Body.Close()
|
||||
|
||||
// update 2
|
||||
url = fmt.Sprintf("%s/bzz-resource:/%x", srv.URL, keybytes)
|
||||
|
|
@ -79,6 +79,8 @@ func TestBzzResource(t *testing.T) {
|
|||
resp, err = http.Get(url)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
} else if resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("err %s", resp.Status)
|
||||
}
|
||||
b, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
|
|
@ -86,12 +88,15 @@ func TestBzzResource(t *testing.T) {
|
|||
} else if !bytes.Equal(data, b) {
|
||||
t.Fatalf("Expected body '%x', got '%x'", data, b)
|
||||
}
|
||||
resp.Body.Close()
|
||||
|
||||
// get latest update (1.2) through resource directly
|
||||
url = fmt.Sprintf("%s/bzz-resource:/%x", srv.URL, keybytes)
|
||||
resp, err = http.Get(url)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
} else if resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("err %s", resp.Status)
|
||||
}
|
||||
b, err = ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
|
|
@ -99,7 +104,7 @@ func TestBzzResource(t *testing.T) {
|
|||
} else if !bytes.Equal(data, b) {
|
||||
t.Fatalf("Expected body '%x', got '%x'", data, b)
|
||||
}
|
||||
|
||||
resp.Body.Close()
|
||||
}
|
||||
|
||||
func TestBzzGetPath(t *testing.T) {
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import (
|
|||
"golang.org/x/net/idna"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
)
|
||||
|
|
@ -60,7 +61,7 @@ type ResourceValidator 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
|
||||
|
|
@ -124,7 +125,7 @@ type ethApi interface {
|
|||
// TODO: Include modtime in chunk data + signature
|
||||
type ResourceHandler struct {
|
||||
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()
|
||||
validator ResourceValidator
|
||||
ethClient ethApi
|
||||
|
|
@ -609,11 +610,13 @@ func (self *ResourceHandler) Close() {
|
|||
}
|
||||
|
||||
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 {
|
||||
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
|
||||
|
|
@ -771,11 +774,7 @@ func getNextPeriod(start uint64, current uint64, frequency uint64) uint32 {
|
|||
}
|
||||
|
||||
func ToSafeName(name string) (string, error) {
|
||||
validname, err := idna.ToASCII(name)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return validname, nil
|
||||
return idna.ToASCII(name)
|
||||
}
|
||||
|
||||
// check that name identifiers contain valid bytes
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import (
|
|||
"github.com/ethereum/go-ethereum/contracts/ens"
|
||||
"github.com/ethereum/go-ethereum/contracts/ens/contract"
|
||||
"github.com/ethereum/go-ethereum/core"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
)
|
||||
|
|
@ -57,10 +58,12 @@ func (f *fakeBackend) Commit() {
|
|||
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++
|
||||
biggie := big.NewInt(f.blocknumber)
|
||||
return *biggie, nil
|
||||
return &types.Header{
|
||||
Number: biggie,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// check that signature address matches update signer address
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import (
|
|||
"strconv"
|
||||
"testing"
|
||||
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/swarm/api"
|
||||
httpapi "github.com/ethereum/go-ethereum/swarm/api/http"
|
||||
"github.com/ethereum/go-ethereum/swarm/storage"
|
||||
|
|
@ -34,10 +35,12 @@ type fakeBackend struct {
|
|||
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++
|
||||
biggie := big.NewInt(f.blocknumber)
|
||||
return *biggie, nil
|
||||
return &types.Header{
|
||||
Number: biggie,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func NewTestSwarmServer(t *testing.T) *TestSwarmServer {
|
||||
|
|
|
|||
Loading…
Reference in a new issue