/*
* Copyright 2017 LINE Corporation
*
* LINE Corporation licenses this file to you under the Apache License,
* version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.linecorp.armeria.internal.grpc;
import java.util.zip.GZIPOutputStream;
import com.google.common.io.ByteStreams;
import com.google.protobuf.ByteString;
import com.google.protobuf.MessageLite;
import com.linecorp.armeria.grpc.testing.Messages.Payload;
import com.linecorp.armeria.grpc.testing.Messages.SimpleRequest;
import com.linecorp.armeria.grpc.testing.Messages.SimpleResponse;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufInputStream;
import io.netty.buffer.ByteBufOutputStream;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
public final class GrpcTestUtil {
public static final SimpleRequest REQUEST_MESSAGE =
SimpleRequest.newBuilder()
.setPayload(Payload.newBuilder()
.setBody(ByteString.copyFromUtf8("armeria and grpc")))
.setResponseSize(200)
.setFillUsername(true)
.build();
public static final SimpleResponse RESPONSE_MESSAGE =
SimpleResponse.newBuilder()
.setPayload(Payload.newBuilder()
.setBody(ByteString.copyFromUtf8("grpc and armeria")))
.build();
public static byte[] uncompressedResponseBytes() throws Exception {
return uncompressedFrame(protoByteBuf(RESPONSE_MESSAGE));
}
public static byte[] compressedResponseBytes() throws Exception {
return compressedFrame(protoByteBuf(RESPONSE_MESSAGE));
}
public static ByteBuf requestByteBuf() throws Exception {
return protoByteBuf(REQUEST_MESSAGE);
}
public static ByteBuf protoByteBuf(MessageLite msg) throws Exception {
ByteBuf buf = Unpooled.buffer();
try (ByteBufOutputStream os = new ByteBufOutputStream(buf)) {
msg.writeTo(os);
}
return buf;
}
public static byte[] uncompressedFrame(ByteBuf proto) {
ByteBuf buf = Unpooled.buffer();
buf.writeByte(0);
buf.writeInt(proto.readableBytes());
buf.writeBytes(proto);
proto.release();
byte[] result = ByteBufUtil.getBytes(buf);
buf.release();
return result;
}
public static byte[] compressedFrame(ByteBuf uncompressed) throws Exception {
ByteBuf compressed = Unpooled.buffer();
try (ByteBufInputStream is = new ByteBufInputStream(uncompressed, true);
GZIPOutputStream os = new GZIPOutputStream(new ByteBufOutputStream(compressed))) {
ByteStreams.copy(is, os);
}
ByteBuf buf = Unpooled.buffer();
buf.writeByte(1);
buf.writeInt(compressed.readableBytes());
buf.writeBytes(compressed);
compressed.release();
byte[] result = ByteBufUtil.getBytes(buf);
buf.release();
return result;
}
private GrpcTestUtil() {}
}