whisper/shhapi, whisper/whisperv5: refactoring (#3364)

* Filter refactoring
* API tests added + bugfix
* fixed the error logs
* FilterID fixed
* test cases fixed
* key generation updated
* POW updated
* got rid of redundant stuff
This commit is contained in:
gluk256
2016-12-01 20:09:22 +01:00
committed by Felix Lange
parent 671fd94e25
commit 2dcf75a722
14 changed files with 830 additions and 652 deletions

View File

@ -79,7 +79,7 @@ type TestNode struct {
shh *Whisper
id *ecdsa.PrivateKey
server *p2p.Server
filerId int
filerId uint32
}
var result TestData
@ -94,19 +94,19 @@ var expectedMessage []byte = []byte("per rectum ad astra")
// 3. each node sends a number of random (undecryptable) messages,
// 4. first node sends one expected (decryptable) message,
// 5. checks if each node have received and decrypted exactly one message.
func TestSimulation(x *testing.T) {
initialize(x)
func TestSimulation(t *testing.T) {
initialize(t)
for i := 0; i < NumNodes; i++ {
sendMsg(x, false, i)
sendMsg(t, false, i)
}
sendMsg(x, true, 0)
checkPropagation(x)
sendMsg(t, true, 0)
checkPropagation(t)
stopServers()
}
func initialize(x *testing.T) {
func initialize(t *testing.T) {
//glog.SetV(6)
//glog.SetToStderr(true)
@ -118,14 +118,13 @@ func initialize(x *testing.T) {
var node TestNode
node.shh = NewWhisper(nil)
node.shh.test = true
tt := make([]TopicType, 0)
tt = append(tt, sharedTopic)
f := Filter{KeySym: sharedKey, Topics: tt}
topics := make([]TopicType, 0)
topics = append(topics, sharedTopic)
f := Filter{KeySym: sharedKey, Topics: topics}
node.filerId = node.shh.Watch(&f)
node.id, err = crypto.HexToECDSA(keys[i])
if err != nil {
x.Errorf("failed convert the key: %s.", keys[i])
return
t.Fatalf("failed convert the key: %s.", keys[i])
}
port := port0 + i
addr := fmt.Sprintf(":%d", port) // e.g. ":30303"
@ -155,8 +154,7 @@ func initialize(x *testing.T) {
err = node.server.Start()
if err != nil {
x.Errorf("failed to start server %d.", i)
return
t.Fatalf("failed to start server %d.", i)
}
nodes[i] = &node
@ -173,8 +171,8 @@ func stopServers() {
}
}
func checkPropagation(x *testing.T) {
if x.Failed() {
func checkPropagation(t *testing.T) {
if t.Failed() {
return
}
@ -187,26 +185,24 @@ func checkPropagation(x *testing.T) {
for i := 0; i < NumNodes; i++ {
f := nodes[i].shh.GetFilter(nodes[i].filerId)
if f == nil {
x.Errorf("failed to get filterId %d from node %d.", nodes[i].filerId, i)
return
t.Fatalf("failed to get filterId %d from node %d.", nodes[i].filerId, i)
}
mail := f.Retrieve()
if !validateMail(x, i, mail) {
if !validateMail(t, i, mail) {
return
}
if isTestComplete() {
return
}
}
}
x.Errorf("Test was not complete: timeout %d seconds.", iterations*cycle/1000)
t.Fatalf("Test was not complete: timeout %d seconds.", iterations*cycle/1000)
}
func validateMail(x *testing.T, index int, mail []*ReceivedMessage) bool {
func validateMail(t *testing.T, index int, mail []*ReceivedMessage) bool {
var cnt int
for _, m := range mail {
if bytes.Compare(m.Payload, expectedMessage) == 0 {
@ -219,7 +215,7 @@ func validateMail(x *testing.T, index int, mail []*ReceivedMessage) bool {
return true
}
if cnt > 1 {
x.Errorf("node %d received %d.", index, cnt)
t.Fatalf("node %d received %d.", index, cnt)
return false
}
@ -228,8 +224,7 @@ func validateMail(x *testing.T, index int, mail []*ReceivedMessage) bool {
defer result.mutex.Unlock()
result.counter[index] += cnt
if result.counter[index] > 1 {
x.Errorf("node %d accumulated %d.", index, result.counter[index])
return false
t.Fatalf("node %d accumulated %d.", index, result.counter[index])
}
}
return true
@ -255,8 +250,8 @@ func isTestComplete() bool {
return true
}
func sendMsg(x *testing.T, expected bool, id int) {
if x.Failed() {
func sendMsg(t *testing.T, expected bool, id int) {
if t.Failed() {
return
}
@ -270,38 +265,33 @@ func sendMsg(x *testing.T, expected bool, id int) {
msg := NewSentMessage(&opt)
envelope, err := msg.Wrap(&opt)
if err != nil {
x.Errorf("failed to seal message.")
return
t.Fatalf("failed to seal message.")
}
err = nodes[id].shh.Send(envelope)
if err != nil {
x.Errorf("failed to send message.")
return
t.Fatalf("failed to send message.")
}
}
func TestPeerBasic(x *testing.T) {
func TestPeerBasic(t *testing.T) {
InitSingleTest()
params, err := generateMessageParams()
if err != nil {
x.Errorf("failed 1 with seed %d.", seed)
return
t.Fatalf("failed generateMessageParams with seed %d.", seed)
}
params.PoW = 0.001
msg := NewSentMessage(params)
env, err := msg.Wrap(params)
if err != nil {
x.Errorf("failed 2 with seed %d.", seed)
return
t.Fatalf("failed Wrap with seed %d.", seed)
}
p := newPeer(nil, nil, nil)
p.mark(env)
if !p.marked(env) {
x.Errorf("failed 3 with seed %d.", seed)
return
t.Fatalf("failed mark with seed %d.", seed)
}
}