title: Unit Test For Infinite Loop
body: <p>This is my java thread run method and i want to write unit test for this method. But with infinte loop i can not do it. It would be nice anyone can help me with this.</p>
  
  <pre><code> public void run() {
          BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
          String line = null;
          boolean oneTime = true;
          loadDescription();
          while (true) {
  
              try {
                  if (oneTime) {
                      System.out.println("press enter to get the console...............");
                      oneTime = false;
                  }
                  line = in.readLine();
                  if (line != null) {
                      processInput(line);
                  }
  
              } catch (Exception e) {
                  logger.error("Error occurred while processing console");
                  logger.error(e.getMessage(), e);
              }
          }
      }
  </code></pre>
  
  <p>this is loadDescription() method</p>
  
  <pre><code>private void loadDescription() {
          BufferedReader in = null;
          StringBuffer stringBuffer = null;
          String str = null;
          try {
              stringBuffer = new StringBuffer();
              in = new BufferedReader(new FileReader(IConstants.MANUAL_FILE));
              str = in.readLine();
              while (str != null) {
                  stringBuffer.append(str + "\n");
                  str = in.readLine();
              }
              dfixDescription = stringBuffer.toString();
          } catch (Exception e) {
              logger.error(e.getMessage(), e);  //To change body of catch statement use File | Settings | File Templates.
          } finally {
              try {
                  if (in != null) {
                      in.close();
                  }
              } catch (IOException e) {
                  logger.error(e.getMessage(), e);  //To change body of catch statement use File | Settings | File Templates.
              }
          }
      }
  </code></pre>
  
  <p>and </p>
  
  <pre><code>private void processInput(String line) {
          line = line.trim();
          logger.info("Admin Message received: " + line);
          if ("?".equalsIgnoreCase(line) || "".equals(line)) {
                printDescription();
          } else if (line.toUpperCase().startsWith(AdminCommands.RELOAD)) {
              loadDescription();
              printDescription();
          } else if (line.toUpperCase().startsWith(AdminCommands.EXIT)) {
              adminManager.stopDFIXRouter();
              logger.debug("Closing Application.....");
              logger.debug("Closed.");
              System.exit(0);
          } else if (line.toUpperCase().startsWith(AdminCommands.RESET_OUT_SEQUENCE)) {
              try {
                  String sessionIdentifier = line.split(",")[1].trim();
                  int seqNo = Integer.parseInt((line.split(",")[2]).trim());
                  adminManager.resetOutSequence(sessionIdentifier, seqNo);
              } catch (Exception e) {
                  logger.error(e.getMessage(), e);  //To change body of catch statement use File | Settings | File Templates.
              }
          } else if (line.toUpperCase().startsWith(AdminCommands.RESET_IN_SEQUENCE)) {
              try {
                  String sessionIdentifier = line.split(",")[1].trim();
                  int seqNo = Integer.parseInt((line.split(",")[2]).trim());
                  adminManager.resetInSequence(sessionIdentifier, seqNo);
              } catch (Exception e) {
                  logger.error(e.getMessage(), e);  //To change body of catch statement use File | Settings | File Templates.
              }
          } else if (line.toUpperCase().startsWith(AdminCommands.CONNECT)) {
              String sessionIdentifier = line.split(",")[1].trim();
              adminManager.connectSession(sessionIdentifier);
          } else if (line.toUpperCase().startsWith(AdminCommands.DISCONNECT)) {
              String sessionIdentifier = line.split(",")[1].trim();
              adminManager.disconnectSession(sessionIdentifier);
          } else if (line.toUpperCase().startsWith(AdminCommands.ACTIVATE)) {
              adminManager.startDFIXRouter();
          } else if (line.toUpperCase().startsWith(AdminCommands.PASSIVATE)) {
              adminManager.stopDFIXRouter();
          } else if (line.toUpperCase().startsWith(AdminCommands.RUN_EOD)) {
              try {
                  String sessionIdentifier = line.split(",")[1].trim();
                  adminManager.runEod(sessionIdentifier);
              } catch (Exception e) {
                  logger.error(e.getMessage(), e);  //To change body of catch statement use File | Settings | File Templates.
              }
          } else if (line.toUpperCase().startsWith(AdminCommands.SHOW_STATUS)) {
              adminManager.showStatus();
          } else {
              System.out.println("Usage: type ? for help");
          }
          System.out.print("&gt;");
      }
  </code></pre>
  
  <p>and these are related methods for run method. following is my test method</p>
  
  <pre><code> @Test
      public void run_activate() throws Exception{
  
          String data = "activate";
          InputStream in = new ByteArrayInputStream(data.getBytes());
          System.setIn(in);
          PowerMockito.mockStatic(AdminManager.class);
          PowerMockito.when(AdminManager.getInstance()).thenReturn(adminManagerTest);
          Mockito.doNothing().when(adminManagerTest).startDFIXRouter();
          dfixrtrAdminTest.run();
          Mockito.verify(adminManagerTest, Mockito.times(1)).startDFIXRouter();
  
      }
  </code></pre>
  
  <p>what is wrong with this. When i run test method it will not stop and i can not verify that needed methods are invoked how to handle this.</p>