Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
f7d3678c
Commit
f7d3678c
authored
6 years ago
by
Anton Evangelatov
Committed by
Balint Gabor
6 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
swarm/api/http: http package refactoring 1/5 and 2/5 (#17164)
parent
facf1bc9
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
579 additions
and
381 deletions
+579
-381
api.go
swarm/api/api.go
+243
-16
client_test.go
swarm/api/client/client_test.go
+1
-1
error_test.go
swarm/api/http/error_test.go
+0
-1
server.go
swarm/api/http/server.go
+207
-358
server_test.go
swarm/api/http/server_test.go
+125
-1
swarm.go
swarm/swarm.go
+3
-4
No files found.
swarm/api/api.go
View file @
f7d3678c
This diff is collapsed.
Click to expand it.
swarm/api/client/client_test.go
View file @
f7d3678c
...
...
@@ -31,7 +31,7 @@ import (
)
func
serverFunc
(
api
*
api
.
API
)
testutil
.
TestServer
{
return
swarmhttp
.
NewServer
(
api
)
return
swarmhttp
.
NewServer
(
api
,
""
)
}
// TestClientUploadDownloadRaw test uploading and downloading raw data to swarm
...
...
This diff is collapsed.
Click to expand it.
swarm/api/http/error_test.go
View file @
f7d3678c
...
...
@@ -29,7 +29,6 @@ import (
)
func
TestError
(
t
*
testing
.
T
)
{
srv
:=
testutil
.
NewTestSwarmServer
(
t
,
serverFunc
)
defer
srv
.
Close
()
...
...
This diff is collapsed.
Click to expand it.
swarm/api/http/server.go
View file @
f7d3678c
This diff is collapsed.
Click to expand it.
swarm/api/http/server_test.go
View file @
f7d3678c
...
...
@@ -17,6 +17,7 @@
package
http
import
(
"archive/tar"
"bytes"
"context"
"crypto/rand"
...
...
@@ -24,11 +25,13 @@ import (
"errors"
"flag"
"fmt"
"io"
"io/ioutil"
"net/http"
"os"
"strings"
"testing"
"time"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
...
...
@@ -88,7 +91,7 @@ func TestResourcePostMode(t *testing.T) {
}
func
serverFunc
(
api
*
api
.
API
)
testutil
.
TestServer
{
return
NewServer
(
api
)
return
NewServer
(
api
,
""
)
}
// test the transparent resolving of multihash resource types with bzz:// scheme
...
...
@@ -356,6 +359,11 @@ func TestBzzGetPath(t *testing.T) {
testBzzGetPath
(
true
,
t
)
}
func
TestBzzTar
(
t
*
testing
.
T
)
{
testBzzTar
(
false
,
t
)
testBzzTar
(
true
,
t
)
}
func
testBzzGetPath
(
encrypted
bool
,
t
*
testing
.
T
)
{
var
err
error
...
...
@@ -592,6 +600,122 @@ func testBzzGetPath(encrypted bool, t *testing.T) {
}
}
func
testBzzTar
(
encrypted
bool
,
t
*
testing
.
T
)
{
srv
:=
testutil
.
NewTestSwarmServer
(
t
,
serverFunc
)
defer
srv
.
Close
()
fileNames
:=
[]
string
{
"tmp1.txt"
,
"tmp2.lock"
,
"tmp3.rtf"
}
fileContents
:=
[]
string
{
"tmp1textfilevalue"
,
"tmp2lockfilelocked"
,
"tmp3isjustaplaintextfile"
}
buf
:=
&
bytes
.
Buffer
{}
tw
:=
tar
.
NewWriter
(
buf
)
defer
tw
.
Close
()
for
i
,
v
:=
range
fileNames
{
size
:=
int64
(
len
(
fileContents
[
i
]))
hdr
:=
&
tar
.
Header
{
Name
:
v
,
Mode
:
0644
,
Size
:
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
.
Copy
(
tw
,
bytes
.
NewBufferString
(
fileContents
[
i
]))
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
else
if
n
!=
size
{
t
.
Fatal
(
"size mismatch"
)
}
}
//post tar stream
url
:=
srv
.
URL
+
"/bzz:/"
if
encrypted
{
url
=
url
+
"encrypt"
}
req
,
err
:=
http
.
NewRequest
(
"POST"
,
url
,
buf
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
req
.
Header
.
Add
(
"Content-Type"
,
"application/x-tar"
)
client
:=
&
http
.
Client
{}
resp2
,
err
:=
client
.
Do
(
req
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
resp2
.
StatusCode
!=
http
.
StatusOK
{
t
.
Fatalf
(
"err %s"
,
resp2
.
Status
)
}
swarmHash
,
err
:=
ioutil
.
ReadAll
(
resp2
.
Body
)
resp2
.
Body
.
Close
()
t
.
Logf
(
"uploaded tarball successfully and got manifest address at %s"
,
string
(
swarmHash
))
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
// now do a GET to get a tarball back
req
,
err
=
http
.
NewRequest
(
"GET"
,
fmt
.
Sprintf
(
srv
.
URL
+
"/bzz:/%s"
,
string
(
swarmHash
)),
nil
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
req
.
Header
.
Add
(
"Accept"
,
"application/x-tar"
)
resp2
,
err
=
client
.
Do
(
req
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
defer
resp2
.
Body
.
Close
()
file
,
err
:=
ioutil
.
TempFile
(
""
,
"swarm-downloaded-tarball"
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
defer
os
.
Remove
(
file
.
Name
())
_
,
err
=
io
.
Copy
(
file
,
resp2
.
Body
)
if
err
!=
nil
{
t
.
Fatalf
(
"error getting tarball: %v"
,
err
)
}
file
.
Sync
()
file
.
Close
()
tarFileHandle
,
err
:=
os
.
Open
(
file
.
Name
())
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
tr
:=
tar
.
NewReader
(
tarFileHandle
)
for
{
hdr
,
err
:=
tr
.
Next
()
if
err
==
io
.
EOF
{
break
}
else
if
err
!=
nil
{
t
.
Fatalf
(
"error reading tar stream: %s"
,
err
)
}
bb
:=
make
([]
byte
,
hdr
.
Size
)
_
,
err
=
tr
.
Read
(
bb
)
if
err
!=
nil
&&
err
!=
io
.
EOF
{
t
.
Fatal
(
err
)
}
passed
:=
false
for
i
,
v
:=
range
fileNames
{
if
v
==
hdr
.
Name
{
if
string
(
bb
)
==
fileContents
[
i
]
{
passed
=
true
break
}
}
}
if
!
passed
{
t
.
Fatalf
(
"file %s did not pass content assertion"
,
hdr
.
Name
)
}
}
}
// TestBzzRootRedirect tests that getting the root path of a manifest without
// a trailing slash gets redirected to include the trailing slash so that
// relative URLs work as expected.
...
...
This diff is collapsed.
Click to expand it.
swarm/swarm.go
View file @
f7d3678c
...
...
@@ -388,10 +388,9 @@ func (self *Swarm) Start(srv *p2p.Server) error {
// start swarm http proxy server
if
self
.
config
.
Port
!=
""
{
addr
:=
net
.
JoinHostPort
(
self
.
config
.
ListenAddr
,
self
.
config
.
Port
)
go
httpapi
.
StartHTTPServer
(
self
.
api
,
&
httpapi
.
ServerConfig
{
Addr
:
addr
,
CorsString
:
self
.
config
.
Cors
,
})
server
:=
httpapi
.
NewServer
(
self
.
api
,
self
.
config
.
Cors
)
go
server
.
ListenAndServe
(
addr
)
}
log
.
Debug
(
fmt
.
Sprintf
(
"Swarm http proxy started on port: %v"
,
self
.
config
.
Port
))
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment