Package net.azib.ipscan.fetchers

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

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

import static org.mockito.Mockito.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

import net.azib.ipscan.config.ScannerConfig;
import net.azib.ipscan.core.ScanningSubject;
import net.azib.ipscan.core.values.NumericRangeList;

import org.junit.Before;
import org.junit.Test;

/**
* PortsFetcherTest
*
* @author Anton Keks
*/
public class PortsFetcherTest extends AbstractFetcherTestCase {
 
  private ScannerConfig config;

  @Before
  public void setUp() throws Exception {
    config = mock(ScannerConfig.class);
    fetcher = new PortsFetcher(config);
  }
 
  @Test
  public void numberOfPortsInFullName() throws Exception {
    config.useRequestedPorts = false;
   
    config.portString = "";
    assertEquals(fetcher.getName() + " [0]", fetcher.getFullName());

    config.portString = "1-3";
    assertEquals(fetcher.getName() + " [3]", fetcher.getFullName());
   
    config.useRequestedPorts = true;
    config.portString = "21-29,40";
    assertEquals(fetcher.getName() + " [10+]", fetcher.getFullName());
  }
 
  @Test
  public void scanWithNoResults() throws Exception {
    // this port is unlikely to be open :-)
    config.portString = "65535";
    fetcher.init();
   
    Object value = fetcher.scan(new ScanningSubject(InetAddress.getLocalHost()));
    assertNull(value);

    fetcher.cleanup();
  }
 
  @Test
  public void scanInterrupted() throws Exception {
    // these ports are unlikely to be open :-)
    config.portString = "65530-65535";
    fetcher.init();
   
    Object value = fetcher.scan(new ScanningSubject(InetAddress.getLocalHost()));
    assertNull(value);
   
    // reasonably long timeout (if tests fails, we will have to wait this long...)
    config.portTimeout = 3000;
    // but we don't want to wait :-)
    Thread.currentThread().interrupt();
    long testStartTime = System.currentTimeMillis();
    // this host is unlikely to respond
    value = fetcher.scan(new ScanningSubject(InetAddress.getByName("10.255.255.254")));
    assertNull(value);
    assertTrue("port scanning wasn't interrupted", System.currentTimeMillis() - testStartTime < 3000);
   
    // reset interrupted flag
    assertTrue(Thread.interrupted());
   
    fetcher.cleanup();
  }
 
  @Test
  public void scanWithResults() throws Exception {
    // start local single-accept server
    Thread server = new Thread() {
      public void run() {
        try {
          ServerSocket server = new ServerSocket(65431);
          synchronized (this) {
            this.notify();
          }
          Socket socket = server.accept();
          socket.close();
          server.close();
        }
        catch (IOException e) {
          fail("couldn't test creation of server");
        }
      }
    };
   
    config.portString = "65431";
    fetcher.init();
   
    synchronized (server) {
      server.start();
      server.wait();
    }
    NumericRangeList value = (NumericRangeList) fetcher.scan(new ScanningSubject(InetAddress.getLocalHost()));
    assertEquals(config.portString, value.toString());
   
    fetcher.cleanup();
  }

}
TOP

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

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.