@Test
 public void testGetPidNotSupported() {
   SlaveServer mockSlave = mock(SlaveServer.class);
   AdvertiseAddress address = AdvertiseAddress.newPrivate();
   address.setStaticPort(1234);
   when(mockSlave.getPid()).thenThrow(new UnsupportedOperationException());
   SlaveXmlRpcEndpointImpl slave = new SlaveXmlRpcEndpointImpl(mockSlave);
   List<Object> response = slave.getPid("/foo");
   assertEquals(response.get(0), StatusCode.FAILURE.toInt());
 }
 @Test
 public void testGetPid() {
   SlaveServer mockSlave = mock(SlaveServer.class);
   AdvertiseAddress address = AdvertiseAddress.newPrivate();
   address.setStaticPort(1234);
   when(mockSlave.getPid()).thenReturn(1234);
   SlaveXmlRpcEndpointImpl slave = new SlaveXmlRpcEndpointImpl(mockSlave);
   List<Object> response = slave.getPid("/foo");
   assertEquals(response.get(0), StatusCode.SUCCESS.toInt());
   assertEquals(response.get(2), 1234);
 }
 @Test
 public void testRequestTopic() throws ServerException {
   SlaveServer mockSlave = mock(SlaveServer.class);
   AdvertiseAddress address = AdvertiseAddress.newPrivate();
   address.setStaticPort(1234);
   TcpRosProtocolDescription protocol = new TcpRosProtocolDescription(address);
   when(mockSlave.requestTopic(
           Matchers.<String>any(),
           Matchers.eq(Sets.newHashSet(ProtocolNames.TCPROS, ProtocolNames.UDPROS))))
       .thenReturn(protocol);
   SlaveXmlRpcEndpointImpl slave = new SlaveXmlRpcEndpointImpl(mockSlave);
   Object[][] protocols = new Object[][] {{ProtocolNames.TCPROS}, {ProtocolNames.UDPROS}};
   List<Object> response = slave.requestTopic("/foo", "/bar", protocols);
   assertEquals(response.get(0), StatusCode.SUCCESS.toInt());
   assertEquals(response.get(2), protocol.toList());
 }
 @Override
 public int hashCode() {
   final int prime = 31;
   int result = 1;
   result = prime * result + ((address == null) ? 0 : address.hashCode());
   result = prime * result + ((name == null) ? 0 : name.hashCode());
   return result;
 }
 @Override
 public boolean equals(Object obj) {
   if (this == obj) return true;
   if (obj == null) return false;
   if (getClass() != obj.getClass()) return false;
   ProtocolDescription other = (ProtocolDescription) obj;
   if (address == null) {
     if (other.address != null) return false;
   } else if (!address.equals(other.address)) return false;
   if (name == null) {
     if (other.name != null) return false;
   } else if (!name.equals(other.name)) return false;
   return true;
 }
 public List<Object> toList() {
   return Lists.newArrayList((Object) name, address.getHost(), address.getPort());
 }
 public InetSocketAddress getAddress() {
   return address.toInetSocketAddress();
 }