### Question:
TranslatingConfigurationManager implements
    ConfigurationManager, Translator { synchronized public void updateAll() throws IOException { parentMan.updateAll(); Map<String, FlumeConfigData> updates = new HashMap<String, FlumeConfigData>(); for (Entry<String, FlumeConfigData> ent : parentMan.getTranslatedConfigs() .entrySet()) { String node = ent.getKey(); FlumeConfigData fcd = ent.getValue(); String src = fcd.getSourceConfig(); String snk = fcd.getSinkConfig(); String xsnk, xsrc; try { xsnk = translateSink(node, snk); xsrc = translateSource(node, src); FlumeConfigData selfData = selfMan.getConfig(node); if (selfData != null && xsnk.equals(selfData.getSinkConfig()) && xsrc.equals(selfData.getSourceConfig())) { LOG.debug("xsnk==snk = " + xsnk); LOG.debug("xsrc==src = " + xsrc); continue; } FlumeConfigData xfcd = new FlumeConfigData(fcd); xfcd.setSourceConfig(xsrc); xfcd.setSinkConfig(xsnk); updates.put(node, xfcd); } catch (FlumeSpecException e) { LOG.error("Internal Error: " + e.getLocalizedMessage(), e); throw new IOException("Internal Error: " + e.getMessage()); } } selfMan.setBulkConfig(updates); } TranslatingConfigurationManager(ConfigurationManager single);  TranslatingConfigurationManager(ConfigurationManager parent,
      ConfigurationManager self); @Override synchronized FlumeConfigData getConfig(String host); @Override synchronized void setConfig(String logicalnode, String flowid,
      String source, String sink); @Override abstract String getName(); @Override synchronized ReportEvent getReport(); @Override synchronized void loadConfigFile(String file); @Override synchronized void saveConfigFile(String file); @Override synchronized Map<String, FlumeConfigData> getAllConfigs(); synchronized Map<String, FlumeConfigData> getTranslatedConfigs(); synchronized void refresh(String logicalNode); synchronized void updateAll(); @Override synchronized void refreshAll(); @Override synchronized void setBulkConfig(Map<String, FlumeConfigData> configs); @Override synchronized void removeLogicalNode(String logicNode); @Override synchronized void start(); @Override synchronized void stop(); @Override synchronized Multimap<String, String> getLogicalNodeMap(); synchronized List<String> getLogicalNode(String physNode); synchronized Map<String, Integer> getChokeMap(String physNode); @Override synchronized boolean addLogicalNode(String physNode, String logicNode); @Override synchronized void addChokeLimit(String physNode, String chokeID,
      int limit); @Override synchronized String getPhysicalNode(String logicalNode); @Override synchronized void unmapLogicalNode(String physNode, String logicNode); @Override synchronized void unmapAllLogicalNodes(); @Override String toString();  }### Answer:
@Test public void testUpdateAll() throws IOException, FlumeSpecException { ConfigurationManager parent = new ConfigManager(); ConfigurationManager self = new ConfigManager(); ConfigurationManager trans = new NullDecoTranslator(parent, self); trans.setConfig("foo", DEFAULTFLOW, "null", "null"); trans.updateAll(); FlumeConfigData transData = trans.getConfig("foo"); assertEquals("null", transData.getSourceConfig()); assertEquals("{ nullDeco => null }", transData.getSinkConfig()); FlumeConfigData selfData = self.getConfig("foo"); assertEquals("null", selfData.getSourceConfig()); assertEquals("{ nullDeco => null }", selfData.getSinkConfig()); FlumeConfigData origData = parent.getConfig("foo"); assertEquals("null", origData.getSourceConfig()); assertEquals("null", origData.getSinkConfig()); }