mirror of https://github.com/portainer/portainer
97 lines
2.1 KiB
Go
97 lines
2.1 KiB
Go
package utils
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/docker/docker/api/types/swarm"
|
|
portainer "github.com/portainer/portainer/api"
|
|
portaineree "github.com/portainer/portainer/api"
|
|
dockerconsts "github.com/portainer/portainer/api/docker/consts"
|
|
"github.com/portainer/portainer/api/http/security"
|
|
"github.com/portainer/portainer/api/internal/testhelpers"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestHandler_getDockerStacks(t *testing.T) {
|
|
environment := &portaineree.Endpoint{
|
|
ID: 1,
|
|
SecuritySettings: portainer.EndpointSecuritySettings{
|
|
AllowStackManagementForRegularUsers: true,
|
|
},
|
|
}
|
|
|
|
containers := []types.Container{
|
|
{
|
|
Labels: map[string]string{
|
|
dockerconsts.ComposeStackNameLabel: "stack1",
|
|
},
|
|
},
|
|
{
|
|
Labels: map[string]string{
|
|
dockerconsts.ComposeStackNameLabel: "stack2",
|
|
},
|
|
},
|
|
}
|
|
|
|
services := []swarm.Service{
|
|
{
|
|
Spec: swarm.ServiceSpec{
|
|
Annotations: swarm.Annotations{
|
|
Labels: map[string]string{
|
|
dockerconsts.SwarmStackNameLabel: "stack3",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
stack1 := portaineree.Stack{
|
|
ID: 1,
|
|
Name: "stack1",
|
|
EndpointID: 1,
|
|
Type: portainer.DockerComposeStack,
|
|
}
|
|
|
|
datastore := testhelpers.NewDatastore(
|
|
testhelpers.WithEndpoints([]portaineree.Endpoint{*environment}),
|
|
testhelpers.WithStacks([]portaineree.Stack{
|
|
stack1,
|
|
{
|
|
ID: 2,
|
|
Name: "stack2",
|
|
EndpointID: 2,
|
|
Type: portainer.DockerSwarmStack,
|
|
},
|
|
}),
|
|
)
|
|
|
|
stacksList, err := GetDockerStacks(datastore, &security.RestrictedRequestContext{
|
|
IsAdmin: true,
|
|
}, environment.ID, containers, services)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, stacksList, 3)
|
|
|
|
expectedStacks := []StackViewModel{
|
|
{
|
|
InternalStack: &stack1,
|
|
ID: 1,
|
|
Name: "stack1",
|
|
IsExternal: false,
|
|
Type: portainer.DockerComposeStack,
|
|
},
|
|
{
|
|
Name: "stack2",
|
|
IsExternal: true,
|
|
Type: portainer.DockerComposeStack,
|
|
},
|
|
{
|
|
Name: "stack3",
|
|
IsExternal: true,
|
|
Type: portainer.DockerSwarmStack,
|
|
},
|
|
}
|
|
|
|
assert.ElementsMatch(t, expectedStacks, stacksList)
|
|
}
|