@@ -205,7 +205,7 @@ func TestTokenReadProviderConfigureWithHeaders(t *testing.T) {
205205 Steps : []resource.TestStep {
206206 {
207207 Config : testHeaderConfig ("auth" , "123" ),
208- Check : testTokenName_check ( "token-testtoken" ),
208+ Check : checkSelfToken ( "display_name" , "token-testtoken" ),
209209 },
210210 },
211211 })
@@ -547,7 +547,7 @@ func TestAccProviderToken(t *testing.T) {
547547}
548548
549549func TestAccTokenName (t * testing.T ) {
550-
550+ defer os . Unsetenv ( "VAULT_TOKEN_NAME" )
551551 tests := []struct {
552552 TokenNameEnv string
553553 UseTokenNameEnv bool
@@ -618,8 +618,103 @@ func TestAccTokenName(t *testing.T) {
618618 }
619619 }
620620 },
621- Config : testTokenNameConfig (test .UseTokenNameSchema , test .TokenNameSchema ),
622- Check : testTokenName_check (test .WantTokenName ),
621+ Config : testProviderConfig (test .UseTokenNameSchema , `token_name = "` + test .TokenNameSchema + `"` ),
622+ Check : checkSelfToken ("display_name" , test .WantTokenName ),
623+ },
624+ },
625+ })
626+ }
627+ }
628+
629+ func TestAccChildToken (t * testing.T ) {
630+ defer os .Unsetenv ("TERRAFORM_VAULT_SKIP_CHILD_TOKEN" )
631+
632+ checkTokenUsed := func (expectChildToken bool ) resource.TestCheckFunc {
633+ if expectChildToken {
634+ // If the default child token was created, we expect the token
635+ // used by the provider was named the default "token-terraform"
636+ return checkSelfToken ("display_name" , "token-terraform" )
637+ } else {
638+ // If the child token setting was disabled, the used token
639+ // should match the user-provided VAULT_TOKEN
640+ return checkSelfToken ("id" , os .Getenv ("VAULT_TOKEN" ))
641+ }
642+ }
643+
644+ tests := []struct {
645+ skipChildTokenEnv string
646+ useChildTokenEnv bool
647+ skipChildTokenSchema string
648+ useChildTokenSchema bool
649+ expectChildToken bool
650+ }{
651+ {
652+ useChildTokenSchema : false ,
653+ useChildTokenEnv : false ,
654+ expectChildToken : true ,
655+ },
656+ {
657+ skipChildTokenEnv : "" ,
658+ useChildTokenEnv : true ,
659+ expectChildToken : true ,
660+ },
661+ {
662+ skipChildTokenEnv : "true" ,
663+ useChildTokenEnv : true ,
664+ expectChildToken : false ,
665+ },
666+ {
667+ skipChildTokenEnv : "false" ,
668+ useChildTokenEnv : true ,
669+ expectChildToken : true ,
670+ },
671+ {
672+ skipChildTokenSchema : "true" ,
673+ useChildTokenSchema : true ,
674+ expectChildToken : false ,
675+ },
676+ {
677+ skipChildTokenSchema : "false" ,
678+ useChildTokenSchema : true ,
679+ expectChildToken : true ,
680+ },
681+ {
682+ skipChildTokenEnv : "true" ,
683+ useChildTokenEnv : true ,
684+ skipChildTokenSchema : "false" ,
685+ useChildTokenSchema : true ,
686+ expectChildToken : true ,
687+ },
688+ {
689+ skipChildTokenEnv : "false" ,
690+ useChildTokenEnv : true ,
691+ skipChildTokenSchema : "true" ,
692+ useChildTokenSchema : true ,
693+ expectChildToken : false ,
694+ },
695+ }
696+
697+ for _ , test := range tests {
698+ resource .Test (t , resource.TestCase {
699+ Providers : testProviders ,
700+ PreCheck : func () { testAccPreCheck (t ) },
701+ Steps : []resource.TestStep {
702+ {
703+ PreConfig : func () {
704+ if test .useChildTokenEnv {
705+ err := os .Setenv ("TERRAFORM_VAULT_SKIP_CHILD_TOKEN" , test .skipChildTokenEnv )
706+ if err != nil {
707+ t .Fatal (err )
708+ }
709+ } else {
710+ err := os .Unsetenv ("TERRAFORM_VAULT_SKIP_CHILD_TOKEN" )
711+ if err != nil {
712+ t .Fatal (err )
713+ }
714+ }
715+ },
716+ Config : testProviderConfig (test .useChildTokenSchema , `skip_child_token = ` + test .skipChildTokenSchema ),
717+ Check : checkTokenUsed (test .expectChildToken ),
623718 },
624719 },
625720 })
@@ -628,44 +723,34 @@ func TestAccTokenName(t *testing.T) {
628723
629724func testHeaderConfig (headerName , headerValue string ) string {
630725 providerConfig := fmt .Sprintf (`
631- provider "vault" {
632726 headers {
633727 name = "%s"
634728 value = "%s"
635729 }
636730 token_name = "testtoken"
637- }
638-
639- data "vault_generic_secret" "test" {
640- path = "/auth/token/lookup-self"
641- }
642731 ` , headerName , headerValue )
643- return providerConfig
732+ return testProviderConfig ( true , providerConfig )
644733}
645734
646735// Using the data lookup generic_secret to inspect used token
647736// by terraform (this enables check of token name)
648- func testTokenNameConfig (tokenNameSchema bool , tokenName string ) string {
649- testConfig := ""
650- providerConfig := `
651- provider "vault" {
652- token_name = "` + tokenName + `"
653- }`
737+ func testProviderConfig (includeProviderConfig bool , config string ) string {
738+ providerConfig := fmt .Sprintf (`
739+ provider "vault" {
740+ %s
741+ }` , config )
654742
655743 dataConfig := `
656- data "vault_generic_secret" "test" {
657- path = "/auth/token/lookup-self"
658- }
659- `
660- if tokenNameSchema {
661- testConfig = providerConfig + dataConfig
662- } else {
663- testConfig = dataConfig
744+ data "vault_generic_secret" "test" {
745+ path = "/auth/token/lookup-self"
746+ }`
747+ if includeProviderConfig {
748+ return providerConfig + dataConfig
664749 }
665- return testConfig
750+ return dataConfig
666751}
667752
668- func testTokenName_check ( expectedTokenName string ) resource.TestCheckFunc {
753+ func checkSelfToken ( attrName string , expectedValue string ) resource.TestCheckFunc {
669754 return func (s * terraform.State ) error {
670755 resourceState := s .Modules [0 ].Resources ["data.vault_generic_secret.test" ]
671756 if resourceState == nil {
@@ -677,13 +762,13 @@ func testTokenName_check(expectedTokenName string) resource.TestCheckFunc {
677762 return fmt .Errorf ("resource has no primary instance" )
678763 }
679764
680- tokenName , ok := resourceState .Primary .Attributes ["data.display_name" ]
765+ actualValue , ok := resourceState .Primary .Attributes ["data." + attrName ]
681766 if ! ok {
682- return fmt .Errorf ("cannot access token [%s] for check" , "display_name" )
767+ return fmt .Errorf ("cannot access attribute [%s] for check" , attrName )
683768 }
684769
685- if tokenName != expectedTokenName {
686- return fmt .Errorf ("token name [%s] expected, but got [%s]" , expectedTokenName , tokenName )
770+ if actualValue != expectedValue {
771+ return fmt .Errorf ("%s [%s] expected, but got [%s]" , attrName , expectedValue , actualValue )
687772 }
688773
689774 return nil
0 commit comments