mirror of https://github.com/hashicorp/consul
85 lines
2.7 KiB
Go
85 lines
2.7 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package tenancy
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1"
|
|
"github.com/hashicorp/consul/proto-public/pbresource"
|
|
pbtenancy "github.com/hashicorp/consul/proto-public/pbtenancy/v2beta1"
|
|
"github.com/hashicorp/consul/test-integ/topoutil"
|
|
"github.com/hashicorp/consul/test/integration/consul-container/libs/utils"
|
|
"github.com/hashicorp/consul/testing/deployer/sprawl/sprawltest"
|
|
"github.com/hashicorp/consul/testing/deployer/topology"
|
|
)
|
|
|
|
const (
|
|
DefaultNamespaceName = "default"
|
|
DefaultPartitionName = "default"
|
|
)
|
|
|
|
func newConfig(t *testing.T) *topology.Config {
|
|
const clusterName = "cluster1"
|
|
servers := topoutil.NewTopologyServerSet(clusterName+"-server", 3, []string{clusterName}, nil)
|
|
|
|
cluster := &topology.Cluster{
|
|
Enterprise: utils.IsEnterprise(),
|
|
Name: clusterName,
|
|
Nodes: servers,
|
|
EnableV2: true,
|
|
EnableV2Tenancy: true,
|
|
}
|
|
|
|
return &topology.Config{
|
|
Images: utils.TargetImages(),
|
|
Networks: []*topology.Network{{Name: clusterName}},
|
|
Clusters: []*topology.Cluster{cluster},
|
|
}
|
|
}
|
|
|
|
func createNamespaces(t *testing.T, resourceServiceClient *Client, numNamespaces int, ap string) []*pbresource.Resource {
|
|
namespaces := []*pbresource.Resource{}
|
|
for i := 0; i < numNamespaces; i++ {
|
|
namespace := &pbresource.Resource{
|
|
Id: &pbresource.ID{
|
|
Name: fmt.Sprintf("namespace-%d", i),
|
|
Type: pbtenancy.NamespaceType,
|
|
Tenancy: &pbresource.Tenancy{Partition: ap},
|
|
},
|
|
}
|
|
rsp, err := resourceServiceClient.Write(context.Background(), &pbresource.WriteRequest{Resource: namespace})
|
|
require.NoError(t, err)
|
|
namespace = resourceServiceClient.WaitForResourceExists(t, rsp.Resource.Id)
|
|
namespaces = append(namespaces, namespace)
|
|
}
|
|
return namespaces
|
|
}
|
|
|
|
func createServices(t *testing.T, resourceServiceClient *Client, numServices int, ap string, ns string) []*pbresource.Resource {
|
|
services := []*pbresource.Resource{}
|
|
for i := 0; i < numServices; i++ {
|
|
service := &pbresource.Resource{
|
|
Id: &pbresource.ID{
|
|
Name: fmt.Sprintf("service-%d", i),
|
|
Type: pbcatalog.ServiceType,
|
|
Tenancy: &pbresource.Tenancy{Partition: ap, Namespace: ns},
|
|
},
|
|
}
|
|
service = sprawltest.MustSetResourceData(t, service, &pbcatalog.Service{
|
|
Workloads: &pbcatalog.WorkloadSelector{},
|
|
Ports: []*pbcatalog.ServicePort{},
|
|
})
|
|
rsp, err := resourceServiceClient.Write(context.Background(), &pbresource.WriteRequest{Resource: service})
|
|
require.NoError(t, err)
|
|
service = resourceServiceClient.WaitForResourceExists(t, rsp.Resource.Id)
|
|
services = append(services, service)
|
|
}
|
|
return services
|
|
}
|