Ctrl K
ComunidadGuías…

iclient/incus_network_acls_test.go

Rama develop · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package iclient

import (
	"net/http"
	"testing"

	"github.com/lxc/incus/v7/shared/api"
	"github.com/stretchr/testify/require"
)

func TestIncusNetworkACLRequests(t *testing.T) {
	t.Parallel()

	ctx := t.Context()

	t.Run("GetNetworkACL", func(t *testing.T) {
		t.Parallel()

		conn, seen := recordingServer(t, `{"name":"web"}`)

		acl, etag, err := conn.GetNetworkACL(ctx, "myproject", "web")
		require.NoError(t, err)
		require.Equal(t, "web", acl.Name)
		require.Equal(t, "test-etag", etag, "GetNetworkACL must return the ETag header")
		require.Equal(t, []string{"/1.0/network-acls/web?project=myproject"}, seen.uris())
	})

	t.Run("GetNetworkACLNames", func(t *testing.T) {
		t.Parallel()

		conn, seen := recordingServer(t, `["/1.0/network-acls/web","/1.0/network-acls/db"]`)

		names, err := conn.GetNetworkACLNames(ctx, "myproject")
		require.NoError(t, err)
		require.Equal(t, []string{"web", "db"}, names)
		require.Equal(t, []string{"/1.0/network-acls?project=myproject"}, seen.uris())
	})

	t.Run("CreateNetworkACL", func(t *testing.T) {
		t.Parallel()

		conn, seen := recordingServer(t, `{}`)

		acl := api.NetworkACLsPost{NetworkACLPost: api.NetworkACLPost{Name: "web"}}
		require.NoError(t, conn.CreateNetworkACL(ctx, "myproject", acl))

		req := seen.all()[0]
		require.Equal(t, http.MethodPost, req.method)
		require.Equal(t, "/1.0/network-acls?project=myproject", req.uri())
		require.Contains(t, req.body, `"name":"web"`)
	})

	t.Run("UpdateNetworkACL sends the ETag", func(t *testing.T) {
		t.Parallel()

		conn, seen := recordingServer(t, `{}`)

		err := conn.UpdateNetworkACL(ctx, "myproject", "web", api.NetworkACLPut{Description: "d"}, "the-etag")
		require.NoError(t, err)

		req := seen.all()[0]
		require.Equal(t, http.MethodPut, req.method)
		require.Equal(t, "/1.0/network-acls/web?project=myproject", req.uri())
		require.Equal(t, "the-etag", req.etag, "a conditional update must carry If-Match")
	})

	t.Run("DeleteNetworkACL", func(t *testing.T) {
		t.Parallel()

		conn, seen := recordingServer(t, `{}`)

		require.NoError(t, conn.DeleteNetworkACL(ctx, "myproject", "web"))
		require.Equal(t, []string{"/1.0/network-acls/web?project=myproject"}, seen.uris())
	})
}

func TestIncusNetworkPeerRequests(t *testing.T) {
	t.Parallel()

	ctx := t.Context()

	t.Run("GetNetworkPeer", func(t *testing.T) {
		t.Parallel()

		conn, seen := recordingServer(t, `{"name":"dns"}`)

		peer, etag, err := conn.GetNetworkPeer(ctx, "myproject", "br0", "dns")
		require.NoError(t, err)
		require.Equal(t, "dns", peer.Name)
		require.Equal(t, "test-etag", etag, "GetNetworkPeer must return the ETag header")
		require.Equal(t, []string{"/1.0/networks/br0/peers/dns?project=myproject"}, seen.uris())
	})

	t.Run("GetNetworkPeers", func(t *testing.T) {
		t.Parallel()

		conn, seen := recordingServer(t, `[{"name":"dns","target_network":"icompose0"}]`)

		peers, err := conn.GetNetworkPeers(ctx, "myproject", "br0")
		require.NoError(t, err)
		require.Len(t, peers, 1)
		require.Equal(t, "icompose0", peers[0].TargetNetwork)
		require.Equal(t, []string{"/1.0/networks/br0/peers?project=myproject&recursion=1"}, seen.uris())
	})

	t.Run("CreateNetworkPeer", func(t *testing.T) {
		t.Parallel()

		conn, seen := recordingServer(t, `{}`)

		peer := api.NetworkPeersPost{Name: "dns", TargetProject: "incus-compose", TargetNetwork: "icompose0"}
		require.NoError(t, conn.CreateNetworkPeer(ctx, "myproject", "br0", peer))

		req := seen.all()[0]
		require.Equal(t, http.MethodPost, req.method)
		require.Equal(t, "/1.0/networks/br0/peers?project=myproject", req.uri())
		require.Contains(t, req.body, `"target_network":"icompose0"`)
	})

	t.Run("DeleteNetworkPeer", func(t *testing.T) {
		t.Parallel()

		conn, seen := recordingServer(t, `{}`)

		require.NoError(t, conn.DeleteNetworkPeer(ctx, "myproject", "br0", "dns"))
		require.Equal(t, []string{"/1.0/networks/br0/peers/dns?project=myproject"}, seen.uris())
	})
}