summaryrefslogtreecommitdiffstats
path: root/model/websocket_message_test.go
diff options
context:
space:
mode:
authorChris <ccbrown112@gmail.com>2018-02-20 12:50:10 -0600
committerChristopher Speller <crspeller@gmail.com>2018-02-20 10:50:10 -0800
commit19a5d0047dbe5e4d7f4675893bfee125d3a12312 (patch)
tree3007bd99e82309f2f03eabe79aad70e1ec25204e /model/websocket_message_test.go
parentbabd795d792e95f6e708af6ee8207ef6877e2b32 (diff)
downloadchat-19a5d0047dbe5e4d7f4675893bfee125d3a12312.tar.gz
chat-19a5d0047dbe5e4d7f4675893bfee125d3a12312.tar.bz2
chat-19a5d0047dbe5e4d7f4675893bfee125d3a12312.zip
MM-8710: Web Hub optimizations (#8293)
* webhub optimizations * test fix * minor fix * big perf improvement to ToJson after precomputing * fix hub connection count
Diffstat (limited to 'model/websocket_message_test.go')
-rw-r--r--model/websocket_message_test.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/model/websocket_message_test.go b/model/websocket_message_test.go
index 1b75d0f6e..10404c299 100644
--- a/model/websocket_message_test.go
+++ b/model/websocket_message_test.go
@@ -6,6 +6,8 @@ package model
import (
"strings"
"testing"
+
+ "github.com/stretchr/testify/assert"
)
func TestWebSocketEvent(t *testing.T) {
@@ -54,3 +56,49 @@ func TestWebSocketResponse(t *testing.T) {
t.Fatal("Ids do not match")
}
}
+
+func TestWebSocketEvent_PrecomputeJSON(t *testing.T) {
+ event := NewWebSocketEvent(WEBSOCKET_EVENT_POSTED, "foo", "bar", "baz", nil)
+ event.Sequence = 7
+
+ before := event.ToJson()
+ event.PrecomputeJSON()
+ after := event.ToJson()
+
+ assert.JSONEq(t, before, after)
+}
+
+var stringSink string
+
+func BenchmarkWebSocketEvent_ToJson(b *testing.B) {
+ event := NewWebSocketEvent(WEBSOCKET_EVENT_POSTED, "foo", "bar", "baz", nil)
+ for i := 0; i < 100; i++ {
+ event.Data[NewId()] = NewId()
+ }
+
+ b.Run("SerializedNTimes", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ stringSink = event.ToJson()
+ }
+ })
+
+ b.Run("PrecomputedNTimes", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ event.PrecomputeJSON()
+ }
+ })
+
+ b.Run("PrecomputedAndSerializedNTimes", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ event.PrecomputeJSON()
+ stringSink = event.ToJson()
+ }
+ })
+
+ event.PrecomputeJSON()
+ b.Run("PrecomputedOnceAndSerializedNTimes", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ stringSink = event.ToJson()
+ }
+ })
+}