go-netops/unifi/routes_test.go

93 lines
2.5 KiB
Go
Raw Permalink Normal View History

package unifi
import (
"fmt"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
)
func TestRouteTypeName(t *testing.T) {
tests := []struct {
code string
expected string
}{
{"S", "static"},
{"C", "connected"},
{"K", "kernel"},
{"B", "bgp"},
{"O", "ospf"},
{"X", "X"},
{"", ""},
}
for _, tt := range tests {
assert.Equal(t, tt.expected, RouteTypeName(tt.code))
}
}
func TestGetRoutes(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
// New-style controller: paths are prefixed with /proxy/network
if r.URL.Path == "/proxy/network/api/s/default/stat/routing" {
fmt.Fprintln(w, `{"data":[{"pfx":"10.0.0.0/24","nh":"10.0.0.1","intf":"br0","type":"C","distance":0,"metric":0,"uptime":3600,"fib":true}]}`)
return
}
fmt.Fprintln(w, `{"meta":{"rc":"ok"}, "data": []}`)
}))
defer ts.Close()
client, err := New(ts.URL, "user", "pass", "", true)
assert.NoError(t, err)
routes, err := client.GetRoutes("")
assert.NoError(t, err)
if assert.Len(t, routes, 1) {
assert.Equal(t, "10.0.0.0/24", routes[0].Network)
assert.Equal(t, "10.0.0.1", routes[0].NextHop)
assert.Equal(t, "br0", routes[0].Interface)
assert.Equal(t, "C", routes[0].Type)
assert.True(t, routes[0].Selected)
}
}
func TestGetRoutes_CustomSite(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
if r.URL.Path == "/proxy/network/api/s/mysite/stat/routing" {
fmt.Fprintln(w, `{"data":[{"pfx":"192.168.1.0/24","nh":"192.168.1.1","intf":"eth0","type":"S","distance":1,"metric":0,"uptime":0,"fib":true}]}`)
return
}
fmt.Fprintln(w, `{"meta":{"rc":"ok"}, "data": []}`)
}))
defer ts.Close()
client, err := New(ts.URL, "user", "pass", "", true)
assert.NoError(t, err)
routes, err := client.GetRoutes("mysite")
assert.NoError(t, err)
if assert.Len(t, routes, 1) {
assert.Equal(t, "192.168.1.0/24", routes[0].Network)
assert.Equal(t, "S", routes[0].Type)
}
}
func TestGetRoutes_Empty(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
fmt.Fprintln(w, `{"meta":{"rc":"ok"}, "data": []}`)
}))
defer ts.Close()
client, err := New(ts.URL, "user", "pass", "", true)
assert.NoError(t, err)
routes, err := client.GetRoutes("")
assert.NoError(t, err)
assert.Empty(t, routes)
}