### Question:
ClientXAResource implements XAResource { public boolean isSameRM(XAResource xa) throws XAException { if (this == xa) return true; try { RemoteXAResource rxa = (xa == null) ? null : txn.getRemoteXAResource(xa); return (rxa == null) ? false : remote.isSameRM(rxa); } catch (RemoteException e) { throw (XAException) new XAException("RMI faiure").initCause(e); } } ClientXAResource(RemoteXAResource xaRes, ClientTransactionListener txn); void commit(Xid xid, boolean onePhase); void end(Xid xid, int flags); void forget(Xid xid); int getTransactionTimeout(); boolean isSameRM(XAResource xa); int prepare(Xid xid); Xid[] recover(int flag); void rollback(Xid xid); boolean setTransactionTimeout(int seconds); void start(Xid xid, int flag);  }### Answer:
@Test public void testIsSameRM() throws RemoteException, XAException, RollbackException, SystemException { reset(res); reset(txn); reset(stxn); expect(txn.getRemoteXAResource(res)).andReturn(sx); expect(stxn.getXAResource(sx)).andReturn(res); expect(res.isSameRM(res)).andReturn(true); replay(res); replay(txn); replay(stxn); assertTrue(cx.isSameRM(cx)); assertFalse(cx.isSameRM(null)); assertTrue(cx.isSameRM(res)); verify(res); verify(txn); verify(stxn); }