Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
b573d662
提交
b573d662
authored
12月 17, 2014
作者:
Juan Batiz-Benet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
mocknet: internals test
Found bugs with it :)
上级
f354fa84
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
218 行增加
和
31 行删除
+218
-31
mock_test.go
net/mock/mock_test.go
+218
-31
没有找到文件。
net/mock/mock_test.go
浏览文件 @
b573d662
...
...
@@ -14,45 +14,232 @@ import (
context
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
)
//
func TestNetworkSetup(t *testing.T) {
func
TestNetworkSetup
(
t
*
testing
.
T
)
{
// p1 := testutil.RandPeer()
// p2 := testutil.RandPeer()
// p3 := testutil.RandPeer()
// peers := []peer.Peer{p1, p2, p3}
ctx
:=
context
.
Background
()
p1
:=
testutil
.
RandPeer
()
p2
:=
testutil
.
RandPeer
()
p3
:=
testutil
.
RandPeer
()
mn
:=
New
(
ctx
)
// peers := []peer.Peer{p1, p2, p3}
// add peers to mock net
n1
,
err
:=
mn
.
AddPeer
(
p1
.
ID
())
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
n2
,
err
:=
mn
.
AddPeer
(
p2
.
ID
())
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
n3
,
err
:=
mn
.
AddPeer
(
p3
.
ID
())
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
// check peers and net
if
!
mn
.
Peer
(
p1
.
ID
())
.
ID
()
.
Equal
(
p1
.
ID
())
{
t
.
Error
(
"peer for p1.ID != p1.ID"
)
}
if
!
mn
.
Peer
(
p2
.
ID
())
.
ID
()
.
Equal
(
p2
.
ID
())
{
t
.
Error
(
"peer for p2.ID != p2.ID"
)
}
if
!
mn
.
Peer
(
p3
.
ID
())
.
ID
()
.
Equal
(
p3
.
ID
())
{
t
.
Error
(
"peer for p3.ID != p3.ID"
)
}
if
mn
.
Net
(
p1
.
ID
())
!=
n1
{
t
.
Error
(
"net for p1.ID != n1"
)
}
if
mn
.
Net
(
p2
.
ID
())
!=
n2
{
t
.
Error
(
"net for p2.ID != n1"
)
}
if
mn
.
Net
(
p3
.
ID
())
!=
n3
{
t
.
Error
(
"net for p3.ID != n1"
)
}
// link p1<-->p2, p1<-->p1, p2<-->p3, p3<-->p2
// nets, err := MakeNetworks(context.Background(), peers)
// if err != nil {
// t.Fatal(err)
// }
l12
,
err
:=
mn
.
LinkPeers
(
p1
,
p2
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
(
l12
.
Networks
()[
0
]
==
n1
&&
l12
.
Networks
()[
1
]
==
n2
)
&&
!
(
l12
.
Networks
()[
0
]
==
n2
&&
l12
.
Networks
()[
1
]
==
n1
)
{
t
.
Error
(
"l12 networks incorrect"
)
}
l11
,
err
:=
mn
.
LinkPeers
(
p1
,
p1
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
(
l11
.
Networks
()[
0
]
==
n1
&&
l11
.
Networks
()[
1
]
==
n1
)
{
t
.
Error
(
"l11 networks incorrect"
)
}
l23
,
err
:=
mn
.
LinkPeers
(
p2
,
p3
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
(
l23
.
Networks
()[
0
]
==
n2
&&
l23
.
Networks
()[
1
]
==
n3
)
&&
!
(
l23
.
Networks
()[
0
]
==
n3
&&
l23
.
Networks
()[
1
]
==
n2
)
{
t
.
Error
(
"l23 networks incorrect"
)
}
// // check things
l32
,
err
:=
mn
.
LinkPeers
(
p3
,
p2
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
(
l32
.
Networks
()[
0
]
==
n2
&&
l32
.
Networks
()[
1
]
==
n3
)
&&
!
(
l32
.
Networks
()[
0
]
==
n3
&&
l32
.
Networks
()[
1
]
==
n2
)
{
t
.
Error
(
"l32 networks incorrect"
)
}
// if len(nets) != 3 {
// t.Error("nets must be 3")
// }
// check things
// for i, n := range nets {
// if n.local != peers[i] {
// t.Error("peer mismatch")
// }
links12
:=
mn
.
LinksBetweenPeers
(
p1
,
p2
)
if
len
(
links12
)
!=
1
{
t
.
Errorf
(
"should be 1 link bt. p1 and p2 (found %d)"
,
len
(
links12
))
}
if
links12
[
0
]
!=
l12
{
t
.
Error
(
"links 1-2 should be l12."
)
}
// if len(n.conns) != len(nets) {
// t.Error("conn mismatch")
// }
links11
:=
mn
.
LinksBetweenPeers
(
p1
,
p1
)
if
len
(
links11
)
!=
1
{
t
.
Errorf
(
"should be 1 link bt. p1 and p1 (found %d)"
,
len
(
links11
))
}
if
links11
[
0
]
!=
l11
{
t
.
Error
(
"links 1-1 should be l11."
)
}
// for _, c := range n.conns {
// if c.remote.conns[n.local] == nil
{
// t.Error("conn other side fail"
)
//
}
// if c.remote.conns[n.local].remote.local != n.local {
// t.Error("conn other side fail")
// }
//
}
links23
:=
mn
.
LinksBetweenPeers
(
p2
,
p3
)
if
len
(
links23
)
!=
2
{
t
.
Errorf
(
"should be 2 link bt. p2 and p3 (found %d)"
,
len
(
links23
)
)
}
if
!
((
links23
[
0
]
==
l23
&&
links23
[
1
]
==
l32
)
||
(
links23
[
0
]
==
l32
&&
links23
[
1
]
==
l23
))
{
t
.
Error
(
"links 2-3 should be l23 and l32."
)
}
// }
// unlinking
// }
if
err
:=
mn
.
UnlinkPeers
(
p2
,
p1
);
err
!=
nil
{
t
.
Error
(
err
)
}
// check only one link affected:
links12
=
mn
.
LinksBetweenPeers
(
p1
,
p2
)
if
len
(
links12
)
!=
0
{
t
.
Errorf
(
"should be 0 now..."
,
len
(
links12
))
}
links11
=
mn
.
LinksBetweenPeers
(
p1
,
p1
)
if
len
(
links11
)
!=
1
{
t
.
Errorf
(
"should be 1 link bt. p1 and p1 (found %d)"
,
len
(
links11
))
}
if
links11
[
0
]
!=
l11
{
t
.
Error
(
"links 1-1 should be l11."
)
}
links23
=
mn
.
LinksBetweenPeers
(
p2
,
p3
)
if
len
(
links23
)
!=
2
{
t
.
Errorf
(
"should be 2 link bt. p2 and p3 (found %d)"
,
len
(
links23
))
}
if
!
((
links23
[
0
]
==
l23
&&
links23
[
1
]
==
l32
)
||
(
links23
[
0
]
==
l32
&&
links23
[
1
]
==
l23
))
{
t
.
Error
(
"links 2-3 should be l23 and l32."
)
}
// check connecting
// first, no conns
if
len
(
n2
.
Conns
())
>
0
||
len
(
n3
.
Conns
())
>
0
{
t
.
Error
(
"should have 0 conn. Got: (%d, %d)"
,
len
(
n2
.
Conns
()),
len
(
n3
.
Conns
()))
}
// connect p2->p3
if
err
:=
n2
.
DialPeer
(
ctx
,
p3
);
err
!=
nil
{
t
.
Error
(
err
)
}
if
len
(
n2
.
Conns
())
!=
1
||
len
(
n3
.
Conns
())
!=
1
{
t
.
Errorf
(
"should have (1,1) conn. Got: (%d, %d)"
,
len
(
n2
.
Conns
()),
len
(
n3
.
Conns
()))
}
// p := PrinterTo(os.Stdout)
// p.NetworkConns(n1)
// p.NetworkConns(n2)
// p.NetworkConns(n3)
// can create a stream 2->3, 3->2,
if
_
,
err
:=
n2
.
NewStream
(
inet
.
ProtocolDiag
,
p3
);
err
!=
nil
{
t
.
Error
(
err
)
}
if
_
,
err
:=
n3
.
NewStream
(
inet
.
ProtocolDiag
,
p2
);
err
!=
nil
{
t
.
Error
(
err
)
}
// but not 1->2 nor 2->2 (not linked), nor 1->1 (not connected)
if
_
,
err
:=
n1
.
NewStream
(
inet
.
ProtocolDiag
,
p2
);
err
==
nil
{
t
.
Error
(
"should not be able to connect"
)
}
if
_
,
err
:=
n2
.
NewStream
(
inet
.
ProtocolDiag
,
p2
);
err
==
nil
{
t
.
Error
(
"should not be able to connect"
)
}
if
_
,
err
:=
n1
.
NewStream
(
inet
.
ProtocolDiag
,
p1
);
err
==
nil
{
t
.
Error
(
"should not be able to connect"
)
}
// connect p1->p1 (should work)
if
err
:=
n1
.
DialPeer
(
ctx
,
p1
);
err
!=
nil
{
t
.
Error
(
"p1 should be able to dial self."
,
err
)
}
// and a stream too
if
_
,
err
:=
n1
.
NewStream
(
inet
.
ProtocolDiag
,
p1
);
err
!=
nil
{
t
.
Error
(
err
)
}
// connect p1->p2
if
err
:=
n1
.
DialPeer
(
ctx
,
p2
);
err
==
nil
{
t
.
Error
(
"p1 should not be able to dial p2, not connected..."
)
}
// connect p3->p1
if
err
:=
n3
.
DialPeer
(
ctx
,
p1
);
err
==
nil
{
t
.
Error
(
"p3 should not be able to dial p1, not connected..."
)
}
// relink p1->p2
l12
,
err
=
mn
.
LinkPeers
(
p1
,
p2
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
(
l12
.
Networks
()[
0
]
==
n1
&&
l12
.
Networks
()[
1
]
==
n2
)
&&
!
(
l12
.
Networks
()[
0
]
==
n2
&&
l12
.
Networks
()[
1
]
==
n1
)
{
t
.
Error
(
"l12 networks incorrect"
)
}
// should now be able to connect
// connect p1->p2
if
err
:=
n1
.
DialPeer
(
ctx
,
p2
);
err
!=
nil
{
t
.
Error
(
err
)
}
// and a stream should work now too :)
if
_
,
err
:=
n2
.
NewStream
(
inet
.
ProtocolDiag
,
p3
);
err
!=
nil
{
t
.
Error
(
err
)
}
}
func
TestStreams
(
t
*
testing
.
T
)
{
...
...
@@ -174,9 +361,9 @@ func TestStreamsStress(t *testing.T) {
to
:=
rand
.
Intn
(
len
(
nets
))
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
]
.
LocalPeer
())
if
err
!=
nil
{
log
.
Debugf
(
"%d (%s) %d (%s) %d (%s)"
,
from
,
nets
[
from
],
to
,
nets
[
to
],
p
,
protos
[
p
])
panic
(
err
)
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论