176 lines
4.1 KiB
Go
176 lines
4.1 KiB
Go
package cfapi
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestUnmarshalRoute(t *testing.T) {
|
|
testCases := []struct {
|
|
Json string
|
|
HasVnet bool
|
|
}{
|
|
{
|
|
`{
|
|
"network":"10.1.2.40/29",
|
|
"tunnel_id":"fba6ffea-807f-4e7a-a740-4184ee1b82c8",
|
|
"comment":"test",
|
|
"created_at":"2020-12-22T02:00:15.587008Z",
|
|
"deleted_at":null
|
|
}`,
|
|
false,
|
|
},
|
|
{
|
|
`{
|
|
"network":"10.1.2.40/29",
|
|
"tunnel_id":"fba6ffea-807f-4e7a-a740-4184ee1b82c8",
|
|
"comment":"test",
|
|
"created_at":"2020-12-22T02:00:15.587008Z",
|
|
"deleted_at":null,
|
|
"virtual_network_id":"38c95083-8191-4110-8339-3f438d44fdb9"
|
|
}`,
|
|
true,
|
|
},
|
|
}
|
|
|
|
for _, testCase := range testCases {
|
|
data := testCase.Json
|
|
|
|
var r Route
|
|
err := json.Unmarshal([]byte(data), &r)
|
|
|
|
// Check everything worked
|
|
require.NoError(t, err)
|
|
require.Equal(t, uuid.MustParse("fba6ffea-807f-4e7a-a740-4184ee1b82c8"), r.TunnelID)
|
|
require.Equal(t, "test", r.Comment)
|
|
_, cidr, err := net.ParseCIDR("10.1.2.40/29")
|
|
require.NoError(t, err)
|
|
require.Equal(t, CIDR(*cidr), r.Network)
|
|
require.Equal(t, "test", r.Comment)
|
|
|
|
if testCase.HasVnet {
|
|
require.Equal(t, uuid.MustParse("38c95083-8191-4110-8339-3f438d44fdb9"), *r.VNetID)
|
|
} else {
|
|
require.Nil(t, r.VNetID)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDetailedRouteJsonRoundtrip(t *testing.T) {
|
|
testCases := []struct {
|
|
Json string
|
|
HasVnet bool
|
|
}{
|
|
{
|
|
`{
|
|
"network":"10.1.2.40/29",
|
|
"tunnel_id":"fba6ffea-807f-4e7a-a740-4184ee1b82c8",
|
|
"comment":"test",
|
|
"created_at":"2020-12-22T02:00:15.587008Z",
|
|
"deleted_at":"2021-01-14T05:01:42.183002Z",
|
|
"tunnel_name":"Mr. Tun"
|
|
}`,
|
|
false,
|
|
},
|
|
{
|
|
`{
|
|
"network":"10.1.2.40/29",
|
|
"tunnel_id":"fba6ffea-807f-4e7a-a740-4184ee1b82c8",
|
|
"virtual_network_id":"38c95083-8191-4110-8339-3f438d44fdb9",
|
|
"comment":"test",
|
|
"created_at":"2020-12-22T02:00:15.587008Z",
|
|
"deleted_at":"2021-01-14T05:01:42.183002Z",
|
|
"tunnel_name":"Mr. Tun"
|
|
}`,
|
|
true,
|
|
},
|
|
}
|
|
|
|
for _, testCase := range testCases {
|
|
data := testCase.Json
|
|
|
|
var r DetailedRoute
|
|
err := json.Unmarshal([]byte(data), &r)
|
|
|
|
// Check everything worked
|
|
require.NoError(t, err)
|
|
require.Equal(t, uuid.MustParse("fba6ffea-807f-4e7a-a740-4184ee1b82c8"), r.TunnelID)
|
|
require.Equal(t, "test", r.Comment)
|
|
_, cidr, err := net.ParseCIDR("10.1.2.40/29")
|
|
require.NoError(t, err)
|
|
require.Equal(t, CIDR(*cidr), r.Network)
|
|
require.Equal(t, "test", r.Comment)
|
|
require.Equal(t, "Mr. Tun", r.TunnelName)
|
|
|
|
if testCase.HasVnet {
|
|
require.Equal(t, uuid.MustParse("38c95083-8191-4110-8339-3f438d44fdb9"), *r.VNetID)
|
|
} else {
|
|
require.Nil(t, r.VNetID)
|
|
}
|
|
|
|
bytes, err := json.Marshal(r)
|
|
require.NoError(t, err)
|
|
obtainedJson := string(bytes)
|
|
data = strings.Replace(data, "\t", "", -1)
|
|
data = strings.Replace(data, "\n", "", -1)
|
|
require.Equal(t, data, obtainedJson)
|
|
}
|
|
}
|
|
|
|
func TestMarshalNewRoute(t *testing.T) {
|
|
_, network, err := net.ParseCIDR("1.2.3.4/32")
|
|
require.NoError(t, err)
|
|
require.NotNil(t, network)
|
|
vnetId := uuid.New()
|
|
|
|
newRoutes := []NewRoute{
|
|
{
|
|
Network: *network,
|
|
TunnelID: uuid.New(),
|
|
Comment: "hi",
|
|
},
|
|
{
|
|
Network: *network,
|
|
TunnelID: uuid.New(),
|
|
Comment: "hi",
|
|
VNetID: &vnetId,
|
|
},
|
|
}
|
|
|
|
for _, newRoute := range newRoutes {
|
|
// Test where receiver is struct
|
|
serialized, err := json.Marshal(newRoute)
|
|
require.NoError(t, err)
|
|
require.True(t, strings.Contains(string(serialized), "tunnel_id"))
|
|
|
|
// Test where receiver is pointer to struct
|
|
serialized, err = json.Marshal(&newRoute)
|
|
require.NoError(t, err)
|
|
require.True(t, strings.Contains(string(serialized), "tunnel_id"))
|
|
|
|
if newRoute.VNetID == nil {
|
|
require.False(t, strings.Contains(string(serialized), "virtual_network_id"))
|
|
} else {
|
|
require.True(t, strings.Contains(string(serialized), "virtual_network_id"))
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestRouteTableString(t *testing.T) {
|
|
_, network, err := net.ParseCIDR("1.2.3.4/32")
|
|
require.NoError(t, err)
|
|
require.NotNil(t, network)
|
|
r := DetailedRoute{
|
|
Network: CIDR(*network),
|
|
}
|
|
row := r.TableString()
|
|
fmt.Println(row)
|
|
require.True(t, strings.HasPrefix(row, "1.2.3.4/32"))
|
|
}
|