ClientRMProxy extends RMProxy<T> { public static <T> T createRMProxy(final Configuration configuration, final Class<T> protocol) throws IOException { ClientRMProxy<T> clientRMProxy = new ClientRMProxy<>(); return createRMProxy(configuration, protocol, clientRMProxy); } private  ClientRMProxy(); static T createRMProxy(final Configuration configuration,
      final Class<T> protocol); @Private @Override InetSocketAddress getRMAddress(YarnConfiguration conf,
      Class<?> protocol); @Private @Override void checkAllowedProtocols(Class<?> protocol); @Unstable static Text getRMDelegationTokenService(Configuration conf); @Unstable static Text getAMRMTokenService(Configuration conf); @Unstable static Text getTokenService(Configuration conf, String address,
      String defaultAddr, int defaultPort);  }
@Test public void testProxyUserCorrectUGI() throws Exception { final YarnConfiguration conf = new YarnConfiguration(); conf.setBoolean(YarnConfiguration.RM_HA_ENABLED, true); conf.set(YarnConfiguration.RM_HA_IDS, "rm1,rm2"); conf.set(HAUtil.addSuffix(YarnConfiguration.RM_HOSTNAME, "rm1"), "0.0.0.0"); conf.set(HAUtil.addSuffix(YarnConfiguration.RM_HOSTNAME, "rm2"), "0.0.0.0"); conf.setLong(YarnConfiguration.CLIENT_FAILOVER_MAX_ATTEMPTS, 2); conf.setLong(YarnConfiguration.RESOURCEMANAGER_CONNECT_MAX_WAIT_MS, 2); conf.setLong( YarnConfiguration.RESOURCEMANAGER_CONNECT_RETRY_INTERVAL_MS, 2); conf.setClass(YarnConfiguration.IPC_RPC_IMPL, UGICapturingHadoopYarnProtoRPC.class, YarnRPC.class); UserGroupInformation realUser = UserGroupInformation.getCurrentUser(); UserGroupInformation proxyUser = UserGroupInformation.createProxyUserForTesting("proxy", realUser, new String[] {"group1"}); ApplicationClientProtocol rmProxy = proxyUser.doAs( new PrivilegedExceptionAction<ApplicationClientProtocol>() { @Override public ApplicationClientProtocol run() throws Exception { return ClientRMProxy.createRMProxy(conf, ApplicationClientProtocol.class); } }); assertUGI(); GetNewApplicationRequest request = Records.newRecord(GetNewApplicationRequest.class); UGICapturingHadoopYarnProtoRPC.lastCurrentUser = null; try { rmProxy.getNewApplication(request); } catch (IOException ioe) { } assertUGI(); }