Package net.azib.ipscan.fetchers

Source Code of net.azib.ipscan.fetchers.FetcherRegistryTest

/**
*
*/
package net.azib.ipscan.fetchers;

import net.azib.ipscan.core.ScanningSubject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.picocontainer.MutablePicoContainer;
import org.picocontainer.defaults.DefaultPicoContainer;

import java.util.Iterator;
import java.util.prefs.Preferences;

import static org.junit.Assert.*;

/**
* @author Anton Keks
*/
public class FetcherRegistryTest {
 
  private Preferences preferences;
 
  private Fetcher ipFetcher;
  private PingFetcher pingFetcher;
  private HostnameFetcher hostnameFetcher;
  private CommentFetcher commentFetcher;
  private PortsFetcher portsFetcher;
  private FetcherRegistry fetcherRegistry;

  @Before
  public void setUp() throws Exception {
    preferences = Preferences.userRoot().node("ipscan-test");
    preferences.clear();
   
    ipFetcher = new IPFetcher();
    pingFetcher = new PingFetcher(null, null);
    hostnameFetcher = new HostnameFetcher();
    commentFetcher = new CommentFetcher(null);
    portsFetcher = new PortsFetcher(null);
    fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, pingFetcher, hostnameFetcher, commentFetcher, portsFetcher}, preferences, null);
  }
 
  @After
  public void tearDown() throws Exception {
    preferences.removeNode();
  }

  @Test
  public void testCreate() throws Exception {
    // specified values
    assertEquals(5, fetcherRegistry.getRegisteredFetchers().size());
    // default values
    assertEquals(4, fetcherRegistry.getSelectedFetchers().size());
  }
 
  @Test(expected=UnsupportedOperationException.class)
  public void testModifyRegisteredFetchers() throws Exception {
    fetcherRegistry.getRegisteredFetchers().clear();
  }
 
  @Test
  public void testGetSelectedFetcherIndex() throws Exception {
    assertEquals(0, fetcherRegistry.getSelectedFetcherIndex(ipFetcher.getId()));
    assertEquals(1, fetcherRegistry.getSelectedFetcherIndex(pingFetcher.getId()));
    assertEquals(2, fetcherRegistry.getSelectedFetcherIndex(hostnameFetcher.getId()));
    assertEquals(3, fetcherRegistry.getSelectedFetcherIndex(portsFetcher.getId()));
    assertEquals(-1, fetcherRegistry.getSelectedFetcherIndex(commentFetcher.getId()));
  }
 
  @Test
  public void testLoadPreferences() throws Exception {
    preferences.remove(FetcherRegistry.PREFERENCE_SELECTED_FETCHERS);
    fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, hostnameFetcher, commentFetcher}, preferences, null);
    assertEquals(4, fetcherRegistry.getSelectedFetchers().size());
   
    preferences.put(FetcherRegistry.PREFERENCE_SELECTED_FETCHERS, hostnameFetcher.getId() + "###" + commentFetcher.getId());
    fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, hostnameFetcher, commentFetcher}, preferences, null);
    assertEquals(2, fetcherRegistry.getSelectedFetchers().size());
    Iterator<?> iterator = fetcherRegistry.getSelectedFetchers().iterator();
    assertSame(hostnameFetcher, iterator.next());
    assertSame(commentFetcher, iterator.next());
   
    preferences.put(FetcherRegistry.PREFERENCE_SELECTED_FETCHERS, "not-existing-fetcher###" + hostnameFetcher.getId());
    fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, hostnameFetcher}, preferences, null);
    assertEquals(1, fetcherRegistry.getSelectedFetchers().size());
  }
 
  @Test
  public void testUpdateSelectedFetchers() throws Exception {
    // retain only one selected fetcher
    fetcherRegistry.updateSelectedFetchers(new String[] {ipFetcher.getId()});
    assertEquals(1, fetcherRegistry.getSelectedFetchers().size());
    Iterator<?> iterator = fetcherRegistry.getSelectedFetchers().iterator();
    assertEquals(ipFetcher.getId(), ((Fetcher)iterator.next()).getId());
    assertEquals(ipFetcher.getId(), preferences.get(FetcherRegistry.PREFERENCE_SELECTED_FETCHERS, null));
   
    // now return a fetcher back
    fetcherRegistry.updateSelectedFetchers(new String[] {commentFetcher.getId(), ipFetcher.getId()});
    assertEquals(2, fetcherRegistry.getSelectedFetchers().size());
    iterator = fetcherRegistry.getSelectedFetchers().iterator();
    assertEquals(commentFetcher.getId(), ((Fetcher)iterator.next()).getId());
    assertEquals(ipFetcher.getId(), ((Fetcher)iterator.next()).getId());
    assertEquals(commentFetcher.getId() + "###" + ipFetcher.getId(), preferences.get(FetcherRegistry.PREFERENCE_SELECTED_FETCHERS, null));
  }
 
  @Test
  public void testListener() throws Exception {
    final boolean listenerWasCalled[] = {false};
    fetcherRegistry.addListener(new FetcherRegistryUpdateListener() {
      public void handleUpdateOfSelectedFetchers(FetcherRegistry fetcherRegistry) {
        assertSame(FetcherRegistryTest.this.fetcherRegistry, fetcherRegistry);
        assertEquals(0, fetcherRegistry.getSelectedFetchers().size());
        listenerWasCalled[0] = true;
      }
    });
    fetcherRegistry.updateSelectedFetchers(new String[] {});
    assertTrue(listenerWasCalled[0]);
  }
 
  @Test
  public void testOpenPreferencesEditor() throws Exception {
    String message = "foo bar";
    MutablePicoContainer container = new DefaultPicoContainer();
    container.registerComponentInstance(message);
   
    Fetcher editableFetcher = new EditableFetcher();
    fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, editableFetcher}, preferences, container);
   
    EditableFetcherPrefs.calledWithMessage = null;
    fetcherRegistry.openPreferencesEditor(editableFetcher);   
    assertSame(message, EditableFetcherPrefs.calledWithMessage);
    assertSame(editableFetcher, EditableFetcherPrefs.calledForFetcher);

    try {
      fetcherRegistry.openPreferencesEditor(ipFetcher);
      fail("This fetcher is not editable");
    }
    catch (FetcherException e) {
    }
  }
 
  public static class EditableFetcher extends AbstractFetcher {
    public String getId() {
      return null;
    }
    public Object scan(ScanningSubject subject) {
      return null;
    }
    @Override
    public Class<? extends FetcherPrefs> getPreferencesClass() {
      return EditableFetcherPrefs.class;
    }
  }
 
  public static class EditableFetcherPrefs implements FetcherPrefs {
    private static String calledWithMessage;
    private static Fetcher calledForFetcher;
   
    private String message;

    public EditableFetcherPrefs(String message) {
      this.message = message;
    }

    public void openFor(Fetcher fetcher) {
      calledWithMessage = message;
      calledForFetcher = fetcher;
    }   
  }
}
TOP

Related Classes of net.azib.ipscan.fetchers.FetcherRegistryTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.