diff --git a/router/handshake.go b/router/handshake.go index d3fd8424..128bbcb0 100644 --- a/router/handshake.go +++ b/router/handshake.go @@ -12,11 +12,11 @@ type FieldValidator struct { err error } -func NewFieldValidator(fields map[string]string) FieldValidator { - return FieldValidator{fields, nil} +func NewFieldValidator(fields map[string]string) *FieldValidator { + return &FieldValidator{fields, nil} } -func (fv FieldValidator) Value(fieldName string) (string, error) { +func (fv *FieldValidator) Value(fieldName string) (string, error) { if fv.err != nil { return "", fv.err } @@ -28,7 +28,7 @@ func (fv FieldValidator) Value(fieldName string) (string, error) { return val, nil } -func (fv FieldValidator) CheckEqual(fieldName, expectedValue string) error { +func (fv *FieldValidator) CheckEqual(fieldName, expectedValue string) error { val, err := fv.Value(fieldName) if err != nil { return err @@ -40,7 +40,7 @@ func (fv FieldValidator) CheckEqual(fieldName, expectedValue string) error { return nil } -func (fv FieldValidator) Err() error { +func (fv *FieldValidator) Err() error { return fv.err } @@ -146,7 +146,7 @@ func (conn *LocalConnection) handshakeSendRecv(localConnID uint64, usingPassword fv.CheckEqual("Protocol", Protocol) fv.CheckEqual("ProtocolVersion", versionStr) fv.CheckEqual("PeerNameFlavour", PeerNameFlavour) - return &fv, private, nil + return fv, private, nil } func (conn *LocalConnection) setRemote(toPeer *Peer) error { diff --git a/router/handshake_test.go b/router/handshake_test.go new file mode 100644 index 00000000..e7306cfb --- /dev/null +++ b/router/handshake_test.go @@ -0,0 +1,29 @@ +package router + +import ( + wt "github.com/weaveworks/weave/testing" + "testing" +) + +func TestFieldValidator(t *testing.T) { + testMap := map[string]string{"a": "a"} + + fv := NewFieldValidator(testMap) + val, err := fv.Value("a") + wt.AssertNoErr(t, err) + wt.AssertNoErr(t, fv.Err()) + wt.AssertEqualString(t, val, "a", "a") + _, err = fv.Value("x") + wt.AssertFalse(t, err == nil || fv.Err() == nil, "Expected error") + _, err = fv.Value("a") + wt.AssertFalse(t, err == nil || fv.Err() == nil, "Previous error should be retained") + + fv = NewFieldValidator(testMap) + err = fv.CheckEqual("a", "a") + wt.AssertNoErr(t, err) + wt.AssertNoErr(t, fv.Err()) + err = fv.CheckEqual("a", "b") + wt.AssertFalse(t, err == nil || fv.Err() == nil, "Expected error") + err = fv.CheckEqual("a", "a") + wt.AssertFalse(t, err == nil || fv.Err() == nil, "Previous error should be retained") +}