github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/selfregmanager/caller_provider_test.go (about) 1 package selfregmanager_test 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/kyma-incubator/compass/components/director/internal/selfregmanager" 8 9 "github.com/kyma-incubator/compass/components/director/internal/securehttp" 10 "github.com/kyma-incubator/compass/components/director/pkg/auth" 11 "github.com/kyma-incubator/compass/components/director/pkg/config" 12 "github.com/kyma-incubator/compass/components/director/pkg/oauth" 13 "github.com/pkg/errors" 14 "github.com/stretchr/testify/require" 15 ) 16 17 func TestCallerProvider_GetCaller(t *testing.T) { 18 var ( 19 firstRegion = "eu-1" 20 firstClientID = "client-id" 21 firstClientSecret = "client-secret" 22 firstTokenURL = "token-url" 23 secondRegion = "eu-2" 24 secondClientID = "client-id-2" 25 secondClientSecret = "client-secret-2" 26 secondTokenURL = "token-url-2" 27 tokenPath = "/oauth/token" 28 timeout = 15 * time.Second 29 externalClientCertSecretName = "resource-name" 30 ) 31 32 const ( 33 certificate = "-----BEGIN CERTIFICATE-----\nMIIDbjCCAlYCCQDg7pmtw8dIVTANBgkqhkiG9w0BAQsFADB5MQswCQYDVQQGEwJC\nRzENMAsGA1UECAwEVGVzdDENMAsGA1UEBwwEVGVzdDENMAsGA1UECgwEVGVzdDEN\nMAsGA1UECwwEVGVzdDENMAsGA1UEAwwEVGVzdDEfMB0GCSqGSIb3DQEJARYQdGVz\ndEBleGFtcGxlLmNvbTAeFw0yMjAxMjQxMTM4MDFaFw0zMjAxMjIxMTM4MDFaMHkx\nCzAJBgNVBAYTAkJHMQ0wCwYDVQQIDARUZXN0MQ0wCwYDVQQHDARUZXN0MQ0wCwYD\nVQQKDARUZXN0MQ0wCwYDVQQLDARUZXN0MQ0wCwYDVQQDDARUZXN0MR8wHQYJKoZI\nhvcNAQkBFhB0ZXN0QGV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\nMIIBCgKCAQEAuiFt98GUVTDSCHsOlBcblvUB/02uEmsalsG+DKEufzIVrp4DCxsA\nEsIN85Ywkd1Fsl0vwg9+3ibQlf1XtyXqJ6/jwm2zFdJPM3u2JfGGiiQpscHYp5hS\nlVscBjxZh1CQMKeBXltDsD64EV+XgHGN1aaw9mWKb6iSKsHLhBz594jYMFCnP3wH\nw9/hm6zBAhoF4Xr6UMOp4ZzzY8nzLCGPQuQ9UGp4lyAethrBpsqI6zAxjPKlqhmx\nL3591wkQgTzuL9th54yLEmyEvPTE26ONJBKylH2BqbAFiZPrwet0+PRJSflAfMU8\nYHqqo2AkaY1lmMAZiKDhj1RxMe/jt3HmVQIDAQABMA0GCSqGSIb3DQEBCwUAA4IB\nAQBx8BRhJ59UA3JDL+FHNKwIpxFewxjJwIGWqJTsOh4+rjPK3QeSnF0vt4cnLrCY\n+FLuhhUdFxjeFqJtWN7tHDK3ywSn/yZQTD5Nwcy/F1RmLjl91hjudxO/VewznOlq\nHJlDoM7kW9kOG6xS2HbbSaC1CzU33E90QOwcyCoeVXJ8aMDe6v/kWC65RoI9evg5\n2OxoARA8fpjyUphMTXuVNVI1kd2Uskpo8PePbc1h3OJVzYPIQ4+qMGsu7n3ZdwzI\nqDs2kdBD77k6cBQS+n7g5ETwv5OAgl5q1O17ye/YFNA/T3FhL9to6Nmrkqt7rlnF\nL8uAkeTGuHEATjmosQWUmbYi\n-----END CERTIFICATE-----\n" 34 key = "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAuiFt98GUVTDSCHsOlBcblvUB/02uEmsalsG+DKEufzIVrp4D\nCxsAEsIN85Ywkd1Fsl0vwg9+3ibQlf1XtyXqJ6/jwm2zFdJPM3u2JfGGiiQpscHY\np5hSlVscBjxZh1CQMKeBXltDsD64EV+XgHGN1aaw9mWKb6iSKsHLhBz594jYMFCn\nP3wHw9/hm6zBAhoF4Xr6UMOp4ZzzY8nzLCGPQuQ9UGp4lyAethrBpsqI6zAxjPKl\nqhmxL3591wkQgTzuL9th54yLEmyEvPTE26ONJBKylH2BqbAFiZPrwet0+PRJSflA\nfMU8YHqqo2AkaY1lmMAZiKDhj1RxMe/jt3HmVQIDAQABAoIBAH+9xa0N6/FzqhIr\n8ltsaID38cD33QnC++KPYRFl5XViOEM5KrmKdEhragvM/dR92gGJtucmn1lzph/q\nWTLXEJbgPh4ID6pgRf79Xos38bAJFZxrf3e2MKdUei1FaeRWRD9AFqddV100DjvO\nMTnztPX2iujv00zCkl5J1pT7FgrtcYgDPxXQK7dIcHrc9bV9fdTQUnpbVIs/9U7a\n7Qk/eJnEkezbjQCk7+Pgt3ymR29s4vJvyPen3jek0FKhQCxAg6iA5ZOtY+J5AS9e\n3ozZLUEa3b0eOABMw8QnKMtGTmIhLbf9JhISK2Ltsisc/yHHH3KfFE2nayqjvLZf\n5GR62hkCgYEA612EgoRHg4+BSfPfLNG3xsSnM+a98nZOmyxgZ3eNFWpSvi+7MemL\nCJHpwwje412OU1wCc2MtWYvGFY+heL62FxT8+JJLntykZcTQzQoHX3wvaMwopWRi\nJdrv3tEDtSJo9za54kfrNqnVyaxu82r7zgxVbcNiAVR+n7cRXuov288CgYEAynLm\nVI7cIKBOM6U44unkKyIS99Bh57FPjE1QAIsEOiNCWZay4qmzdEboOXjtC95Qyyxn\nTb+MONybwXKkGiLZQZQ2SlgjtEMBDQ+ofk2fK+yHWf4VeLtYWJdBESaAz85xGCCY\nYqlqbFEQd8cl86gTne+emLXp8KrDMuXhbbPvMJsCgYEAgBISAacS9t6GfoQqA0xW\nkNz/EnnTD/UaTst15bci2O1S+tQkK0OmeNJU/eB80AFfabKeTsU/rwMklSTjuz0i\n/ipYgLWyWk47UnknGPsFCgscDQ1SbLTTxz972KWpO83uid6IhT2XGtaNU0D12pRz\nUipZ7fEsCgc9I5FM7XXG9vcCgYBp6xN2ygeBSl2fx6GrlpM5veoOnYeboLjtvsVM\ng28Cu8/K731H+WFaRH7bEtlyjC3ZHrItiznhxgn3e/M/eVwRY2nEG7kSZrv2CWsu\nKY5NfMKT4st5Dwt5zijMwEhEcM3awbL4a4qygPcMs7S3dghNaUCgxQxQTgcyafM3\nYhySYQKBgF7pqQW7ESo1Mp9by+HzJBJsSju5zPBrCZrx8rFAMLCk1uDAIRcUuQtq\n+YwKU8ViemkOHWfN6bePap3/kdVHUxj2xJ6xTAUYHpVOQVMhTw1UmOikiV4FwUo+\nGb5Nk5evWBGhsl2LFqoOqhvFpjftv8+qgRHxmWtj4EoJYWng+hRz\n-----END RSA PRIVATE KEY-----\n" 35 ) 36 37 firstCallerCreds, err := auth.NewOAuthMtlsCredentials(firstClientID, certificate, key, firstTokenURL, tokenPath, externalClientCertSecretName) 38 require.NoError(t, err) 39 40 firstExpectedCallerCfg := securehttp.CallerConfig{ 41 Credentials: firstCallerCreds, 42 ClientTimeout: timeout, 43 SkipSSLValidation: false, 44 } 45 firstExpectedCaller, err := securehttp.NewCaller(firstExpectedCallerCfg) 46 require.NoError(t, err) 47 48 cfg := config.SelfRegConfig{ 49 OAuthMode: oauth.Mtls, 50 OauthTokenPath: tokenPath, 51 SkipSSLValidation: false, 52 ClientTimeout: timeout, 53 RegionToInstanceConfig: map[string]config.InstanceConfig{ 54 firstRegion: { 55 ClientID: firstClientID, 56 ClientSecret: firstClientSecret, 57 URL: "url", 58 TokenURL: firstTokenURL, 59 Cert: certificate, 60 Key: key, 61 }, 62 secondRegion: { 63 ClientID: secondClientID, 64 ClientSecret: secondClientSecret, 65 URL: "url", 66 TokenURL: secondTokenURL, 67 Cert: certificate, 68 Key: key, 69 }}, 70 ExternalClientCertSecretName: externalClientCertSecretName, 71 } 72 73 testCases := []struct { 74 Name string 75 Config config.SelfRegConfig 76 Region string 77 ExpectedExternalSvcCaller selfregmanager.ExternalSvcCaller 78 ExpectedErr error 79 }{ 80 { 81 Name: "Success", 82 Config: cfg, 83 Region: firstRegion, 84 ExpectedExternalSvcCaller: firstExpectedCaller, 85 ExpectedErr: nil, 86 }, 87 { 88 Name: "Returns error when region is missing in the config", 89 Config: cfg, 90 Region: "fake-region", 91 ExpectedExternalSvcCaller: nil, 92 ExpectedErr: errors.New("missing configuration for region: fake-region"), 93 }, 94 } 95 for _, testCase := range testCases { 96 t.Run(testCase.Name, func(t *testing.T) { 97 c := &selfregmanager.CallerProvider{} 98 actualCaller, err := c.GetCaller(testCase.Config, testCase.Region) 99 100 if testCase.ExpectedErr != nil { 101 require.Error(t, err) 102 require.Contains(t, err.Error(), testCase.ExpectedErr.Error()) 103 } else { 104 require.NoError(t, err) 105 ac, ok := actualCaller.(*securehttp.Caller) 106 require.True(t, ok) 107 ec, ok := testCase.ExpectedExternalSvcCaller.(*securehttp.Caller) 108 require.True(t, ok) 109 110 require.Equal(t, ec.Credentials, ac.Credentials) 111 require.Equal(t, ec.Provider.Name(), ac.Provider.Name()) 112 } 113 }) 114 } 115 }