github.com/awesome-flow/flow@v0.0.3-0.20190918184116-508d75d68a2c/pkg/corev1alpha1/message_test.go (about) 1 package corev1alpha1 2 3 import ( 4 "math/rand" 5 "reflect" 6 "testing" 7 "time" 8 9 testutil "github.com/awesome-flow/flow/pkg/util/test" 10 ) 11 12 func TestNewMessage(t *testing.T) { 13 body := testutil.RandBytes(1024) 14 msg := NewMessage(body) 15 if !reflect.DeepEqual(msg.body, body) { 16 t.Fatalf("unexpected message body: got: %s, want: %s", msg.body, body) 17 } 18 if msg.status != MsgStatusNew { 19 t.Fatalf("unexpected message status: got %d, want: %d", msg.status, MsgStatusNew) 20 } 21 } 22 23 func TestNewMessageCopyBody(t *testing.T) { 24 body := testutil.RandBytes(1024) 25 msg := NewMessage(body) 26 // RandBytes guarantees to place a non-zero byte at any pos 27 body[rand.Intn(len(body))] = '\x00' 28 if reflect.DeepEqual(msg.body, body) { 29 t.Fatalf("detected a side affect of the original body modification") 30 } 31 } 32 33 func TestAwait(t *testing.T) { 34 done := make(chan struct{}) 35 msg := NewMessage(testutil.RandBytes(1024)) 36 go func() { 37 msg.Await() 38 close(done) 39 }() 40 msg.Complete(MsgStatusDone) 41 select { 42 case <-done: 43 case <-time.After(time.Second): 44 t.Fatalf("timed out to await") 45 } 46 } 47 48 func TestAwaitChan(t *testing.T) { 49 msg := NewMessage(testutil.RandBytes(1024)) 50 go func() { 51 msg.Complete(MsgStatusDone) 52 }() 53 select { 54 case <-msg.AwaitChan(): 55 case <-time.After(time.Second): 56 t.Fatalf("timed out to await chan") 57 } 58 } 59 60 func TestMetaKeys(t *testing.T) { 61 msg := NewMessage(testutil.RandBytes(1024)) 62 meta := make(map[string]interface{}) 63 for i, max := 0, testutil.RandInt(128); i < max; i++ { 64 k := string(testutil.RandBytes(1024)) 65 v := testutil.RandBytes(1024) 66 meta[k] = v 67 msg.SetMeta(k, v) 68 } 69 for k, v := range meta { 70 if msgv, _ := msg.Meta(k); !reflect.DeepEqual(msgv, v) { 71 t.Fatalf("unexpected value in msg meta: %q, want: %q", msgv, v) 72 } 73 } 74 } 75 76 func TestCopy(t *testing.T) { 77 msg := NewMessage(testutil.RandBytes(1024)) 78 for i, max := 0, testutil.RandInt(128); i < max; i++ { 79 k := string(testutil.RandBytes(1024)) 80 v := testutil.RandBytes(1024) 81 msg.SetMeta(k, v) 82 } 83 cpmsg := msg.Copy() 84 if !reflect.DeepEqual(msg.Body(), cpmsg.Body()) { 85 t.Fatalf("unexpected message body: %q, want: %q", cpmsg.Body(), msg.Body()) 86 } 87 if !reflect.DeepEqual(cpmsg.meta, msg.meta) { 88 t.Fatalf("unexpected message meta: %v, want: %v", cpmsg.meta, msg.meta) 89 } 90 }