github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/chef/resource_environment_test.go (about)

     1  package chef
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  	"testing"
     7  
     8  	chefc "github.com/go-chef/chef"
     9  
    10  	"github.com/hashicorp/terraform/helper/resource"
    11  	"github.com/hashicorp/terraform/terraform"
    12  )
    13  
    14  func TestAccEnvironment_basic(t *testing.T) {
    15  	var env chefc.Environment
    16  
    17  	resource.Test(t, resource.TestCase{
    18  		PreCheck:     func() { testAccPreCheck(t) },
    19  		Providers:    testAccProviders,
    20  		CheckDestroy: testAccEnvironmentCheckDestroy(&env),
    21  		Steps: []resource.TestStep{
    22  			resource.TestStep{
    23  				Config: testAccEnvironmentConfig_basic,
    24  				Check: resource.ComposeTestCheckFunc(
    25  					testAccEnvironmentCheckExists("chef_environment.test", &env),
    26  					func(s *terraform.State) error {
    27  
    28  						if expected := "terraform-acc-test-basic"; env.Name != expected {
    29  							return fmt.Errorf("wrong name; expected %v, got %v", expected, env.Name)
    30  						}
    31  						if expected := "Terraform Acceptance Tests"; env.Description != expected {
    32  							return fmt.Errorf("wrong description; expected %v, got %v", expected, env.Description)
    33  						}
    34  
    35  						expectedConstraints := map[string]string{
    36  							"terraform": "= 1.0.0",
    37  						}
    38  						if !reflect.DeepEqual(env.CookbookVersions, expectedConstraints) {
    39  							return fmt.Errorf("wrong cookbook constraints; expected %#v, got %#v", expectedConstraints, env.CookbookVersions)
    40  						}
    41  
    42  						var expectedAttributes interface{}
    43  						expectedAttributes = map[string]interface{}{
    44  							"terraform_acc_test": true,
    45  						}
    46  						if !reflect.DeepEqual(env.DefaultAttributes, expectedAttributes) {
    47  							return fmt.Errorf("wrong default attributes; expected %#v, got %#v", expectedAttributes, env.DefaultAttributes)
    48  						}
    49  						if !reflect.DeepEqual(env.OverrideAttributes, expectedAttributes) {
    50  							return fmt.Errorf("wrong override attributes; expected %#v, got %#v", expectedAttributes, env.OverrideAttributes)
    51  						}
    52  
    53  						return nil
    54  					},
    55  				),
    56  			},
    57  		},
    58  	})
    59  }
    60  
    61  func testAccEnvironmentCheckExists(rn string, env *chefc.Environment) resource.TestCheckFunc {
    62  	return func(s *terraform.State) error {
    63  		rs, ok := s.RootModule().Resources[rn]
    64  		if !ok {
    65  			return fmt.Errorf("resource not found: %s", rn)
    66  		}
    67  
    68  		if rs.Primary.ID == "" {
    69  			return fmt.Errorf("environment id not set")
    70  		}
    71  
    72  		client := testAccProvider.Meta().(*chefc.Client)
    73  		gotEnv, err := client.Environments.Get(rs.Primary.ID)
    74  		if err != nil {
    75  			return fmt.Errorf("error getting environment: %s", err)
    76  		}
    77  
    78  		*env = *gotEnv
    79  
    80  		return nil
    81  	}
    82  }
    83  
    84  func testAccEnvironmentCheckDestroy(env *chefc.Environment) resource.TestCheckFunc {
    85  	return func(s *terraform.State) error {
    86  		client := testAccProvider.Meta().(*chefc.Client)
    87  		_, err := client.Environments.Get(env.Name)
    88  		if err == nil {
    89  			return fmt.Errorf("environment still exists")
    90  		}
    91  		if _, ok := err.(*chefc.ErrorResponse); !ok {
    92  			// A more specific check is tricky because Chef Server can return
    93  			// a few different error codes in this case depending on which
    94  			// part of its stack catches the error.
    95  			return fmt.Errorf("got something other than an HTTP error (%v) when getting environment", err)
    96  		}
    97  
    98  		return nil
    99  	}
   100  }
   101  
   102  const testAccEnvironmentConfig_basic = `
   103  resource "chef_environment" "test" {
   104    name = "terraform-acc-test-basic"
   105    description = "Terraform Acceptance Tests"
   106    default_attributes_json = <<EOT
   107  {
   108       "terraform_acc_test": true
   109  }
   110  EOT
   111    override_attributes_json = <<EOT
   112  {
   113       "terraform_acc_test": true
   114  }
   115  EOT
   116    cookbook_constraints = {
   117      "terraform" = "= 1.0.0"
   118    }
   119  }
   120  `