whisper: fix loop in expire() (#17532)

This commit is contained in:
Adam Babik 2018-08-29 12:56:13 +02:00 committed by Péter Szilágyi
parent 9574968116
commit 75ae5af62a
4 changed files with 42 additions and 28 deletions

View File

@ -717,7 +717,7 @@ func (w *Whisper) expire() {
w.stats.messagesCleared++ w.stats.messagesCleared++
w.stats.memoryCleared += sz w.stats.memoryCleared += sz
w.stats.memoryUsed -= sz w.stats.memoryUsed -= sz
return true return false
}) })
w.expirations[expiry].Clear() w.expirations[expiry].Clear()
delete(w.expirations, expiry) delete(w.expirations, expiry)

View File

@ -487,27 +487,34 @@ func TestExpiry(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
} }
params.TTL = 1 params.TTL = 1
msg, err := NewSentMessage(params)
if err != nil {
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
}
env, err := msg.Wrap(params)
if err != nil {
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
}
err = w.Send(env) messagesCount := 5
if err != nil {
t.Fatalf("failed to send envelope with seed %d: %s.", seed, err) // Send a few messages one after another. Due to low PoW and expiration buckets
// with one second resolution, it covers a case when there are multiple items
// in a single expiration bucket.
for i := 0; i < messagesCount; i++ {
msg, err := NewSentMessage(params)
if err != nil {
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
}
env, err := msg.Wrap(params)
if err != nil {
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
}
err = w.Send(env)
if err != nil {
t.Fatalf("failed to send envelope with seed %d: %s.", seed, err)
}
} }
// wait till received or timeout // wait till received or timeout
var received, expired bool var received, expired bool
for j := 0; j < 20; j++ { for j := 0; j < 20; j++ {
time.Sleep(100 * time.Millisecond) time.Sleep(100 * time.Millisecond)
if len(w.Envelopes()) > 0 { if len(w.Envelopes()) == messagesCount {
received = true received = true
break break
} }

View File

@ -900,7 +900,7 @@ func (whisper *Whisper) expire() {
whisper.stats.messagesCleared++ whisper.stats.messagesCleared++
whisper.stats.memoryCleared += sz whisper.stats.memoryCleared += sz
whisper.stats.memoryUsed -= sz whisper.stats.memoryUsed -= sz
return true return false
}) })
whisper.expirations[expiry].Clear() whisper.expirations[expiry].Clear()
delete(whisper.expirations, expiry) delete(whisper.expirations, expiry)

View File

@ -465,27 +465,34 @@ func TestExpiry(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
} }
params.TTL = 1 params.TTL = 1
msg, err := NewSentMessage(params)
if err != nil {
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
}
env, err := msg.Wrap(params)
if err != nil {
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
}
err = w.Send(env) messagesCount := 5
if err != nil {
t.Fatalf("failed to send envelope with seed %d: %s.", seed, err) // Send a few messages one after another. Due to low PoW and expiration buckets
// with one second resolution, it covers a case when there are multiple items
// in a single expiration bucket.
for i := 0; i < messagesCount; i++ {
msg, err := NewSentMessage(params)
if err != nil {
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
}
env, err := msg.Wrap(params)
if err != nil {
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
}
err = w.Send(env)
if err != nil {
t.Fatalf("failed to send envelope with seed %d: %s.", seed, err)
}
} }
// wait till received or timeout // wait till received or timeout
var received, expired bool var received, expired bool
for j := 0; j < 20; j++ { for j := 0; j < 20; j++ {
time.Sleep(100 * time.Millisecond) time.Sleep(100 * time.Millisecond)
if len(w.Envelopes()) > 0 { if len(w.Envelopes()) == messagesCount {
received = true received = true
break break
} }