mirror of https://github.com/portainer/portainer
173 lines
4.7 KiB
Go
173 lines
4.7 KiB
Go
package endpoints
|
|
|
|
import (
|
|
"net/http"
|
|
"testing"
|
|
|
|
portainer "github.com/portainer/portainer/api"
|
|
"github.com/portainer/portainer/api/chisel"
|
|
"github.com/portainer/portainer/api/datastore"
|
|
"github.com/portainer/portainer/api/internal/testhelpers"
|
|
"github.com/portainer/portainer/pkg/fips"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// EE-only kubeconfig validation tests removed for CE
|
|
|
|
func TestSaveEndpointAndUpdateAuthorizations(t *testing.T) {
|
|
_, store := datastore.MustNewTestStore(t, true, false)
|
|
|
|
endpointGroup := &portainer.EndpointGroup{
|
|
ID: 1,
|
|
Name: "test-endpoint-group",
|
|
}
|
|
|
|
err := store.EndpointGroup().Create(endpointGroup)
|
|
require.NoError(t, err)
|
|
|
|
h := &Handler{
|
|
DataStore: store,
|
|
}
|
|
|
|
testCases := []struct {
|
|
name string
|
|
endpointType portainer.EndpointType
|
|
expectRelation bool
|
|
}{
|
|
{
|
|
name: "create azure environment, expect no relation to be created",
|
|
endpointType: portainer.AzureEnvironment,
|
|
expectRelation: false,
|
|
},
|
|
{
|
|
name: "create edge agent environment, expect relation to be created",
|
|
endpointType: portainer.EdgeAgentOnDockerEnvironment,
|
|
expectRelation: true,
|
|
},
|
|
{
|
|
name: "create kubernetes environment, expect no relation to be created",
|
|
endpointType: portainer.KubernetesLocalEnvironment,
|
|
expectRelation: false,
|
|
},
|
|
{
|
|
name: "create kubeconfig environment, expect no relation to be created",
|
|
endpointType: portainer.AgentOnKubernetesEnvironment,
|
|
expectRelation: false,
|
|
},
|
|
{
|
|
name: "create agent docker environment, expect no relation to be created",
|
|
endpointType: portainer.AgentOnDockerEnvironment,
|
|
expectRelation: false,
|
|
},
|
|
{
|
|
name: "create unsecured environment, expect no relation to be created",
|
|
endpointType: portainer.DockerEnvironment,
|
|
expectRelation: false,
|
|
},
|
|
}
|
|
|
|
for _, testCase := range testCases {
|
|
t.Run(testCase.name, func(t *testing.T) {
|
|
endpoint := &portainer.Endpoint{
|
|
ID: portainer.EndpointID(store.Endpoint().GetNextIdentifier()),
|
|
Type: testCase.endpointType,
|
|
GroupID: portainer.EndpointGroupID(endpointGroup.ID),
|
|
}
|
|
|
|
err := h.saveEndpointAndUpdateAuthorizations(store, endpoint)
|
|
require.NoError(t, err)
|
|
|
|
relation, relationErr := store.EndpointRelation().EndpointRelation(endpoint.ID)
|
|
if testCase.expectRelation {
|
|
require.NoError(t, relationErr)
|
|
require.NotNil(t, relation)
|
|
} else {
|
|
require.Error(t, relationErr)
|
|
require.True(t, store.IsErrObjectNotFound(relationErr))
|
|
require.Nil(t, relation)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCreateEndpointFailure(t *testing.T) {
|
|
fips.InitFIPS(false)
|
|
|
|
_, store := datastore.MustNewTestStore(t, true, false)
|
|
|
|
h := NewHandler(testhelpers.NewTestRequestBouncer())
|
|
h.DataStore = store
|
|
|
|
payload := &endpointCreatePayload{
|
|
Name: "Test Endpoint",
|
|
EndpointCreationType: agentEnvironment,
|
|
TLS: true,
|
|
TLSCertFile: []byte("invalid data"),
|
|
TLSKeyFile: []byte("invalid data"),
|
|
}
|
|
|
|
endpoint, httpErr := h.createEndpoint(store, payload)
|
|
require.NotNil(t, httpErr)
|
|
require.Equal(t, http.StatusInternalServerError, httpErr.StatusCode)
|
|
require.Nil(t, endpoint)
|
|
}
|
|
|
|
func TestCreateEdgeAgentEndpoint_ContainerEngineMapping(t *testing.T) {
|
|
fips.InitFIPS(false)
|
|
|
|
_, store := datastore.MustNewTestStore(t, true, false)
|
|
|
|
// required group for save flow
|
|
endpointGroup := &portainer.EndpointGroup{ID: 1, Name: "test-group"}
|
|
err := store.EndpointGroup().Create(endpointGroup)
|
|
require.NoError(t, err)
|
|
|
|
h := &Handler{
|
|
DataStore: store,
|
|
ReverseTunnelService: chisel.NewService(store, nil, nil),
|
|
}
|
|
|
|
tests := []struct {
|
|
name string
|
|
engine string
|
|
wantType portainer.EndpointType
|
|
}{
|
|
{
|
|
name: "empty engine -> EdgeAgentOnKubernetesEnvironment",
|
|
engine: "",
|
|
wantType: portainer.EdgeAgentOnKubernetesEnvironment,
|
|
},
|
|
{
|
|
name: "docker engine -> EdgeAgentOnDockerEnvironment",
|
|
engine: portainer.ContainerEngineDocker,
|
|
wantType: portainer.EdgeAgentOnDockerEnvironment,
|
|
},
|
|
{
|
|
name: "podman engine -> EdgeAgentOnDockerEnvironment",
|
|
engine: portainer.ContainerEnginePodman,
|
|
wantType: portainer.EdgeAgentOnDockerEnvironment,
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
payload := &endpointCreatePayload{
|
|
Name: "edge-endpoint",
|
|
EndpointCreationType: edgeAgentEnvironment,
|
|
ContainerEngine: tc.engine,
|
|
GroupID: 1,
|
|
URL: "https://portainer.example:9443",
|
|
}
|
|
|
|
ep, httpErr := h.createEdgeAgentEndpoint(store, payload)
|
|
require.Nil(t, httpErr)
|
|
require.NotNil(t, ep)
|
|
|
|
assert.Equal(t, tc.wantType, ep.Type)
|
|
assert.Equal(t, tc.engine, ep.ContainerEngine)
|
|
})
|
|
}
|
|
}
|