### Question:
DeFiProducerManager extends ProducerManager { @Override public void doChannelCloseEvent(final String remoteAddr, final Channel channel) { super.doChannelCloseEvent(remoteAddr, channel); if (channel == null) { return; } String cid = null; try { try { if (this.deleteChannelLock.tryLock(LockTimeoutMillis, TimeUnit.MILLISECONDS)) { for (Map.Entry<String, ClientChannelInfo> entry : producerChannelTable.entrySet()) { Channel producerChannel = entry.getValue().getChannel(); if (producerChannel.equals(channel)) { cid = entry.getKey(); break; } } if (cid != null) { producerChannelTable.remove(cid); } } } finally { this.deleteChannelLock.unlock(); } } catch (Exception e) { LOG.warn("ProducerManager do delete client channel map lock timeout"); } } @SuppressWarnings("unchecked")  DeFiProducerManager(); @Override void scanNotActiveChannel(); @Override void doChannelCloseEvent(final String remoteAddr, final Channel channel); @Override void registerProducer(final String group, final ClientChannelInfo clientChannelInfo); @Override void unregisterProducer(final String group, final ClientChannelInfo clientChannelInfo); ClientChannelInfo getClientChannel(String clientId); HashMap<String, HashMap<Channel, ClientChannelInfo>> getGroupChannelTable(); ConcurrentHashMap<String, ClientChannelInfo> getProducerChannelTable();  }### Answer:
@Test public void doChannelCloseEvent() throws Exception { deFiProducerManager.registerProducer(group, clientInfo); assertThat(deFiProducerManager.getGroupChannelTable().get(group).get(channel)).isNotNull(); assertThat(deFiProducerManager.getProducerChannelTable().get(clientInfo.getClientId())).isNotNull(); assertThat(deFiProducerManager.getProducerChannelTable().get(clientInfo.getClientId())).isEqualTo(clientInfo); deFiProducerManager.doChannelCloseEvent("127.0.0.1", channel); assertThat(deFiProducerManager.getGroupChannelTable().get(group).get(channel)).isNull(); assertThat(deFiProducerManager.getProducerChannelTable().get(clientInfo.getClientId())).isNull(); }