1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.ipc;
19
20 import java.io.IOException;
21 import java.net.InetSocketAddress;
22
23 import com.google.common.collect.Lists;
24 import org.apache.hadoop.conf.Configuration;
25 import org.apache.hadoop.hbase.HBaseConfiguration;
26 import org.apache.hadoop.hbase.HConstants;
27 import org.apache.hadoop.hbase.MediumTests;
28 import org.apache.hadoop.hbase.ServerName;
29 import org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos;
30 import org.apache.hadoop.hbase.ipc.protobuf.generated.TestRpcServiceProtos;
31 import org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EchoRequestProto;
32 import org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EchoResponseProto;
33 import org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto;
34 import org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto;
35 import org.apache.hadoop.hbase.security.User;
36 import org.apache.log4j.Level;
37 import org.apache.log4j.Logger;
38 import org.junit.Assert;
39 import org.junit.Test;
40 import org.junit.Before;
41 import org.junit.After;
42 import org.junit.experimental.categories.Category;
43
44 import com.google.protobuf.BlockingRpcChannel;
45 import com.google.protobuf.BlockingService;
46 import com.google.protobuf.RpcController;
47 import com.google.protobuf.ServiceException;
48
49
50
51
52
53
54 @Category(MediumTests.class)
55 public class TestProtoBufRpc {
56 public final static String ADDRESS = "0.0.0.0";
57 public static int PORT = 0;
58 private InetSocketAddress isa;
59 private Configuration conf;
60 private RpcServerInterface server;
61
62
63
64
65 static class PBServerImpl
66 implements TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface {
67 @Override
68 public EmptyResponseProto ping(RpcController unused,
69 EmptyRequestProto request) throws ServiceException {
70 return EmptyResponseProto.newBuilder().build();
71 }
72
73 @Override
74 public EchoResponseProto echo(RpcController unused, EchoRequestProto request)
75 throws ServiceException {
76 return EchoResponseProto.newBuilder().setMessage(request.getMessage())
77 .build();
78 }
79
80 @Override
81 public EmptyResponseProto error(RpcController unused,
82 EmptyRequestProto request) throws ServiceException {
83 throw new ServiceException("error", new IOException("error"));
84 }
85 }
86
87 @Before
88 public void setUp() throws IOException {
89 this.conf = HBaseConfiguration.create();
90 Logger log = Logger.getLogger("org.apache.hadoop.ipc.HBaseServer");
91 log.setLevel(Level.DEBUG);
92 log = Logger.getLogger("org.apache.hadoop.ipc.HBaseServer.trace");
93 log.setLevel(Level.TRACE);
94
95 PBServerImpl serverImpl = new PBServerImpl();
96 BlockingService service =
97 TestRpcServiceProtos.TestProtobufRpcProto.newReflectiveBlockingService(serverImpl);
98
99 this.server = new RpcServer(null, "testrpc",
100 Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(service, null)),
101 new InetSocketAddress(ADDRESS, PORT), 10, 10, conf, 0);
102 this.isa = server.getListenerAddress();
103 this.server.start();
104 }
105
106 @After
107 public void tearDown() throws Exception {
108 server.stop();
109 }
110
111 @Test
112 public void testProtoBufRpc() throws Exception {
113 RpcClient rpcClient = new RpcClient(conf, HConstants.CLUSTER_ID_DEFAULT);
114 try {
115 BlockingRpcChannel channel = rpcClient.createBlockingRpcChannel(
116 new ServerName(this.isa.getHostName(), this.isa.getPort(), System.currentTimeMillis()),
117 User.getCurrent(), 0);
118 TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface stub =
119 TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(channel);
120
121 TestProtos.EmptyRequestProto emptyRequest =
122 TestProtos.EmptyRequestProto.newBuilder().build();
123 stub.ping(null, emptyRequest);
124
125
126 EchoRequestProto echoRequest = EchoRequestProto.newBuilder().setMessage("hello").build();
127 EchoResponseProto echoResponse = stub.echo(null, echoRequest);
128 Assert.assertEquals(echoResponse.getMessage(), "hello");
129
130
131 try {
132 stub.error(null, emptyRequest);
133 Assert.fail("Expected exception is not thrown");
134 } catch (ServiceException e) {
135 }
136 } finally {
137 rpcClient.stop();
138 }
139 }
140 }