cloudflare/cloudflared

Public

mirrored from https://github.com/cloudflare/cloudflaredAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
2021.12.4

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

cfapi/ip_route_test.go

175lines · modecode

1package cfapi
2
3import (
4 "encoding/json"
5 "fmt"
6 "net"
7 "strings"
8 "testing"
9
10 "github.com/google/uuid"
11 "github.com/stretchr/testify/require"
12)
13
14func TestUnmarshalRoute(t *testing.T) {
15 testCases := []struct {
16 Json string
17 HasVnet bool
18 }{
19 {
20 `{
21 "network":"10.1.2.40/29",
22 "tunnel_id":"fba6ffea-807f-4e7a-a740-4184ee1b82c8",
23 "comment":"test",
24 "created_at":"2020-12-22T02:00:15.587008Z",
25 "deleted_at":null
26 }`,
27 false,
28 },
29 {
30 `{
31 "network":"10.1.2.40/29",
32 "tunnel_id":"fba6ffea-807f-4e7a-a740-4184ee1b82c8",
33 "comment":"test",
34 "created_at":"2020-12-22T02:00:15.587008Z",
35 "deleted_at":null,
36 "virtual_network_id":"38c95083-8191-4110-8339-3f438d44fdb9"
37 }`,
38 true,
39 },
40 }
41
42 for _, testCase := range testCases {
43 data := testCase.Json
44
45 var r Route
46 err := json.Unmarshal([]byte(data), &r)
47
48 // Check everything worked
49 require.NoError(t, err)
50 require.Equal(t, uuid.MustParse("fba6ffea-807f-4e7a-a740-4184ee1b82c8"), r.TunnelID)
51 require.Equal(t, "test", r.Comment)
52 _, cidr, err := net.ParseCIDR("10.1.2.40/29")
53 require.NoError(t, err)
54 require.Equal(t, CIDR(*cidr), r.Network)
55 require.Equal(t, "test", r.Comment)
56
57 if testCase.HasVnet {
58 require.Equal(t, uuid.MustParse("38c95083-8191-4110-8339-3f438d44fdb9"), *r.VNetID)
59 } else {
60 require.Nil(t, r.VNetID)
61 }
62 }
63}
64
65func TestDetailedRouteJsonRoundtrip(t *testing.T) {
66 testCases := []struct {
67 Json string
68 HasVnet bool
69 }{
70 {
71 `{
72 "network":"10.1.2.40/29",
73 "tunnel_id":"fba6ffea-807f-4e7a-a740-4184ee1b82c8",
74 "comment":"test",
75 "created_at":"2020-12-22T02:00:15.587008Z",
76 "deleted_at":"2021-01-14T05:01:42.183002Z",
77 "tunnel_name":"Mr. Tun"
78 }`,
79 false,
80 },
81 {
82 `{
83 "network":"10.1.2.40/29",
84 "tunnel_id":"fba6ffea-807f-4e7a-a740-4184ee1b82c8",
85 "virtual_network_id":"38c95083-8191-4110-8339-3f438d44fdb9",
86 "comment":"test",
87 "created_at":"2020-12-22T02:00:15.587008Z",
88 "deleted_at":"2021-01-14T05:01:42.183002Z",
89 "tunnel_name":"Mr. Tun"
90 }`,
91 true,
92 },
93 }
94
95 for _, testCase := range testCases {
96 data := testCase.Json
97
98 var r DetailedRoute
99 err := json.Unmarshal([]byte(data), &r)
100
101 // Check everything worked
102 require.NoError(t, err)
103 require.Equal(t, uuid.MustParse("fba6ffea-807f-4e7a-a740-4184ee1b82c8"), r.TunnelID)
104 require.Equal(t, "test", r.Comment)
105 _, cidr, err := net.ParseCIDR("10.1.2.40/29")
106 require.NoError(t, err)
107 require.Equal(t, CIDR(*cidr), r.Network)
108 require.Equal(t, "test", r.Comment)
109 require.Equal(t, "Mr. Tun", r.TunnelName)
110
111 if testCase.HasVnet {
112 require.Equal(t, uuid.MustParse("38c95083-8191-4110-8339-3f438d44fdb9"), *r.VNetID)
113 } else {
114 require.Nil(t, r.VNetID)
115 }
116
117 bytes, err := json.Marshal(r)
118 require.NoError(t, err)
119 obtainedJson := string(bytes)
120 data = strings.Replace(data, "\t", "", -1)
121 data = strings.Replace(data, "\n", "", -1)
122 require.Equal(t, data, obtainedJson)
123 }
124}
125
126func TestMarshalNewRoute(t *testing.T) {
127 _, network, err := net.ParseCIDR("1.2.3.4/32")
128 require.NoError(t, err)
129 require.NotNil(t, network)
130 vnetId := uuid.New()
131
132 newRoutes := []NewRoute{
133 {
134 Network: *network,
135 TunnelID: uuid.New(),
136 Comment: "hi",
137 },
138 {
139 Network: *network,
140 TunnelID: uuid.New(),
141 Comment: "hi",
142 VNetID: &vnetId,
143 },
144 }
145
146 for _, newRoute := range newRoutes {
147 // Test where receiver is struct
148 serialized, err := json.Marshal(newRoute)
149 require.NoError(t, err)
150 require.True(t, strings.Contains(string(serialized), "tunnel_id"))
151
152 // Test where receiver is pointer to struct
153 serialized, err = json.Marshal(&newRoute)
154 require.NoError(t, err)
155 require.True(t, strings.Contains(string(serialized), "tunnel_id"))
156
157 if newRoute.VNetID == nil {
158 require.False(t, strings.Contains(string(serialized), "virtual_network_id"))
159 } else {
160 require.True(t, strings.Contains(string(serialized), "virtual_network_id"))
161 }
162 }
163}
164
165func TestRouteTableString(t *testing.T) {
166 _, network, err := net.ParseCIDR("1.2.3.4/32")
167 require.NoError(t, err)
168 require.NotNil(t, network)
169 r := DetailedRoute{
170 Network: CIDR(*network),
171 }
172 row := r.TableString()
173 fmt.Println(row)
174 require.True(t, strings.HasPrefix(row, "1.2.3.4/32"))
175}
176