Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
7fdafaf1
提交
7fdafaf1
authored
12月 16, 2014
作者:
Juan Batiz-Benet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
stress test
上级
fd3cd399
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
107 行增加
和
9 行删除
+107
-9
mock.go
net/mock/mock.go
+11
-4
mock_test.go
net/mock/mock_test.go
+96
-5
没有找到文件。
net/mock/mock.go
浏览文件 @
7fdafaf1
...
@@ -2,17 +2,21 @@
...
@@ -2,17 +2,21 @@
package
mocknet
package
mocknet
import
(
import
(
"fmt"
"io"
"io"
"sync"
"sync"
inet
"github.com/jbenet/go-ipfs/net"
inet
"github.com/jbenet/go-ipfs/net"
peer
"github.com/jbenet/go-ipfs/peer"
peer
"github.com/jbenet/go-ipfs/peer"
eventlog
"github.com/jbenet/go-ipfs/util/eventlog"
context
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
context
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
ctxgroup
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-ctxgroup"
ctxgroup
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-ctxgroup"
ma
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
ma
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
)
)
var
log
=
eventlog
.
Logger
(
"mocknet"
)
type
Stream
struct
{
type
Stream
struct
{
io
.
Reader
io
.
Reader
io
.
Writer
io
.
Writer
...
@@ -98,6 +102,7 @@ func (c *Conn) removeStream(s *Stream) {
...
@@ -98,6 +102,7 @@ func (c *Conn) removeStream(s *Stream) {
func
(
c
*
Conn
)
NewStreamWithProtocol
(
pr
inet
.
ProtocolID
,
p
peer
.
Peer
)
(
inet
.
Stream
,
error
)
{
func
(
c
*
Conn
)
NewStreamWithProtocol
(
pr
inet
.
ProtocolID
,
p
peer
.
Peer
)
(
inet
.
Stream
,
error
)
{
log
.
Debugf
(
"NewStreamWithProtocol: %s --> %s"
,
c
.
local
,
p
)
ss
,
_
:=
newStreamPair
(
c
.
local
,
p
)
ss
,
_
:=
newStreamPair
(
c
.
local
,
p
)
if
err
:=
inet
.
WriteProtocolHeader
(
pr
,
ss
);
err
!=
nil
{
if
err
:=
inet
.
WriteProtocolHeader
(
pr
,
ss
);
err
!=
nil
{
...
@@ -149,13 +154,12 @@ func MakeNetworks(ctx context.Context, peers []peer.Peer) (nets []*Network, err
...
@@ -149,13 +154,12 @@ func MakeNetworks(ctx context.Context, peers []peer.Peer) (nets []*Network, err
}
}
}
}
i
:=
0
for
_
,
n1
:=
range
nets
{
for
_
,
n1
:=
range
nets
{
for
_
,
n2
:=
range
nets
{
for
_
,
n2
:=
range
nets
{
if
n1
==
n2
{
continue
}
n1
.
conns
[
n2
.
local
]
=
&
Conn
{
local
:
n1
,
remote
:
n2
}
n1
.
conns
[
n2
.
local
]
=
&
Conn
{
local
:
n1
,
remote
:
n2
}
log
.
Debugf
(
"%d setup %s -> %s"
,
i
,
n1
,
n2
)
i
++
}
}
}
}
...
@@ -175,6 +179,9 @@ func newNetwork(ctx context.Context, local peer.Peer, peers peer.Peerstore) (*Ne
...
@@ -175,6 +179,9 @@ func newNetwork(ctx context.Context, local peer.Peer, peers peer.Peerstore) (*Ne
n
.
cg
.
SetTeardown
(
n
.
close
)
n
.
cg
.
SetTeardown
(
n
.
close
)
return
n
,
nil
return
n
,
nil
}
}
func
(
n
*
Network
)
String
()
string
{
return
fmt
.
Sprintf
(
"<Network %s - %d conns>"
,
n
.
local
,
len
(
n
.
conns
))
}
func
(
n
*
Network
)
handle
(
s
inet
.
Stream
)
{
func
(
n
*
Network
)
handle
(
s
inet
.
Stream
)
{
go
n
.
mux
.
Handle
(
s
)
go
n
.
mux
.
Handle
(
s
)
...
...
net/mock/mock_test.go
浏览文件 @
7fdafaf1
...
@@ -3,6 +3,8 @@ package mocknet
...
@@ -3,6 +3,8 @@ package mocknet
import
(
import
(
"bytes"
"bytes"
"io"
"io"
"math/rand"
"sync"
"testing"
"testing"
inet
"github.com/jbenet/go-ipfs/net"
inet
"github.com/jbenet/go-ipfs/net"
...
@@ -35,15 +37,11 @@ func TestNetworkSetup(t *testing.T) {
...
@@ -35,15 +37,11 @@ func TestNetworkSetup(t *testing.T) {
t
.
Error
(
"peer mismatch"
)
t
.
Error
(
"peer mismatch"
)
}
}
if
len
(
n
.
conns
)
!=
(
len
(
nets
)
-
1
)
{
if
len
(
n
.
conns
)
!=
len
(
nets
)
{
t
.
Error
(
"conn mismatch"
)
t
.
Error
(
"conn mismatch"
)
}
}
for
_
,
c
:=
range
n
.
conns
{
for
_
,
c
:=
range
n
.
conns
{
if
c
.
remote
.
local
==
n
.
local
{
t
.
Error
(
"conn to self"
)
}
if
c
.
remote
.
conns
[
n
.
local
]
==
nil
{
if
c
.
remote
.
conns
[
n
.
local
]
==
nil
{
t
.
Error
(
"conn other side fail"
)
t
.
Error
(
"conn other side fail"
)
}
}
...
@@ -101,3 +99,96 @@ func TestStreams(t *testing.T) {
...
@@ -101,3 +99,96 @@ func TestStreams(t *testing.T) {
}
}
}
}
func
makePinger
(
st
string
,
n
int
)
func
(
inet
.
Stream
)
{
return
func
(
s
inet
.
Stream
)
{
go
func
()
{
defer
s
.
Close
()
for
i
:=
0
;
i
<
n
;
i
++
{
b
:=
make
([]
byte
,
4
+
len
(
st
))
if
_
,
err
:=
s
.
Write
([]
byte
(
"ping"
+
st
));
err
!=
nil
{
panic
(
err
)
}
if
_
,
err
:=
io
.
ReadFull
(
s
,
b
);
err
!=
nil
{
panic
(
err
)
}
if
!
bytes
.
Equal
(
b
,
[]
byte
(
"pong"
+
st
))
{
panic
(
"bytes mismatch"
)
}
}
}()
}
}
func
makePonger
(
st
string
)
func
(
inet
.
Stream
)
{
return
func
(
s
inet
.
Stream
)
{
go
func
()
{
defer
s
.
Close
()
for
{
b
:=
make
([]
byte
,
4
+
len
(
st
))
if
_
,
err
:=
io
.
ReadFull
(
s
,
b
);
err
!=
nil
{
if
err
==
io
.
EOF
{
return
}
panic
(
err
)
}
if
!
bytes
.
Equal
(
b
,
[]
byte
(
"ping"
+
st
))
{
panic
(
"bytes mismatch"
)
}
if
_
,
err
:=
s
.
Write
([]
byte
(
"pong"
+
st
));
err
!=
nil
{
panic
(
err
)
}
}
}()
}
}
func
TestStreamsStress
(
t
*
testing
.
T
)
{
peers
:=
[]
peer
.
Peer
{}
for
i
:=
0
;
i
<
100
;
i
++
{
peers
=
append
(
peers
,
testutil
.
RandPeer
())
}
nets
,
err
:=
MakeNetworks
(
context
.
Background
(),
peers
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
protos
:=
[]
inet
.
ProtocolID
{
inet
.
ProtocolDHT
,
inet
.
ProtocolBitswap
,
inet
.
ProtocolDiag
,
}
for
_
,
n
:=
range
nets
{
for
_
,
p
:=
range
protos
{
n
.
SetHandler
(
p
,
makePonger
(
string
(
p
)))
}
}
var
wg
sync
.
WaitGroup
for
i
:=
0
;
i
<
1000
;
i
++
{
wg
.
Add
(
1
)
go
func
(
i
int
)
{
defer
wg
.
Done
()
from
:=
rand
.
Intn
(
len
(
peers
))
to
:=
rand
.
Intn
(
len
(
peers
))
p
:=
rand
.
Intn
(
3
)
proto
:=
protos
[
p
]
log
.
Debug
(
"%d (%s) %d (%s) %d (%s)"
,
from
,
nets
[
from
],
to
,
nets
[
to
],
p
,
protos
[
p
])
s
,
err
:=
nets
[
from
]
.
NewStream
(
protos
[
p
],
nets
[
to
]
.
local
)
if
err
!=
nil
{
panic
(
err
)
}
log
.
Infof
(
"%d start pinging"
,
i
)
makePinger
(
string
(
proto
),
rand
.
Intn
(
100
))(
s
)
log
.
Infof
(
"%d done pinging"
,
i
)
}(
i
)
}
wg
.
Done
()
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论