Skip to content

Commit

Permalink
use unique stack names and refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
fanny-jiang committed Mar 28, 2024
1 parent 1a6018a commit 98556db
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 28 deletions.
12 changes: 9 additions & 3 deletions docs/how-to-contribute.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,16 @@ go work use . ./test/e2e

```shell
# Run E2E tests and destroy environment stacks after tests complete.
$ make e2e-tests
$ aws-vault exec sso-agent-sandbox-account-admin -- make e2e-tests

# Run E2E tests and keep environment stacks running
$ make e2e-tests-keep-stacks
# Run E2E tests and keep environment stacks running.
$ aws-vault exec sso-agent-sandbox-account-admin -- make e2e-tests-keep-stacks

# Run E2E tests with K8S_VERSION and TARGET_IMAGE environment variables.
$ K8S_VERSION=1.25 TARGET_IMAGE=your-dockerhub/operator:tag aws-vault exec sso-agent-sandbox-account-admin -- make e2e-tests

# Run E2E tests with K8S_VERSION, TARGET_IMAGE, and IMAGE_PULL_PASSWORD environment variables (for pulling operator image from a private registry).
$ K8S_VERSION=1.25 TARGET_IMAGE=669783387624.dkr.ecr.us-east-1.amazonaws.com/operator:PIPELINE_ID-COMMIT_HASH IMAGE_PULL_PASSWORD=$(aws-vault exec sso-agent-qa-read-only -- aws ecr get-login-password) aws-vault exec sso-agent-sandbox-account-admin -- make e2e-tests
```


Expand Down
9 changes: 6 additions & 3 deletions test/e2e/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,12 @@ import (
)

const (
manifestsPath = "./manifests"
mgrKustomizeDirPath = "../../config/default"
imagePullSecretName = "registry-credentials"
manifestsPath = "./manifests"
mgrKustomizeDirPath = "../../config/default"
imagePullSecretName = "registry-credentials"
operatorLabelSelector = "app.kubernetes.io/name=datadog-operator"
agentLabelSelector = "agent.datadoghq.com/component=agent"
dcaLabelSelector = "agent.datadoghq.com/component=cluster-agent"
)

