NO-JIRA: [go] common internal/test package for qpid.apache.org

Common utilities to simplify test code.
Updated package tests to use the common code.


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/90dbf46c
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/90dbf46c
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/90dbf46c

Branch: refs/heads/master
Commit: 90dbf46cc6a41d64faf3c46b4749075996adfdc0
Parents: d8cebe4
Author: Alan Conway <acon...@redhat.com>
Authored: Fri Oct 12 12:02:24 2018 -0400
Committer: Alan Conway <acon...@redhat.com>
Committed: Tue Oct 23 20:21:14 2018 -0400

----------------------------------------------------------------------
 go/src/qpid.apache.org/amqp/interop_test.go     | 30 ++++----
 go/src/qpid.apache.org/amqp/marshal_test.go     | 65 +++++++---------
 go/src/qpid.apache.org/amqp/message_test.go     | 28 +++----
 go/src/qpid.apache.org/amqp/types_test.go       | 31 ++++----
 go/src/qpid.apache.org/electron/auth_test.go    | 12 +--
 .../qpid.apache.org/electron/benchmark_test.go  |  7 +-
 go/src/qpid.apache.org/electron/common_test.go  | 46 ++----------
 .../qpid.apache.org/electron/electron_test.go   | 25 ++++---
 go/src/qpid.apache.org/electron/link_test.go    | 26 ++++---
 go/src/qpid.apache.org/internal/test/test.go    | 78 ++++++++++++++++++++
 go/src/qpid.apache.org/proton/proton_test.go    | 38 +++-------
 11 files changed, 200 insertions(+), 186 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/90dbf46c/go/src/qpid.apache.org/amqp/interop_test.go
----------------------------------------------------------------------
diff --git a/go/src/qpid.apache.org/amqp/interop_test.go 
b/go/src/qpid.apache.org/amqp/interop_test.go
index 0d9d204..c3b0906 100644
--- a/go/src/qpid.apache.org/amqp/interop_test.go
+++ b/go/src/qpid.apache.org/amqp/interop_test.go
@@ -30,6 +30,8 @@ import (
        "reflect"
        "strings"
        "testing"
+
+       "qpid.apache.org/internal/test"
 )
 
 var skipped = false
@@ -65,7 +67,7 @@ func checkDecode(d *Decoder, want interface{}, gotPtr 
interface{}, t *testing.T)
                return
        }
        got := reflect.ValueOf(gotPtr).Elem().Interface()
-       if err := checkEqual(want, got); err != nil {
+       if err := test.Differ(want, got); err != nil {
                t.Error("Decode bad value:", err)
                return
        }
@@ -81,13 +83,13 @@ func checkDecode(d *Decoder, want interface{}, gotPtr 
interface{}, t *testing.T)
                t.Error("Unmarshal failed", err)
                return
        }
-       err = checkEqual(n, len(bytes))
+       err = test.Differ(n, len(bytes))
        if err != nil {
                t.Error("Bad unmarshal length", err)
                return
        }
        got = reflect.ValueOf(gotPtr).Elem().Interface()
