From 131ebf875e7d0fcdf475831fd75fbffcebf9f7aa Mon Sep 17 00:00:00 2001 From: Venelin Date: Thu, 21 Mar 2024 13:29:19 +0200 Subject: [PATCH 1/5] add test defaults instead of skipping --- examples/examples_test.go | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/examples/examples_test.go b/examples/examples_test.go index 4e5f9ff3e0..b1b629ca8a 100644 --- a/examples/examples_test.go +++ b/examples/examples_test.go @@ -32,28 +32,28 @@ func skipIfShort(t *testing.T) { } } -func getProject(t *testing.T) string { +func getProject() string { project := os.Getenv("GOOGLE_PROJECT") if project == "" { - t.Skipf("Skipping test due to missing GOOGLE_PROJECT environment variable") + project="pulumi-development" } return project } -func getZone(t *testing.T) string { +func getZone() string { zone := os.Getenv("GOOGLE_ZONE") if zone == "" { - t.Skipf("Skipping test due to missing GOOGLE_ZONE environment variable") + zone="public" } return zone } -func getRegion(t *testing.T) string { +func getRegion() string { region := os.Getenv("GOOGLE_REGION") if region == "" { - t.Skipf("Skipping test due to missing GOOGLE_REGION environment variable") + region = "us-west1" } return region @@ -69,14 +69,11 @@ func getCwd(t *testing.T) string { } func getBaseOptions(t *testing.T) integration.ProgramTestOptions { - project := getProject(t) - zone := getZone(t) - region := getRegion(t) return integration.ProgramTestOptions{ Config: map[string]string{ - "gcp:config:project": project, - "gcp:config:zone": zone, - "gcp:config:region": region, + "gcp:config:project": getProject(), + "gcp:config:zone": getZone(), + "gcp:config:region": getRegion(), }, } } From 8490379a1d35d2e967045159bcf8b9dc5260cdf6 Mon Sep 17 00:00:00 2001 From: Venelin Date: Thu, 21 Mar 2024 13:47:53 +0200 Subject: [PATCH 2/5] regression tests --- examples/examples_py_test.go | 10 ++ examples/regress-1843/.gitignore | 2 + examples/regress-1843/Pulumi.yaml | 10 ++ examples/regress-1843/__main__.py | 45 +++++ examples/regress-1843/requirements.txt | 2 + provider/provider_yaml_test.go | 234 +++++++++++++++++++++++++ 6 files changed, 303 insertions(+) create mode 100644 examples/regress-1843/.gitignore create mode 100644 examples/regress-1843/Pulumi.yaml create mode 100644 examples/regress-1843/__main__.py create mode 100644 examples/regress-1843/requirements.txt diff --git a/examples/examples_py_test.go b/examples/examples_py_test.go index e45333f743..cddadb0492 100644 --- a/examples/examples_py_test.go +++ b/examples/examples_py_test.go @@ -62,3 +62,13 @@ func TestAccWebserverPy(t *testing.T) { }) } } + +func TestRegress1843(t *testing.T) { + skipIfShort(t) + test := getPythonBaseOptions(t). + With(integration.ProgramTestOptions{ + Dir: filepath.Join(getCwd(t), "regress-1843"), + }) + + integration.ProgramTest(t, &test) +} diff --git a/examples/regress-1843/.gitignore b/examples/regress-1843/.gitignore new file mode 100644 index 0000000000..a3807e5bdb --- /dev/null +++ b/examples/regress-1843/.gitignore @@ -0,0 +1,2 @@ +*.pyc +venv/ diff --git a/examples/regress-1843/Pulumi.yaml b/examples/regress-1843/Pulumi.yaml new file mode 100644 index 0000000000..403e4a6b59 --- /dev/null +++ b/examples/regress-1843/Pulumi.yaml @@ -0,0 +1,10 @@ +name: regress-1843 +runtime: + name: python + options: + virtualenv: venv +description: A minimal Google Cloud Python Pulumi program +config: + pulumi:tags: + value: + pulumi:template: gcp-python diff --git a/examples/regress-1843/__main__.py b/examples/regress-1843/__main__.py new file mode 100644 index 0000000000..1fb9c6de95 --- /dev/null +++ b/examples/regress-1843/__main__.py @@ -0,0 +1,45 @@ +"""A Google Cloud Python Pulumi program""" + +import pulumi_gcp as gcp + +gcp.cloudrun.Service( + resource_name="test-gcr", + args=gcp.cloudrun.ServiceArgs( + location="us-west1", + template=gcp.cloudrun.ServiceTemplateArgs( + spec=gcp.cloudrun.ServiceTemplateSpecArgs( + containers=[ + gcp.cloudrun.ServiceTemplateSpecContainerArgs( + image="hello-world", + resources=gcp.cloudrun.ServiceTemplateSpecContainerResourcesArgs( + limits={ + "memory": "512Mi", + "cpu": "1", + } + ), + ) + ], + timeout_seconds=60, + container_concurrency=30, + ), + metadata=gcp.cloudrun.ServiceTemplateMetadataArgs( + annotations={ + "autoscaling.knative.dev/maxScale": "100", + }, + ), + ), + autogenerate_revision_name=True, + metadata=gcp.cloudrun.ServiceMetadataArgs( + labels={"env": "dev"}, + annotations={ + "run.googleapis.com/ingress": "all", + }, + ), + traffics=[ + gcp.cloudrun.ServiceTrafficArgs( + percent=100, + latest_revision=True, + ) + ], + ), +) diff --git a/examples/regress-1843/requirements.txt b/examples/regress-1843/requirements.txt new file mode 100644 index 0000000000..43e5d368ad --- /dev/null +++ b/examples/regress-1843/requirements.txt @@ -0,0 +1,2 @@ +pulumi>=3.0.0,<4.0.0 +pulumi-gcp>=7.0.0,<8.0.0 diff --git a/provider/provider_yaml_test.go b/provider/provider_yaml_test.go index 750e6f6a4a..f6e217d64a 100644 --- a/provider/provider_yaml_test.go +++ b/provider/provider_yaml_test.go @@ -595,3 +595,237 @@ func TestEnvTokenNotInState(t *testing.T) { require.NoError(t, err) require.NotContains(t, string(data), "accessToken") } + +//nolint:lll +func TestCloudrunServiceDiffNoErrorLabelsDuplicate(t *testing.T) { + if testing.Short() { + t.Skipf("Skipping in testing.Short() mode, assuming this is a CI run without GCP creds") + } + + proj := os.Getenv("GOOGLE_PROJECT") + if proj == "" { + proj = "pulumi-development" + } + replay.ReplaySequence(t, providerServer(t), fmt.Sprintf(`[ + { + "method": "/pulumirpc.ResourceProvider/Configure", + "request": { + "variables": { + "gcp:config:project": %q + }, + "args": { + "project": %q, + "version": "7.4.0" + }, + "acceptSecrets": true, + "acceptResources": true, + "sendsOldInputs": true, + "sendsOldInputsToDelete": true + }, + "response": { + "supportsPreview": true + } + }, + { + "method": "/pulumirpc.ResourceProvider/Diff", + "request": { + "id": "locations/us-west1/namespaces/pulumi-development/services/test-gcr-5a4eed9", + "urn": "urn:pulumi:dev::gcp_labels::gcp:cloudrun/service:Service::test-gcr", + "olds": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":1200000000000,\"delete\":1200000000000,\"update\":1200000000000},\"schema_version\":\"2\"}", + "autogenerateRevisionName": true, + "id": "locations/us-west1/namespaces/pulumi-development/services/test-gcr-5a4eed9", + "location": "us-west1", + "metadata": { + "annotations": { + "run.googleapis.com/ingress": "all" + }, + "effectiveAnnotations": { + "run.googleapis.com/ingress": "all" + }, + "effectiveLabels": { + "env": "dev" + }, + "generation": 0, + "labels": { + "env": "dev" + }, + "namespace": "", + "pulumiLabels": { + "env": "dev" + }, + "resourceVersion": "", + "selfLink": "", + "uid": "" + }, + "name": "test-gcr-5a4eed9", + "project": "pulumi-development", + "template": { + "metadata": { + "annotations": { + "autoscaling.knative.dev/maxScale": "100" + }, + "generation": 0, + "labels": {}, + "name": "", + "namespace": "", + "resourceVersion": "", + "selfLink": "", + "uid": "" + }, + "spec": { + "containerConcurrency": 30, + "containers": [ + { + "args": [], + "commands": [], + "envFroms": [], + "envs": [], + "image": "gcr.io/example", + "livenessProbe": null, + "name": "", + "ports": [], + "resources": { + "limits": { + "cpu": "1", + "memory": "512Mi" + }, + "requests": {} + }, + "startupProbe": null, + "volumeMounts": [], + "workingDir": "" + } + ], + "serviceAccountName": "", + "servingState": "", + "timeoutSeconds": 60, + "volumes": [] + } + }, + "traffics": [ + { + "latestRevision": true, + "percent": 100, + "revisionName": "", + "tag": "", + "url": "" + } + ] + }, + "news": { + "__defaults": [ + "name" + ], + "autogenerateRevisionName": true, + "location": "us-west1", + "metadata": { + "__defaults": [], + "annotations": { + "run.googleapis.com/ingress": "all" + }, + "labels": { + "env": "dev" + } + }, + "name": "test-gcr-5a4eed9", + "template": { + "__defaults": [], + "metadata": { + "__defaults": [], + "annotations": { + "autoscaling.knative.dev/maxScale": "100" + } + }, + "spec": { + "__defaults": [], + "containerConcurrency": 30, + "containers": [ + { + "__defaults": [], + "image": "hello-world", + "resources": { + "__defaults": [], + "limits": { + "cpu": "1", + "memory": "512Mi" + } + } + } + ], + "timeoutSeconds": 60 + } + }, + "traffics": [ + { + "__defaults": [], + "latestRevision": true, + "percent": 100 + } + ] + }, + "oldInputs": { + "__defaults": [ + "name" + ], + "autogenerateRevisionName": true, + "location": "us-west1", + "metadata": { + "__defaults": [], + "annotations": { + "run.googleapis.com/ingress": "all" + }, + "labels": { + "env": "dev" + } + }, + "name": "test-gcr-5a4eed9", + "template": { + "__defaults": [], + "metadata": { + "__defaults": [], + "annotations": { + "autoscaling.knative.dev/maxScale": "100" + } + }, + "spec": { + "__defaults": [], + "containerConcurrency": 30, + "containers": [ + { + "__defaults": [], + "image": "gcr.io/example", + "resources": { + "__defaults": [], + "limits": { + "cpu": "1", + "memory": "512Mi" + } + } + } + ], + "timeoutSeconds": 60 + } + }, + "traffics": [ + { + "__defaults": [], + "latestRevision": true, + "percent": 100 + } + ] + } + }, + "response": { + "stables": "*", + "changes": "*", + "hasDetailedDiff": "*" + }, + "metadata": { + "kind": "resource", + "mode": "client", + "name": "gcp" + } + } + ]`, proj, proj)) +} From f1741d75d2d5b689bf37917c0f746f52641830f4 Mon Sep 17 00:00:00 2001 From: Venelin Date: Thu, 21 Mar 2024 13:55:06 +0200 Subject: [PATCH 3/5] refactor project env var setting --- provider/provider_test.go | 8 ++++++++ provider/provider_yaml_test.go | 17 ++++------------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/provider/provider_test.go b/provider/provider_test.go index 91681b962a..5489f947c2 100644 --- a/provider/provider_test.go +++ b/provider/provider_test.go @@ -27,6 +27,14 @@ const ( testProject = "pulumi-development" ) +func getProject() string { + proj := os.Getenv("GOOGLE_PROJECT") + if proj == "" { + proj = testProject + } + return proj +} + func TestUpgradeCoverage(t *testing.T) { providertest.ReportUpgradeCoverage(t) } diff --git a/provider/provider_yaml_test.go b/provider/provider_yaml_test.go index f6e217d64a..76d422836b 100644 --- a/provider/provider_yaml_test.go +++ b/provider/provider_yaml_test.go @@ -141,7 +141,7 @@ func TestNoGlobalProjectWarning(t *testing.T) { } cwd, err := os.Getwd() require.NoError(t, err) - proj := os.Getenv("GOOGLE_PROJECT") + proj := getProject() t.Setenv("GOOGLE_PROJECT", "") test := pulumitest.NewPulumiTest(t, "test-programs/project-bucket", @@ -491,10 +491,7 @@ func TestRegress1488(t *testing.T) { // Test that going from replication.automatic: true (v6-style) to replication.auto: {} // (v7-style) is not a replacement. - proj := os.Getenv("GOOGLE_PROJECT") - if proj == "" { - proj = "pulumi-development" - } + proj := getProject() replay.ReplaySequence(t, providerServer(t), fmt.Sprintf(`[ { "method": "/pulumirpc.ResourceProvider/Configure", @@ -583,10 +580,7 @@ func TestEnvTokenNotInState(t *testing.T) { test := pulumitest.NewPulumiTest(t, filepath.Join("test-programs", "storage-bucket"), opttest.LocalProviderPath(providerName, filepath.Join(cwd, "..", "bin")), ) - googleProj := os.Getenv("GOOGLE_PROJECT") - if googleProj == "" { - googleProj = testProject - } + googleProj := getProject() test.SetConfig("gcp:config:project", googleProj) test.Up() @@ -602,10 +596,7 @@ func TestCloudrunServiceDiffNoErrorLabelsDuplicate(t *testing.T) { t.Skipf("Skipping in testing.Short() mode, assuming this is a CI run without GCP creds") } - proj := os.Getenv("GOOGLE_PROJECT") - if proj == "" { - proj = "pulumi-development" - } + proj := getProject() replay.ReplaySequence(t, providerServer(t), fmt.Sprintf(`[ { "method": "/pulumirpc.ResourceProvider/Configure", From edd4f292722cb9071eeba59693c1753bcda6e895 Mon Sep 17 00:00:00 2001 From: Venelin Date: Thu, 21 Mar 2024 16:31:49 +0200 Subject: [PATCH 4/5] accept any diffs --- provider/provider_yaml_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/provider/provider_yaml_test.go b/provider/provider_yaml_test.go index 76d422836b..c65f1ffb21 100644 --- a/provider/provider_yaml_test.go +++ b/provider/provider_yaml_test.go @@ -810,7 +810,9 @@ func TestCloudrunServiceDiffNoErrorLabelsDuplicate(t *testing.T) { "response": { "stables": "*", "changes": "*", - "hasDetailedDiff": "*" + "hasDetailedDiff": "*", + "diffs": "*", + "detailedDiff": "*" }, "metadata": { "kind": "resource", From 53a01d49b369bc02b9a2532be35422da61e28061 Mon Sep 17 00:00:00 2001 From: Venelin Date: Thu, 21 Mar 2024 17:28:38 +0200 Subject: [PATCH 5/5] fix image --- examples/regress-1843/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/regress-1843/__main__.py b/examples/regress-1843/__main__.py index 1fb9c6de95..d19d0764d3 100644 --- a/examples/regress-1843/__main__.py +++ b/examples/regress-1843/__main__.py @@ -10,7 +10,7 @@ spec=gcp.cloudrun.ServiceTemplateSpecArgs( containers=[ gcp.cloudrun.ServiceTemplateSpecContainerArgs( - image="hello-world", + image="us-docker.pkg.dev/cloudrun/container/hello", resources=gcp.cloudrun.ServiceTemplateSpecContainerResourcesArgs( limits={ "memory": "512Mi",