|
21 | 21 | import static org.junit.jupiter.api.Assertions.assertEquals; |
22 | 22 | import static org.junit.jupiter.api.Assertions.assertThrows; |
23 | 23 | import static org.mockito.ArgumentMatchers.any; |
| 24 | +import static org.mockito.Mockito.eq; |
24 | 25 | import static org.mockito.Mockito.mock; |
| 26 | +import static org.mockito.Mockito.verify; |
25 | 27 | import static org.mockito.Mockito.when; |
26 | 28 |
|
27 | 29 | import java.io.IOException; |
28 | 30 | import java.util.Optional; |
29 | 31 | import java.util.UUID; |
30 | 32 | import org.apache.hadoop.hdds.security.symmetric.SecretKeyClient; |
| 33 | +import org.apache.hadoop.hdds.utils.db.Table; |
| 34 | +import org.apache.hadoop.hdds.utils.db.cache.CacheKey; |
| 35 | +import org.apache.hadoop.hdds.utils.db.cache.CacheValue; |
31 | 36 | import org.apache.hadoop.ipc.ExternalCall; |
32 | 37 | import org.apache.hadoop.ipc.Server; |
| 38 | +import org.apache.hadoop.ozone.audit.AuditLogger; |
| 39 | +import org.apache.hadoop.ozone.om.OMMetadataManager; |
33 | 40 | import org.apache.hadoop.ozone.om.OMMultiTenantManager; |
34 | 41 | import org.apache.hadoop.ozone.om.OzoneManager; |
35 | 42 | import org.apache.hadoop.ozone.om.exceptions.OMException; |
| 43 | +import org.apache.hadoop.ozone.om.execution.flowcontrol.ExecutionContext; |
36 | 44 | import org.apache.hadoop.ozone.om.request.OMClientRequest; |
| 45 | +import org.apache.hadoop.ozone.om.response.OMClientResponse; |
37 | 46 | import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos; |
38 | 47 | import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest; |
39 | 48 | import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type; |
@@ -283,6 +292,41 @@ public void testPreExecuteFailsForNonOwnerNonAdminInTenant() throws Exception { |
283 | 292 | assertEquals(OMException.ResultCodes.USER_MISMATCH, ex.getResult()); |
284 | 293 | } |
285 | 294 |
|
| 295 | + @Test |
| 296 | + public void testValidateAndUpdateCacheUpdatesCacheImmediately() throws Exception { |
| 297 | + final String tempAccessKeyId = "ASIA4567891230"; |
| 298 | + final String originalAccessKeyId = "original-access-key-id"; |
| 299 | + final String sessionToken = createSessionToken(tempAccessKeyId, originalAccessKeyId); |
| 300 | + |
| 301 | + final OzoneManager ozoneManager = mock(OzoneManager.class); |
| 302 | + final OMMetadataManager omMetadataManager = mock(OMMetadataManager.class); |
| 303 | + @SuppressWarnings("unchecked") |
| 304 | + final Table<String, Long> s3RevokedStsTokenTable = mock(Table.class); |
| 305 | + final ExecutionContext context = mock(ExecutionContext.class); |
| 306 | + final AuditLogger auditLogger = mock(AuditLogger.class); |
| 307 | + |
| 308 | + when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager); |
| 309 | + when(omMetadataManager.getS3RevokedStsTokenTable()).thenReturn(s3RevokedStsTokenTable); |
| 310 | + when(ozoneManager.getAuditLogger()).thenReturn(auditLogger); |
| 311 | + |
| 312 | + final OzoneManagerProtocolProtos.RevokeSTSTokenRequest revokeRequest = |
| 313 | + OzoneManagerProtocolProtos.RevokeSTSTokenRequest.newBuilder() |
| 314 | + .setSessionToken(sessionToken) |
| 315 | + .build(); |
| 316 | + |
| 317 | + final OMRequest omRequest = OMRequest.newBuilder() |
| 318 | + .setClientId(UUID.randomUUID().toString()) |
| 319 | + .setCmdType(Type.RevokeSTSToken) |
| 320 | + .setRevokeSTSTokenRequest(revokeRequest) |
| 321 | + .build(); |
| 322 | + |
| 323 | + final S3RevokeSTSTokenRequest s3RevokeSTSTokenRequest = new S3RevokeSTSTokenRequest(omRequest); |
| 324 | + final OMClientResponse omClientResponse = s3RevokeSTSTokenRequest.validateAndUpdateCache(ozoneManager, context); |
| 325 | + |
| 326 | + assertEquals(OzoneManagerProtocolProtos.Status.OK, omClientResponse.getOMResponse().getStatus()); |
| 327 | + verify(s3RevokedStsTokenTable).addCacheEntry(eq(new CacheKey<>(sessionToken)), any(CacheValue.class)); |
| 328 | + } |
| 329 | + |
286 | 330 | /** |
287 | 331 | * Stub used to inject a remote user into the ProtobufRpcEngine.Server.getRemoteUser() thread-local. |
288 | 332 | */ |
|
0 commit comments