From 9b89f6ecc62461caa322333e52de7906848942e8 Mon Sep 17 00:00:00 2001 From: James Bardin Date: Fri, 11 Jan 2019 17:36:46 -0500 Subject: [PATCH] add tests for deprecated/removed attrs --- builtin/providers/test/provider.go | 1 + builtin/providers/test/resource_deprecated.go | 119 ++++++++++++++++++ .../test/resource_deprecated_test.go | 71 +++++++++++ 3 files changed, 191 insertions(+) create mode 100644 builtin/providers/test/resource_deprecated.go create mode 100644 builtin/providers/test/resource_deprecated_test.go diff --git a/builtin/providers/test/provider.go b/builtin/providers/test/provider.go index 155b39422..524200a1a 100644 --- a/builtin/providers/test/provider.go +++ b/builtin/providers/test/provider.go @@ -26,6 +26,7 @@ func Provider() terraform.ResourceProvider { "test_resource_nested": testResourceNested(), "test_resource_nested_set": testResourceNestedSet(), "test_resource_state_func": testResourceStateFunc(), + "test_resource_deprecated": testResourceDeprecated(), }, DataSourcesMap: map[string]*schema.Resource{ "test_data_source": testDataSource(), diff --git a/builtin/providers/test/resource_deprecated.go b/builtin/providers/test/resource_deprecated.go new file mode 100644 index 000000000..a176977b9 --- /dev/null +++ b/builtin/providers/test/resource_deprecated.go @@ -0,0 +1,119 @@ +package test + +import ( + "github.com/hashicorp/terraform/helper/schema" +) + +func testResourceDeprecated() *schema.Resource { + return &schema.Resource{ + Create: testResourceDeprecatedCreate, + Read: testResourceDeprecatedRead, + Update: testResourceDeprecatedUpdate, + Delete: testResourceDeprecatedDelete, + + Schema: map[string]*schema.Schema{ + "map_deprecated": { + Type: schema.TypeMap, + Optional: true, + Deprecated: "deprecated", + }, + "map_removed": { + Type: schema.TypeMap, + Optional: true, + Removed: "removed", + }, + "set_block_deprecated": { + Type: schema.TypeSet, + Optional: true, + MaxItems: 1, + Deprecated: "deprecated", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "value": { + Type: schema.TypeString, + Required: true, + Deprecated: "deprecated", + }, + "optional": { + Type: schema.TypeString, + ForceNew: true, + Optional: true, + Deprecated: "deprecated", + }, + }, + }, + }, + "set_block_removed": { + Type: schema.TypeSet, + Optional: true, + MaxItems: 1, + Removed: "Removed", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "optional": { + Type: schema.TypeString, + ForceNew: true, + Optional: true, + Computed: true, + Removed: "removed", + }, + }, + }, + }, + "list_block_deprecated": { + Type: schema.TypeList, + Optional: true, + Deprecated: "deprecated", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "value": { + Type: schema.TypeString, + Required: true, + Deprecated: "deprecated", + }, + "optional": { + Type: schema.TypeString, + ForceNew: true, + Optional: true, + Deprecated: "deprecated", + }, + }, + }, + }, + "list_block_removed": { + Type: schema.TypeList, + Optional: true, + Removed: "removed", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "optional": { + Type: schema.TypeString, + ForceNew: true, + Optional: true, + Removed: "removed", + }, + }, + }, + }, + }, + } +} + +func testResourceDeprecatedCreate(d *schema.ResourceData, meta interface{}) error { + d.SetId("testId") + return nil +} + +func testResourceDeprecatedRead(d *schema.ResourceData, meta interface{}) error { + + return nil +} + +func testResourceDeprecatedUpdate(d *schema.ResourceData, meta interface{}) error { + return nil +} + +func testResourceDeprecatedDelete(d *schema.ResourceData, meta interface{}) error { + d.SetId("") + return nil +} diff --git a/builtin/providers/test/resource_deprecated_test.go b/builtin/providers/test/resource_deprecated_test.go new file mode 100644 index 000000000..8817567d9 --- /dev/null +++ b/builtin/providers/test/resource_deprecated_test.go @@ -0,0 +1,71 @@ +package test + +import ( + "regexp" + "strings" + "testing" + + "github.com/hashicorp/terraform/helper/resource" +) + +// an empty config should be ok, because no deprecated/removed fields are set. +func TestResourceDeprecated_empty(t *testing.T) { + resource.UnitTest(t, resource.TestCase{ + Providers: testAccProviders, + CheckDestroy: testAccCheckResourceDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: strings.TrimSpace(` +resource "test_resource_deprecated" "foo" { +} + `), + }, + }, + }) +} + +// Deprecated fields should still work +func TestResourceDeprecated_deprecatedOK(t *testing.T) { + resource.UnitTest(t, resource.TestCase{ + Providers: testAccProviders, + CheckDestroy: testAccCheckResourceDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: strings.TrimSpace(` +resource "test_resource_deprecated" "foo" { + map_deprecated = { + "a" = "b", + } + set_block_deprecated { + value = "1" + } + list_block_deprecated { + value = "2" + } +} + `), + }, + }, + }) +} + +// Declaring an empty block should trigger the error +func TestResourceDeprecated_removedBlocks(t *testing.T) { + resource.UnitTest(t, resource.TestCase{ + Providers: testAccProviders, + CheckDestroy: testAccCheckResourceDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: strings.TrimSpace(` +resource "test_resource_deprecated" "foo" { + set_block_removed { + } + list_block_removed { + } +} + `), + ExpectError: regexp.MustCompile("REMOVED"), + }, + }, + }) +}