mirror of
https://github.com/coder/terraform-provider-envbuilder.git
synced 2025-07-22 11:37:52 +00:00
121 lines
4.8 KiB
Go
121 lines
4.8 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package provider
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
|
|
)
|
|
|
|
// TODO: change this to only test for a non-existent image.
|
|
// Move the heavy lifting to integration.
|
|
func TestAccCachedImageDataSource(t *testing.T) {
|
|
t.Run("Found", func(t *testing.T) {
|
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
|
|
t.Cleanup(cancel)
|
|
files := map[string]string{
|
|
"devcontainer.json": `{"build": { "dockerfile": "Dockerfile" }}`,
|
|
"Dockerfile": `FROM localhost:5000/test-ubuntu:latest
|
|
RUN apt-get update && apt-get install -y cowsay`,
|
|
}
|
|
deps := setup(t, files)
|
|
seedCache(ctx, t, deps)
|
|
tfCfg := fmt.Sprintf(`data "envbuilder_cached_image" "test" {
|
|
builder_image = %q
|
|
devcontainer_dir = %q
|
|
git_url = %q
|
|
extra_env = {
|
|
"FOO" : "bar"
|
|
}
|
|
cache_repo = %q
|
|
}`, deps.BuilderImage, deps.RepoDir, deps.RepoDir, deps.CacheRepo)
|
|
resource.Test(t, resource.TestCase{
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
|
|
Steps: []resource.TestStep{
|
|
{
|
|
Config: tfCfg,
|
|
Check: resource.ComposeAggregateTestCheckFunc(
|
|
// Inputs should still be present.
|
|
resource.TestCheckResourceAttr("data.envbuilder_cached_image.test", "cache_repo", deps.CacheRepo),
|
|
resource.TestCheckResourceAttr("data.envbuilder_cached_image.test", "extra_env.FOO", "bar"),
|
|
resource.TestCheckResourceAttr("data.envbuilder_cached_image.test", "git_url", deps.RepoDir),
|
|
// Should be empty
|
|
resource.TestCheckNoResourceAttr("data.envbuilder_cached_image.test", "git_username"),
|
|
resource.TestCheckNoResourceAttr("data.envbuilder_cached_image.test", "git_password"),
|
|
resource.TestCheckNoResourceAttr("data.envbuilder_cached_image.test", "cache_ttl_days"),
|
|
// Computed
|
|
resource.TestCheckResourceAttrWith("data.envbuilder_cached_image.test", "id", func(value string) error {
|
|
// value is enclosed in quotes
|
|
value = strings.Trim(value, `"`)
|
|
if !strings.HasPrefix(value, "sha256:") {
|
|
return fmt.Errorf("expected image %q to have prefix %q", value, deps.CacheRepo)
|
|
}
|
|
return nil
|
|
}),
|
|
resource.TestCheckResourceAttr("data.envbuilder_cached_image.test", "exists", "true"),
|
|
resource.TestCheckResourceAttrSet("data.envbuilder_cached_image.test", "image"),
|
|
resource.TestCheckResourceAttrWith("data.envbuilder_cached_image.test", "image", func(value string) error {
|
|
// value is enclosed in quotes
|
|
value = strings.Trim(value, `"`)
|
|
if !strings.HasPrefix(value, deps.CacheRepo) {
|
|
return fmt.Errorf("expected image %q to have prefix %q", value, deps.CacheRepo)
|
|
}
|
|
return nil
|
|
}),
|
|
resource.TestCheckResourceAttr("data.envbuilder_cached_image.test", "env.0", "FOO=\"bar\""),
|
|
),
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
t.Run("NotFound", func(t *testing.T) {
|
|
files := map[string]string{
|
|
"devcontainer.json": `{"build": { "dockerfile": "Dockerfile" }}`,
|
|
"Dockerfile": `FROM localhost:5000/test-ubuntu:latest
|
|
RUN apt-get update && apt-get install -y cowsay`,
|
|
}
|
|
deps := setup(t, files)
|
|
// We do not seed the cache.
|
|
tfCfg := fmt.Sprintf(`data "envbuilder_cached_image" "test" {
|
|
builder_image = %q
|
|
devcontainer_dir = %q
|
|
git_url = %q
|
|
extra_env = {
|
|
"FOO" : "bar"
|
|
}
|
|
cache_repo = %q
|
|
}`, deps.BuilderImage, deps.RepoDir, deps.RepoDir, deps.CacheRepo)
|
|
resource.Test(t, resource.TestCase{
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
|
|
Steps: []resource.TestStep{
|
|
{
|
|
Config: tfCfg,
|
|
Check: resource.ComposeAggregateTestCheckFunc(
|
|
// Inputs should still be present.
|
|
resource.TestCheckResourceAttr("data.envbuilder_cached_image.test", "cache_repo", deps.CacheRepo),
|
|
resource.TestCheckResourceAttr("data.envbuilder_cached_image.test", "extra_env.FOO", "bar"),
|
|
resource.TestCheckResourceAttr("data.envbuilder_cached_image.test", "git_url", deps.RepoDir),
|
|
resource.TestCheckResourceAttr("data.envbuilder_cached_image.test", "exists", "false"),
|
|
resource.TestCheckResourceAttr("data.envbuilder_cached_image.test", "image", deps.BuilderImage),
|
|
// Should be empty
|
|
resource.TestCheckNoResourceAttr("data.envbuilder_cached_image.test", "git_username"),
|
|
resource.TestCheckNoResourceAttr("data.envbuilder_cached_image.test", "git_password"),
|
|
resource.TestCheckNoResourceAttr("data.envbuilder_cached_image.test", "cache_ttl_days"),
|
|
// Computed values should be empty.
|
|
resource.TestCheckNoResourceAttr("data.envbuilder_cached_image.test", "id"),
|
|
resource.TestCheckResourceAttrSet("data.envbuilder_cached_image.test", "env.0"),
|
|
),
|
|
},
|
|
},
|
|
})
|
|
})
|
|
}
|