Files
Sankofa/crossplane-provider-proxmox/pkg/proxmox/networks_test.go
defiQUG 7cd7022f6e Update .gitignore, remove package-lock.json, and enhance Cloudflare and Proxmox adapters
- Added lock file exclusions for pnpm in .gitignore.
- Removed obsolete package-lock.json from the api and portal directories.
- Enhanced Cloudflare adapter with additional interfaces for zones and tunnels.
- Improved Proxmox adapter error handling and logging for API requests.
- Updated Proxmox VM parameters with validation rules in the API schema.
- Enhanced documentation for Proxmox VM specifications and examples.
2025-12-12 19:29:01 -08:00

180 lines
4.6 KiB
Go

package proxmox
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
)
func TestListNetworks(t *testing.T) {
// Create mock server
mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/api2/json/nodes/test-node/network" {
networks := []Network{
{Name: "vmbr0", Type: "bridge", Active: true, Address: "192.168.1.1/24"},
{Name: "vmbr1", Type: "bridge", Active: true, Address: "10.0.0.1/24"},
{Name: "eth0", Type: "eth", Active: true},
}
response := map[string]interface{}{
"data": networks,
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(response)
} else {
w.WriteHeader(http.StatusNotFound)
}
}))
defer mockServer.Close()
// Create client with mock server
httpClient := NewHTTPClient(mockServer.URL, true)
client := &Client{
httpClient: httpClient,
}
ctx := context.Background()
networks, err := client.ListNetworks(ctx, "test-node")
if err != nil {
t.Fatalf("ListNetworks() error = %v", err)
}
if len(networks) != 3 {
t.Errorf("ListNetworks() returned %d networks, want 3", len(networks))
}
// Check first network
if networks[0].Name != "vmbr0" {
t.Errorf("ListNetworks() first network name = %q, want vmbr0", networks[0].Name)
}
if networks[0].Type != "bridge" {
t.Errorf("ListNetworks() first network type = %q, want bridge", networks[0].Type)
}
}
func TestNetworkExists(t *testing.T) {
tests := []struct {
name string
networkName string
mockNetworks []Network
expected bool
wantErr bool
}{
{
name: "exists vmbr0",
networkName: "vmbr0",
mockNetworks: []Network{
{Name: "vmbr0", Type: "bridge", Active: true},
{Name: "vmbr1", Type: "bridge", Active: true},
},
expected: true,
wantErr: false,
},
{
name: "exists vmbr1",
networkName: "vmbr1",
mockNetworks: []Network{
{Name: "vmbr0", Type: "bridge", Active: true},
{Name: "vmbr1", Type: "bridge", Active: true},
},
expected: true,
wantErr: false,
},
{
name: "does not exist",
networkName: "vmbr2",
mockNetworks: []Network{
{Name: "vmbr0", Type: "bridge", Active: true},
{Name: "vmbr1", Type: "bridge", Active: true},
},
expected: false,
wantErr: false,
},
{
name: "empty network list",
networkName: "vmbr0",
mockNetworks: []Network{},
expected: false,
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Create mock server
mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
response := map[string]interface{}{
"data": tt.mockNetworks,
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(response)
}))
defer mockServer.Close()
// Create client
httpClient := NewHTTPClient(mockServer.URL, true)
client := &Client{
httpClient: httpClient,
}
ctx := context.Background()
exists, err := client.NetworkExists(ctx, "test-node", tt.networkName)
if (err != nil) != tt.wantErr {
t.Errorf("NetworkExists() error = %v, wantErr %v", err, tt.wantErr)
return
}
if exists != tt.expected {
t.Errorf("NetworkExists() = %v, want %v", exists, tt.expected)
}
})
}
}
func TestNetworkExists_ErrorHandling(t *testing.T) {
// Test with server that returns error
mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte("Internal Server Error"))
}))
defer mockServer.Close()
httpClient := NewHTTPClient(mockServer.URL, true)
client := &Client{
httpClient: httpClient,
}
ctx := context.Background()
exists, err := client.NetworkExists(ctx, "test-node", "vmbr0")
if err == nil {
t.Error("NetworkExists() expected error but got nil")
}
if exists {
t.Error("NetworkExists() should return false on error")
}
}
func TestListNetworks_ErrorHandling(t *testing.T) {
// Test with server that returns error
mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
w.Write([]byte("Not Found"))
}))
defer mockServer.Close()
httpClient := NewHTTPClient(mockServer.URL, true)
client := &Client{
httpClient: httpClient,
}
ctx := context.Background()
networks, err := client.ListNetworks(ctx, "test-node")
if err == nil {
t.Error("ListNetworks() expected error but got nil")
}
if networks != nil && len(networks) > 0 {
t.Error("ListNetworks() should return nil or empty slice on error")
}
}