-       if err = checkEqual(want, got); err != nil {
+       if err = test.Differ(want, got); err != nil {
                t.Error("Bad unmarshal value", err)
                return
        }
@@ -165,7 +167,7 @@ func checkDecodeInterface(d *Decoder, want interface{}, t 
*testing.T) {
                t.Error("Decode failed", err)
                return
        }
-       if err := checkEqual(want, got); err != nil {
+       if err := test.Differ(want, got); err != nil {
                t.Error(err)
                return
        }
@@ -180,11 +182,11 @@ func checkDecodeInterface(d *Decoder, want interface{}, t 
*testing.T) {
                t.Error(err)
                return
        }
-       if err := checkEqual(n, len(bytes)); err != nil {
+       if err := test.Differ(n, len(bytes)); err != nil {
                t.Error(err)
                return
        }
-       if err := checkEqual(want, got2); err != nil {
+       if err := test.Differ(want, got2); err != nil {
                t.Error(err)
                return
        }
@@ -247,12 +249,8 @@ func TestStrings(t *testing.T) {
        if !strings.Contains(err.Error(), "cannot unmarshal") {
                t.Error(err)
        }
-       if _, err = Unmarshal([]byte{}, nil); err != nil {
-               t.Error(err)
-       }
-       if err = checkEqual(err, EndOfData); err != nil {
-               t.Error(err)
-       }
+       _, err = Unmarshal([]byte{}, nil)
+       test.ErrorIf(t, test.Differ(err, EndOfData))
        _, err = Unmarshal([]byte("foobar"), nil)
        if !strings.Contains(err.Error(), "invalid-argument") {
                t.Error(err)
@@ -313,7 +311,7 @@ func TestEncodeDecode(t *testing.T) {
                t.Error(err)
        }
 
-       if err := checkEqual(in, out); err != nil {
+       if err := test.Differ(in, out); err != nil {
                t.Error(err)
        }
 }
@@ -344,7 +342,7 @@ func TestMap(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       if err = checkEqual(m, i); err != nil {
+       if err = test.Differ(m, i); err != nil {
                t.Fatal(err)
        }
 }
@@ -368,7 +366,7 @@ func TODO_TestMessage(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        } else {
-               if err = checkEqual(m.Body(), "hello"); err != nil {
+               if err = test.Differ(m.Body(), "hello"); err != nil {
                        t.Error(err)
                }
        }
@@ -378,7 +376,7 @@ func TODO_TestMessage(t *testing.T) {
        if err != nil {
                t.Error(err)
        } else {
-               if err = checkEqual(bytes, bytes2); err != nil {
+               if err = test.Differ(bytes, bytes2); err != nil {
                        t.Error(err)
                }
        }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/90dbf46c/go/src/qpid.apache.org/amqp/marshal_test.go
----------------------------------------------------------------------
diff --git a/go/src/qpid.apache.org/amqp/marshal_test.go 
b/go/src/qpid.apache.org/amqp/marshal_test.go
index c489365..f3c10a3 100644
--- a/go/src/qpid.apache.org/amqp/marshal_test.go
+++ b/go/src/qpid.apache.org/amqp/marshal_test.go
@@ -22,50 +22,35 @@ package amqp
 import (
        "strings"
        "testing"
+
+       "qpid.apache.org/internal/test"
 )
 
 func TestSymbolKey(t *testing.T) {
        bytes, err := Marshal(AnnotationKeySymbol("foo"), nil)
-       if err != nil {
-               t.Fatal(err)
-       }
+       test.FatalIf(t, err)
        var k AnnotationKey
-       if _, err := Unmarshal(bytes, &k); err != nil {
-               t.Error(err)
-       }
-       if err := checkEqual("foo", string(k.Get().(Symbol))); err != nil {
-               t.Error(err)
-       }
+       _, err = Unmarshal(bytes, &k)
+       test.ErrorIf(t, err)
+       test.ErrorIf(t, test.Differ("foo", string(k.Get().(Symbol))))
        var sym Symbol
-       if _, err := Unmarshal(bytes, &sym); err != nil {
-               t.Error(err)
-       }
-       if err := checkEqual("foo", sym.String()); err != nil {
-               t.Error(err)
-       }
-
+       _, err = Unmarshal(bytes, &sym)
+       test.ErrorIf(t, err)
+       test.ErrorIf(t, test.Differ("foo", sym.String()))
 }
 
 func TestStringKey(t *testing.T) {
        bytes, err := Marshal(AnnotationKeyString("foo"), nil)
-       if err != nil {
-               t.Fatal(err)
-       }
+       test.FatalIf(t, err)
        var k AnnotationKey
-       if _, err := Unmarshal(bytes, &k); err != nil {
-               t.Error(err)
-       }
-       if err := checkEqual("foo", string(k.Get().(Symbol))); err != nil {
-               t.Error(err)
-       }
-       var s string
-       if _, err := Unmarshal(bytes, &s); err != nil {
-               t.Error(err)
-       }
-       if err := checkEqual("foo", s); err != nil {
-               t.Error(err)
-       }
 
+       _, err = Unmarshal(bytes, &k)
+       test.ErrorIf(t, err)
+       test.ErrorIf(t, test.Differ("foo", string(k.Get().(Symbol))))
+       var s string
+       _, err = Unmarshal(bytes, &s)
+       test.ErrorIf(t, err)
+       test.ErrorIf(t, test.Differ("foo", s))
 }
 
 func TestIntKey(t *testing.T) {
@@ -95,7 +80,7 @@ func TestMapToMap(t *testing.T) {
        if bytes, err := Marshal(in, nil); err == nil {
                var out Map
                if _, err := Unmarshal(bytes, &out); err == nil {
-                       if err = checkEqual(in, out); err != nil {
+                       if err = test.Differ(in, out); err != nil {
                                t.Error(err)
                        }
                } else {
@@ -109,7 +94,7 @@ func TestMapToInterface(t *testing.T) {
        if bytes, err := Marshal(in, nil); err == nil {
                var out interface{}
                if _, err := Unmarshal(bytes, &out); err == nil {
-                       if err = checkEqual(in, out); err != nil {
+                       if err = test.Differ(in, out); err != nil {
                                t.Error(err)
                        }
                } else {
@@ -128,7 +113,7 @@ func TestAnyMap(t *testing.T) {
        if _, err = Unmarshal(bytes, &out); err != nil {
                t.Error(err)
        }
-       if err = checkEqual(AnyMap(nil), out); err != nil {
+       if err = test.Differ(AnyMap(nil), out); err != nil {
                t.Error(err)
        }
 
@@ -140,7 +125,7 @@ func TestAnyMap(t *testing.T) {
        if _, err = Unmarshal(bytes, &out); err != nil {
                t.Error(err)
        }
-       if err = checkEqual(AnyMap(nil), out); err != nil {
+       if err = test.Differ(AnyMap(nil), out); err != nil {
                t.Error(err)
        }
 
@@ -153,7 +138,7 @@ func TestAnyMap(t *testing.T) {
        if _, err = Unmarshal(bytes, &out); err != nil {
                t.Error(err)
        }
-       if err = checkEqual(in, out); err != nil {
+       if err = test.Differ(in, out); err != nil {
                t.Error(err)
        }
 }
@@ -178,14 +163,14 @@ func TestBadMap(t *testing.T) {
        var out AnyMap
        if _, err = Unmarshal(bytes, &out); err != nil {
                t.Error(err)
-       } else if err = checkEqual(in, out); err != nil {
+       } else if err = test.Differ(in, out); err != nil {
                t.Error(err)
        }
        // Should unmarshal to interface{} as AnyMap
        var v interface{}
        if _, err = Unmarshal(bytes, &v); err != nil {
                t.Error(err)
-       } else if err = checkEqual(in, v); err != nil {
+       } else if err = test.Differ(in, v); err != nil {
                t.Error(err)
        }
        // Round trip from interface to interface
@@ -197,7 +182,7 @@ func TestBadMap(t *testing.T) {
        v = nil
        if _, err = Unmarshal(bytes, &v); err != nil {
                t.Error(err)
-       } else if err = checkEqual(in, v); err != nil {
+       } else if err = test.Differ(in, v); err != nil {
                t.Error(err)
        }
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/90dbf46c/go/src/qpid.apache.org/amqp/message_test.go
----------------------------------------------------------------------
diff --git a/go/src/qpid.apache.org/amqp/message_test.go 
b/go/src/qpid.apache.org/amqp/message_test.go
index 9899bd5..c396cc8 100644
--- a/go/src/qpid.apache.org/amqp/message_test.go
+++ b/go/src/qpid.apache.org/amqp/message_test.go
@@ -23,6 +23,8 @@ import (
        "reflect"
        "testing"
        "time"
+
+       "qpid.apache.org/internal/test"
 )
 
 func roundTrip(m Message) error {
@@ -34,7 +36,7 @@ func roundTrip(m Message) error {
        if err != nil {
                return err
        }
-       return checkEqual(m, m2)
+       return test.Differ(m, m2)
 }
 
 func TestDefaultMessage(t *testing.T) {
@@ -74,11 +76,11 @@ func TestDefaultMessage(t *testing.T) {
                {"Body", nil},
        } {
                ret := mv.MethodByName(x.method).Call(nil)
-               if err := checkEqual(x.want, ret[0].Interface()); err != nil {
+               if err := test.Differ(x.want, ret[0].Interface()); err != nil {
                        t.Errorf("%s: %s", x.method, err)
                }
        }
-       if err := checkEqual("Message{}", m.String()); err != nil {
+       if err := test.Differ("Message{}", m.String()); err != nil {
                t.Error(err)
        }
 }
@@ -94,7 +96,7 @@ func TestMessageString(t *testing.T) {
                t.Error(err)
        }
        msgstr := "Message{user-id: user, delivery-annotations: 
map[instructions:foo], message-annotations: map[annotations:bar], 
application-properties: map[int:32], body: hello}"
-       if err := checkEqual(msgstr, m.String()); err != nil {
+       if err := test.Differ(msgstr, m.String()); err != nil {
                t.Error(err)
        }
 }
@@ -135,7 +137,7 @@ func TestMessageRoundTrip(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       if err = checkEqual(m1, m); err != nil {
+       if err = test.Differ(m1, m); err != nil {
                t.Error(err)
        }
 
@@ -165,7 +167,7 @@ func TestMessageRoundTrip(t *testing.T) {
                {m.Instructions(), map[string]interface{}{"instructions": 
"foo"}},
                {m.Annotations(), map[string]interface{}{"annotations": "bar"}},
        } {
-               if err := checkEqual(data[0], data[1]); err != nil {
+               if err := test.Differ(data[0], data[1]); err != nil {
                        t.Error(err)
                }
        }
@@ -190,7 +192,7 @@ func TestDeprecated(t *testing.T) {
                {m.Annotations(), map[string]interface{}{"annotations": "bar"}},
                {m.Properties(), map[string]interface{}{"int": int32(32), 
"bool": true}},
        } {
-               if err := checkEqual(data[0], data[1]); err != nil {
+               if err := test.Differ(data[0], data[1]); err != nil {
                        t.Error(err)
                }
        }
@@ -207,20 +209,20 @@ func TestMessageBodyTypes(t *testing.T) {
        m := NewMessageWith(int64(42))
        m.Unmarshal(&body)
        m.Unmarshal(&i)
-       if err := checkEqual(body.(int64), int64(42)); err != nil {
+       if err := test.Differ(body.(int64), int64(42)); err != nil {
                t.Error(err)
        }
-       if err := checkEqual(i, int64(42)); err != nil {
+       if err := test.Differ(i, int64(42)); err != nil {
                t.Error(err)
        }
 
        m = NewMessageWith("hello")
        m.Unmarshal(&s)
        m.Unmarshal(&body)
-       if err := checkEqual(s, "hello"); err != nil {
+       if err := test.Differ(s, "hello"); err != nil {
                t.Error(err)
        }
-       if err := checkEqual(body.(string), "hello"); err != nil {
+       if err := test.Differ(body.(string), "hello"); err != nil {
                t.Error(err)
        }
        if err := roundTrip(m); err != nil {
@@ -230,10 +232,10 @@ func TestMessageBodyTypes(t *testing.T) {
        m = NewMessageWith(Binary("bin"))
        m.Unmarshal(&s)
        m.Unmarshal(&body)
-       if err := checkEqual(body.(Binary), Binary("bin")); err != nil {
+       if err := test.Differ(body.(Binary), Binary("bin")); err != nil {
                t.Error(err)
        }
-       if err := checkEqual(s, "bin"); err != nil {
+       if err := test.Differ(s, "bin"); err != nil {
                t.Error(err)
        }
        if err := roundTrip(m); err != nil {

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/90dbf46c/go/src/qpid.apache.org/amqp/types_test.go
----------------------------------------------------------------------
diff --git a/go/src/qpid.apache.org/amqp/types_test.go 
b/go/src/qpid.apache.org/amqp/types_test.go
index d7e54f1..0f62225 100644
--- a/go/src/qpid.apache.org/amqp/types_test.go
+++ b/go/src/qpid.apache.org/amqp/types_test.go
@@ -24,14 +24,9 @@ import (
        "reflect"
        "testing"
        "time"
-)
 
-func checkEqual(want interface{}, got interface{}) error {
-       if !reflect.DeepEqual(want, got) {
-               return fmt.Errorf("(%T)%#v != (%T)%#v", want, want, got, got)
-       }
-       return nil
-}
+       "qpid.apache.org/internal/test"
+)
 
 func checkUnmarshal(marshaled []byte, v interface{}) error {
        got, err := Unmarshal(marshaled, v)
@@ -130,7 +125,7 @@ func TestTypesRoundTrip(t *testing.T) {
                if err := checkUnmarshal(marshalled, &v); err != nil {
                        t.Error(err)
                }
-               if err := checkEqual(x, v); err != nil {
+               if err := test.Differ(x, v); err != nil {
                        t.Error(err)
                }
        }
@@ -151,7 +146,7 @@ func TestTypesRoundTripAll(t *testing.T) {
                        t.Error(err)
                }
                v := vp.Elem().Interface()
-               if err := checkEqual(x, v); err != nil {
+               if err := test.Differ(x, v); err != nil {
                        t.Error(err)
                }
        }
@@ -175,7 +170,7 @@ func TestDescribed(t *testing.T) {
        if err := checkUnmarshal(marshaled, &d); err != nil {
                t.Error(err)
        }
-       if err := checkEqual(want, d); err != nil {
+       if err := test.Differ(want, d); err != nil {
                t.Error(err)
        }
 
@@ -187,7 +182,7 @@ func TestDescribed(t *testing.T) {
        if _, ok := i.(Described); !ok {
                t.Errorf("Expected Described, got %T(%v)", i, i)
        }
-       if err := checkEqual(want, i); err != nil {
+       if err := test.Differ(want, i); err != nil {
                t.Error(err)
        }
 
@@ -196,33 +191,33 @@ func TestDescribed(t *testing.T) {
        if err := checkUnmarshal(marshaled, &s); err != nil {
                t.Error(err)
        }
-       if err := checkEqual(want.Value, s); err != nil {
+       if err := test.Differ(want.Value, s); err != nil {
                t.Error(err)
        }
 }
 
 func TestTimeConversion(t *testing.T) {
        pt := pnTime(timeValue)
-       if err := checkEqual(timeValue, goTime(pt)); err != nil {
+       if err := test.Differ(timeValue, goTime(pt)); err != nil {
                t.Error(err)
        }
-       if err := checkEqual(pt, pnTime(goTime(pt))); err != nil {
+       if err := test.Differ(pt, pnTime(goTime(pt))); err != nil {
                t.Error(err)
        }
        ut := time.Unix(123, 456*1000000)
-       if err := checkEqual(123456, int(pnTime(ut))); err != nil {
+       if err := test.Differ(123456, int(pnTime(ut))); err != nil {
                t.Error(err)
        }
-       if err := checkEqual(ut, goTime(123456)); err != nil {
+       if err := test.Differ(ut, goTime(123456)); err != nil {
                t.Error(err)
        }
 
        // Preserve zero values
        var tz time.Time
-       if err := checkEqual(0, int(pnTime(tz))); err != nil {
+       if err := test.Differ(0, int(pnTime(tz))); err != nil {
                t.Error(err)
        }
-       if err := checkEqual(tz, goTime(pnTime(tz))); err != nil {
+       if err := test.Differ(tz, goTime(pnTime(tz))); err != nil {
                t.Error(err)
        }
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/90dbf46c/go/src/qpid.apache.org/electron/auth_test.go
----------------------------------------------------------------------
diff --git a/go/src/qpid.apache.org/electron/auth_test.go 
b/go/src/qpid.apache.org/electron/auth_test.go
index 30ef401..9f73830 100644
--- a/go/src/qpid.apache.org/electron/auth_test.go
+++ b/go/src/qpid.apache.org/electron/auth_test.go
@@ -27,15 +27,17 @@ import (
        "path/filepath"
        "strings"
        "testing"
+
+       "qpid.apache.org/internal/test"
 )
 
 func TestAuthAnonymous(t *testing.T) {
        p := newPipe(t,
                []ConnectionOption{User("fred"), VirtualHost("vhost"), 
SASLAllowInsecure(true)},
                []ConnectionOption{SASLAllowedMechs("ANONYMOUS"), 
SASLAllowInsecure(true)})
-       fatalIf(t, p.server.Sync())
-       errorIf(t, checkEqual("anonymous", p.server.User()))
-       errorIf(t, checkEqual("vhost", p.server.VirtualHost()))
+       test.FatalIf(t, p.server.Sync())
+       test.ErrorIf(t, test.Differ("anonymous", p.server.User()))
+       test.ErrorIf(t, test.Differ("vhost", p.server.VirtualHost()))
 }
 
 func TestAuthPlain(t *testing.T) {
@@ -43,8 +45,8 @@ func TestAuthPlain(t *testing.T) {
        p := newPipe(t,
                []ConnectionOption{SASLAllowInsecure(true), 
SASLAllowedMechs("PLAIN"), User("fred@proton"), Password([]byte("xxx"))},
                []ConnectionOption{SASLAllowInsecure(true), 
SASLAllowedMechs("PLAIN")})
-       fatalIf(t, p.server.Sync())
-       errorIf(t, checkEqual("fred@proton", p.server.User()))
+       test.FatalIf(t, p.server.Sync())
+       test.ErrorIf(t, test.Differ("fred@proton", p.server.User()))
 }
 
 func TestAuthBadPass(t *testing.T) {

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/90dbf46c/go/src/qpid.apache.org/electron/benchmark_test.go
----------------------------------------------------------------------
diff --git a/go/src/qpid.apache.org/electron/benchmark_test.go 
b/go/src/qpid.apache.org/electron/benchmark_test.go
index 0de53d8..9ab2b9a 100644
--- a/go/src/qpid.apache.org/electron/benchmark_test.go
+++ b/go/src/qpid.apache.org/electron/benchmark_test.go
@@ -26,6 +26,7 @@ import (
        "testing"
 
        "qpid.apache.org/amqp"
+       "qpid.apache.org/internal/test"
 )
 
 // To change capacity use
@@ -59,7 +60,7 @@ func (bm *bmCommon) receiveAccept() {
                if rm, err := bm.r.Receive(); err != nil {
                        bm.b.Fatal(err)
                } else {
-                       fatalIf(bm.b, rm.Accept())
+                       test.FatalIf(bm.b, rm.Accept())
                }
        }
 }
@@ -67,7 +68,7 @@ func (bm *bmCommon) receiveAccept() {
 func (bm *bmCommon) outcomes() {
        defer bm.done.Done()
        for n := 0; n < bm.b.N; n++ {
-               fatalIf(bm.b, (<-bm.ack).Error)
+               test.FatalIf(bm.b, (<-bm.ack).Error)
        }
 }
 
@@ -98,7 +99,7 @@ func BenchmarkSendSync(b *testing.B) {
 
        go bm.receiveAccept()
        for n := 0; n < b.N; n++ {
-               fatalIf(b, bm.s.SendSync(emptyMsg).Error)
+               test.FatalIf(b, bm.s.SendSync(emptyMsg).Error)
        }
        bm.done.Wait()
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/90dbf46c/go/src/qpid.apache.org/electron/common_test.go
----------------------------------------------------------------------
diff --git a/go/src/qpid.apache.org/electron/common_test.go 
b/go/src/qpid.apache.org/electron/common_test.go
index 0f4f543..56c0e44 100644
--- a/go/src/qpid.apache.org/electron/common_test.go
+++ b/go/src/qpid.apache.org/electron/common_test.go
@@ -20,43 +20,12 @@ under the License.
 package electron
 
 import (
-       "fmt"
        "net"
-       "path"
-       "reflect"
-       "runtime"
        "sync"
        "testing"
-)
-
-func decorate(err error, callDepth int) string {
-       _, file, line, _ := runtime.Caller(callDepth + 1) // annotate with 
location of caller.
-       _, file = path.Split(file)
-       return fmt.Sprintf("\n%s:%d: %v", file, line, err)
-}
 
-func fatalIfN(t testing.TB, err error, callDepth int) {
-       if err != nil {
-               t.Fatal(decorate(err, callDepth+1))
-       }
-}
-
-func fatalIf(t testing.TB, err error) {
-       fatalIfN(t, err, 1)
-}
-
-func errorIf(t testing.TB, err error) {
-       if err != nil {
-               t.Error(decorate(err, 1))
-       }
-}
-
-func checkEqual(want interface{}, got interface{}) error {
-       if !reflect.DeepEqual(want, got) {
-               return fmt.Errorf("(%#v != %#v)", want, got)
-       }
-       return nil
-}
+       "qpid.apache.org/internal/test"
+)
 
 // AMQP client/server pair
 type pair struct {
@@ -113,8 +82,9 @@ func newPipe(t testing.TB, clientOpts, serverOpts 
[]ConnectionOption) *pair {
 
 // AMQP pair linked by TCP socket
 func newSocketPair(t testing.TB, clientOpts, serverOpts []ConnectionOption) 
*pair {
+       t.Helper()
        l, err := net.Listen("tcp4", ":0") // For systems with ipv6 disabled
-       fatalIfN(t, err, 1)
+       test.FatalIf(t, err)
        var srv Connection
        var srvErr error
        var wg sync.WaitGroup
@@ -125,9 +95,9 @@ func newSocketPair(t testing.TB, clientOpts, serverOpts 
[]ConnectionOption) *pai
        }()
        addr := l.Addr()
        cli, err := NewContainer("client").Dial(addr.Network(), addr.String(), 
clientOpts...)
-       fatalIfN(t, err, 1)
+       test.FatalIf(t, err)
        wg.Wait()
-       fatalIfN(t, srvErr, 1)
+       test.FatalIf(t, srvErr)
        return newPair(t, cli, srv)
 }
 
@@ -136,7 +106,7 @@ func (p *pair) close() { p.client.Connection().Close(nil); 
p.server.Close(nil) }
 // Return a client sender and server receiver
 func (p *pair) sender(opts ...LinkOption) (Sender, Receiver) {
        snd, err := p.client.Sender(opts...)
-       fatalIfN(p.t, err, 2)
+       test.FatalIf(p.t, err)
        rcv := <-p.rchan
        return snd, rcv
 }
@@ -144,7 +114,7 @@ func (p *pair) sender(opts ...LinkOption) (Sender, 
Receiver) {
 // Return a client receiver and server sender
 func (p *pair) receiver(opts ...LinkOption) (Receiver, Sender) {
        rcv, err := p.client.Receiver(opts...)
-       fatalIfN(p.t, err, 2)
+       test.FatalIf(p.t, err)
        snd := <-p.schan
        return rcv, snd
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/90dbf46c/go/src/qpid.apache.org/electron/electron_test.go
----------------------------------------------------------------------
diff --git a/go/src/qpid.apache.org/electron/electron_test.go 
b/go/src/qpid.apache.org/electron/electron_test.go
index 2517de1..352a242 100644
--- a/go/src/qpid.apache.org/electron/electron_test.go
+++ b/go/src/qpid.apache.org/electron/electron_test.go
@@ -25,6 +25,7 @@ import (
        "time"
 
        "qpid.apache.org/amqp"
+       "qpid.apache.org/internal/test"
 )
 
 // Send a message one way with a client sender and server receiver, verify ack.
@@ -51,12 +52,12 @@ func TestClientSender(t *testing.T) {
                                m := 
amqp.NewMessageWith(fmt.Sprintf("foobar%v-%v", i, j))
                                var err error
                                s[i].SendAsync(m, ack, "testing")
-                               fatalIf(t, err)
+                               test.FatalIf(t, err)
                        }()
 
                        // Server receive
                        rm, err := r[i].Receive()
-                       fatalIf(t, err)
+                       test.FatalIf(t, err)
                        if want, got := interface{}(fmt.Sprintf("foobar%v-%v", 
i, j)), rm.Message.Body(); want != got {
                                t.Errorf("%#v != %#v", want, got)
                        }
@@ -89,14 +90,14 @@ func TestClientReceiver(t *testing.T) {
        go func() {
                for i := 0; i < nMessages; i++ { // Server sends
                        out := s.SendSync(amqp.NewMessageWith(int32(i)))
-                       fatalIf(t, out.Error)
+                       test.FatalIf(t, out.Error)
                }
        }()
        for i := 0; i < nMessages; i++ { // Client receives
                rm, err := r.Receive()
-               fatalIf(t, err)
-               errorIf(t, checkEqual(int32(i), rm.Message.Body()))
-               errorIf(t, rm.Accept())
+               test.FatalIf(t, err)
+               test.ErrorIf(t, test.Differ(int32(i), rm.Message.Body()))
+               test.ErrorIf(t, rm.Accept())
        }
 }
 
@@ -301,20 +302,20 @@ func TestHeartbeat(t *testing.T) {
        defer close(unfreeze)
        freeze := func() error { return 
p.server.(*connection).engine.Inject(func() { <-unfreeze }) }
 
-       fatalIf(t, p.client.Sync())
-       errorIf(t, checkEqual(101*time.Millisecond, 
p.client.Connection().Heartbeat()))
-       errorIf(t, checkEqual(102*time.Millisecond, p.server.Heartbeat()))
+       test.FatalIf(t, p.client.Sync())
+       test.ErrorIf(t, test.Differ(101*time.Millisecond, 
p.client.Connection().Heartbeat()))
+       test.ErrorIf(t, test.Differ(102*time.Millisecond, p.server.Heartbeat()))
 
        // Freeze the server for less than a heartbeat
-       fatalIf(t, freeze())
+       test.FatalIf(t, freeze())
        time.Sleep(5 * time.Millisecond)
        unfreeze <- true
        // Make sure server is still responding.
        s, _ := p.sender()
-       errorIf(t, s.Sync())
+       test.ErrorIf(t, s.Sync())
 
        // Freeze the server till the p.client times out the connection
-       fatalIf(t, freeze())
+       test.FatalIf(t, freeze())
        select {
        case <-p.client.Done():
                if amqp.ResourceLimitExceeded != 
p.client.Error().(amqp.Error).Name {

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/90dbf46c/go/src/qpid.apache.org/electron/link_test.go
----------------------------------------------------------------------
diff --git a/go/src/qpid.apache.org/electron/link_test.go 
b/go/src/qpid.apache.org/electron/link_test.go
index feb1f20..4041d8b 100644
--- a/go/src/qpid.apache.org/electron/link_test.go
+++ b/go/src/qpid.apache.org/electron/link_test.go
@@ -22,10 +22,12 @@ package electron
 
 import (
        "net"
-       "qpid.apache.org/amqp"
-       "qpid.apache.org/proton"
        "testing"
        "time"
+
+       "qpid.apache.org/amqp"
+       "qpid.apache.org/internal/test"
+       "qpid.apache.org/proton"
 )
 
 func TestLinkSettings(t *testing.T) {
@@ -37,27 +39,27 @@ func TestLinkSettings(t *testing.T) {
                close(done)
                defer sConn.Close()
                c, err := NewConnection(sConn, Server())
-               fatalIf(t, err)
+               test.FatalIf(t, err)
                for in := range c.Incoming() {
                        ep := in.Accept()
                        switch ep := ep.(type) {
                        case Receiver:
-                               errorIf(t, checkEqual("one.source", 
ep.Source()))
-                               errorIf(t, checkEqual(TerminusSettings{}, 
ep.SourceSettings()))
-                               errorIf(t, checkEqual("one.target", 
ep.Target()))
-                               errorIf(t, checkEqual(settings, 
ep.TargetSettings()))
+                               test.ErrorIf(t, test.Differ("one.source", 
ep.Source()))
+                               test.ErrorIf(t, test.Differ(TerminusSettings{}, 
ep.SourceSettings()))
+                               test.ErrorIf(t, test.Differ("one.target", 
ep.Target()))
+                               test.ErrorIf(t, test.Differ(settings, 
ep.TargetSettings()))
                        case Sender:
-                               errorIf(t, checkEqual("two", ep.LinkName()))
-                               errorIf(t, checkEqual("two.source", 
ep.Source()))
-                               errorIf(t, 
checkEqual(TerminusSettings{Durability: proton.Deliveries, Expiry: 
proton.ExpireNever}, ep.SourceSettings()))
-                               errorIf(t, checkEqual(filterMap, ep.Filter()))
+                               test.ErrorIf(t, test.Differ("two", 
ep.LinkName()))
+                               test.ErrorIf(t, test.Differ("two.source", 
ep.Source()))
+                               test.ErrorIf(t, 
test.Differ(TerminusSettings{Durability: proton.Deliveries, Expiry: 
proton.ExpireNever}, ep.SourceSettings()))
+                               test.ErrorIf(t, test.Differ(filterMap, 
ep.Filter()))
                        }
                }
        }()
 
        // Client
        c, err := NewConnection(cConn)
-       fatalIf(t, err)
+       test.FatalIf(t, err)
        c.Sender(Source("one.source"), Target("one.target"), 
TargetSettings(settings))
 
        c.Receiver(Source("two.source"), DurableSubscription("two"), 
Filter(filterMap))

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/90dbf46c/go/src/qpid.apache.org/internal/test/test.go
----------------------------------------------------------------------
diff --git a/go/src/qpid.apache.org/internal/test/test.go 
b/go/src/qpid.apache.org/internal/test/test.go
new file mode 100644
index 0000000..6429d01
--- /dev/null
+++ b/go/src/qpid.apache.org/internal/test/test.go
@@ -0,0 +1,78 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+// Utilities to supplement the standard Go testing package
+package test
+
+import (
+       "fmt"
+       "path"
+       "reflect"
+       "runtime"
+       "testing"
+)
+
+// The testing.TB.Helper() function does not seem to work
+func decorate(msg string, callDepth int) string {
+       _, file, line, _ := runtime.Caller(callDepth + 1) // annotate with 
location of caller.
+       _, file = path.Split(file)
+       return fmt.Sprintf("\n%s:%d: %v", file, line, msg)
+}
+
+func message(err error, args ...interface{}) (msg string) {
+       if len(args) > 0 {
+               msg = fmt.Sprintf(args[0].(string), args[1:]...) + ": "
+       }
+       msg = msg + err.Error()
+       return
+}
+
+// ErrorIf calls t.Error() if err != nil, with optional format message
+func ErrorIf(t testing.TB, err error, format ...interface{}) error {
+       t.Helper()
+       if err != nil {
+               t.Error(message(err, format...))
+       }
+       return err
+}
+
+// ErrorIf calls t.Fatal() if err != nil, with optional format message
+func FatalIf(t testing.TB, err error, format ...interface{}) {
+       t.Helper()
+       if err != nil {
+               t.Fatal(message(err, format...))
+       }
+}
+
+// Extend the methods on testing.TB
+type TB struct{ testing.TB }
+
+func (t *TB) ErrorIf(err error, format ...interface{}) error {
+       t.Helper()
+       return ErrorIf(t, err, format...)
+}
+func (t *TB) FatalIf(err error, format ...interface{}) { t.Helper(); 
FatalIf(t, err, format...) }
+
+// if reflect.DeepEqual(want, got) { return nil } else { return error("want != 
got" })
+func Differ(want interface{}, got interface{}) error {
+       if !reflect.DeepEqual(want, got) {
+               return fmt.Errorf("(%T)%#v != (%T)%#v)", want, want, got, got)
+       }
+       return nil
+}

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/90dbf46c/go/src/qpid.apache.org/proton/proton_test.go
----------------------------------------------------------------------
diff --git a/go/src/qpid.apache.org/proton/proton_test.go 
b/go/src/qpid.apache.org/proton/proton_test.go
index aad93eb..ac1b468 100644
--- a/go/src/qpid.apache.org/proton/proton_test.go
+++ b/go/src/qpid.apache.org/proton/proton_test.go
@@ -22,31 +22,11 @@ package proton
 import (
        "fmt"
        "net"
-       "path"
-       "runtime"
        "testing"
        "time"
-)
-
-func errorIf(t *testing.T, err error) {
-       if err != nil {
-               _, file, line, ok := runtime.Caller(1) // annotate with 
location of caller.
-               if ok {
-                       _, file = path.Split(file)
-               }
-               t.Errorf("(from %s:%d) %v", file, line, err)
-       }
-}
 
-func fatalIf(t *testing.T, err error) {
-       if err != nil {
-               _, file, line, ok := runtime.Caller(1) // annotate with 
location of caller.
-               if ok {
-                       _, file = path.Split(file)
-               }
-               t.Fatalf("(from %s:%d) %v", file, line, err)
-       }
-}
+       "qpid.apache.org/internal/test"
+)
 
 type events []EventType
 
@@ -82,15 +62,15 @@ func (eng *testEngine) expect(events []EventType) error {
 func Test(t *testing.T) {
        cConn, sConn := net.Pipe()
        client, err := newTestEngine(cConn)
-       fatalIf(t, err)
+       test.FatalIf(t, err)
        server, err := newTestEngine(sConn)
-       fatalIf(t, err)
+       test.FatalIf(t, err)
        server.Server()
        go client.Run()
        go server.Run()
-       fatalIf(t, server.expect(events{EConnectionInit, EConnectionBound}))
-       fatalIf(t, client.expect(events{EConnectionInit, EConnectionBound}))
-       fatalIf(t, client.InjectWait(func() error { client.Connection().Open(); 
return nil }))
-       fatalIf(t, client.expect(events{EConnectionLocalOpen}))
-       fatalIf(t, server.expect(events{EConnectionRemoteOpen}))
+       test.FatalIf(t, server.expect(events{EConnectionInit, 
EConnectionBound}))
+       test.FatalIf(t, client.expect(events{EConnectionInit, 
EConnectionBound}))
+       test.FatalIf(t, client.InjectWait(func() error { 
client.Connection().Open(); return nil }))
+       test.FatalIf(t, client.expect(events{EConnectionLocalOpen}))
+       test.FatalIf(t, server.expect(events{EConnectionRemoteOpen}))
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to