github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/pkg/config/selfreg_config_test.go (about)

     1  package config
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/kyma-incubator/compass/components/director/pkg/oauth"
     7  	"github.com/pkg/errors"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  func TestSelfRegConfig_MapInstanceConfigs(t *testing.T) {
    12  	testCases := []struct {
    13  		Name                     string
    14  		Config                   SelfRegConfig
    15  		OauthMode                oauth.AuthMode
    16  		ExpectedRegionToInstance map[string]InstanceConfig
    17  		ExpectedErr              error
    18  	}{
    19  		{
    20  			Name: "Success for MTLS mode",
    21  			Config: SelfRegConfig{
    22  				SelfRegisterSecretPath:   "testdata/TestSelfRegConfig_MapInstanceConfigs_MTLS_Success.golden",
    23  				OAuthMode:                oauth.Mtls,
    24  				InstanceClientIDPath:     "clientId",
    25  				InstanceClientSecretPath: "clientSecret",
    26  				InstanceURLPath:          "url",
    27  				InstanceTokenURLPath:     "tokenUrl",
    28  				InstanceCertPath:         "clientCert",
    29  				InstanceKeyPath:          "clientKey",
    30  			},
    31  			ExpectedRegionToInstance: map[string]InstanceConfig{
    32  				"eu-1": {
    33  					ClientID: "client_id",
    34  					URL:      "url",
    35  					TokenURL: "token-url",
    36  					Cert:     "cert",
    37  					Key:      "key",
    38  				},
    39  				"eu-2": {
    40  					ClientID: "client_id_2",
    41  					URL:      "url-2",
    42  					TokenURL: "token-url-2",
    43  					Cert:     "cert2",
    44  					Key:      "key2",
    45  				},
    46  			},
    47  			ExpectedErr: nil,
    48  		},
    49  		{
    50  			Name: "Success for Standard mode",
    51  			Config: SelfRegConfig{
    52  				SelfRegisterSecretPath:   "testdata/TestSelfRegConfig_MapInstanceConfigs_StandardMode_Success.golden",
    53  				OAuthMode:                oauth.Standard,
    54  				InstanceClientIDPath:     "clientId",
    55  				InstanceClientSecretPath: "clientSecret",
    56  				InstanceURLPath:          "url",
    57  				InstanceTokenURLPath:     "tokenUrl",
    58  				InstanceCertPath:         "clientCert",
    59  				InstanceKeyPath:          "clientKey",
    60  			},
    61  			ExpectedRegionToInstance: map[string]InstanceConfig{
    62  				"eu-1": {
    63  					ClientID:     "client_id",
    64  					ClientSecret: "client_secret",
    65  					URL:          "url",
    66  					TokenURL:     "token-url",
    67  				},
    68  				"eu-2": {
    69  					ClientID:     "client_id_2",
    70  					ClientSecret: "client_secret",
    71  					URL:          "url-2",
    72  					TokenURL:     "token-url-2",
    73  				},
    74  			},
    75  			ExpectedErr: nil,
    76  		},
    77  		{
    78  			Name: "Returns error when Client ID and URLs are missing",
    79  			Config: SelfRegConfig{
    80  				SelfRegisterSecretPath:   "testdata/TestSelfRegConfig_MapInstanceConfigs_StandardMode_Missing_ClientID_URL.golden",
    81  				OAuthMode:                oauth.Standard,
    82  				InstanceClientIDPath:     "clientId",
    83  				InstanceClientSecretPath: "clientSecret",
    84  				InstanceURLPath:          "url",
    85  				InstanceTokenURLPath:     "tokenUrl",
    86  				InstanceCertPath:         "clientCert",
    87  				InstanceKeyPath:          "clientKey",
    88  			},
    89  			ExpectedRegionToInstance: nil,
    90  			ExpectedErr:              errors.Errorf("while validating instance for region: %q: Client ID is missing, Token URL is missing, URL is missing", "eu-2"),
    91  		},
    92  		{
    93  			Name: "Returns error when Client Secret is missing in Standard flow",
    94  			Config: SelfRegConfig{
    95  				SelfRegisterSecretPath:   "testdata/TestSelfRegConfig_MapInstanceConfigs_StandardMode_Missing_ClientSecret.golden",
    96  				OAuthMode:                oauth.Standard,
    97  				InstanceClientIDPath:     "clientId",
    98  				InstanceClientSecretPath: "clientSecret",
    99  				InstanceURLPath:          "url",
   100  				InstanceTokenURLPath:     "tokenUrl",
   101  				InstanceCertPath:         "clientCert",
   102  				InstanceKeyPath:          "clientKey",
   103  			},
   104  			ExpectedRegionToInstance: nil,
   105  			ExpectedErr:              errors.Errorf("while validating instance for region: %q: Client Secret is missing", "eu-2"),
   106  		},
   107  		{
   108  			Name: "Returns error when Certificate and Key is missing in MTLS flow",
   109  			Config: SelfRegConfig{
   110  				SelfRegisterSecretPath:   "testdata/TestSelfRegConfig_MapInstanceConfigs_MTLS_Missing_Cert_Key.golden",
   111  				OAuthMode:                oauth.Mtls,
   112  				InstanceClientIDPath:     "clientId",
   113  				InstanceClientSecretPath: "clientSecret",
   114  				InstanceURLPath:          "url",
   115  				InstanceTokenURLPath:     "tokenUrl",
   116  				InstanceCertPath:         "clientCert",
   117  				InstanceKeyPath:          "clientKey",
   118  			},
   119  			ExpectedRegionToInstance: nil,
   120  			ExpectedErr:              errors.Errorf("while validating instance for region: %q: Certificate is missing, Key is missing", "eu-2"),
   121  		},
   122  	}
   123  
   124  	for _, testCase := range testCases {
   125  		t.Run(testCase.Name, func(t *testing.T) {
   126  			err := testCase.Config.MapInstanceConfigs()
   127  
   128  			if testCase.ExpectedErr != nil {
   129  				require.Error(t, err)
   130  				require.Contains(t, err.Error(), testCase.ExpectedErr.Error())
   131  				require.True(t, len(testCase.Config.RegionToInstanceConfig) == 0)
   132  			} else {
   133  				require.NoError(t, err)
   134  				require.Equal(t, testCase.ExpectedRegionToInstance, testCase.Config.RegionToInstanceConfig)
   135  			}
   136  		})
   137  	}
   138  }