// Copyright 2016-2017, Pulumi Corporation. All rights reserved. package test import ( "fmt" "io/ioutil" "net/http" "os" "path" "strings" "testing" "time" "github.com/pulumi/pulumi/pkg/testing/integration" "github.com/stretchr/testify/assert" ) func TestExamples(t *testing.T) { awsRegion := os.Getenv("AWS_REGION") if awsRegion == "" { awsRegion = "us-west-1" fmt.Println("Defaulting AWS_REGION to 'us-west-1'. You can override using the AWS_REGION environment variable") } azureEnviron := os.Getenv("ARM_ENVIRONMENT") if azureEnviron == "" { azureEnviron = "public" fmt.Println("Defaulting ARM_ENVIRONMENT to 'public'. You can override using the ARM_ENVIRONMENT variable") } cwd, err := os.Getwd() if !assert.NoError(t, err, "expected a valid working directory: %v", err) { return } base := integration.ProgramTestOptions{ Tracing: "https://tracing.pulumi-engineering.com/collector/api/v1/spans", } examples := []integration.ProgramTestOptions{ base.With(integration.ProgramTestOptions{ Dir: path.Join(cwd, "..", "..", "aws-js-s3-folder"), SkipBuild: true, Config: map[string]string{ "aws:region": awsRegion, }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { assertHTTPResult(t, "http://"+stack.Outputs["websiteUrl"].(string), func(body string) bool { return assert.Contains(t, body, "Hello, Pulumi!") }) }, }), base.With(integration.ProgramTestOptions{ Dir: path.Join(cwd, "..", "..", "aws-js-s3-folder-component"), SkipBuild: true, Config: map[string]string{ "aws:region": awsRegion, }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { assertHTTPResult(t, stack.Outputs["websiteUrl"].(string), func(body string) bool { return assert.Contains(t, body, "Hello, Pulumi!") }) }, }), base.With(integration.ProgramTestOptions{ Dir: path.Join(cwd, "..", "..", "aws-js-webserver"), SkipBuild: true, Config: map[string]string{ "aws:region": awsRegion, }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { assertHTTPHelloWorld(t, stack.Outputs["publicHostName"]) }, }), base.With(integration.ProgramTestOptions{ Dir: path.Join(cwd, "..", "..", "aws-js-webserver-component"), SkipBuild: true, Config: map[string]string{ "aws:region": awsRegion, }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { assertHTTPHelloWorld(t, stack.Outputs["webUrl"]) }, }), base.With(integration.ProgramTestOptions{ Dir: path.Join(cwd, "..", "..", "azure-js-webserver"), SkipBuild: true, Config: map[string]string{ "azure:environment": azureEnviron, "username": "testuser", "password": "testTEST1234+-*/", }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { assertHTTPHelloWorld(t, stack.Outputs["publicIP"]) }, }), base.With(integration.ProgramTestOptions{ Dir: path.Join(cwd, "..", "..", "azure-ts-functions"), SkipBuild: true, Config: map[string]string{ "azure:environment": azureEnviron, }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { assertHTTPResult(t, stack.Outputs["endpoint"], func(body string) bool { return assert.Contains(t, body, "Greetings from Azure Functions!") }) }, }), base.With(integration.ProgramTestOptions{ Dir: path.Join(cwd, "..", "..", "azure-ts-appservice"), SkipBuild: true, Config: map[string]string{ "azure:environment": azureEnviron, "sqlPassword": "2@Password@2", }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { assertHTTPResult(t, stack.Outputs["endpoint"], func(body string) bool { return assert.Contains(t, body, "Greetings from Azure App Service!") }) }, }), base.With(integration.ProgramTestOptions{ Dir: path.Join(cwd, "..", "..", "aws-ts-ruby-on-rails"), SkipBuild: true, Config: map[string]string{ "aws:region": awsRegion, "dbUser": "testUser", "dbPassword": "2@Password@2", "dbRootPassword": "2@Password@2", }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { // Due to setup time on the vm this output does not show up for several minutes so // increase wait time a bit maxWait := 10 * time.Minute assertHTTPResultWithRetry(t, stack.Outputs["websiteURL"], maxWait, func(body string) bool { return assert.Contains(t, body, "New Note") }) }, }), base.With(integration.ProgramTestOptions{ Dir: path.Join(cwd, "..", "..", "cloud-js-api"), SkipBuild: true, Config: map[string]string{ "aws:region": awsRegion, }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { assertHTTPResult(t, stack.Outputs["endpoint"].(string)+"/hello", func(body string) bool { return assert.Contains(t, body, "{\"route\":\"hello\",\"count\":1}") }) }, }), base.With(integration.ProgramTestOptions{ Dir: path.Join(cwd, "..", "..", "cloud-js-containers"), SkipBuild: true, Config: map[string]string{ // use us-west-2 to assure fargate "aws:region": "us-west-2", "cloud-aws:useFargate": "true", }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { assertHTTPResult(t, stack.Outputs["hostname"], func(body string) bool { return assert.Contains(t, body, "
Hello, containers!
") }) }, }), base.With(integration.ProgramTestOptions{ Dir: path.Join(cwd, "..", "..", "cloud-js-httpserver"), SkipBuild: true, Config: map[string]string{ "cloud:provider": "aws", "aws:region": awsRegion, }, ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { assertHTTPResult(t, stack.Outputs["endpoint"].(string)+"/hello", func(body string) bool { return assert.Contains(t, body, "{\"route\":\"/hello\",\"count\":1}") }) }, }), base.With(integration.ProgramTestOptions{ Dir: path.Join(cwd, "..", "..", "cloud-ts-url-shortener-cache-http"), SkipBuild: true, Config: map[string]string{ // use us-west-2 to assure fargate "aws:region": "us-west-2", "url-shortener-cache:redisPassword": "s3cr7Password", "cloud:provider": "aws", "cloud-aws:useFargate": "true", }, // TODO: This test is not returning a valid payload see issue: https://github.com/pulumi/examples/issues/155 // ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { // assertHTTPResult(t, stack.Outputs["endpointUrl"], func(body string) bool { // return assert.Contains(t, body, "