@@ -112,6 +112,30 @@ func TestAccKeycloakRealmKeystoreRsa_algorithmValidation(t *testing.T) {
112112 })
113113}
114114
115+ func TestAccKeycloakRealmKeystoreRsa_extraConfigKid (t * testing.T ) {
116+ t .Parallel ()
117+
118+ rsaName := acctest .RandomWithPrefix ("tf-acc" )
119+ kid := acctest .RandomWithPrefix ("tf-acc" )
120+ privateKey , certificate := generateKeyAndCert (2048 )
121+
122+ resource .Test (t , resource.TestCase {
123+ ProviderFactories : testAccProviderFactories ,
124+ PreCheck : func () { testAccPreCheck (t ) },
125+ CheckDestroy : testAccCheckRealmKeystoreRsaDestroy (),
126+ Steps : []resource.TestStep {
127+ {
128+ Config : testKeycloakRealmKeystoreRsa_withKidExtraConfig (rsaName , privateKey , certificate , kid ),
129+ Check : resource .ComposeTestCheckFunc (
130+ testAccCheckRealmKeystoreRsaExists ("keycloak_realm_keystore_rsa.realm_rsa" ),
131+ testAccCheckRealmKeystoreRsaKidInRealmKeys ("keycloak_realm_keystore_rsa.realm_rsa" , kid ),
132+ ),
133+ ExpectNonEmptyPlan : true ,
134+ },
135+ },
136+ })
137+ }
138+
115139func testAccCheckRealmKeystoreRsaExists (resourceName string ) resource.TestCheckFunc {
116140 return func (s * terraform.State ) error {
117141 _ , err := getKeycloakRealmKeystoreRsaFromState (s , resourceName )
@@ -123,6 +147,36 @@ func testAccCheckRealmKeystoreRsaExists(resourceName string) resource.TestCheckF
123147 }
124148}
125149
150+ func testAccCheckRealmKeystoreRsaKidInRealmKeys (resourceName , expectedKid string ) resource.TestCheckFunc {
151+ return func (s * terraform.State ) error {
152+ fetchedKeystore , err := getKeycloakRealmKeystoreRsaFromState (s , resourceName )
153+ if err != nil {
154+ return err
155+ }
156+
157+ keys , err := keycloakClient .GetRealmKeys (testCtx , fetchedKeystore .RealmId )
158+ if err != nil {
159+ return fmt .Errorf ("error fetching realm keys: %w" , err )
160+ }
161+
162+ var candidates []keycloak.Key
163+ for _ , k := range keys .Keys {
164+ if k .Algorithm != nil && * k .Algorithm == fetchedKeystore .Algorithm &&
165+ k .Certificate != nil && * k .Certificate == fetchedKeystore .Certificate {
166+ candidates = append (candidates , k )
167+ }
168+ }
169+
170+ for _ , c := range candidates {
171+ if c .Kid != nil && * c .Kid == expectedKid {
172+ return nil
173+ }
174+ }
175+
176+ return fmt .Errorf ("could not find expected kid in realm keys. expected kid=%s" , expectedKid )
177+ }
178+ }
179+
126180func testAccCheckRealmKeystoreRsaFetch (resourceName string , keystore * keycloak.RealmKeystoreRsa ) resource.TestCheckFunc {
127181 return func (s * terraform.State ) error {
128182 fetchedKeystore , err := getKeycloakRealmKeystoreRsaFromState (s , resourceName )
@@ -258,3 +312,26 @@ resource "keycloak_realm_keystore_rsa" "realm_rsa" {
258312}
259313 ` , testAccRealmUserFederation .Realm , rsaName , attr , val , privateKey , certificate , provider )
260314}
315+
316+ func testKeycloakRealmKeystoreRsa_withKidExtraConfig (rsaName , privateKey , certificate , kid string ) string {
317+ return fmt .Sprintf (`
318+ data "keycloak_realm" "realm" {
319+ realm = "%s"
320+ }
321+
322+ resource "keycloak_realm_keystore_rsa" "realm_rsa" {
323+ name = "%s"
324+ realm_id = data.keycloak_realm.realm.id
325+
326+ priority = 100
327+ algorithm = "RS256"
328+ private_key = "%s"
329+ certificate = "%s"
330+ provider_id = "rsa"
331+
332+ extra_config = {
333+ "kid" = "%s"
334+ }
335+ }
336+ ` , testAccRealmUserFederation .Realm , rsaName , privateKey , certificate , kid )
337+ }
0 commit comments