content: /**
   * This file is a part of Angry IP Scanner source code,
   * see http://www.angryip.org/ for more information.
   * Licensed under GPLv2.
   */
  package net.azib.ipscan.core;
  
  import java.net.InetAddress;
  import java.util.Collections;
  import java.util.concurrent.ThreadPoolExecutor;
  
  import net.azib.ipscan.config.ScannerConfig;
  import net.azib.ipscan.core.ScanningResultList.ScanInfo;
  import net.azib.ipscan.feeders.Feeder;
  import net.azib.ipscan.fetchers.Fetcher;
  import net.azib.ipscan.fetchers.FetcherRegistry;
  import net.azib.ipscan.fetchers.IPFetcher;
  
  import static org.mockito.Mockito.*;
  import static org.junit.Assert.*;
  
  import org.junit.Test;
  import org.objenesis.ObjenesisHelper;
  
  /**
   * ScannerThreadTest
   *
   * @author Anton Keks
   */
  public class ScannerDispatcherThreadTest {
  	
  	@Test
  	public void testConstruction() throws Exception {
  		FetcherRegistry registry = mock(FetcherRegistry.class);
  		when(registry.getSelectedFetchers()).thenReturn(Collections.<Fetcher>singleton(new IPFetcher()));
  		Feeder feeder = mock(Feeder.class);
  		when(feeder.getInfo()).thenReturn("info");
  		when(feeder.getName()).thenReturn("text.ip");
  
  		ScanningResultList scanningResults = new ScanningResultList(registry);
  		scanningResults.info = new ScanInfo(); // initialize info so we can add a dummy result
  		scanningResults.registerAtIndex(0, scanningResults.createResult(InetAddress.getLocalHost()));
  		
  		ScannerConfig config = mock(ScannerConfig.class);
  		config.maxThreads = 10;
  		
  		ScannerDispatcherThread thread = new ScannerDispatcherThread(feeder, new Scanner(registry), null, null, scanningResults, config, null);
  
  		assertTrue("ScannerThread should not clear the results - otherwise rescanning will not work", 
  				    scanningResults.areResultsAvailable());
  		
  		assertEquals(thread.getClass().getSimpleName(), thread.getName());
  		assertTrue(thread.isDaemon());
  		assertEquals(config.maxThreads, ((ThreadPoolExecutor)thread.threadPool).getMaximumPoolSize());
  		assertEquals(thread, ((ThreadPoolExecutor) thread.threadPool).getThreadFactory());
  	}
  	
  	@Test
  	public void threadFactoryProducesDaemons() throws Exception {
  		ScannerDispatcherThread thread = (ScannerDispatcherThread) ObjenesisHelper.newInstance(ScannerDispatcherThread.class);
  		thread.threadGroup = new ThreadGroup("foo");
  		Thread t = thread.newThread(mock(Runnable.class));
  		assertTrue(t.isDaemon());
  		assertSame(thread.threadGroup, t.getThreadGroup());
  	}
  }
  