github.com/elfadel/cilium@v1.6.12/pkg/monitor/payload/monitor_payload_test.go (about) 1 // Copyright 2017 Authors of Cilium 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // +build !privileged_tests 16 17 package payload 18 19 import ( 20 "bytes" 21 "encoding/gob" 22 "testing" 23 24 "github.com/cilium/cilium/pkg/checker" 25 26 . "gopkg.in/check.v1" 27 ) 28 29 func Test(t *testing.T) { TestingT(t) } 30 31 type PayloadSuite struct{} 32 33 var _ = Suite(&PayloadSuite{}) 34 35 func (s *PayloadSuite) TestMeta_UnMarshalBinary(c *C) { 36 meta1 := Meta{Size: 1234} 37 buf, err := meta1.MarshalBinary() 38 c.Assert(err, Equals, nil) 39 40 var meta2 Meta 41 err = meta2.UnmarshalBinary(buf) 42 c.Assert(err, Equals, nil) 43 44 c.Assert(meta1, checker.DeepEquals, meta2) 45 } 46 47 func (s *PayloadSuite) TestPayload_UnMarshalBinary(c *C) { 48 payload1 := Payload{ 49 Data: []byte{1, 2, 3, 4}, 50 Lost: 5243, 51 CPU: 12, 52 Type: 9, 53 } 54 buf, err := payload1.Encode() 55 c.Assert(err, Equals, nil) 56 57 var payload2 Payload 58 err = payload2.Decode(buf) 59 c.Assert(err, Equals, nil) 60 61 c.Assert(payload1, checker.DeepEquals, payload2) 62 } 63 64 func (s *PayloadSuite) TestWriteReadMetaPayload(c *C) { 65 meta1 := Meta{Size: 1234} 66 payload1 := Payload{ 67 Data: []byte{1, 2, 3, 4}, 68 Lost: 5243, 69 CPU: 12, 70 Type: 9, 71 } 72 73 var buf bytes.Buffer 74 err := WriteMetaPayload(&buf, &meta1, &payload1) 75 c.Assert(err, Equals, nil) 76 77 var meta2 Meta 78 var payload2 Payload 79 err = ReadMetaPayload(&buf, &meta2, &payload2) 80 c.Assert(err, Equals, nil) 81 82 c.Assert(meta1, checker.DeepEquals, meta2) 83 c.Assert(payload1, checker.DeepEquals, payload2) 84 } 85 86 func (s *PayloadSuite) BenchmarkWriteMetaPayload(c *C) { 87 meta := Meta{Size: 1234} 88 pl := Payload{ 89 Data: []byte{1, 2, 3, 4}, 90 Lost: 5243, 91 CPU: 12, 92 Type: 9, 93 } 94 95 // Do a first dry run to pre-allocate the buffer capacity. 96 var buf bytes.Buffer 97 err := WriteMetaPayload(&buf, &meta, &pl) 98 c.Assert(err, Equals, nil) 99 100 for i := 0; i < c.N; i++ { 101 buf.Reset() 102 err := WriteMetaPayload(&buf, &meta, &pl) 103 c.Assert(err, Equals, nil) 104 } 105 } 106 107 func (s *PayloadSuite) BenchmarkReadMetaPayload(c *C) { 108 payload := Payload{ 109 Data: []byte{1, 2, 3, 4}, 110 Lost: 5243, 111 CPU: 12, 112 Type: 9, 113 } 114 115 var buf bytes.Buffer 116 for i := 0; i < c.N; i++ { 117 err := payload.WriteBinary(&buf) 118 c.Assert(err, Equals, nil) 119 } 120 121 for i := 0; i < c.N; i++ { 122 err := payload.ReadBinary(&buf) 123 c.Assert(err, Equals, nil) 124 } 125 } 126 127 func (s *PayloadSuite) BenchmarkWritePayloadReuseEncoder(c *C) { 128 payload := Payload{ 129 Data: []byte{1, 2, 3, 4}, 130 Lost: 5243, 131 CPU: 12, 132 Type: 9, 133 } 134 135 // Do a first dry run to pre-allocate the buffer capacity. 136 var buf bytes.Buffer 137 enc := gob.NewEncoder(&buf) 138 err := payload.EncodeBinary(enc) 139 c.Assert(err, Equals, nil) 140 141 for i := 0; i < c.N; i++ { 142 buf.Reset() 143 err := payload.EncodeBinary(enc) 144 c.Assert(err, Equals, nil) 145 } 146 } 147 148 func (s *PayloadSuite) BenchmarkReadPayloadRuseEncoder(c *C) { 149 payload := Payload{ 150 Data: []byte{1, 2, 3, 4}, 151 Lost: 5243, 152 CPU: 12, 153 Type: 9, 154 } 155 156 var buf bytes.Buffer 157 158 // prefill an encoded stream 159 enc := gob.NewEncoder(&buf) 160 for i := 0; i < c.N; i++ { 161 err := payload.EncodeBinary(enc) 162 c.Assert(err, Equals, nil) 163 } 164 165 dec := gob.NewDecoder(&buf) 166 for i := 0; i < c.N; i++ { 167 err := payload.DecodeBinary(dec) 168 c.Assert(err, Equals, nil) 169 } 170 }