...

Source file src/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/package_test.go

Documentation: github.com/aws/aws-sdk-go-v2/internal/endpoints/v2

     1  package endpoints_test
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"log"
     7  	"reflect"
     8  	"regexp"
     9  	"strconv"
    10  	"testing"
    11  
    12  	"github.com/aws/aws-sdk-go-v2/aws"
    13  	"github.com/aws/aws-sdk-go-v2/internal/endpoints/v2"
    14  	"github.com/aws/smithy-go/logging"
    15  )
    16  
    17  type testCase struct {
    18  	Region   string
    19  	Options  endpoints.Options
    20  	Expected aws.Endpoint
    21  	WantErr  bool
    22  }
    23  
    24  type serviceTest struct {
    25  	Partitions endpoints.Partitions
    26  	Cases      []testCase
    27  }
    28  
    29  var partitionRegexp = struct {
    30  	Aws    *regexp.Regexp
    31  	AwsIso *regexp.Regexp
    32  }{
    33  
    34  	Aws:    regexp.MustCompile("^(us|eu|ap|sa|ca|me|af)\\-\\w+\\-\\d+$"),
    35  	AwsIso: regexp.MustCompile("^us\\-iso\\-\\w+\\-\\d+$"),
    36  }
    37  
    38  var testCases = map[string]serviceTest{
    39  	"default-pattern-service": {
    40  		Partitions: endpoints.Partitions{
    41  			{
    42  				ID: "aws",
    43  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
    44  					{
    45  						Variant: endpoints.DualStackVariant,
    46  					}: {
    47  						Hostname:          "default-pattern-service.{region}.api.aws",
    48  						Protocols:         []string{"https"},
    49  						SignatureVersions: []string{"v4"},
    50  					},
    51  					{
    52  						Variant: endpoints.FIPSVariant,
    53  					}: {
    54  						Hostname:          "default-pattern-service-fips.{region}.amazonaws.com",
    55  						Protocols:         []string{"https"},
    56  						SignatureVersions: []string{"v4"},
    57  					},
    58  					{
    59  						Variant: endpoints.FIPSVariant | endpoints.DualStackVariant,
    60  					}: {
    61  						Hostname:          "default-pattern-service-fips.{region}.api.aws",
    62  						Protocols:         []string{"https"},
    63  						SignatureVersions: []string{"v4"},
    64  					},
    65  					{
    66  						Variant: 0,
    67  					}: {
    68  						Hostname:          "default-pattern-service.{region}.amazonaws.com",
    69  						Protocols:         []string{"https"},
    70  						SignatureVersions: []string{"v4"},
    71  					},
    72  				},
    73  				RegionRegex:    partitionRegexp.Aws,
    74  				IsRegionalized: true,
    75  				Endpoints: endpoints.Endpoints{
    76  					endpoints.EndpointKey{
    77  						Region: "af-south-1",
    78  					}: endpoints.Endpoint{},
    79  					endpoints.EndpointKey{
    80  						Region: "us-west-2",
    81  					}: endpoints.Endpoint{},
    82  					endpoints.EndpointKey{
    83  						Region:  "us-west-2",
    84  						Variant: endpoints.FIPSVariant,
    85  					}: {
    86  						Hostname: "default-pattern-service-fips.us-west-2.amazonaws.com",
    87  					},
    88  					endpoints.EndpointKey{
    89  						Region:  "us-west-2",
    90  						Variant: endpoints.DualStackVariant,
    91  					}: {
    92  						Hostname: "default-pattern-service.us-west-2.api.aws",
    93  					},
    94  				},
    95  			},
    96  			{
    97  				ID: "aws-iso",
    98  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
    99  					{
   100  						Variant: 0,
   101  					}: {
   102  						Hostname:          "default-pattern-service.{region}.c2s.ic.gov",
   103  						Protocols:         []string{"https"},
   104  						SignatureVersions: []string{"v4"},
   105  					},
   106  				},
   107  				RegionRegex:    partitionRegexp.AwsIso,
   108  				IsRegionalized: true,
   109  			},
   110  		},
   111  		Cases: []testCase{
   112  			{
   113  				Region: "us-west-2",
   114  				Expected: aws.Endpoint{
   115  					URL:           "https://default-pattern-service.us-west-2.amazonaws.com",
   116  					PartitionID:   "aws",
   117  					SigningRegion: "us-west-2",
   118  					SigningMethod: "v4",
   119  				},
   120  			},
   121  			{
   122  				Region: "us-west-2",
   123  				Options: endpoints.Options{
   124  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
   125  				},
   126  				Expected: aws.Endpoint{
   127  					URL:           "https://default-pattern-service-fips.us-west-2.amazonaws.com",
   128  					PartitionID:   "aws",
   129  					SigningRegion: "us-west-2",
   130  					SigningMethod: "v4",
   131  				},
   132  			},
   133  			{
   134  				Region: "af-south-1",
   135  				Expected: aws.Endpoint{
   136  					URL:           "https://default-pattern-service.af-south-1.amazonaws.com",
   137  					PartitionID:   "aws",
   138  					SigningRegion: "af-south-1",
   139  					SigningMethod: "v4",
   140  				},
   141  			},
   142  			{
   143  				Region: "af-south-1",
   144  				Options: endpoints.Options{
   145  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
   146  				},
   147  				Expected: aws.Endpoint{
   148  					URL:           "https://default-pattern-service-fips.af-south-1.amazonaws.com",
   149  					PartitionID:   "aws",
   150  					SigningRegion: "af-south-1",
   151  					SigningMethod: "v4",
   152  				},
   153  			},
   154  			{
   155  				Region: "us-west-2",
   156  				Expected: aws.Endpoint{
   157  					URL:           "https://default-pattern-service.us-west-2.amazonaws.com",
   158  					PartitionID:   "aws",
   159  					SigningRegion: "us-west-2",
   160  					SigningMethod: "v4",
   161  				},
   162  			},
   163  			{
   164  				Region: "us-west-2",
   165  				Options: endpoints.Options{
   166  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   167  				},
   168  				Expected: aws.Endpoint{
   169  					URL:           "https://default-pattern-service.us-west-2.api.aws",
   170  					PartitionID:   "aws",
   171  					SigningRegion: "us-west-2",
   172  					SigningMethod: "v4",
   173  				},
   174  			},
   175  			{
   176  				Region: "af-south-1",
   177  				Expected: aws.Endpoint{
   178  					URL:           "https://default-pattern-service.af-south-1.amazonaws.com",
   179  					PartitionID:   "aws",
   180  					SigningRegion: "af-south-1",
   181  					SigningMethod: "v4",
   182  				},
   183  			},
   184  			{
   185  				Region: "af-south-1",
   186  				Options: endpoints.Options{
   187  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   188  				},
   189  				Expected: aws.Endpoint{
   190  					URL:           "https://default-pattern-service.af-south-1.api.aws",
   191  					PartitionID:   "aws",
   192  					SigningRegion: "af-south-1",
   193  					SigningMethod: "v4",
   194  				},
   195  			},
   196  		},
   197  	},
   198  	"global-service": {
   199  		Partitions: endpoints.Partitions{
   200  			{
   201  				ID: "aws",
   202  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
   203  					{
   204  						Variant: endpoints.DualStackVariant,
   205  					}: {
   206  						Hostname:          "global-service.{region}.api.aws",
   207  						Protocols:         []string{"https"},
   208  						SignatureVersions: []string{"v4"},
   209  					},
   210  					{
   211  						Variant: endpoints.FIPSVariant,
   212  					}: {
   213  						Hostname:          "global-service-fips.{region}.amazonaws.com",
   214  						Protocols:         []string{"https"},
   215  						SignatureVersions: []string{"v4"},
   216  					},
   217  					{
   218  						Variant: endpoints.FIPSVariant | endpoints.DualStackVariant,
   219  					}: {
   220  						Hostname:          "global-service-fips.{region}.api.aws",
   221  						Protocols:         []string{"https"},
   222  						SignatureVersions: []string{"v4"},
   223  					},
   224  					{
   225  						Variant: 0,
   226  					}: {
   227  						Hostname:          "global-service.{region}.amazonaws.com",
   228  						Protocols:         []string{"https"},
   229  						SignatureVersions: []string{"v4"},
   230  					},
   231  				},
   232  				RegionRegex:       partitionRegexp.Aws,
   233  				IsRegionalized:    false,
   234  				PartitionEndpoint: "aws-global",
   235  				Endpoints: endpoints.Endpoints{
   236  					endpoints.EndpointKey{
   237  						Region: "aws-global",
   238  					}: endpoints.Endpoint{
   239  						Hostname: "global-service.amazonaws.com",
   240  						CredentialScope: endpoints.CredentialScope{
   241  							Region: "us-east-1",
   242  						},
   243  					},
   244  					endpoints.EndpointKey{
   245  						Region:  "aws-global",
   246  						Variant: endpoints.FIPSVariant,
   247  					}: {
   248  						Hostname: "global-service-fips.amazonaws.com",
   249  						CredentialScope: endpoints.CredentialScope{
   250  							Region: "us-east-1",
   251  						},
   252  					},
   253  					endpoints.EndpointKey{
   254  						Region:  "aws-global",
   255  						Variant: endpoints.DualStackVariant,
   256  					}: {
   257  						Hostname: "global-service.api.aws",
   258  						CredentialScope: endpoints.CredentialScope{
   259  							Region: "us-east-1",
   260  						},
   261  					},
   262  				},
   263  			},
   264  			{
   265  				ID: "aws-iso",
   266  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
   267  					{
   268  						Variant: 0,
   269  					}: {
   270  						Hostname:          "global-service.{region}.c2s.ic.gov",
   271  						Protocols:         []string{"https"},
   272  						SignatureVersions: []string{"v4"},
   273  					},
   274  				},
   275  				RegionRegex:    partitionRegexp.AwsIso,
   276  				IsRegionalized: true,
   277  			},
   278  		},
   279  		Cases: []testCase{
   280  			{
   281  				Region: "aws-global",
   282  				Expected: aws.Endpoint{
   283  					URL:           "https://global-service.amazonaws.com",
   284  					PartitionID:   "aws",
   285  					SigningRegion: "us-east-1",
   286  					SigningMethod: "v4",
   287  				},
   288  			},
   289  			{
   290  				Region: "aws-global",
   291  				Options: endpoints.Options{
   292  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
   293  				},
   294  				Expected: aws.Endpoint{
   295  					URL:           "https://global-service-fips.amazonaws.com",
   296  					PartitionID:   "aws",
   297  					SigningRegion: "us-east-1",
   298  					SigningMethod: "v4",
   299  				},
   300  			},
   301  			{
   302  				Region: "foo",
   303  				Expected: aws.Endpoint{
   304  					URL:           "https://global-service.amazonaws.com",
   305  					PartitionID:   "aws",
   306  					SigningRegion: "us-east-1",
   307  					SigningMethod: "v4",
   308  				},
   309  			},
   310  			{
   311  				Region: "foo",
   312  				Options: endpoints.Options{
   313  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
   314  				},
   315  				Expected: aws.Endpoint{
   316  					URL:           "https://global-service-fips.amazonaws.com",
   317  					PartitionID:   "aws",
   318  					SigningRegion: "us-east-1",
   319  					SigningMethod: "v4",
   320  				},
   321  			},
   322  			{
   323  				Region: "aws-global",
   324  				Expected: aws.Endpoint{
   325  					URL:           "https://global-service.amazonaws.com",
   326  					PartitionID:   "aws",
   327  					SigningRegion: "us-east-1",
   328  					SigningMethod: "v4",
   329  				},
   330  			},
   331  			{
   332  				Region: "aws-global",
   333  				Options: endpoints.Options{
   334  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   335  				},
   336  				Expected: aws.Endpoint{
   337  					URL:           "https://global-service.api.aws",
   338  					PartitionID:   "aws",
   339  					SigningRegion: "us-east-1",
   340  					SigningMethod: "v4",
   341  				},
   342  			},
   343  			{
   344  				Region: "foo",
   345  				Expected: aws.Endpoint{
   346  					URL:           "https://global-service.amazonaws.com",
   347  					PartitionID:   "aws",
   348  					SigningRegion: "us-east-1",
   349  					SigningMethod: "v4",
   350  				},
   351  			},
   352  			{
   353  				Region: "foo",
   354  				Options: endpoints.Options{
   355  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   356  				},
   357  				Expected: aws.Endpoint{
   358  					URL:           "https://global-service.api.aws",
   359  					PartitionID:   "aws",
   360  					SigningRegion: "us-east-1",
   361  					SigningMethod: "v4",
   362  				},
   363  			},
   364  		},
   365  	},
   366  	"multi-variant-service": {
   367  		Partitions: endpoints.Partitions{
   368  			{
   369  				ID: "aws",
   370  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
   371  					{
   372  						Variant: endpoints.DualStackVariant,
   373  					}: {
   374  						Hostname:          "multi-variant-service.dualstack.{region}.api.aws",
   375  						Protocols:         []string{"https"},
   376  						SignatureVersions: []string{"v4"},
   377  					},
   378  					{
   379  						Variant: endpoints.FIPSVariant,
   380  					}: {
   381  						Hostname:          "fips.multi-variant-service.{region}.amazonaws.com",
   382  						Protocols:         []string{"https"},
   383  						SignatureVersions: []string{"v4"},
   384  					},
   385  					{
   386  						Variant: endpoints.FIPSVariant | endpoints.DualStackVariant,
   387  					}: {
   388  						Hostname:          "fips.multi-variant-service.dualstack.{region}.new.dns.suffix",
   389  						Protocols:         []string{"https"},
   390  						SignatureVersions: []string{"v4"},
   391  					},
   392  					{
   393  						Variant: 0,
   394  					}: {
   395  						Hostname:          "multi-variant-service.{region}.amazonaws.com",
   396  						Protocols:         []string{"https"},
   397  						SignatureVersions: []string{"v4"},
   398  					},
   399  				},
   400  				RegionRegex:    partitionRegexp.Aws,
   401  				IsRegionalized: true,
   402  				Endpoints: endpoints.Endpoints{
   403  					endpoints.EndpointKey{
   404  						Region: "af-south-1",
   405  					}: endpoints.Endpoint{},
   406  					endpoints.EndpointKey{
   407  						Region: "us-west-2",
   408  					}: endpoints.Endpoint{},
   409  					endpoints.EndpointKey{
   410  						Region:  "us-west-2",
   411  						Variant: endpoints.FIPSVariant | endpoints.DualStackVariant,
   412  					}: {
   413  						Hostname: "fips.multi-variant-service.dualstack.us-west-2.new.dns.suffix",
   414  					},
   415  				},
   416  			},
   417  			{
   418  				ID: "aws-iso",
   419  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
   420  					{
   421  						Variant: 0,
   422  					}: {
   423  						Hostname:          "multi-variant-service.{region}.c2s.ic.gov",
   424  						Protocols:         []string{"https"},
   425  						SignatureVersions: []string{"v4"},
   426  					},
   427  				},
   428  				RegionRegex:    partitionRegexp.AwsIso,
   429  				IsRegionalized: true,
   430  			},
   431  		},
   432  		Cases: []testCase{
   433  			{
   434  				Region: "us-west-2",
   435  				Expected: aws.Endpoint{
   436  					URL:           "https://multi-variant-service.us-west-2.amazonaws.com",
   437  					PartitionID:   "aws",
   438  					SigningRegion: "us-west-2",
   439  					SigningMethod: "v4",
   440  				},
   441  			},
   442  			{
   443  				Region: "us-west-2",
   444  				Options: endpoints.Options{
   445  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   446  				},
   447  				Expected: aws.Endpoint{
   448  					URL:           "https://multi-variant-service.dualstack.us-west-2.api.aws",
   449  					PartitionID:   "aws",
   450  					SigningRegion: "us-west-2",
   451  					SigningMethod: "v4",
   452  				},
   453  			},
   454  			{
   455  				Region: "us-west-2",
   456  				Options: endpoints.Options{
   457  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
   458  				},
   459  				Expected: aws.Endpoint{
   460  					URL:           "https://fips.multi-variant-service.us-west-2.amazonaws.com",
   461  					PartitionID:   "aws",
   462  					SigningRegion: "us-west-2",
   463  					SigningMethod: "v4",
   464  				},
   465  			},
   466  			{
   467  				Region: "us-west-2",
   468  				Options: endpoints.Options{
   469  					UseFIPSEndpoint:      aws.FIPSEndpointStateEnabled,
   470  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   471  				},
   472  				Expected: aws.Endpoint{
   473  					URL:           "https://fips.multi-variant-service.dualstack.us-west-2.new.dns.suffix",
   474  					PartitionID:   "aws",
   475  					SigningRegion: "us-west-2",
   476  					SigningMethod: "v4",
   477  				},
   478  			},
   479  			{
   480  				Region: "af-south-1",
   481  				Expected: aws.Endpoint{
   482  					URL:           "https://multi-variant-service.af-south-1.amazonaws.com",
   483  					PartitionID:   "aws",
   484  					SigningRegion: "af-south-1",
   485  					SigningMethod: "v4",
   486  				},
   487  			},
   488  			{
   489  				Region: "af-south-1",
   490  				Options: endpoints.Options{
   491  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   492  				},
   493  				Expected: aws.Endpoint{
   494  					URL:           "https://multi-variant-service.dualstack.af-south-1.api.aws",
   495  					PartitionID:   "aws",
   496  					SigningRegion: "af-south-1",
   497  					SigningMethod: "v4",
   498  				},
   499  			},
   500  			{
   501  				Region: "af-south-1",
   502  				Options: endpoints.Options{
   503  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
   504  				},
   505  				Expected: aws.Endpoint{
   506  					URL:           "https://fips.multi-variant-service.af-south-1.amazonaws.com",
   507  					PartitionID:   "aws",
   508  					SigningRegion: "af-south-1",
   509  					SigningMethod: "v4",
   510  				},
   511  			},
   512  			{
   513  				Region: "af-south-1",
   514  				Options: endpoints.Options{
   515  					UseFIPSEndpoint:      aws.FIPSEndpointStateEnabled,
   516  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   517  				},
   518  				Expected: aws.Endpoint{
   519  					URL:           "https://fips.multi-variant-service.dualstack.af-south-1.new.dns.suffix",
   520  					PartitionID:   "aws",
   521  					SigningRegion: "af-south-1",
   522  					SigningMethod: "v4",
   523  				},
   524  			},
   525  		},
   526  	},
   527  	"override-endpoint-variant-service": {
   528  		Partitions: endpoints.Partitions{
   529  			{
   530  				ID: "aws",
   531  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
   532  					{
   533  						Variant: endpoints.DualStackVariant,
   534  					}: {
   535  						Hostname:          "override-endpoint-variant-service.{region}.api.aws",
   536  						Protocols:         []string{"https"},
   537  						SignatureVersions: []string{"v4"},
   538  					},
   539  					{
   540  						Variant: endpoints.FIPSVariant,
   541  					}: {
   542  						Hostname:          "override-endpoint-variant-service-fips.{region}.amazonaws.com",
   543  						Protocols:         []string{"https"},
   544  						SignatureVersions: []string{"v4"},
   545  					},
   546  					{
   547  						Variant: endpoints.FIPSVariant | endpoints.DualStackVariant,
   548  					}: {
   549  						Hostname:          "override-endpoint-variant-service-fips.{region}.api.aws",
   550  						Protocols:         []string{"https"},
   551  						SignatureVersions: []string{"v4"},
   552  					},
   553  					{
   554  						Variant: 0,
   555  					}: {
   556  						Hostname:          "override-endpoint-variant-service.{region}.amazonaws.com",
   557  						Protocols:         []string{"https"},
   558  						SignatureVersions: []string{"v4"},
   559  					},
   560  				},
   561  				RegionRegex:    partitionRegexp.Aws,
   562  				IsRegionalized: true,
   563  				Endpoints: endpoints.Endpoints{
   564  					endpoints.EndpointKey{
   565  						Region: "af-south-1",
   566  					}: endpoints.Endpoint{},
   567  					endpoints.EndpointKey{
   568  						Region: "us-west-2",
   569  					}: endpoints.Endpoint{},
   570  					endpoints.EndpointKey{
   571  						Region:  "us-west-2",
   572  						Variant: endpoints.FIPSVariant,
   573  					}: {
   574  						Hostname: "fips.override-endpoint-variant-service.us-west-2.amazonaws.com",
   575  					},
   576  					endpoints.EndpointKey{
   577  						Region:  "us-west-2",
   578  						Variant: endpoints.DualStackVariant,
   579  					}: {
   580  						Hostname: "override-endpoint-variant-service.dualstack.us-west-2.amazonaws.com",
   581  					},
   582  				},
   583  			},
   584  			{
   585  				ID: "aws-iso",
   586  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
   587  					{
   588  						Variant: 0,
   589  					}: {
   590  						Hostname:          "override-endpoint-variant-service.{region}.c2s.ic.gov",
   591  						Protocols:         []string{"https"},
   592  						SignatureVersions: []string{"v4"},
   593  					},
   594  				},
   595  				RegionRegex:    partitionRegexp.AwsIso,
   596  				IsRegionalized: true,
   597  			},
   598  		},
   599  		Cases: []testCase{
   600  			{
   601  				Region: "us-west-2",
   602  				Expected: aws.Endpoint{
   603  					URL:           "https://override-endpoint-variant-service.us-west-2.amazonaws.com",
   604  					PartitionID:   "aws",
   605  					SigningRegion: "us-west-2",
   606  					SigningMethod: "v4",
   607  				},
   608  			},
   609  			{
   610  				Region: "us-west-2",
   611  				Options: endpoints.Options{
   612  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
   613  				},
   614  				Expected: aws.Endpoint{
   615  					URL:           "https://fips.override-endpoint-variant-service.us-west-2.amazonaws.com",
   616  					PartitionID:   "aws",
   617  					SigningRegion: "us-west-2",
   618  					SigningMethod: "v4",
   619  				},
   620  			},
   621  			{
   622  				Region: "af-south-1",
   623  				Expected: aws.Endpoint{
   624  					URL:           "https://override-endpoint-variant-service.af-south-1.amazonaws.com",
   625  					PartitionID:   "aws",
   626  					SigningRegion: "af-south-1",
   627  					SigningMethod: "v4",
   628  				},
   629  			},
   630  			{
   631  				Region: "af-south-1",
   632  				Options: endpoints.Options{
   633  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
   634  				},
   635  				Expected: aws.Endpoint{
   636  					URL:           "https://override-endpoint-variant-service-fips.af-south-1.amazonaws.com",
   637  					PartitionID:   "aws",
   638  					SigningRegion: "af-south-1",
   639  					SigningMethod: "v4",
   640  				},
   641  			},
   642  			{
   643  				Region: "us-west-2",
   644  				Expected: aws.Endpoint{
   645  					URL:           "https://override-endpoint-variant-service.us-west-2.amazonaws.com",
   646  					PartitionID:   "aws",
   647  					SigningRegion: "us-west-2",
   648  					SigningMethod: "v4",
   649  				},
   650  			},
   651  			{
   652  				Region: "us-west-2",
   653  				Options: endpoints.Options{
   654  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   655  				},
   656  				Expected: aws.Endpoint{
   657  					URL:           "https://override-endpoint-variant-service.dualstack.us-west-2.amazonaws.com",
   658  					PartitionID:   "aws",
   659  					SigningRegion: "us-west-2",
   660  					SigningMethod: "v4",
   661  				},
   662  			},
   663  			{
   664  				Region: "af-south-1",
   665  				Expected: aws.Endpoint{
   666  					URL:           "https://override-endpoint-variant-service.af-south-1.amazonaws.com",
   667  					PartitionID:   "aws",
   668  					SigningRegion: "af-south-1",
   669  					SigningMethod: "v4",
   670  				},
   671  			},
   672  			{
   673  				Region: "af-south-1",
   674  				Options: endpoints.Options{
   675  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   676  				},
   677  				Expected: aws.Endpoint{
   678  					URL:           "https://override-endpoint-variant-service.af-south-1.api.aws",
   679  					PartitionID:   "aws",
   680  					SigningRegion: "af-south-1",
   681  					SigningMethod: "v4",
   682  				},
   683  			},
   684  		},
   685  	},
   686  	"override-variant-dns-suffix-service": {
   687  		Partitions: endpoints.Partitions{
   688  			{
   689  				ID: "aws",
   690  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
   691  					{
   692  						Variant: endpoints.DualStackVariant,
   693  					}: {
   694  						Hostname:          "override-variant-dns-suffix-service.{region}.new.dns.suffix",
   695  						Protocols:         []string{"https"},
   696  						SignatureVersions: []string{"v4"},
   697  					},
   698  					{
   699  						Variant: endpoints.FIPSVariant,
   700  					}: {
   701  						Hostname:          "override-variant-dns-suffix-service-fips.{region}.new.dns.suffix",
   702  						Protocols:         []string{"https"},
   703  						SignatureVersions: []string{"v4"},
   704  					},
   705  					{
   706  						Variant: endpoints.FIPSVariant | endpoints.DualStackVariant,
   707  					}: {
   708  						Hostname:          "override-variant-dns-suffix-service-fips.{region}.api.aws",
   709  						Protocols:         []string{"https"},
   710  						SignatureVersions: []string{"v4"},
   711  					},
   712  					{
   713  						Variant: 0,
   714  					}: {
   715  						Hostname:          "override-variant-dns-suffix-service.{region}.amazonaws.com",
   716  						Protocols:         []string{"https"},
   717  						SignatureVersions: []string{"v4"},
   718  					},
   719  				},
   720  				RegionRegex:    partitionRegexp.Aws,
   721  				IsRegionalized: true,
   722  				Endpoints: endpoints.Endpoints{
   723  					endpoints.EndpointKey{
   724  						Region: "af-south-1",
   725  					}: endpoints.Endpoint{},
   726  					endpoints.EndpointKey{
   727  						Region: "us-west-2",
   728  					}: endpoints.Endpoint{},
   729  					endpoints.EndpointKey{
   730  						Region:  "us-west-2",
   731  						Variant: endpoints.FIPSVariant,
   732  					}: {
   733  						Hostname: "override-variant-dns-suffix-service-fips.us-west-2.new.dns.suffix",
   734  					},
   735  					endpoints.EndpointKey{
   736  						Region:  "us-west-2",
   737  						Variant: endpoints.DualStackVariant,
   738  					}: {
   739  						Hostname: "override-variant-dns-suffix-service.us-west-2.new.dns.suffix",
   740  					},
   741  				},
   742  			},
   743  			{
   744  				ID: "aws-iso",
   745  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
   746  					{
   747  						Variant: 0,
   748  					}: {
   749  						Hostname:          "override-variant-dns-suffix-service.{region}.c2s.ic.gov",
   750  						Protocols:         []string{"https"},
   751  						SignatureVersions: []string{"v4"},
   752  					},
   753  				},
   754  				RegionRegex:    partitionRegexp.AwsIso,
   755  				IsRegionalized: true,
   756  			},
   757  		},
   758  		Cases: []testCase{
   759  			{
   760  				Region: "us-west-2",
   761  				Expected: aws.Endpoint{
   762  					URL:           "https://override-variant-dns-suffix-service.us-west-2.amazonaws.com",
   763  					PartitionID:   "aws",
   764  					SigningRegion: "us-west-2",
   765  					SigningMethod: "v4",
   766  				},
   767  			},
   768  			{
   769  				Region: "us-west-2",
   770  				Options: endpoints.Options{
   771  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
   772  				},
   773  				Expected: aws.Endpoint{
   774  					URL:           "https://override-variant-dns-suffix-service-fips.us-west-2.new.dns.suffix",
   775  					PartitionID:   "aws",
   776  					SigningRegion: "us-west-2",
   777  					SigningMethod: "v4",
   778  				},
   779  			},
   780  			{
   781  				Region: "af-south-1",
   782  				Expected: aws.Endpoint{
   783  					URL:           "https://override-variant-dns-suffix-service.af-south-1.amazonaws.com",
   784  					PartitionID:   "aws",
   785  					SigningRegion: "af-south-1",
   786  					SigningMethod: "v4",
   787  				},
   788  			},
   789  			{
   790  				Region: "af-south-1",
   791  				Options: endpoints.Options{
   792  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
   793  				},
   794  				Expected: aws.Endpoint{
   795  					URL:           "https://override-variant-dns-suffix-service-fips.af-south-1.new.dns.suffix",
   796  					PartitionID:   "aws",
   797  					SigningRegion: "af-south-1",
   798  					SigningMethod: "v4",
   799  				},
   800  			},
   801  			{
   802  				Region: "us-west-2",
   803  				Expected: aws.Endpoint{
   804  					URL:           "https://override-variant-dns-suffix-service.us-west-2.amazonaws.com",
   805  					PartitionID:   "aws",
   806  					SigningRegion: "us-west-2",
   807  					SigningMethod: "v4",
   808  				},
   809  			},
   810  			{
   811  				Region: "us-west-2",
   812  				Options: endpoints.Options{
   813  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   814  				},
   815  				Expected: aws.Endpoint{
   816  					URL:           "https://override-variant-dns-suffix-service.us-west-2.new.dns.suffix",
   817  					PartitionID:   "aws",
   818  					SigningRegion: "us-west-2",
   819  					SigningMethod: "v4",
   820  				},
   821  			},
   822  			{
   823  				Region: "af-south-1",
   824  				Expected: aws.Endpoint{
   825  					URL:           "https://override-variant-dns-suffix-service.af-south-1.amazonaws.com",
   826  					PartitionID:   "aws",
   827  					SigningRegion: "af-south-1",
   828  					SigningMethod: "v4",
   829  				},
   830  			},
   831  			{
   832  				Region: "af-south-1",
   833  				Options: endpoints.Options{
   834  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   835  				},
   836  				Expected: aws.Endpoint{
   837  					URL:           "https://override-variant-dns-suffix-service.af-south-1.new.dns.suffix",
   838  					PartitionID:   "aws",
   839  					SigningRegion: "af-south-1",
   840  					SigningMethod: "v4",
   841  				},
   842  			},
   843  		},
   844  	},
   845  	"override-variant-hostname-service": {
   846  		Partitions: endpoints.Partitions{
   847  			{
   848  				ID: "aws",
   849  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
   850  					{
   851  						Variant: endpoints.DualStackVariant,
   852  					}: {
   853  						Hostname:          "override-variant-hostname-service.dualstack.{region}.api.aws",
   854  						Protocols:         []string{"https"},
   855  						SignatureVersions: []string{"v4"},
   856  					},
   857  					{
   858  						Variant: endpoints.FIPSVariant,
   859  					}: {
   860  						Hostname:          "fips.override-variant-hostname-service.{region}.amazonaws.com",
   861  						Protocols:         []string{"https"},
   862  						SignatureVersions: []string{"v4"},
   863  					},
   864  					{
   865  						Variant: endpoints.FIPSVariant | endpoints.DualStackVariant,
   866  					}: {
   867  						Hostname:          "override-variant-hostname-service-fips.{region}.api.aws",
   868  						Protocols:         []string{"https"},
   869  						SignatureVersions: []string{"v4"},
   870  					},
   871  					{
   872  						Variant: 0,
   873  					}: {
   874  						Hostname:          "override-variant-hostname-service.{region}.amazonaws.com",
   875  						Protocols:         []string{"https"},
   876  						SignatureVersions: []string{"v4"},
   877  					},
   878  				},
   879  				RegionRegex:    partitionRegexp.Aws,
   880  				IsRegionalized: true,
   881  				Endpoints: endpoints.Endpoints{
   882  					endpoints.EndpointKey{
   883  						Region: "af-south-1",
   884  					}: endpoints.Endpoint{},
   885  					endpoints.EndpointKey{
   886  						Region: "us-west-2",
   887  					}: endpoints.Endpoint{},
   888  					endpoints.EndpointKey{
   889  						Region:  "us-west-2",
   890  						Variant: endpoints.FIPSVariant,
   891  					}: {
   892  						Hostname: "fips.override-variant-hostname-service.us-west-2.amazonaws.com",
   893  					},
   894  					endpoints.EndpointKey{
   895  						Region:  "us-west-2",
   896  						Variant: endpoints.DualStackVariant,
   897  					}: {
   898  						Hostname: "override-variant-hostname-service.dualstack.us-west-2.api.aws",
   899  					},
   900  				},
   901  			},
   902  			{
   903  				ID: "aws-iso",
   904  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
   905  					{
   906  						Variant: 0,
   907  					}: {
   908  						Hostname:          "override-variant-hostname-service.{region}.c2s.ic.gov",
   909  						Protocols:         []string{"https"},
   910  						SignatureVersions: []string{"v4"},
   911  					},
   912  				},
   913  				RegionRegex:    partitionRegexp.AwsIso,
   914  				IsRegionalized: true,
   915  			},
   916  		},
   917  		Cases: []testCase{
   918  			{
   919  				Region: "us-west-2",
   920  				Expected: aws.Endpoint{
   921  					URL:           "https://override-variant-hostname-service.us-west-2.amazonaws.com",
   922  					PartitionID:   "aws",
   923  					SigningRegion: "us-west-2",
   924  					SigningMethod: "v4",
   925  				},
   926  			},
   927  			{
   928  				Region: "us-west-2",
   929  				Options: endpoints.Options{
   930  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
   931  				},
   932  				Expected: aws.Endpoint{
   933  					URL:           "https://fips.override-variant-hostname-service.us-west-2.amazonaws.com",
   934  					PartitionID:   "aws",
   935  					SigningRegion: "us-west-2",
   936  					SigningMethod: "v4",
   937  				},
   938  			},
   939  			{
   940  				Region: "af-south-1",
   941  				Expected: aws.Endpoint{
   942  					URL:           "https://override-variant-hostname-service.af-south-1.amazonaws.com",
   943  					PartitionID:   "aws",
   944  					SigningRegion: "af-south-1",
   945  					SigningMethod: "v4",
   946  				},
   947  			},
   948  			{
   949  				Region: "af-south-1",
   950  				Options: endpoints.Options{
   951  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
   952  				},
   953  				Expected: aws.Endpoint{
   954  					URL:           "https://fips.override-variant-hostname-service.af-south-1.amazonaws.com",
   955  					PartitionID:   "aws",
   956  					SigningRegion: "af-south-1",
   957  					SigningMethod: "v4",
   958  				},
   959  			},
   960  			{
   961  				Region: "us-west-2",
   962  				Expected: aws.Endpoint{
   963  					URL:           "https://override-variant-hostname-service.us-west-2.amazonaws.com",
   964  					PartitionID:   "aws",
   965  					SigningRegion: "us-west-2",
   966  					SigningMethod: "v4",
   967  				},
   968  			},
   969  			{
   970  				Region: "us-west-2",
   971  				Options: endpoints.Options{
   972  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   973  				},
   974  				Expected: aws.Endpoint{
   975  					URL:           "https://override-variant-hostname-service.dualstack.us-west-2.api.aws",
   976  					PartitionID:   "aws",
   977  					SigningRegion: "us-west-2",
   978  					SigningMethod: "v4",
   979  				},
   980  			},
   981  			{
   982  				Region: "af-south-1",
   983  				Expected: aws.Endpoint{
   984  					URL:           "https://override-variant-hostname-service.af-south-1.amazonaws.com",
   985  					PartitionID:   "aws",
   986  					SigningRegion: "af-south-1",
   987  					SigningMethod: "v4",
   988  				},
   989  			},
   990  			{
   991  				Region: "af-south-1",
   992  				Options: endpoints.Options{
   993  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
   994  				},
   995  				Expected: aws.Endpoint{
   996  					URL:           "https://override-variant-hostname-service.dualstack.af-south-1.api.aws",
   997  					PartitionID:   "aws",
   998  					SigningRegion: "af-south-1",
   999  					SigningMethod: "v4",
  1000  				},
  1001  			},
  1002  		},
  1003  	},
  1004  	"override-variant-service": {
  1005  		Partitions: endpoints.Partitions{
  1006  			{
  1007  				ID: "aws",
  1008  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
  1009  					{
  1010  						Variant: endpoints.DualStackVariant,
  1011  					}: {
  1012  						Hostname:          "override-variant-service.dualstack.{region}.new.dns.suffix",
  1013  						Protocols:         []string{"https"},
  1014  						SignatureVersions: []string{"v4"},
  1015  					},
  1016  					{
  1017  						Variant: endpoints.FIPSVariant,
  1018  					}: {
  1019  						Hostname:          "fips.override-variant-service.{region}.new.dns.suffix",
  1020  						Protocols:         []string{"https"},
  1021  						SignatureVersions: []string{"v4"},
  1022  					},
  1023  					{
  1024  						Variant: endpoints.FIPSVariant | endpoints.DualStackVariant,
  1025  					}: {
  1026  						Hostname:          "override-variant-service-fips.{region}.api.aws",
  1027  						Protocols:         []string{"https"},
  1028  						SignatureVersions: []string{"v4"},
  1029  					},
  1030  					{
  1031  						Variant: 0,
  1032  					}: {
  1033  						Hostname:          "override-variant-service.{region}.amazonaws.com",
  1034  						Protocols:         []string{"https"},
  1035  						SignatureVersions: []string{"v4"},
  1036  					},
  1037  				},
  1038  				RegionRegex:    partitionRegexp.Aws,
  1039  				IsRegionalized: true,
  1040  				Endpoints: endpoints.Endpoints{
  1041  					endpoints.EndpointKey{
  1042  						Region: "af-south-1",
  1043  					}: endpoints.Endpoint{},
  1044  					endpoints.EndpointKey{
  1045  						Region: "us-west-2",
  1046  					}: endpoints.Endpoint{},
  1047  					endpoints.EndpointKey{
  1048  						Region:  "us-west-2",
  1049  						Variant: endpoints.FIPSVariant,
  1050  					}: {
  1051  						Hostname: "fips.override-variant-service.us-west-2.new.dns.suffix",
  1052  					},
  1053  					endpoints.EndpointKey{
  1054  						Region:  "us-west-2",
  1055  						Variant: endpoints.DualStackVariant,
  1056  					}: {
  1057  						Hostname: "override-variant-service.dualstack.us-west-2.new.dns.suffix",
  1058  					},
  1059  				},
  1060  			},
  1061  			{
  1062  				ID: "aws-iso",
  1063  				Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
  1064  					{
  1065  						Variant: 0,
  1066  					}: {
  1067  						Hostname:          "override-variant-service.{region}.c2s.ic.gov",
  1068  						Protocols:         []string{"https"},
  1069  						SignatureVersions: []string{"v4"},
  1070  					},
  1071  				},
  1072  				RegionRegex:    partitionRegexp.AwsIso,
  1073  				IsRegionalized: true,
  1074  			},
  1075  		},
  1076  		Cases: []testCase{
  1077  			{
  1078  				Region: "us-west-2",
  1079  				Expected: aws.Endpoint{
  1080  					URL:           "https://override-variant-service.us-west-2.amazonaws.com",
  1081  					PartitionID:   "aws",
  1082  					SigningRegion: "us-west-2",
  1083  					SigningMethod: "v4",
  1084  				},
  1085  			},
  1086  			{
  1087  				Region: "us-west-2",
  1088  				Options: endpoints.Options{
  1089  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
  1090  				},
  1091  				Expected: aws.Endpoint{
  1092  					URL:           "https://fips.override-variant-service.us-west-2.new.dns.suffix",
  1093  					PartitionID:   "aws",
  1094  					SigningRegion: "us-west-2",
  1095  					SigningMethod: "v4",
  1096  				},
  1097  			},
  1098  			{
  1099  				Region: "af-south-1",
  1100  				Expected: aws.Endpoint{
  1101  					URL:           "https://override-variant-service.af-south-1.amazonaws.com",
  1102  					PartitionID:   "aws",
  1103  					SigningRegion: "af-south-1",
  1104  					SigningMethod: "v4",
  1105  				},
  1106  			},
  1107  			{
  1108  				Region: "af-south-1",
  1109  				Options: endpoints.Options{
  1110  					UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
  1111  				},
  1112  				Expected: aws.Endpoint{
  1113  					URL:           "https://fips.override-variant-service.af-south-1.new.dns.suffix",
  1114  					PartitionID:   "aws",
  1115  					SigningRegion: "af-south-1",
  1116  					SigningMethod: "v4",
  1117  				},
  1118  			},
  1119  			{
  1120  				Region: "us-west-2",
  1121  				Expected: aws.Endpoint{
  1122  					URL:           "https://override-variant-service.us-west-2.amazonaws.com",
  1123  					PartitionID:   "aws",
  1124  					SigningRegion: "us-west-2",
  1125  					SigningMethod: "v4",
  1126  				},
  1127  			},
  1128  			{
  1129  				Region: "us-west-2",
  1130  				Options: endpoints.Options{
  1131  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
  1132  				},
  1133  				Expected: aws.Endpoint{
  1134  					URL:           "https://override-variant-service.dualstack.us-west-2.new.dns.suffix",
  1135  					PartitionID:   "aws",
  1136  					SigningRegion: "us-west-2",
  1137  					SigningMethod: "v4",
  1138  				},
  1139  			},
  1140  			{
  1141  				Region: "af-south-1",
  1142  				Expected: aws.Endpoint{
  1143  					URL:           "https://override-variant-service.af-south-1.amazonaws.com",
  1144  					PartitionID:   "aws",
  1145  					SigningRegion: "af-south-1",
  1146  					SigningMethod: "v4",
  1147  				},
  1148  			},
  1149  			{
  1150  				Region: "af-south-1",
  1151  				Options: endpoints.Options{
  1152  					UseDualStackEndpoint: aws.DualStackEndpointStateEnabled,
  1153  				},
  1154  				Expected: aws.Endpoint{
  1155  					URL:           "https://override-variant-service.dualstack.af-south-1.new.dns.suffix",
  1156  					PartitionID:   "aws",
  1157  					SigningRegion: "af-south-1",
  1158  					SigningMethod: "v4",
  1159  				},
  1160  			},
  1161  		},
  1162  	},
  1163  }
  1164  
  1165  func TestResolveEndpoint(t *testing.T) {
  1166  	for service := range testCases {
  1167  		t.Run(service, func(t *testing.T) {
  1168  			partitions := testCases[service].Partitions
  1169  			testCases := testCases[service].Cases
  1170  
  1171  			for i, tt := range testCases {
  1172  				t.Run(strconv.FormatInt(int64(i), 10), func(t *testing.T) {
  1173  					endpoint, err := partitions.ResolveEndpoint(tt.Region, tt.Options)
  1174  					if (err != nil) != (tt.WantErr) {
  1175  						t.Errorf("WantErr=%v, got error: %v", tt.WantErr, err)
  1176  					}
  1177  					if diff := cmpDiff(tt.Expected, endpoint); len(diff) > 0 {
  1178  						t.Error(diff)
  1179  					}
  1180  				})
  1181  			}
  1182  		})
  1183  	}
  1184  }
  1185  
  1186  func TestDisableHTTPS(t *testing.T) {
  1187  	partitions := endpoints.Partitions{
  1188  		endpoints.Partition{
  1189  			ID:          "aws",
  1190  			RegionRegex: partitionRegexp.Aws,
  1191  			Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
  1192  				{}: {
  1193  					Hostname:  "foo.bar.tld",
  1194  					Protocols: []string{"https", "http"},
  1195  				},
  1196  			},
  1197  		},
  1198  	}
  1199  
  1200  	endpoint, err := partitions.ResolveEndpoint("us-west-2", endpoints.Options{})
  1201  	if err != nil {
  1202  		t.Errorf("expect no error, got %v", err)
  1203  	}
  1204  
  1205  	if e, a := "https://foo.bar.tld", endpoint.URL; e != a {
  1206  		t.Errorf("expect %v, got %v", e, a)
  1207  	}
  1208  
  1209  	endpoint, err = partitions.ResolveEndpoint("us-west-2", endpoints.Options{DisableHTTPS: true})
  1210  	if err != nil {
  1211  		t.Errorf("expect no error, got %v", err)
  1212  	}
  1213  
  1214  	if e, a := "http://foo.bar.tld", endpoint.URL; e != a {
  1215  		t.Errorf("expect %v, got %v", e, a)
  1216  	}
  1217  }
  1218  
  1219  func TestLogDeprecated(t *testing.T) {
  1220  	partitions := endpoints.Partitions{
  1221  		endpoints.Partition{
  1222  			ID:          "aws",
  1223  			RegionRegex: partitionRegexp.Aws,
  1224  			Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
  1225  				{}: {
  1226  					Hostname:  "foo.{region}.bar.tld",
  1227  					Protocols: []string{"https", "http"},
  1228  				},
  1229  				{
  1230  					Variant: endpoints.FIPSVariant,
  1231  				}: {
  1232  					Hostname: "foo-fips.{region}.bar.tld",
  1233  				},
  1234  			},
  1235  			Endpoints: map[endpoints.EndpointKey]endpoints.Endpoint{
  1236  				{
  1237  					Region: "foo",
  1238  				}: {},
  1239  				{
  1240  					Region: "bar",
  1241  				}: {
  1242  					Deprecated: aws.TrueTernary,
  1243  				},
  1244  				{
  1245  					Region:  "bar",
  1246  					Variant: endpoints.FIPSVariant,
  1247  				}: {
  1248  					Deprecated: aws.TrueTernary,
  1249  				},
  1250  			},
  1251  		},
  1252  	}
  1253  
  1254  	cases := []struct {
  1255  		Region      string
  1256  		Options     endpoints.Options
  1257  		Expected    aws.Endpoint
  1258  		SetupLogger func() (logging.Logger, func(*testing.T))
  1259  		WantErr     bool
  1260  	}{
  1261  		{
  1262  			Region: "foo",
  1263  			Expected: aws.Endpoint{
  1264  				URL:           "https://foo.foo.bar.tld",
  1265  				PartitionID:   "aws",
  1266  				SigningRegion: "foo",
  1267  				SigningMethod: "v4",
  1268  			},
  1269  		},
  1270  		{
  1271  			Region: "bar",
  1272  			Options: endpoints.Options{
  1273  				LogDeprecated: true,
  1274  			},
  1275  			Expected: aws.Endpoint{
  1276  				URL:           "https://foo.bar.bar.tld",
  1277  				PartitionID:   "aws",
  1278  				SigningRegion: "bar",
  1279  				SigningMethod: "v4",
  1280  			},
  1281  		},
  1282  		{
  1283  			Region: "bar",
  1284  			Options: endpoints.Options{
  1285  				LogDeprecated:   true,
  1286  				UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
  1287  			},
  1288  			Expected: aws.Endpoint{
  1289  				URL:           "https://foo-fips.bar.bar.tld",
  1290  				PartitionID:   "aws",
  1291  				SigningRegion: "bar",
  1292  				SigningMethod: "v4",
  1293  			},
  1294  		},
  1295  		{
  1296  			Region: "bar",
  1297  			Options: endpoints.Options{
  1298  				LogDeprecated: true,
  1299  			},
  1300  			SetupLogger: func() (logging.Logger, func(*testing.T)) {
  1301  				buffer := bytes.NewBuffer(nil)
  1302  				return &logging.StandardLogger{
  1303  						Logger: log.New(buffer, "", 0),
  1304  					}, func(t *testing.T) {
  1305  						if diff := cmpDiff("WARN endpoint identifier \"bar\", url \"https://foo.bar.bar.tld\" marked as deprecated\n", buffer.String()); len(diff) > 0 {
  1306  							t.Errorf(diff)
  1307  						}
  1308  					}
  1309  			},
  1310  			Expected: aws.Endpoint{
  1311  				URL:           "https://foo.bar.bar.tld",
  1312  				PartitionID:   "aws",
  1313  				SigningRegion: "bar",
  1314  				SigningMethod: "v4",
  1315  			},
  1316  		},
  1317  		{
  1318  			Region: "bar",
  1319  			Options: endpoints.Options{
  1320  				LogDeprecated:   true,
  1321  				UseFIPSEndpoint: aws.FIPSEndpointStateEnabled,
  1322  			},
  1323  			SetupLogger: func() (logging.Logger, func(*testing.T)) {
  1324  				buffer := bytes.NewBuffer(nil)
  1325  				return &logging.StandardLogger{
  1326  						Logger: log.New(buffer, "", 0),
  1327  					}, func(t *testing.T) {
  1328  						if diff := cmpDiff("WARN endpoint identifier \"bar\", url \"https://foo-fips.bar.bar.tld\" marked as deprecated\n", buffer.String()); len(diff) > 0 {
  1329  							t.Errorf(diff)
  1330  						}
  1331  					}
  1332  			},
  1333  			Expected: aws.Endpoint{
  1334  				URL:           "https://foo-fips.bar.bar.tld",
  1335  				PartitionID:   "aws",
  1336  				SigningRegion: "bar",
  1337  				SigningMethod: "v4",
  1338  			},
  1339  		},
  1340  	}
  1341  
  1342  	for i, tt := range cases {
  1343  		t.Run(strconv.Itoa(i), func(t *testing.T) {
  1344  			var verifyLog func(*testing.T)
  1345  			if tt.SetupLogger != nil {
  1346  				tt.Options.Logger, verifyLog = tt.SetupLogger()
  1347  			}
  1348  
  1349  			endpoint, err := partitions.ResolveEndpoint(tt.Region, tt.Options)
  1350  			if (err != nil) != tt.WantErr {
  1351  				t.Errorf("WantErr(%v), got error %v", tt.WantErr, err)
  1352  			}
  1353  
  1354  			if diff := cmpDiff(tt.Expected, endpoint); len(diff) > 0 {
  1355  				t.Errorf(diff)
  1356  			}
  1357  
  1358  			if verifyLog != nil {
  1359  				verifyLog(t)
  1360  			}
  1361  		})
  1362  	}
  1363  }
  1364  
  1365  func cmpDiff(e, a interface{}) string {
  1366  	if !reflect.DeepEqual(e, a) {
  1367  		return fmt.Sprintf("%v != %v", e, a)
  1368  	}
  1369  	return ""
  1370  }
  1371  

View as plain text