@@ -8,8 +8,10 @@ import (
88 "testing"
99
1010 "github.com/sirupsen/logrus"
11+ "github.com/stretchr/testify/assert"
1112 "github.com/stretchr/testify/require"
1213 "github.com/zalando-incubator/cluster-lifecycle-manager/channel"
14+ "github.com/zalando-incubator/cluster-lifecycle-manager/pkg/cluster-registry/models"
1315)
1416
1517func fieldNames (value interface {}) ([]string , error ) {
@@ -83,7 +85,8 @@ func TestVersion(t *testing.T) {
8385 require .NoError (t , err )
8486
8587 for _ , field := range fields {
86- if field == "Alias" || field == "NodePools" || field == "Owner" || field == "AccountName" || field == "Status" {
88+ switch field {
89+ case "Alias" , "NodePools" , "Owner" , "AccountName" , "AccountClusters" , "OIDCProvider" , "IAMRoleTrustRelationshipTemplate" , "Status" :
8790 continue
8891 }
8992
@@ -134,3 +137,111 @@ func TestName(t *testing.T) {
134137
135138 require .Equal (t , cluster .LocalID , cluster .Name ())
136139}
140+
141+ func TestInfrastructureAccountID (t * testing.T ) {
142+ cluster := & Cluster {InfrastructureAccount : "aws:123456789012" }
143+ assert .Equal (t , "123456789012" , cluster .InfrastructureAccountID ())
144+ }
145+ func TestWorkerRoleARN (t * testing.T ) {
146+ cluster := & Cluster {InfrastructureAccount : "aws:123456789012" , LocalID : "kube-1" }
147+ assert .Equal (t , "arn:aws:iam::123456789012:role/kube-1-worker" , cluster .WorkerRoleARN ())
148+ }
149+
150+ func TestOIDCProvider (t * testing.T ) {
151+ cluster := & Cluster {
152+ Provider : ZalandoAWSProvider ,
153+ LocalID : "kube-1" ,
154+ APIServerURL : "https://kube-1.example.zalan.do" ,
155+ }
156+ err := cluster .InitOIDCProvider ()
157+ require .NoError (t , err )
158+
159+ assert .Equal (t , "kube-1.example.zalan.do" , cluster .OIDCProvider )
160+
161+ cluster = & Cluster {
162+ Provider : ZalandoEKSProvider ,
163+ ConfigItems : map [string ]string {
164+ "eks_oidc_issuer_url" : "https://oidc.eks.eu-central-1.amazonaws.com/id/11112222333344445555666677778888" ,
165+ },
166+ }
167+ err = cluster .InitOIDCProvider ()
168+ require .NoError (t , err )
169+
170+ assert .Equal (t , "oidc.eks.eu-central-1.amazonaws.com/id/11112222333344445555666677778888" , cluster .OIDCProvider )
171+ }
172+
173+ func TestOIDCProviderARN (t * testing.T ) {
174+ cluster := & Cluster {
175+ InfrastructureAccount : "aws:123456789012" ,
176+ OIDCProvider : "kube-1.example.zalan.do" ,
177+ }
178+ assert .Equal (t , "arn:aws:iam::123456789012:oidc-provider/kube-1.example.zalan.do" , cluster .OIDCProviderARN ())
179+ }
180+
181+ func TestOIDCSubjectKey (t * testing.T ) {
182+ cluster := & Cluster {OIDCProvider : "kube-1.example.zalan.do" }
183+ assert .Equal (t , "kube-1.example.zalan.do:sub" , cluster .OIDCSubjectKey ())
184+ }
185+
186+ func TestIAMRoleTrustRelationshipTemplate (t * testing.T ) {
187+ legacyCluster := & Cluster {
188+ Provider : ZalandoAWSProvider ,
189+ LocalID : "kube-1" ,
190+ InfrastructureAccount : "aws:123456789012" ,
191+ APIServerURL : "https://kube-1.example.zalan.do" ,
192+ LifecycleStatus : models .ClusterLifecycleStatusReady ,
193+ }
194+ legacyCluster .AccountClusters = []* Cluster {legacyCluster }
195+ err := legacyCluster .InitOIDCProvider ()
196+ require .NoError (t , err )
197+
198+ legacyTrustRelationship := `{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"},{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::123456789012:role/kube-1-worker"},"Action":"sts:AssumeRole"},{"Effect":"Allow","Principal":{"Federated":"arn:aws:iam::123456789012:oidc-provider/kube-1.example.zalan.do"},"Action":"sts:AssumeRoleWithWebIdentity","Condition":{"StringLike":{"kube-1.example.zalan.do:sub":"system:serviceaccount:${SERVICE_ACCOUNT}"}}}]}`
199+ assert .Equal (t , legacyTrustRelationship , legacyCluster .IAMRoleTrustRelationshipTemplate )
200+
201+ eksCluster := & Cluster {
202+ Provider : ZalandoEKSProvider ,
203+ LocalID : "teapot-euc1" ,
204+ InfrastructureAccount : "aws:123456789012" ,
205+ ConfigItems : map [string ]string {
206+ "eks_oidc_issuer_url" : "https://oidc.eks.eu-central-1.amazonaws.com/id/11112222333344445555666677778888" ,
207+ },
208+ LifecycleStatus : models .ClusterLifecycleStatusReady ,
209+ }
210+ eksCluster .AccountClusters = []* Cluster {eksCluster }
211+ err = eksCluster .InitOIDCProvider ()
212+ require .NoError (t , err )
213+
214+ eksTrustRelationship := `{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"},{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::123456789012:role/teapot-euc1-worker"},"Action":"sts:AssumeRole"},{"Effect":"Allow","Principal":{"Federated":"arn:aws:iam::123456789012:oidc-provider/oidc.eks.eu-central-1.amazonaws.com/id/11112222333344445555666677778888"},"Action":"sts:AssumeRoleWithWebIdentity","Condition":{"StringLike":{"oidc.eks.eu-central-1.amazonaws.com/id/11112222333344445555666677778888:sub":"system:serviceaccount:${SERVICE_ACCOUNT}"}}}]}`
215+ assert .Equal (t , eksTrustRelationship , eksCluster .IAMRoleTrustRelationshipTemplate )
216+
217+ combinedAccountClusters := []* Cluster {legacyCluster , eksCluster }
218+ combinedTrustRelationship := `{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"},{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::123456789012:role/kube-1-worker"},"Action":"sts:AssumeRole"},{"Effect":"Allow","Principal":{"Federated":"arn:aws:iam::123456789012:oidc-provider/kube-1.example.zalan.do"},"Action":"sts:AssumeRoleWithWebIdentity","Condition":{"StringLike":{"kube-1.example.zalan.do:sub":"system:serviceaccount:${SERVICE_ACCOUNT}"}}},{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::123456789012:role/teapot-euc1-worker"},"Action":"sts:AssumeRole"},{"Effect":"Allow","Principal":{"Federated":"arn:aws:iam::123456789012:oidc-provider/oidc.eks.eu-central-1.amazonaws.com/id/11112222333344445555666677778888"},"Action":"sts:AssumeRoleWithWebIdentity","Condition":{"StringLike":{"oidc.eks.eu-central-1.amazonaws.com/id/11112222333344445555666677778888:sub":"system:serviceaccount:${SERVICE_ACCOUNT}"}}}]}`
219+
220+ legacyCluster .AccountClusters = combinedAccountClusters
221+ err = legacyCluster .InitOIDCProvider ()
222+ require .NoError (t , err )
223+
224+ assert .Equal (t , combinedTrustRelationship , legacyCluster .IAMRoleTrustRelationshipTemplate )
225+
226+ eksCluster .AccountClusters = combinedAccountClusters
227+ err = eksCluster .InitOIDCProvider ()
228+ require .NoError (t , err )
229+
230+ assert .Equal (t , combinedTrustRelationship , eksCluster .IAMRoleTrustRelationshipTemplate )
231+
232+ withDecommissionedClusters := append (combinedAccountClusters , & Cluster {
233+ LifecycleStatus : models .ClusterLifecycleStatusDecommissioned ,
234+ })
235+
236+ legacyCluster .AccountClusters = withDecommissionedClusters
237+ err = legacyCluster .InitOIDCProvider ()
238+ require .NoError (t , err )
239+
240+ assert .Equal (t , combinedTrustRelationship , legacyCluster .IAMRoleTrustRelationshipTemplate )
241+
242+ eksCluster .AccountClusters = withDecommissionedClusters
243+ err = eksCluster .InitOIDCProvider ()
244+ require .NoError (t , err )
245+
246+ assert .Equal (t , combinedTrustRelationship , eksCluster .IAMRoleTrustRelationshipTemplate )
247+ }
0 commit comments