Skip to content

Commit 8ef8ffe

Browse files
authored
Merge branch 'main' into mcommey/otlp-integration-tests
2 parents bd8737a + 5523271 commit 8ef8ffe

4 files changed

Lines changed: 39 additions & 27 deletions

File tree

test/credential_chain/common_config_runner.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,13 @@ func (t *CommonConfigTestRunner) SetUpConfig() error {
106106
func (t *CommonConfigTestRunner) Validate() status.TestGroupResult {
107107
t.Cleanup()
108108
return util.ValidateCredentialTest(t.GetTestName(), util.ExpectedResults{
109-
Namespace: util.SharedTestNamespace,
110-
MetricName: util.MetricNameCpuUsageActive,
111-
CredentialProviderName: util.ProviderNameSharedConfig,
112-
AccessKeyID: t.accessKeyID,
109+
Namespace: util.SharedTestNamespace,
110+
MetricName: util.MetricNameCpuUsageActive,
111+
// aws-sdk-go v1 agents report SharedCredentialsProvider for common-config shared credentials;
112+
// aws-sdk-go-v2 agents report SharedConfigCredentials. Accept both so the same test repo works
113+
// against agents on either side of the SDK v2 migration.
114+
CredentialProviderNames: []string{util.ProviderNameSharedConfig, util.ProviderNameSharedCredentials},
115+
AccessKeyID: t.accessKeyID,
113116
}, metadata)
114117
}
115118

test/credential_chain/home_env_runner.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,12 @@ func (t *HomeEnvTestRunner) Validate() status.TestGroupResult {
127127
// need to clean up the invalid root credentials before validation runs
128128
t.Cleanup()
129129
return util.ValidateCredentialTest(t.GetTestName(), util.ExpectedResults{
130-
Namespace: util.SharedTestNamespace,
131-
MetricName: util.MetricNameCpuUsageActive,
132-
CredentialProviderName: util.ProviderNameSharedConfig,
133-
AccessKeyID: t.accessKeyID,
130+
Namespace: util.SharedTestNamespace,
131+
MetricName: util.MetricNameCpuUsageActive,
132+
// The SDK default chain resolves the HOME shared credentials file as SharedConfigCredentials
133+
// on both aws-sdk-go v1 (session shared config) and aws-sdk-go-v2 (config.LoadDefaultConfig).
134+
CredentialProviderNames: []string{util.ProviderNameSharedConfig},
135+
AccessKeyID: t.accessKeyID,
134136
}, metadata)
135137
}
136138

test/credential_chain/util/constants.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ const (
3030
UserCWAgentHomeDir = "/home/cwagent"
3131
AwsCredentialsPath = ".aws/credentials"
3232

33+
// ProviderNameSharedCredentials is logged by agents built on aws-sdk-go v1, where shared credentials
34+
// resolve via credentials.SharedCredentialsProvider.
35+
ProviderNameSharedCredentials = "SharedCredentialsProvider"
36+
// ProviderNameSharedConfig is logged by agents built on aws-sdk-go-v2, where shared credentials
37+
// resolve via config.LoadSharedConfigProfile, and by the SDK default chain's shared config resolution.
3338
ProviderNameSharedConfig = "SharedConfigCredentials"
3439
)
3540

test/credential_chain/util/validation_util.go

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

181181
type 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

188190
func 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

Comments
 (0)