@Test
public void testTemplateScheduledForDownloadInMultiplePool() {

    VMTemplateVO mockTemplate = mock(VMTemplateVO.class);
    PrimaryDataStore mockPrimaryDataStore = mock(PrimaryDataStore.class);
    VMTemplateStoragePoolVO mockTemplateStore = mock(VMTemplateStoragePoolVO.class);
    List<StoragePoolVO> pools = new ArrayList<StoragePoolVO>();
    StoragePoolVO mockPool1 = mock(StoragePoolVO.class);
    when(mockPool1.getId()).thenReturn(2l);
    when(mockPool1.getStatus()).thenReturn(StoragePoolStatus.Up);
    when(mockPool1.getDataCenterId()).thenReturn(1l);
    StoragePoolVO mockPool2 = mock(StoragePoolVO.class);
    when(mockPool2.getId()).thenReturn(3l);
    when(mockPool2.getStatus()).thenReturn(StoragePoolStatus.Up);
    when(mockPool2.getDataCenterId()).thenReturn(1l);
    StoragePoolVO mockPool3 = mock(StoragePoolVO.class);
    when(mockPool3.getId()).thenReturn(4l);
    when(mockPool3.getStatus()).thenReturn(StoragePoolStatus.Up);
    when(mockPool3.getDataCenterId()).thenReturn(2l);
    pools.add(mockPool1);
    pools.add(mockPool2);
    pools.add(mockPool3);
    when(mockPrimaryDataStore.getId()).thenReturn(2l);
    when(mockTemplate.getId()).thenReturn(202l);
    when(mockTemplateStore.getDownloadState()).thenReturn(VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
    when(vmTemplateDao.findById(anyLong())).thenReturn(mockTemplate);
    when(dataStoreManager.getPrimaryDataStore(anyLong())).thenReturn(mockPrimaryDataStore);
    when(vmTemplateDao.findById(anyLong(), anyBoolean())).thenReturn(mockTemplate);
    when(vmTemplatePoolDao.findByPoolTemplate(anyLong(), anyLong())).thenReturn(mockTemplateStore);
    when(primaryDataStoreDao.findById(2l)).thenReturn(mockPool1);
    when(primaryDataStoreDao.findById(3l)).thenReturn(mockPool2);
    when(primaryDataStoreDao.findById(4l)).thenReturn(mockPool3);
    when(primaryDataStoreDao.listByStatus(StoragePoolStatus.Up)).thenReturn(pools);
    doNothing().when(mockTemplateStore).setMarkedForGC(anyBoolean());
    ExecutorService preloadExecutor = new CustomThreadPoolExecutor(8, 8, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(),
            new NamedThreadFactory("Template-Preloader"));
    templateManager._preloadExecutor = preloadExecutor;
    templateManager.prepareTemplate(202, 1, null);
    assertTrue("Test template is scheduled for seeding to on pool", ((CustomThreadPoolExecutor) preloadExecutor).getCount() == 2);
}