@Override @Nullable public Object channelToChannelName(@Nullable Object channel) { return channelToChannelName(channel, this.reaperDelay); }
@Test public void testRemoveOnGet() { DefaultHeaderChannelRegistry registry = new DefaultHeaderChannelRegistry(); MessageChannel channel = new DirectChannel(); String foo = (String) registry.channelToChannelName(channel); Map<?, ?> map = TestUtils.getPropertyValue(registry, "channels", Map.class); assertEquals(1, map.size()); assertSame(channel, registry.channelNameToChannel(foo)); assertEquals(1, map.size()); registry.setRemoveOnGet(true); assertSame(channel, registry.channelNameToChannel(foo)); assertEquals(0, map.size()); }
@Test public void testExpire() throws Exception { DefaultHeaderChannelRegistry registry = new DefaultHeaderChannelRegistry(50); registry.setTaskScheduler(this.taskScheduler); String id = (String) registry.channelToChannelName(new DirectChannel()); int n = 0; while (n++ < 100 && registry.channelNameToChannel(id) != null) { Thread.sleep(100); } assertNull(registry.channelNameToChannel(id)); registry.stop(); }
@Override public Object channelToChannelName(@Nullable Object channel) { return channelToChannelName(channel, this.reaperDelay); }
@Test public void testControlHeaderChannelReaper() throws InterruptedException { MessagingTemplate messagingTemplate = new MessagingTemplate(); messagingTemplate.convertAndSend(input, "@integrationHeaderChannelRegistry.size()"); Message<?> result = this.output.receive(0); assertNotNull(result); // No channels in the registry assertEquals(0, result.getPayload()); this.registry.channelToChannelName(new DirectChannel()); // Sleep a bit to be sure that we aren't reaped by registry TTL as 60000 Thread.sleep(10); messagingTemplate.convertAndSend(input, "@integrationHeaderChannelRegistry.size()"); result = this.output.receive(0); assertNotNull(result); assertEquals(1, result.getPayload()); // Some DirectFieldAccessor magic to modify 'expireAt' to the past to avoid timing issues on high-loaded build Object messageChannelWrapper = TestUtils.getPropertyValue(this.registry, "channels", Map.class).values().iterator().next(); DirectFieldAccessor dfa = new DirectFieldAccessor(messageChannelWrapper); dfa.setPropertyValue("expireAt", System.currentTimeMillis() - 60000); messagingTemplate.convertAndSend(input, "@integrationHeaderChannelRegistry.runReaper()"); messagingTemplate.convertAndSend(input, "@integrationHeaderChannelRegistry.size()"); result = this.output.receive(0); assertNotNull(result); assertEquals(0, result.getPayload()); }