93 lines
2.5 KiB
Go
93 lines
2.5 KiB
Go
|
|
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)
|
||
|
|
}
|