var (
Expand Down
42 changes: 20 additions & 22 deletions test/e2e/kind_e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@ import (
resAws "github.com/DataDog/test-infra-definitions/resources/aws"
"github.com/DataDog/test-infra-definitions/scenarios/aws/ec2"
"github.com/gruntwork-io/terratest/modules/k8s"
pulumik8s "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes"
pulumicorev1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/core/v1"
"github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes"
corev1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/core/v1"
"github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/kustomize"
pulumimetav1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/meta/v1"
metav1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/meta/v1"
"github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/yaml"
"github.com/pulumi/pulumi/sdk/v3/go/auto"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
k8smetav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

type kindEnv struct {
Expand All @@ -43,6 +43,7 @@ type kindSuite struct {

func TestKindSuite(t *testing.T) {
e2eParams := []e2e.SuiteOption{
e2e.WithStackName(fmt.Sprintf("operator-kind-%s", k8sVersion)),
e2e.WithProvisioner(kindProvisioner(k8sVersion)),
e2e.WithDevMode(),
}
Expand Down Expand Up @@ -75,7 +76,7 @@ func kindProvisioner(k8sVersion string) e2e.Provisioner {
return err
}

kindCluster, err := localKubernetes.NewKindCluster(*awsEnv.CommonEnvironment, vm, awsEnv.CommonNamer.ResourceName("kind"), kindClusterName, k8sVersion)
kindCluster, err := localKubernetes.NewKindCluster(*awsEnv.CommonEnvironment, vm, awsEnv.CommonNamer.ResourceName("kind"), kindClusterName, k8sVersion, pulumi.DeleteBeforeReplace(true))
if err != nil {
return err
}
Expand All @@ -84,7 +85,7 @@ func kindProvisioner(k8sVersion string) e2e.Provisioner {
}

// Build Kubernetes provider
kindKubeProvider, err := pulumik8s.NewProvider(ctx, awsEnv.Namer.ResourceName("k8s-provider"), &pulumik8s.ProviderArgs{
kindKubeProvider, err := kubernetes.NewProvider(ctx, awsEnv.Namer.ResourceName("k8s-provider"), &kubernetes.ProviderArgs{
EnableServerSideApply: pulumi.BoolPtr(true),
Kubeconfig: kindCluster.KubeConfig,
})
Expand Down Expand Up @@ -119,8 +120,8 @@ func kindProvisioner(k8sVersion string) e2e.Provisioner {
}

// Create datadog agent secret
_, err = pulumicorev1.NewSecret(ctx, "datadog-secret", &pulumicorev1.SecretArgs{
Metadata: pulumimetav1.ObjectMetaArgs{
_, err = corev1.NewSecret(ctx, "datadog-secret", &corev1.SecretArgs{
Metadata: metav1.ObjectMetaArgs{
Namespace: pulumi.String(namespaceName),
Name: pulumi.String("datadog-secret"),
},
Expand Down Expand Up @@ -167,13 +168,11 @@ func (s *kindSuite) TestKindRun() {
s.T().Run("Operator deploys to kind cluster", func(t *testing.T) {
s.Assert().NotNil(s.Env().Kind.Client())
k8sClient := s.Env().Kind.Client()
s.Assert().NotNil(k8sClient.CoreV1().Pods(namespaceName))
s.Assert().NotNil(k8sClient.CoreV1().Pods(namespaceName).List(context.Background(), metav1.ListOptions{LabelSelector: "app.kubernetes.io/name=datadog-operator"}))

// Operator pod is created
verifyNumPodsForSelector(t, kubectlOptions, 1, "app.kubernetes.io/name=datadog-operator")
verifyNumPodsForSelector(t, kubectlOptions, 1, operatorLabelSelector)

pods, err := k8sClient.CoreV1().Pods(namespaceName).List(context.Background(), metav1.ListOptions{LabelSelector: "app.kubernetes.io/name=datadog-operator"})
pods, err := k8sClient.CoreV1().Pods(namespaceName).List(context.Background(), k8smetav1.ListOptions{LabelSelector: operatorLabelSelector})
s.Assert().NoError(err)
s.Assert().NotEmpty(pods)

Expand All @@ -184,36 +183,35 @@ func (s *kindSuite) TestKindRun() {
})

s.T().Run("Minimal DDA deploys agent resources", func(t *testing.T) {
ddaConfigPath, err := getAbsPath(ddaMinimalPath)
s.Assert().NoError(err)
s.Assert().NotNil(s.Env().Kind.Client())
k8sClient := s.Env().Kind.Client()

// Install DDA
ddaConfigPath, err := getAbsPath(ddaMinimalPath)
s.Assert().NoError(err)
k8s.KubectlApply(t, kubectlOptions, ddaConfigPath)
defer k8s.KubectlDelete(t, kubectlOptions, ddaConfigPath)

s.Assert().NotNil(s.Env().Kind.Client())
k8sClient := s.Env().Kind.Client()

// Get nodesList
k8s.WaitUntilAllNodesReady(t, kubectlOptions, 9, 15*time.Second)
nodes, err := k8sClient.CoreV1().Nodes().List(context.Background(), metav1.ListOptions{})
nodes, err := k8sClient.CoreV1().Nodes().List(context.Background(), k8smetav1.ListOptions{})
s.Assert().NoError(err)
s.Assert().NotEmpty(nodes)

// Agent pods are created
verifyNumPodsForSelector(t, kubectlOptions, len(nodes.Items), "agent.datadoghq.com/component=agent")
verifyNumPodsForSelector(t, kubectlOptions, 1, "agent.datadoghq.com/component=cluster-agent")
verifyNumPodsForSelector(t, kubectlOptions, len(nodes.Items), agentLabelSelector)
verifyNumPodsForSelector(t, kubectlOptions, 1, dcaLabelSelector)

// Agent pods are available
agentPods, err := k8sClient.CoreV1().Pods(namespaceName).List(context.Background(), metav1.ListOptions{LabelSelector: "agent.datadoghq.com/component=agent"})
agentPods, err := k8sClient.CoreV1().Pods(namespaceName).List(context.Background(), k8smetav1.ListOptions{LabelSelector: agentLabelSelector})
s.Assert().NoError(err)
s.Assert().NotEmpty(agentPods)
for _, pod := range agentPods.Items {
k8s.WaitUntilPodAvailable(t, kubectlOptions, pod.Name, 9, 15*time.Second)
}

// DCA pod is Available
dcaPods, err := k8sClient.CoreV1().Pods(namespaceName).List(context.Background(), metav1.ListOptions{LabelSelector: "agent.datadoghq.com/component=cluster-agent"})
dcaPods, err := k8sClient.CoreV1().Pods(namespaceName).List(context.Background(), k8smetav1.ListOptions{LabelSelector: dcaLabelSelector})
s.Assert().NoError(err)
s.Assert().NotEmpty(dcaPods)
for _, pod := range dcaPods.Items {
Expand Down

0 comments on commit 98556db

Please sign in to comment.