use of com.github.ambry.clustermap.MockClusterMap in project ambry by linkedin.
the class BadRestRequest method startRequestResponseHandler.
/**
* Sets up all the tests by providing a started {@link AsyncRequestResponseHandler} for their use.
* @throws InstantiationException
* @throws IOException
*/
@BeforeClass
public static void startRequestResponseHandler() throws InstantiationException, IOException {
verifiableProperties = new VerifiableProperties(new Properties());
router = new InMemoryRouter(verifiableProperties, new MockClusterMap());
restRequestService = new MockRestRequestService(verifiableProperties, router);
asyncRequestResponseHandler = new AsyncRequestResponseHandler(new RequestResponseHandlerMetrics(new MetricRegistry()), 5, restRequestService);
restRequestService.setupResponseHandler(asyncRequestResponseHandler);
restRequestService.start();
asyncRequestResponseHandler.start();
}
use of com.github.ambry.clustermap.MockClusterMap in project ambry by linkedin.
the class AsyncRequestResponseHandlerFactoryTest method getAsyncRequestResponseHandlerTest.
/**
* Tests the instantiation of an {@link AsyncRequestResponseHandler} instance through the
* {@link AsyncRequestResponseHandlerFactory}.
* @throws InstantiationException
*/
@Test
public void getAsyncRequestResponseHandlerTest() throws InstantiationException, IOException {
Properties properties = new Properties();
VerifiableProperties verifiableProperties = new VerifiableProperties(properties);
Router router = new InMemoryRouter(verifiableProperties, new MockClusterMap());
RestRequestService restRequestService = new MockRestRequestService(verifiableProperties, router);
AsyncRequestResponseHandlerFactory handlerFactory = new AsyncRequestResponseHandlerFactory(1, new MetricRegistry(), restRequestService);
// Get response handler.
RestResponseHandler restResponseHandler = handlerFactory.getRestResponseHandler();
assertNotNull("No RestResponseHandler returned", restResponseHandler);
assertEquals("Did not receive an AsyncRequestResponseHandler instance", AsyncRequestResponseHandler.class.getCanonicalName(), restResponseHandler.getClass().getCanonicalName());
// Get request handler.
RestRequestHandler restRequestHandler = handlerFactory.getRestRequestHandler();
assertNotNull("No RestRequestHandler returned", restRequestHandler);
assertEquals("Did not receive an AsyncRequestResponseHandler instance", AsyncRequestResponseHandler.class.getCanonicalName(), restRequestHandler.getClass().getCanonicalName());
// make sure they are same instance
assertEquals("Instances of AsyncRequestResponseHandler are not the same", restResponseHandler, restRequestHandler);
// make sure the instance starts and shuts down OK.
restRequestHandler.start();
restRequestHandler.shutdown();
}
use of com.github.ambry.clustermap.MockClusterMap in project ambry by linkedin.
the class MessageInfoAndMetadataListSerDeTest method testSerDe.
@Test
public void testSerDe() throws Exception {
MockClusterMap mockMap = new MockClusterMap();
MockPartitionId partitionId = new MockPartitionId();
short[] accountIds = { 100, 101, 102, 103 };
short[] containerIds = { 10, 11, 12, 13 };
boolean[] isDeletedVals = { false, true, false, true };
boolean[] isTtlUpdatedVals = { true, false, false, true };
boolean[] isUndeletedVals = { true, false, false, true };
short[] lifeVersionVals = { 1, 2, 3, 4 };
Long[] crcs = { null, 100L, Long.MIN_VALUE, Long.MAX_VALUE };
StoreKey[] keys = { new BlobId(TestUtils.getRandomElement(BlobId.getAllValidVersions()), BlobId.BlobIdType.NATIVE, (byte) 0, accountIds[0], containerIds[0], partitionId, false, BlobId.BlobDataType.DATACHUNK), new BlobId(TestUtils.getRandomElement(BlobId.getAllValidVersions()), BlobId.BlobIdType.NATIVE, (byte) 0, accountIds[1], containerIds[1], partitionId, false, BlobId.BlobDataType.DATACHUNK), new BlobId(TestUtils.getRandomElement(BlobId.getAllValidVersions()), BlobId.BlobIdType.NATIVE, (byte) 0, accountIds[2], containerIds[2], partitionId, false, BlobId.BlobDataType.DATACHUNK), new BlobId(TestUtils.getRandomElement(BlobId.getAllValidVersions()), BlobId.BlobIdType.NATIVE, (byte) 0, accountIds[3], containerIds[3], partitionId, false, BlobId.BlobDataType.DATACHUNK) };
long[] blobSizes = { 1024, 2048, 4096, 8192 };
long[] times = { SystemTime.getInstance().milliseconds(), SystemTime.getInstance().milliseconds() - 1, SystemTime.getInstance().milliseconds() + TimeUnit.SECONDS.toMillis(5), Utils.Infinite_Time };
MessageMetadata[] messageMetadata = new MessageMetadata[4];
messageMetadata[0] = new MessageMetadata(ByteBuffer.wrap(getRandomBytes(100)));
messageMetadata[1] = new MessageMetadata(null);
messageMetadata[2] = null;
messageMetadata[3] = new MessageMetadata(ByteBuffer.wrap(getRandomBytes(200)));
List<MessageInfo> messageInfoList = new ArrayList<>(4);
List<MessageMetadata> messageMetadataList = new ArrayList<>(4);
for (int i = 0; i < 4; i++) {
messageInfoList.add(new MessageInfo(keys[i], blobSizes[i], isDeletedVals[i], isTtlUpdatedVals[i], isUndeletedVals[i], times[i], crcs[i], accountIds[i], containerIds[i], times[i], lifeVersionVals[i]));
messageMetadataList.add(messageMetadata[i]);
}
// Serialize and then deserialize
MessageInfoAndMetadataListSerde messageInfoAndMetadataListSerde = new MessageInfoAndMetadataListSerde(messageInfoList, messageMetadataList, serDeVersion);
ByteBuf buffer = Unpooled.buffer(messageInfoAndMetadataListSerde.getMessageInfoAndMetadataListSize());
messageInfoAndMetadataListSerde.serializeMessageInfoAndMetadataList(buffer);
if (serDeVersion >= MessageInfoAndMetadataListSerde.VERSION_5) {
// should fail if the wrong version is provided
try {
MessageInfoAndMetadataListSerde.deserializeMessageInfoAndMetadataList(new NettyByteBufDataInputStream(buffer), mockMap, (short) (serDeVersion - 1));
Assert.fail("Should have failed to deserialize");
} catch (IllegalArgumentException e) {
// expected. Nothing to do
}
}
buffer.readerIndex(0);
MessageInfoAndMetadataListSerde messageInfoAndMetadataList = MessageInfoAndMetadataListSerde.deserializeMessageInfoAndMetadataList(new NettyByteBufDataInputStream(buffer), mockMap, serDeVersion);
// Verify
List<MessageInfo> responseMessageInfoList = messageInfoAndMetadataList.getMessageInfoList();
List<MessageMetadata> responseMessageMetadataList = messageInfoAndMetadataList.getMessageMetadataList();
Assert.assertEquals(4, responseMessageInfoList.size());
Assert.assertEquals(4, responseMessageMetadataList.size());
for (int i = 0; i < 4; i++) {
assertMessageInfoEquality(messageInfoList.get(i), responseMessageInfoList.get(i));
assertMessageMetadataEquality(messageMetadataList.get(i), responseMessageMetadataList.get(i));
}
}
use of com.github.ambry.clustermap.MockClusterMap in project ambry by linkedin.
the class RequestResponseTest method catchupStatusAdminRequestTest.
/**
* Tests the ser/de of {@link CatchupStatusAdminRequest} and checks for equality of fields with reference data.
* @throws IOException
*/
@Test
public void catchupStatusAdminRequestTest() throws IOException {
MockClusterMap clusterMap = new MockClusterMap();
PartitionId id = clusterMap.getWritablePartitionIds(MockClusterMap.DEFAULT_PARTITION_CLASS).get(0);
int correlationId = 1234;
String clientId = "client";
// request
long acceptableLag = Utils.getRandomLong(TestUtils.RANDOM, 10000);
short numCaughtUpPerPartition = Utils.getRandomShort(TestUtils.RANDOM);
AdminRequest adminRequest = new AdminRequest(AdminRequestOrResponseType.CatchupStatus, id, correlationId, clientId);
CatchupStatusAdminRequest catchupStatusRequest = new CatchupStatusAdminRequest(acceptableLag, numCaughtUpPerPartition, adminRequest);
DataInputStream requestStream = serAndPrepForRead(catchupStatusRequest, -1, true);
AdminRequest deserializedAdminRequest = deserAdminRequestAndVerify(requestStream, clusterMap, correlationId, clientId, AdminRequestOrResponseType.CatchupStatus, id);
CatchupStatusAdminRequest deserializedCatchupStatusRequest = CatchupStatusAdminRequest.readFrom(requestStream, deserializedAdminRequest);
Assert.assertEquals("Acceptable lag not as set", acceptableLag, deserializedCatchupStatusRequest.getAcceptableLagInBytes());
Assert.assertEquals("Num caught up per partition not as set", numCaughtUpPerPartition, deserializedCatchupStatusRequest.getNumReplicasCaughtUpPerPartition());
catchupStatusRequest.release();
// response
boolean isCaughtUp = TestUtils.RANDOM.nextBoolean();
ServerErrorCode[] values = ServerErrorCode.values();
int indexToPick = TestUtils.RANDOM.nextInt(values.length);
ServerErrorCode responseErrorCode = values[indexToPick];
AdminResponse adminResponse = new AdminResponse(correlationId, clientId, responseErrorCode);
CatchupStatusAdminResponse catchupStatusResponse = new CatchupStatusAdminResponse(isCaughtUp, adminResponse);
DataInputStream responseStream = serAndPrepForRead(catchupStatusResponse, -1, false);
CatchupStatusAdminResponse deserializedCatchupStatusResponse = CatchupStatusAdminResponse.readFrom(responseStream);
Assert.assertEquals(deserializedCatchupStatusResponse.getCorrelationId(), correlationId);
Assert.assertEquals(deserializedCatchupStatusResponse.getClientId(), clientId);
Assert.assertEquals(deserializedCatchupStatusResponse.getError(), responseErrorCode);
Assert.assertEquals(deserializedCatchupStatusResponse.isCaughtUp(), isCaughtUp);
catchupStatusResponse.release();
}
use of com.github.ambry.clustermap.MockClusterMap in project ambry by linkedin.
the class RequestResponseTest method doReplicationControlAdminRequestTest.
/**
* Does the actual test of ser/de of {@link ReplicationControlAdminRequest} and checks for equality of fields with
* reference data.
* @param origins the origins list to use in {@link ReplicationControlAdminRequest}.
* @param enable the value for the enable field in {@link ReplicationControlAdminRequest}.
* @throws IOException
*/
private void doReplicationControlAdminRequestTest(List<String> origins, boolean enable) throws IOException {
MockClusterMap clusterMap = new MockClusterMap();
PartitionId id = clusterMap.getWritablePartitionIds(MockClusterMap.DEFAULT_PARTITION_CLASS).get(0);
int correlationId = 1234;
String clientId = "client";
AdminRequest adminRequest = new AdminRequest(AdminRequestOrResponseType.ReplicationControl, id, correlationId, clientId);
ReplicationControlAdminRequest controlRequest = new ReplicationControlAdminRequest(origins, enable, adminRequest);
DataInputStream requestStream = serAndPrepForRead(controlRequest, -1, true);
AdminRequest deserializedAdminRequest = deserAdminRequestAndVerify(requestStream, clusterMap, correlationId, clientId, AdminRequestOrResponseType.ReplicationControl, id);
ReplicationControlAdminRequest deserializedControlRequest = ReplicationControlAdminRequest.readFrom(requestStream, deserializedAdminRequest);
Assert.assertEquals(origins, deserializedControlRequest.getOrigins());
Assert.assertEquals(enable, deserializedControlRequest.shouldEnable());
controlRequest.release();
}
Aggregations