44 lines
1.4 KiB
Go
44 lines
1.4 KiB
Go
package resolver
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"git.zb-server.de/Sebi/ssh-netbox-wrapper/internal/netbox"
|
|
)
|
|
|
|
func TestVMResolversStayWithinTheirNetBoxInstance(t *testing.T) {
|
|
sources := make([]netbox.Source, 0, 2)
|
|
for i, name := range []string{"office", "lab"} {
|
|
ip := fmt.Sprintf("10.0.0.%d", i+1)
|
|
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if r.URL.Query().Get("virtual_machine_id") != "7" {
|
|
t.Errorf("wrong VM filter: %s", r.URL.RawQuery)
|
|
}
|
|
if r.Header.Get("Authorization") != "Token "+name {
|
|
t.Error("VM lookup used another instance's credentials")
|
|
}
|
|
fmt.Fprintf(w, `{"count":1,"results":[{"address":%q}]}`, ip+"/24")
|
|
}))
|
|
t.Cleanup(srv.Close)
|
|
sources = append(sources, netbox.Source{Name: name, URL: srv.URL, Token: name})
|
|
}
|
|
client := netbox.NewMultiClient(sources)
|
|
management, err := NewManagementSubnetStrategy([]string{"10.0.0.0/8"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for i, source := range sources {
|
|
host := &netbox.HostEntry{Source: source.Name, Name: "vm", Kind: "vm", ID: 7}
|
|
for _, strategy := range []Strategy{management, &InterfaceNameStrategy{name: "mgmt0"}} {
|
|
ip, err := strategy.Resolve(context.Background(), host, client)
|
|
if want := fmt.Sprintf("10.0.0.%d", i+1); err != nil || ip != want {
|
|
t.Fatalf("%s VM resolved through wrong instance: %q, %v", strategy.Name(), ip, err)
|
|
}
|
|
}
|
|
}
|
|
}
|