Files
portainer/api/uac/configs_test.go

72 lines
2.4 KiB
Go

package uac
import (
"testing"
"github.com/docker/docker/api/types/swarm"
portainer "github.com/portainer/portainer/api"
"github.com/portainer/portainer/api/dataservices"
"github.com/portainer/portainer/api/datastore"
"github.com/portainer/portainer/api/docker/consts"
"github.com/portainer/portainer/api/internal/authorization"
"github.com/portainer/portainer/api/stacks/stackutils"
"github.com/stretchr/testify/require"
)
func TestConfigResourceControlGetter(t *testing.T) {
t.Parallel()
is := require.New(t)
ok, store := datastore.MustNewTestStore(t, true, false)
is.True(ok)
is.NotNil(store)
envID := portainer.EndpointID(1)
configID := "config"
stackName := "stack"
stackRCID := stackutils.ResourceControlID(envID, stackName)
serviceID := "service"
is.NoError(store.UpdateTx(func(tx dataservices.DataStoreTx) error {
is.NoError(tx.ResourceControl().Create(authorization.NewPublicResourceControl(configID, portainer.ConfigResourceControl)))
is.NoError(tx.ResourceControl().Create(authorization.NewPublicResourceControl(stackRCID, portainer.StackResourceControl)))
is.NoError(tx.ResourceControl().Create(authorization.NewPublicResourceControl(serviceID, portainer.ServiceResourceControl)))
return nil
}))
is.NoError(store.ViewTx(func(tx dataservices.DataStoreTx) error {
// by direct ID
rc, err := ConfigResourceControlGetter(tx, envID)(swarm.Config{ID: configID})
is.NoError(err)
is.NotNil(rc)
is.Equal(configID, rc.ResourceID)
// by compose stack label
rc, err = ConfigResourceControlGetter(tx, envID)(
swarm.Config{ID: "unknown", Spec: swarm.ConfigSpec{Annotations: swarm.Annotations{Labels: map[string]string{consts.ComposeStackNameLabel: stackName}}}},
)
is.NoError(err)
is.NotNil(rc)
is.Equal(stackRCID, rc.ResourceID)
// by swarm stack label
rc, err = ConfigResourceControlGetter(tx, envID)(
swarm.Config{ID: "unknown", Spec: swarm.ConfigSpec{Annotations: swarm.Annotations{Labels: map[string]string{consts.SwarmStackNameLabel: stackName}}}},
)
is.NoError(err)
is.NotNil(rc)
is.Equal(stackRCID, rc.ResourceID)
// by service ID
rc, err = ConfigResourceControlGetter(tx, envID)(
swarm.Config{ID: "unknown", Spec: swarm.ConfigSpec{Annotations: swarm.Annotations{Labels: map[string]string{consts.SwarmServiceIDLabel: serviceID}}}},
)
is.NoError(err)
is.NotNil(rc)
is.Equal(serviceID, rc.ResourceID)
return nil
}))
}