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

     1  package vault
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	r "github.com/hashicorp/terraform/helper/resource"
     8  	"github.com/hashicorp/terraform/terraform"
     9  	"github.com/hashicorp/vault/api"
    10  )
    11  
    12  func TestResourcePolicy(t *testing.T) {
    13  	r.Test(t, r.TestCase{
    14  		Providers: testProviders,
    15  		PreCheck:  func() { testAccPreCheck(t) },
    16  		Steps: []r.TestStep{
    17  			r.TestStep{
    18  				Config: testResourcePolicy_initialConfig,
    19  				Check:  testResourcePolicy_initialCheck,
    20  			},
    21  			r.TestStep{
    22  				Config: testResourcePolicy_updateConfig,
    23  				Check:  testResourcePolicy_updateCheck,
    24  			},
    25  		},
    26  	})
    27  }
    28  
    29  var testResourcePolicy_initialConfig = `
    30  
    31  resource "vault_policy" "test" {
    32  	name = "dev-team"
    33  	policy = <<EOT
    34  path "secret/*" {
    35  	policy = "read"
    36  }
    37  EOT
    38  }
    39  
    40  `
    41  
    42  func testResourcePolicy_initialCheck(s *terraform.State) error {
    43  	resourceState := s.Modules[0].Resources["vault_policy.test"]
    44  	if resourceState == nil {
    45  		return fmt.Errorf("resource not found in state")
    46  	}
    47  
    48  	instanceState := resourceState.Primary
    49  	if instanceState == nil {
    50  		return fmt.Errorf("resource has no primary instance")
    51  	}
    52  
    53  	name := instanceState.ID
    54  
    55  	if name != instanceState.Attributes["name"] {
    56  		return fmt.Errorf("id doesn't match name")
    57  	}
    58  
    59  	if name != "dev-team" {
    60  		return fmt.Errorf("unexpected policy name")
    61  	}
    62  
    63  	client := testProvider.Meta().(*api.Client)
    64  	policy, err := client.Sys().GetPolicy(name)
    65  	if err != nil {
    66  		return fmt.Errorf("error reading back policy: %s", err)
    67  	}
    68  
    69  	if got, want := policy, "path \"secret/*\" {\n\tpolicy = \"read\"\n}\n"; got != want {
    70  		return fmt.Errorf("policy data is %q; want %q", got, want)
    71  	}
    72  
    73  	return nil
    74  }
    75  
    76  var testResourcePolicy_updateConfig = `
    77  
    78  resource "vault_policy" "test" {
    79  	name = "dev-team"
    80  	policy = <<EOT
    81  path "secret/*" {
    82  	policy = "write"
    83  }
    84  EOT
    85  }
    86  
    87  `
    88  
    89  func testResourcePolicy_updateCheck(s *terraform.State) error {
    90  	resourceState := s.Modules[0].Resources["vault_policy.test"]
    91  	instanceState := resourceState.Primary
    92  
    93  	name := instanceState.ID
    94  
    95  	client := testProvider.Meta().(*api.Client)
    96  
    97  	if name != instanceState.Attributes["name"] {
    98  		return fmt.Errorf("id doesn't match name")
    99  	}
   100  
   101  	if name != "dev-team" {
   102  		return fmt.Errorf("unexpected policy name")
   103  	}
   104  
   105  	policy, err := client.Sys().GetPolicy(name)
   106  	if err != nil {
   107  		return fmt.Errorf("error reading back policy: %s", err)
   108  	}
   109  
   110  	if got, want := policy, "path \"secret/*\" {\n\tpolicy = \"write\"\n}\n"; got != want {
   111  		return fmt.Errorf("policy data is %q; want %q", got, want)
   112  	}
   113  
   114  	return nil
   115  }