An enrolling node asks again, with the same request, while the mesh says it cannot answer — for as long as the mesh holds the token for it (novox/hq issue 083)
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
package link
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
// What one reply means to a node enrolling (novox/hq issue 083): accepted is done; "try again" is
|
||||
// asked again, until the node's patience runs out and it says the token was not spent; anything
|
||||
// else is a refusal.
|
||||
func TestAnEnrollingNodeAsksAgainWhileTheMeshSaysNotNow(t *testing.T) {
|
||||
if again, err := answered(EnrolReply{Accepted: true}, 0); again || err != nil {
|
||||
t.Fatalf("an accepted enrolment was not done: again=%v err=%v", again, err)
|
||||
}
|
||||
if again, err := answered(EnrolReply{TryAgain: true}, time.Second); !again || err != nil {
|
||||
t.Fatalf("a mesh saying not now was not asked again: again=%v err=%v", again, err)
|
||||
}
|
||||
again, err := answered(EnrolReply{TryAgain: true, Refusal: "restarting"}, EnrolPatience)
|
||||
if again || !errors.Is(err, ErrNotNow) {
|
||||
t.Fatalf("a mesh saying not now past the node's patience did not stop it: again=%v err=%v", again, err)
|
||||
}
|
||||
if !errorsMention(err, "not spent") {
|
||||
t.Errorf("giving up did not say the token can be used again: %v", err)
|
||||
}
|
||||
if again, err := answered(EnrolReply{Refusal: "that token cannot be used"}, 0); again || !errors.Is(err, ErrRefused) {
|
||||
t.Fatalf("a refusal was not a refusal: again=%v err=%v", again, err)
|
||||
}
|
||||
}
|
||||
|
||||
func errorsMention(err error, what string) bool {
|
||||
return err != nil && strings.Contains(err.Error(), what)
|
||||
}
|
||||
Reference in New Issue
Block a user