@@ -11,6 +11,8 @@ import (
1111 "log"
1212 "os"
1313 "regexp"
14+ "slices"
15+ "strings"
1416 "time"
1517
1618 "github.com/aws/aws-sdk-go-v2/aws"
@@ -35,8 +37,11 @@ type CredentialProviderInfo struct {
3537 AccessKeyID string
3638}
3739
38- // ParseAgentLogsForCredentialProvider extracts credential provider name from logs
39- func ParseAgentLogsForCredentialProvider (expectedProvider string ) (* CredentialProviderInfo , error ) {
40+ // ParseAgentLogsForCredentialProvider extracts credential provider name from logs. A match is returned as soon as
41+ // a log line reports one of the expected providers. Multiple expected providers allow the same test to pass against
42+ // agents built on either aws-sdk-go v1 or aws-sdk-go-v2, which log different provider names for the same credential
43+ // source (e.g. SharedCredentialsProvider vs SharedConfigCredentials for shared credential files).
44+ func ParseAgentLogsForCredentialProvider (expectedProviders ... string ) (* CredentialProviderInfo , error ) {
4045 file , err := os .Open (common .AgentLogFile )
4146 if err != nil {
4247 return nil , fmt .Errorf ("failed to open agent log: %w" , err )
@@ -57,7 +62,7 @@ func ParseAgentLogsForCredentialProvider(expectedProvider string) (*CredentialPr
5762 AccessKeyID : matches [1 ],
5863 }
5964
60- if lastMatch .ProviderName == expectedProvider {
65+ if slices . Contains ( expectedProviders , lastMatch .ProviderName ) {
6166 return lastMatch , nil
6267 }
6368 }
@@ -68,10 +73,10 @@ func ParseAgentLogsForCredentialProvider(expectedProvider string) (*CredentialPr
6873 }
6974
7075 if lastMatch != nil {
71- return nil , fmt .Errorf ("provider mis-match: expected %s , got %s" , expectedProvider , lastMatch .ProviderName )
76+ return nil , fmt .Errorf ("provider mis-match: expected one of %v , got %s" , expectedProviders , lastMatch .ProviderName )
7277 }
7378
74- return nil , fmt .Errorf ("no credential provider (%s) not found" , expectedProvider )
79+ return nil , fmt .Errorf ("no credential provider log line found (expected one of %v) " , expectedProviders )
7580}
7681
7782// getDimensions returns the dimensions for metric queries
@@ -145,24 +150,19 @@ func ValidateMetric(testName string, namespace string, metricName string, metada
145150 return testResult
146151}
147152
148- // ValidateCredentialProvider verifies the expected credential provider was used
149- func ValidateCredentialProvider (expectedProvider string , expectedAccessKeyID string ) status.TestResult {
153+ // ValidateCredentialProvider verifies one of the expected credential providers was used
154+ func ValidateCredentialProvider (expectedProviders [] string , expectedAccessKeyID string ) status.TestResult {
150155 testResult := status.TestResult {
151- Name : fmt .Sprintf ("ValidateCredentialProvider: %s" , expectedProvider ),
156+ Name : fmt .Sprintf ("ValidateCredentialProvider: %s" , strings . Join ( expectedProviders , "|" ) ),
152157 Status : status .FAILED ,
153158 }
154159
155- info , err := ParseAgentLogsForCredentialProvider (expectedProvider )
160+ info , err := ParseAgentLogsForCredentialProvider (expectedProviders ... )
156161 if err != nil {
157162 testResult .Reason = fmt .Errorf ("failed to parse agent logs: %w" , err )
158163 return testResult
159164 }
160165
161- if info .ProviderName != expectedProvider {
162- testResult .Reason = fmt .Errorf ("expected provider %s but got %s" , expectedProvider , info .ProviderName )
163- return testResult
164- }
165-
166166 // Verify access key matches (first 4 characters)
167167 if len (expectedAccessKeyID ) >= 4 && len (info .AccessKeyID ) >= 4 {
168168 if expectedAccessKeyID != info .AccessKeyID {
@@ -179,10 +179,12 @@ func ValidateCredentialProvider(expectedProvider string, expectedAccessKeyID str
179179}
180180
181181type ExpectedResults struct {
182- Namespace string
183- MetricName string
184- CredentialProviderName string
185- AccessKeyID string
182+ Namespace string
183+ MetricName string
184+ // CredentialProviderNames lists the acceptable credential provider names. Any single match passes,
185+ // which keeps the test compatible with both aws-sdk-go v1 and aws-sdk-go-v2 based agents.
186+ CredentialProviderNames []string
187+ AccessKeyID string
186188}
187189
188190func ValidateCredentialTest (testName string , expected ExpectedResults , metadata * environment.MetaData ) status.TestGroupResult {
@@ -192,7 +194,7 @@ func ValidateCredentialTest(testName string, expected ExpectedResults, metadata
192194 // Validate metric delivery (proves credentials worked)
193195 ValidateMetric (testName , expected .Namespace , expected .MetricName , metadata ),
194196 // Validate credential provider (proves correct credential source was used)
195- ValidateCredentialProvider (expected .CredentialProviderName , expected .AccessKeyID ),
197+ ValidateCredentialProvider (expected .CredentialProviderNames , expected .AccessKeyID ),
196198 },
197199 }
198200}
0 commit comments