/** Test of run method, of class ISPController. */
 @Test
 public void testRun() {
   System.out.println("testRun");
   instance.start();
   assert (instance.isAlive());
   instance.exit();
   sleepMillis(1_500);
   assert (!instance.isAlive());
 }
  /** Test if a record is registered when the controller is temporarily down. */
  @Test
  public void testControllerDownRegistration() {
    System.out.println("testControllerDownRegistration");
    List<String> hosts = new ArrayList();
    hosts.add("uva.nl");

    instance.doInBackground(hosts);
    sleepMillis(120);
    instance.stopTemporarily();
    sleepMillis(1_500);
    assertFalse(instance.isBusyCheckingConnections());
    instance.restart(hosts);
    sleepMillis(1_500);
    assertTrue(
        "The controller is NOT checking connections now", instance.isBusyCheckingConnections());
    OutageListItem lastOutage = instance.getLastOutage();
    assertTrue("No outages were registered", null != lastOutage);
    assertTrue(
        "The actual last outage is " + lastOutage, lastOutage.getOutageCause() == CONTROLLERDOWN);
    instance.exit();
    sleepMillis(1_500);
    if (instance.getSessionData().saveData()) {
      LOGGER.info("Session data is saved at exiting the application.");
    } else {
      LOGGER.error("Session data is NOT saved at exiting the application.");
    }

    LOGGER.info("Load data");
    instance.initWithPreviousSessionData();
    assertTrue(
        "The actual last outage is " + lastOutage, lastOutage.getOutageCause() == CONTROLLERDOWN);
  }
 @After
 public void tearDown() {
   System.out.println("tearDown");
   instance.exit();
   sleepMillis(1_500);
   if (instance.isAlive()) {
     LOGGER.warn("The controller thread is still running!");
   } else {
     LOGGER.info("The controller thread has exited.");
   }
 }
  /** Test of doInBackground method, of class ISPController with non-valid URL. */
  @Test
  public void testDoInBackground2() {
    System.out.println("testDoInBackground2");

    List<String> hosts = new ArrayList();
    hosts.add("willnotconnect.com");

    instance.doInBackground(hosts);
    sleepMillis(1_500);
    assertTrue(instance.getSessionData().failedChecks > 0);
  }
  /** Test of doInBackground method, of class ISPController with valid URL. */
  @Test
  public void testDoInBackground1() {
    System.out.println("testDoInBackground1");

    List<String> hosts = new ArrayList();
    hosts.add("uva.nl");

    instance.doInBackground(hosts);
    sleepMillis(1_500);
    assertTrue(instance.getSessionData().successfulChecks > 0);
  }
  /** Test of exit method, of class ISPController. */
  @Test
  public void testExit() {
    System.out.println("testExit");

    List<String> hosts = new ArrayList();
    hosts.add("uva.nl");

    instance.doInBackground(hosts);
    sleepMillis(120);
    instance.exit();
    sleepMillis(1_500);
    assertFalse(instance.isRunning());
    assertFalse(instance.isAlive());
  }
  /** Test of stopTemporarily method, of class ISPController. */
  @Test
  public void testStopTemporarily() {
    System.out.println("testStopTemporarily");

    List<String> hosts = new ArrayList();
    hosts.add("uva.nl");

    instance.doInBackground(hosts);
    sleepMillis(120);
    assertTrue(
        "The controller is NOT checking connections now", instance.isBusyCheckingConnections());
    instance.stopTemporarily();
    sleepMillis(1_100);
    assertFalse(instance.isBusyCheckingConnections());
  }
 /** Test of isRunning method, of class ISPController. */
 @Test
 public void testIsRunning() {
   System.out.println("testIsRunning");
   boolean expResult = false;
   boolean result = instance.isRunning();
   assertEquals(expResult, result);
 }
  /** Test if a record is registered when service is restarted. */
  @Test
  public void testServiceInterruptedRegistration() {
    System.out.println("testServiceInterruptedRegistration");
    List<String> hosts = new ArrayList();
    hosts.add("uva.nl");

    instance.doInBackground(hosts);
    sleepMillis(120);
    assertTrue(
        "The controller is NOT checking connections now", instance.isBusyCheckingConnections());
    OutageListItem lastOutage = instance.getLastOutage();
    LOGGER.info("Outage = {}", lastOutage);
    assertTrue("No outages were registered", null != lastOutage);
    assertTrue(
        "The actual last outage is " + lastOutage, lastOutage.getOutageCause() == SERVICEDOWN);
  }
 /** Test of checkISP method, of class ISPController with non-valid URL. */
 @Test
 public void testCheckISP2() {
   System.out.println("testCheckISP2");
   List<String> hURLs = new ArrayList();
   hURLs.add("willnotconnect.com");
   boolean expResult = false;
   boolean result = instance.checkISP(hURLs);
   assertEquals(expResult, result);
 }
 /** Test of checkISP method, of class ISPController with valid URL. */
 @Test
 public void testCheckISP1() {
   System.out.println("testCheckISP1");
   List<String> hURLs = new ArrayList();
   hURLs.add("uva.nl");
   boolean expResult = true;
   boolean result = instance.checkISP(hURLs);
   assertEquals(expResult, result);
 }
  /**
   * Test if a record is registered when the ISP can not be reached due to an internal network
   * failure.
   */
  @Test
  public void testInternalInterruptedRegistration() {
    System.out.println("testInternalInterruptedRegistration");
    List<String> hosts = new ArrayList();
    hosts.add("uva.nl");
    instance.setRouterAddress("192.168.0.6");
    instance.simulateCannotReachRouter(true);

    instance.doInBackground(hosts);
    sleepMillis(120);
    assertTrue(
        "The controller is NOT checking connections now", instance.isBusyCheckingConnections());
    instance.simulateFailure(true);
    sleepMillis(6_000);
    instance.simulateFailure(false);
    sleepMillis(6_000);
    OutageListItem lastOutage = instance.getLastOutage();
    LOGGER.info("Outage = {}", lastOutage);
    assertTrue("No outages were registered", null != lastOutage);
    assertTrue("The actual last outage is " + lastOutage, lastOutage.getOutageCause() == INTERNAL);
  }
 @Before
 public void setUp() {
   System.out.println("setUp");
   instance = new ISPController();
   LOGGER.info("New Controller instance instantiated.");
   setSessionsDataFileNameForTest();
   // copy a test file to the test directory (will be overwritten)
   File resourcesDirectory = new File("src/test/resources");
   File source = new File(resourcesDirectory, "MonitorISPData.bin");
   Path sourcePath = source.toPath();
   // copy the test file to the test directory with the same name as the source
   try {
     Files.copy(sourcePath, getTestHomeDir().resolve(source.getName()), REPLACE_EXISTING);
     LOGGER.info("Fresh test session data copied");
   } catch (IOException ex) {
     LOGGER.error("File copy failed with exception {}", ex);
   }
   // Must load the session data explicit as Homepage is not doing it.
   if (instance.initWithPreviousSessionData()) {
     LOGGER.info("Preset previous session test data are used for initialization.");
   } else {
     LOGGER.info("Preset previous session test data could not be read, defaults are set");
   }
 }