3131import org .junit .runner .RunWith ;
3232import org .mockito .Mock ;
3333import org .mockito .junit .MockitoJUnitRunner ;
34- import software .amazon .awssdk .auth .credentials .DefaultCredentialsProvider ;
34+ import software .amazon .awssdk .auth .credentials .AwsBasicCredentials ;
35+ import software .amazon .awssdk .auth .credentials .AwsCredentialsProvider ;
3536import software .amazon .awssdk .awscore .AwsRequestOverrideConfiguration ;
3637import software .amazon .awssdk .awscore .client .config .AwsClientOption ;
3738import software .amazon .awssdk .core .SdkRequest ;
@@ -61,12 +62,21 @@ public class AwsExecutionContextBuilderTest {
6162 ExecutionInterceptor interceptor ;
6263
6364 @ Mock
64- Signer defaultSigner , clientOverrideSigner ;
65+ AwsCredentialsProvider defaultCredentialsProvider ;
66+
67+ @ Mock
68+ Signer defaultSigner ;
69+
70+ @ Mock
71+ Signer clientOverrideSigner ;
6572
6673 @ Before
6774 public void setUp () throws Exception {
6875 when (sdkRequest .overrideConfiguration ()).thenReturn (Optional .empty ());
6976 when (interceptor .modifyRequest (any (), any ())).thenReturn (sdkRequest );
77+ when (defaultCredentialsProvider .resolveCredentials ()).thenAnswer (
78+ invocationOnMock -> AwsBasicCredentials .create ("ak" , "sk" ));
79+
7080 }
7181
7282 @ Test
@@ -101,17 +111,30 @@ public void verifyCoreExecutionAttributesTakePrecedence() {
101111 assertThat (executionContext .executionAttributes ().getAttribute (SdkExecutionAttribute .SERVICE_NAME )).isEqualTo ("DoNotOverrideService" );
102112 }
103113
114+ // // this is post SRA case. this is asserting that AuthorizationStrategy is not used.
115+ // @Test
116+ // public void verify_doesNotResolveIdentity_doesNotAssignSigner() {
117+ // ExecutionContext executionContext =
118+ // AwsExecutionContextBuilder.invokeInterceptorsAndCreateExecutionContext(clientExecutionParams(),
119+ // testClientConfiguration().build());
120+ //
121+ // assertThat(executionContext.signer()).isNull();
122+ // verify(defaultCredentialsProvider, times(0)).resolveCredentials();
123+ // }
124+
125+ // pre SRA, AuthorizationStrategy would setup the signer and resolve identity.
104126 @ Test
105- public void signing_ifNoOverrides_assignDefaultSigner () {
127+ public void preSra_signing_ifNoOverrides_assignDefaultSigner_resolveIdentity () {
106128 ExecutionContext executionContext =
107129 AwsExecutionContextBuilder .invokeInterceptorsAndCreateExecutionContext (clientExecutionParams (),
108130 testClientConfiguration ().build ());
109131
110132 assertThat (executionContext .signer ()).isEqualTo (defaultSigner );
133+ verify (defaultCredentialsProvider , times (1 )).resolveCredentials ();
111134 }
112135
113136 @ Test
114- public void signing_ifClientOverride_assignClientOverrideSigner () {
137+ public void preSra_signing_ifClientOverride_assignClientOverrideSigner_resolveIdentity () {
115138 Optional overrideConfiguration = Optional .of (AwsRequestOverrideConfiguration .builder ()
116139 .signer (clientOverrideSigner )
117140 .build ());
@@ -122,6 +145,72 @@ public void signing_ifClientOverride_assignClientOverrideSigner() {
122145 testClientConfiguration ().build ());
123146
124147 assertThat (executionContext .signer ()).isEqualTo (clientOverrideSigner );
148+ verify (defaultCredentialsProvider , times (1 )).resolveCredentials ();
149+ }
150+
151+ @ Test
152+ public void preSra_authTypeNone_doesNotAssignSigner_doesNotResolveIdentity () {
153+ ExecutionAttributes executionAttributes =
154+ ExecutionAttributes .builder ()
155+ // yes, our code would put false instead of true
156+ .put (SdkInternalExecutionAttribute .IS_NONE_AUTH_TYPE_REQUEST , false )
157+ .build ();
158+
159+ SdkClientConfiguration clientConfig = testClientConfiguration ()
160+ .option (SdkClientOption .EXECUTION_ATTRIBUTES , executionAttributes )
161+ .build ();
162+
163+ ExecutionContext executionContext =
164+ AwsExecutionContextBuilder .invokeInterceptorsAndCreateExecutionContext (clientExecutionParams (),
165+ clientConfig );
166+
167+ assertThat (executionContext .signer ()).isNull ();
168+ verify (defaultCredentialsProvider , times (0 )).resolveCredentials ();
169+ }
170+
171+ @ Test
172+ public void preSra_authTypeNone_signerClientOverride_doesNotAssignSigner_doesNotResolveIdentity () {
173+ ExecutionAttributes executionAttributes =
174+ ExecutionAttributes .builder ()
175+ // yes, our code would put false instead of true
176+ .put (SdkInternalExecutionAttribute .IS_NONE_AUTH_TYPE_REQUEST , false )
177+ .put (SdkInternalExecutionAttribute .SIGNER_OVERRIDDEN , true )
178+ .build ();
179+
180+ SdkClientConfiguration clientConfig = testClientConfiguration ()
181+ .option (SdkClientOption .EXECUTION_ATTRIBUTES , executionAttributes )
182+ .option (SdkAdvancedClientOption .SIGNER , this .clientOverrideSigner )
183+ .build ();
184+
185+ ExecutionContext executionContext =
186+ AwsExecutionContextBuilder .invokeInterceptorsAndCreateExecutionContext (clientExecutionParams (), clientConfig );
187+
188+ assertThat (executionContext .signer ()).isNull ();
189+ verify (defaultCredentialsProvider , times (0 )).resolveCredentials ();
190+ }
191+
192+ @ Test
193+ public void preSra_authTypeNone_signerRequestOverride_doesNotAssignSigner_doesNotResolveIdentity () {
194+ ExecutionAttributes executionAttributes =
195+ ExecutionAttributes .builder ()
196+ // yes, our code would put false instead of true
197+ .put (SdkInternalExecutionAttribute .IS_NONE_AUTH_TYPE_REQUEST , false )
198+ .build ();
199+
200+ SdkClientConfiguration clientConfig = testClientConfiguration ()
201+ .option (SdkClientOption .EXECUTION_ATTRIBUTES , executionAttributes )
202+ .build ();
203+
204+ Optional overrideConfiguration = Optional .of (AwsRequestOverrideConfiguration .builder ()
205+ .signer (clientOverrideSigner )
206+ .build ());
207+ when (sdkRequest .overrideConfiguration ()).thenReturn (overrideConfiguration );
208+
209+ ExecutionContext executionContext =
210+ AwsExecutionContextBuilder .invokeInterceptorsAndCreateExecutionContext (clientExecutionParams (), clientConfig );
211+
212+ assertThat (executionContext .signer ()).isNull ();
213+ verify (defaultCredentialsProvider , times (0 )).resolveCredentials ();
125214 }
126215
127216 @ Test
@@ -209,7 +298,7 @@ private SdkClientConfiguration.Builder testClientConfiguration() {
209298 return SdkClientConfiguration .builder ()
210299 .option (SdkClientOption .EXECUTION_INTERCEPTORS , new ArrayList <>())
211300 .option (SdkClientOption .EXECUTION_INTERCEPTORS , interceptorList )
212- .option (AwsClientOption .CREDENTIALS_PROVIDER , DefaultCredentialsProvider . create () )
301+ .option (AwsClientOption .CREDENTIALS_PROVIDER , defaultCredentialsProvider )
213302 .option (SdkAdvancedClientOption .SIGNER , this .defaultSigner );
214303 }
215304}
0 commit comments