forked from orijtech/groupcache
-
Notifications
You must be signed in to change notification settings - Fork 12
/
codec_test.go
76 lines (66 loc) · 1.89 KB
/
codec_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
Copyright 2019 Vimeo Inc.
Licensed 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.
*/
package galaxycache
import (
"bytes"
"testing"
)
const testBytes = "some bytes"
func TestCodec(t *testing.T) {
var stringCodec StringCodec
testCases := []struct {
testName string
codec Codec
checkCopy bool
}{
{
testName: "ByteCodec",
codec: &ByteCodec{},
checkCopy: false,
},
{
testName: "CopyingByteCodec",
codec: &CopyingByteCodec{},
checkCopy: true,
},
{
testName: "StringCodec",
codec: &stringCodec,
checkCopy: true,
},
}
for _, tc := range testCases {
t.Run(tc.testName, func(t *testing.T) {
inBytes := []byte(testBytes)
tc.codec.UnmarshalBinary(inBytes)
inBytes[0] = 'a' // change the original byte slice to ensure copy was made
marshaledBytes, err := tc.codec.MarshalBinary()
if err != nil {
t.Errorf("Error marshaling from byteCodec: %s", err)
}
if string(marshaledBytes) != testBytes {
t.Errorf("Unmarshal/Marshal resulted in %q; want %q", marshaledBytes, testBytes)
}
if tc.checkCopy {
marshaledBytes[0] = 'a' // change marshaled bytes to ensure full copy on marshal
secondMarshaledBytes, errM := tc.codec.MarshalBinary()
if errM != nil {
t.Errorf("Error marshaling from byteCodec: %s", errM)
}
if bytes.Equal(marshaledBytes, secondMarshaledBytes) {
t.Errorf("Marshaling did not copy the bytes")
}
}
})
}
}