forked from apache/cassandra-gocql-driver
-
Notifications
You must be signed in to change notification settings - Fork 57
/
marshal_14_inet_test.go
116 lines (103 loc) · 3.47 KB
/
marshal_14_inet_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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package gocql_test
import (
"net"
"testing"
"github.com/gocql/gocql"
"github.com/gocql/gocql/internal/tests/serialization"
"github.com/gocql/gocql/internal/tests/serialization/mod"
)
func TestMarshalsInet(t *testing.T) {
tType := gocql.NewNativeType(4, gocql.TypeInet, "")
marshal := func(i interface{}) ([]byte, error) { return gocql.Marshal(tType, i) }
unmarshal := func(bytes []byte, i interface{}) error {
return gocql.Unmarshal(tType, bytes, i)
}
// marshal and unmarshal []byte{}, [4]byte{}, [16]byte{} and `custom types` of these types unsupported
// marshal and unmarshal `custom string` unsupported
brokenTypes := serialization.GetTypes(mod.Values{
[]byte{},
[4]byte{},
[16]byte{},
mod.String(""),
}.AddVariants(mod.All...)...)
// unmarshal zero and nil data into `net.IP` and `string` unsupported
brokenZeroUnmarshal := serialization.GetTypes(mod.Values{net.IP{}, ""}.AddVariants(mod.Reference)...)
serialization.PositiveSet{
Data: nil,
Values: mod.Values{
([]byte)(nil),
(*[]byte)(nil),
(*[4]byte)(nil),
(*[16]byte)(nil),
(net.IP)(nil),
(*net.IP)(nil),
"",
(*string)(nil),
}.AddVariants(mod.CustomType),
BrokenMarshalTypes: serialization.GetTypes([]byte{}, mod.Bytes{}, "", mod.String("")),
BrokenUnmarshalTypes: serialization.GetTypes([]byte{}, mod.Bytes{}, net.IP{}, mod.String("")),
}.Run("[nil]nullable", t, marshal, unmarshal)
serialization.PositiveSet{
Data: nil,
Values: mod.Values{
[4]byte{},
[16]byte{},
}.AddVariants(mod.CustomType),
BrokenUnmarshalTypes: brokenTypes,
}.Run("[nil]unmarshal", t, nil, unmarshal)
serialization.PositiveSet{
Data: make([]byte, 0),
Values: mod.Values{
make([]byte, 0),
[4]byte{},
[16]byte{},
make(net.IP, 0),
"0.0.0.0",
}.AddVariants(mod.All...),
BrokenUnmarshalTypes: append(brokenTypes, brokenZeroUnmarshal...),
}.Run("[]unmarshal", t, nil, unmarshal)
serialization.PositiveSet{
Data: []byte{0, 0, 0, 0},
Values: mod.Values{
"0.0.0.0",
[]byte{0, 0, 0, 0},
net.IP{0, 0, 0, 0},
[4]byte{0, 0, 0, 0},
}.AddVariants(mod.All...),
BrokenMarshalTypes: brokenTypes,
BrokenUnmarshalTypes: brokenTypes,
}.Run("zerosV4", t, marshal, unmarshal)
serialization.PositiveSet{
Data: []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
Values: mod.Values{
"::",
[]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
net.IP{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
[16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}.AddVariants(mod.All...),
BrokenMarshalTypes: brokenTypes,
BrokenUnmarshalTypes: brokenTypes,
}.Run("zerosV6", t, marshal, unmarshal)
serialization.PositiveSet{
Data: []byte{192, 168, 0, 1},
Values: mod.Values{
"192.168.0.1",
[]byte{192, 168, 0, 1},
net.IP{192, 168, 0, 1},
[4]byte{192, 168, 0, 1},
}.AddVariants(mod.All...),
BrokenMarshalTypes: brokenTypes,
BrokenUnmarshalTypes: brokenTypes,
}.Run("ipV4", t, marshal, unmarshal)
serialization.PositiveSet{
Data: []byte("\xfe\x80\xcd\x00\x00\x00\x0c\xde\x12\x57\x00\x00\x21\x1e\x72\x9c"),
Values: mod.Values{
"fe80:cd00:0:cde:1257:0:211e:729c",
[]byte("\xfe\x80\xcd\x00\x00\x00\x0c\xde\x12\x57\x00\x00\x21\x1e\x72\x9c"),
net.IP("\xfe\x80\xcd\x00\x00\x00\x0c\xde\x12\x57\x00\x00\x21\x1e\x72\x9c"),
[16]byte{254, 128, 205, 0, 0, 0, 12, 222, 18, 87, 0, 0, 33, 30, 114, 156},
}.AddVariants(mod.All...),
BrokenMarshalTypes: brokenTypes,
BrokenUnmarshalTypes: brokenTypes,
}.Run("ipV6", t, marshal, unmarshal)
}