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,77 @@ 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+ Optional overrideConfiguration = Optional .of (AwsRequestOverrideConfiguration .builder ()
186+ .signer (clientOverrideSigner )
187+ .build ());
188+ when (sdkRequest .overrideConfiguration ()).thenReturn (overrideConfiguration );
189+
190+ ExecutionContext executionContext =
191+ AwsExecutionContextBuilder .invokeInterceptorsAndCreateExecutionContext (clientExecutionParams (), clientConfig );
192+
193+ assertThat (executionContext .signer ()).isNull ();
194+ verify (defaultCredentialsProvider , times (0 )).resolveCredentials ();
195+ }
196+
197+ @ Test
198+ public void preSra_authTypeNone_signerRequestOverride_doesNotAssignSigner_doesNotResolveIdentity () {
199+ ExecutionAttributes executionAttributes =
200+ ExecutionAttributes .builder ()
201+ // yes, our code would put false instead of true
202+ .put (SdkInternalExecutionAttribute .IS_NONE_AUTH_TYPE_REQUEST , false )
203+ .build ();
204+
205+ SdkClientConfiguration clientConfig = testClientConfiguration ()
206+ .option (SdkClientOption .EXECUTION_ATTRIBUTES , executionAttributes )
207+ .build ();
208+
209+ Optional overrideConfiguration = Optional .of (AwsRequestOverrideConfiguration .builder ()
210+ .signer (clientOverrideSigner )
211+ .build ());
212+ when (sdkRequest .overrideConfiguration ()).thenReturn (overrideConfiguration );
213+
214+ ExecutionContext executionContext =
215+ AwsExecutionContextBuilder .invokeInterceptorsAndCreateExecutionContext (clientExecutionParams (), clientConfig );
216+
217+ assertThat (executionContext .signer ()).isNull ();
218+ verify (defaultCredentialsProvider , times (0 )).resolveCredentials ();
125219 }
126220
127221 @ Test
@@ -209,7 +303,7 @@ private SdkClientConfiguration.Builder testClientConfiguration() {
209303 return SdkClientConfiguration .builder ()
210304 .option (SdkClientOption .EXECUTION_INTERCEPTORS , new ArrayList <>())
211305 .option (SdkClientOption .EXECUTION_INTERCEPTORS , interceptorList )
212- .option (AwsClientOption .CREDENTIALS_PROVIDER , DefaultCredentialsProvider . create () )
306+ .option (AwsClientOption .CREDENTIALS_PROVIDER , defaultCredentialsProvider )
213307 .option (SdkAdvancedClientOption .SIGNER , this .defaultSigner );
214308 }
215309}
0 commit comments