private void write2ErrorTxtFile(ITestResult iTestResult, File testFolder) {
    if (testFolder == null) {
      LogUtils.log("Can not write error.txt - test folder is null");
      return;
    }
    //noinspection ThrowableResultOfMethodCallIgnored
    if (iTestResult.getThrowable() == null) {
      LogUtils.log("nothing to write to error.txt - throwable is null");
      return;
    }
    // trim if too long
    //noinspection ThrowableResultOfMethodCallIgnored
    String errorMsg = iTestResult.getThrowable().toString();
    if (errorMsg.length() > 120) {
      errorMsg = errorMsg.substring(0, 120 - 3) + "...";
    }

    File errorTxtFile = new File(testFolder.getAbsolutePath(), "error.txt");
    PrintWriter out = null;
    try {
      out = new PrintWriter(new BufferedWriter(new FileWriter(errorTxtFile, true)));
      out.println(errorMsg);
    } catch (IOException ioe) {
      LogUtils.log("Failed to write contents into error.txt file", ioe);
    } finally {
      if (out != null) {
        out.close();
      }
    }
  }
 @Override
 public void onTestFailure(ITestResult iTestResult) {
   if (suiteName.toLowerCase().contains("webui")) {
     if (testInvocationCounter < maxCount) {
       testInvocationCounter++;
       iTestResult.setAttribute("retry", true);
     } else {
       LogUtils.log("Number of retries expired.");
       iTestResult.setStatus(ITestResult.FAILURE);
       // reset count
       testInvocationCounter = 1;
       testMethodName = TestNGUtils.constructTestMethodName(iTestResult);
       LogUtils.log("Test Failed: " + testMethodName, iTestResult.getThrowable());
       File testFolder = DumpUtils.createTestFolder(testMethodName, suiteName);
       write2LogFile(iTestResult, testFolder);
       write2ErrorTxtFile(iTestResult, testFolder);
     }
   } else {
     testMethodName = TestNGUtils.constructTestMethodName(iTestResult);
     LogUtils.log("Test Failed: " + testMethodName, iTestResult.getThrowable());
     File testFolder = DumpUtils.createTestFolder(testMethodName, suiteName);
     write2LogFile(iTestResult, testFolder);
     write2ErrorTxtFile(iTestResult, testFolder);
   }
   super.onTestFailure(iTestResult);
 }
  @Override
  public void onConfigurationFailure(ITestResult iTestResult) {
    super.onConfigurationFailure(iTestResult);
    String testName = iTestResult.getTestClass().getName();
    String configurationName = iTestResult.getMethod().toString().split("\\(|\\)")[0];
    if (!enableLogstash && isAfter(iTestResult)) {
      DumpUtils.copyBeforeConfigurationsLogToTestDir(testName, suiteName);
      testName = testMethodName;
    }
    if (suiteName
        == null) { // this is in case the suite has a @BeforeSuite method. which is invoked before
                   // the onStart is.
      suiteName = System.getProperty("iTests.suiteName", "sgtest");
    }
    LogUtils.log("Configuration Failed: " + configurationName, iTestResult.getThrowable());

    if (enableLogstash && iTestResult.getMethod().isBeforeClassConfiguration()) {
      initLogstash2(iTestResult);
    }

    String newmanTestFolder = System.getProperty("newman.test.path");
    if (newmanTestFolder != null) {
      File testFolder = new File(newmanTestFolder);
      ZipUtils.unzipArchive(testFolder);
      try {
        copyAllFilesToLogDir(testFolder, testFolder);
      } catch (IOException e) {
        LogUtils.log("Failed to copy all log files");
      }
    } else {
      ZipUtils.unzipArchive(testMethodName, suiteName);
    }

    if (enableLogstash
        && isAfter(iTestResult)
        && !iTestResult.getMethod().isAfterClassConfiguration()
        && !iTestResult.getMethod().isAfterSuiteConfiguration()) {
      testName = testMethodName;
    }
    File testFolder = DumpUtils.createTestFolder(testName, suiteName);
    write2LogFile(iTestResult, testFolder);
    write2ErrorTxtFile(iTestResult, testFolder);

    if (isAfter(iTestResult)) {
      if (enableLogstash) {
        if (process != null) {
          killLogstashAgent(1, logstashLogPath);
        }
        if (process2 != null && iTestResult.getMethod().isAfterClassConfiguration()) {
          killLogstashAgent(2, logstashLogPath2);
        }
      }
    }
  }
  private void initLogstash(String testName) {

    initLogstashHost();

    String pathToLogstash =
        SGTestHelper.getSGTestRootDir().replace("\\", "/") + "/src/main/resources/logstash";
    String confFilePath = pathToLogstash + "/logstash-shipper-client.conf";
    String fixedTestName = testName.substring(0, testName.length() - 2);
    String backupFilePath = pathToLogstash + "/logstash-shipper-client-" + fixedTestName + ".conf";

    if (process == null) {

      try {

        LogUtils.log("copying file " + confFilePath + " to " + backupFilePath);
        IOUtils.copyFile(confFilePath, backupFilePath);
        //                backupFilePath = IOUtils.backupFile(confFilePath);
        IOUtils.replaceTextInFile(
            backupFilePath,
            "<path_to_test_folder>",
            SGTestHelper.getSGTestRootDir().replace("\\", "/")
                + "/../"
                + suiteName
                + "/"
                + testName);
        IOUtils.replaceTextInFile(backupFilePath, "<suite_name>", suiteName);
        IOUtils.replaceTextInFile(backupFilePath, "<test_name>", testName);
        IOUtils.replaceTextInFile(backupFilePath, "<build_number>", buildNumber);
        IOUtils.replaceTextInFile(backupFilePath, "<version>", version);
        IOUtils.replaceTextInFile(backupFilePath, "<host>", logstashHost);

        String logstashJarPath =
            DeploymentUtils.getLocalRepository() + "net/logstash/1.2.2/logstash-1.2.2.jar";
        logstashLogPath = pathToLogstash + "/logstash-" + fixedTestName + ".txt";
        String cmdLine =
            "java -jar "
                + logstashJarPath
                + " agent -f "
                + backupFilePath
                + " -l "
                + logstashLogPath;

        final String[] parts = cmdLine.split(" ");
        final ProcessBuilder pb = new ProcessBuilder(parts);
        LogUtils.log("Executing Command line: " + cmdLine);

        TimeUnit.SECONDS.sleep(1);
        process = pb.start();

      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
  @Override
  public void onStart(ITestContext iTestContext) {
    suiteName = System.getProperty("iTests.suiteName", "sgtest");
    LogUtils.log("suite number is now (on start) - " + suiteName);

    if (enableLogstash) {
      buildNumber = System.getProperty("iTests.buildNumber");
      LogUtils.log("build number is now (on start) - " + buildNumber);
      version = System.getProperty("cloudifyVersion");
    }
  }
 @Override
 public void onTestSkipped(ITestResult iTestResult) {
   super.onTestSkipped(iTestResult);
   testMethodName = TestNGUtils.constructTestMethodName(iTestResult);
   LogUtils.log("Test Skipped: " + testMethodName, iTestResult.getThrowable());
   write2LogFile(iTestResult, DumpUtils.createTestFolder(testMethodName, suiteName));
 }
 private void write2LogFile(ITestResult iTestResult, File testFolder) {
   BufferedWriter out = null;
   try {
     if (testFolder == null) {
       LogUtils.log("Can not write to file test folder is null");
       return;
     }
     String output = SGTestNGReporter.getOutput();
     if (StringUtils.isEmpty(output)) {
       LogUtils.log("nothing to write to log file");
       return;
     }
     String parameters = TestNGUtils.extractParameters(iTestResult);
     File testLogFile =
         new File(
             testFolder.getAbsolutePath()
                 + "/"
                 + iTestResult.getName()
                 + "("
                 + parameters
                 + ").log");
     if (!testLogFile.createNewFile()) {
       LogUtils.log(
           "Failed to create log file ["
               + testLogFile
               + "];\n log output: "
               + Reporter.getOutput());
       return;
     }
     FileWriter fstream = new FileWriter(testLogFile);
     out = new BufferedWriter(fstream);
     out.write(output);
   } catch (Exception e) {
     LogUtils.log("Failed to write to log file result - " + iTestResult, e);
   } finally {
     SGTestNGReporter.reset();
     if (out != null) {
       try {
         out.close();
       } catch (IOException e) {
         LogUtils.log("Failed closing stream", e);
         // ignore
       }
     }
   }
 }
 @Override
 public void onTestStart(ITestResult iTestResult) {
   super.onTestStart(iTestResult);
   String testName = TestNGUtils.constructTestMethodName(iTestResult);
   LogUtils.log("Test Start: " + testName);
   if (enableLogstash) {
     initLogstash(testName);
   }
 }
 @Override
 public void onTestSuccess(ITestResult iTestResult) {
   super.onTestSuccess(iTestResult);
   if (suiteName.toLowerCase().contains("webui")) {
     testInvocationCounter = 1;
   }
   testMethodName = TestNGUtils.constructTestMethodName(iTestResult);
   LogUtils.log("Test Passed: " + testMethodName);
   write2LogFile(iTestResult, DumpUtils.createTestFolder(testMethodName, suiteName));
 }
 @Override
 public void beforeConfiguration(ITestResult tr) {
   if (enableLogstash) {
     super.beforeConfiguration(tr);
     if (suiteName
         == null) { // this is in case the suite has a @BeforeSuite method. which is invoked before
                    // the onStart is.
       suiteName = System.getProperty("iTests.suiteName", "sgtest");
       buildNumber = System.getProperty("iTests.buildNumber");
       LogUtils.log("build number is now - " + buildNumber);
       version = System.getProperty("cloudifyVersion");
     }
   }
 }
 @Override
 public void onFinish(ITestContext testContext) {
   super.onFinish(testContext);
   if (suiteName == null) suiteName = System.getProperty("iTests.suiteName", "sgtest");
   LogUtils.log("Finishing Suite: " + suiteName.toLowerCase());
   if (suiteName.toLowerCase().contains("webui")) {
     onFinishWebUITests(testContext);
   }
   try {
     SGTestNGReporter.reset();
   } catch (Exception e) {
     // ignore
   }
 }
  protected boolean fill(String value, boolean initial_state) {
    try {

      //
      fromString(value);

      // fire event
      if (initial_state) fireDocumentRestored();
      else fireDocumentChanged();

      return true;
    } catch (Exception e) {
      LogUtils.report(e);
      return false;
    }
  }
  /**
   * Initialize the document by parsing it from a string.
   *
   * @see #fromString
   */
  public boolean init(String value) {
    try {
      // source
      resetStatus();

      // init data
      initData();
      fromString(value);

      // fire event
      fireDocumentInit();

      return true;
    } catch (Exception e) {
      LogUtils.report(e);
      return false;
    }
  }
  /**
   * Read the document from a file.
   * @param merge if <code>true</code> the content of the file is
   * appended to the current document, when possible
   * @param warning if <code>true</true> report when the file cannot
   * be parsed
   * @see #read
   */
  public boolean open(File file, boolean merge, boolean warning) {
    try {
      FileInputStream fis = new FileInputStream(file);

      // read structure
      try {
        read(fis, merge);
      } catch (Exception e) {
        System.err.println("Got exception: " + e.getMessage());
        init();
        if (warning) throw e;
        return false;
      }

      //
      setFilename(file.getAbsolutePath());
      fireDocumentInit();
      return true;
    } catch (Exception e) {
      LogUtils.report(e);
      return false;
    }
  }
  /**
   * Save the document to a file.
   *
   * @see #write
   */
  public boolean save(String filename) {

    try {
      setFilename(filename);

      // write to tmp file
      File tmpfile = File.createTempFile("gwb", null);
      write(new FileOutputStream(tmpfile));

      // copy to dest file and delete tmp file
      FileUtils.copy(tmpfile, new File(filename));
      tmpfile.delete();

      //

      //
      fireDocumentInit();
      return true;
    } catch (Exception e) {
      LogUtils.report(e);
      return false;
    }
  }
  private void initLogstash2(ITestResult tr) {

    initLogstashHost();

    String simpleClassName = tr.getTestClass().getRealClass().getSimpleName();
    String pathToLogstash =
        SGTestHelper.getSGTestRootDir().replace("\\", "/") + "/src/main/resources/logstash";
    String confFilePath2 = pathToLogstash + "/logstash-shipper-client-2.conf";
    String backupFilePath2 =
        pathToLogstash + "/logstash-shipper-client-2-" + simpleClassName + ".conf";
    File backupFile2 = new File(backupFilePath2);

    LogUtils.log(
        "trying to start logstash agent number 2. simple class name is " + simpleClassName);
    if (backupFile2.exists()) {
      LogUtils.log("the file " + backupFilePath2 + " already exists. not starting logstash");
    }

    if (!isAfter(tr) && !backupFile2.exists()) {

      try {
        //                backupFilePath2 = IOUtils.backupFile(confFilePath2);
        LogUtils.log("copying file " + confFilePath2 + " to " + backupFilePath2);
        IOUtils.copyFile(confFilePath2, backupFilePath2);
        IOUtils.replaceTextInFile(backupFilePath2, "<path_to_build>", SGTestHelper.getBuildDir());
        IOUtils.replaceTextInFile(
            backupFilePath2,
            "<suite_number>",
            "suite_" + System.getProperty("iTests.suiteId", "0"));
        IOUtils.replaceTextInFile(
            backupFilePath2,
            "<path_to_test_class_folder>",
            SGTestHelper.getSGTestRootDir().replace("\\", "/")
                + "/../"
                + suiteName
                + "/"
                + tr.getTestClass().getName());
        IOUtils.replaceTextInFile(backupFilePath2, "<suite_name>", suiteName);
        IOUtils.replaceTextInFile(backupFilePath2, "<test_name>", simpleClassName);
        IOUtils.replaceTextInFile(backupFilePath2, "<build_number>", buildNumber);
        IOUtils.replaceTextInFile(backupFilePath2, "<version>", version);
        IOUtils.replaceTextInFile(backupFilePath2, "<host>", logstashHost);

        String logstashJarPath =
            DeploymentUtils.getLocalRepository() + "net/logstash/1.2.2/logstash-1.2.2.jar";
        logstashLogPath2 = pathToLogstash + "/logstash-" + simpleClassName + "-2.txt";
        String cmdLine =
            "java -jar "
                + logstashJarPath
                + " agent -f "
                + backupFilePath2
                + " -l "
                + logstashLogPath2;

        final String[] parts = cmdLine.split(" ");
        final ProcessBuilder pb = new ProcessBuilder(parts);
        LogUtils.log("Executing Command line: " + cmdLine);

        process2 = pb.start();

      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
  private void killLogstashAgent(int logAgentNumber, String logstashLogPath) {

    FileObject listendir;
    CustomFileListener listener = new CustomFileListener();
    long TIMEOUT_BETWEEN_FILE_QUERYING = 1000;
    long LOOP_TIMEOUT_IN_MILLIS = 10 * 1000;

    try {
      FileSystemManager fileSystemManager = VFS.getManager();
      listendir = fileSystemManager.resolveFile(logstashLogPath);
    } catch (FileSystemException e) {
      e.printStackTrace();
      return;
    }

    DefaultFileMonitor fm = new DefaultFileMonitor(listener);
    fm.setRecursive(true);
    fm.addFile(listendir);
    fm.setDelay(TIMEOUT_BETWEEN_FILE_QUERYING);
    fm.start();

    LogUtils.log("waiting to destroy logger");
    long startTimeMillis = System.currentTimeMillis();

    while (true) {

      if (!listener.isProcessUp()) {
        break;
      }

      listener.setProcessUp(false);

      try {
        TimeUnit.MILLISECONDS.sleep(LOOP_TIMEOUT_IN_MILLIS);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }

    long endTimeMillis = System.currentTimeMillis();
    LogUtils.log("destroying logstash agent " + logAgentNumber);
    LogUtils.log("waited " + (endTimeMillis - startTimeMillis) / 1000 + " seconds");
    fm.stop();

    //        File logstashOutputFile = new File(logstashLogPath);

    if (logAgentNumber == 1) {

      process.destroy();
      process = null;
    } else {

      process2.destroy();
      process2 = null;
    }

    //        try {
    //            TimeUnit.SECONDS.sleep(5);
    //
    //            LogUtils.log("returning logstash config file to initial state");
    //            if(logAgentNumber == 1){
    //                IOUtils.replaceFileWithMove(new File(confFilePath), new File(backupFilePath));
    //                FileUtils.deleteQuietly(new File(backupFilePath));
    //            }
    //            else{
    //                IOUtils.replaceFileWithMove(new File(confFilePath2), new
    // File(backupFilePath2));
    //                FileUtils.deleteQuietly(new File(backupFilePath2));
    //
    //            }
    //        } catch (IOException e) {
    //            e.printStackTrace();
    //        } catch (InterruptedException e) {
    //            e.printStackTrace();
    //        }

    //        if(logstashOutputFile.exists()){
    //            FileUtils.deleteQuietly(logstashOutputFile);
    //        }
  }
Beispiel #18
0
/** Registry of JAXWS Adapter of endpoints. */
public class JAXWSAdapterRegistry {

  private static JAXWSAdapterRegistry registry = null;
  private final Map<String, ContextAdapter> store;

  private static final Logger logger = LogUtils.getLogger();

  /** Creates a new instance of JAXWSServletUtil */
  private JAXWSAdapterRegistry() {
    store = Collections.synchronizedMap(new HashMap<String, ContextAdapter>());
  }

  public static synchronized JAXWSAdapterRegistry getInstance() {
    if (registry == null) registry = new JAXWSAdapterRegistry();
    return registry;
  }

  public void addAdapter(String contextRoot, String urlPattern, Adapter info) {
    if (contextRoot == null) contextRoot = "";
    synchronized (store) {
      ContextAdapter contextRtInfo = store.get(contextRoot);
      if (contextRtInfo == null) {
        contextRtInfo = new ContextAdapter();
      }
      contextRtInfo.addAdapter(urlPattern, info);
      store.put(contextRoot, contextRtInfo);
    }
  }

  public Adapter getAdapter(String contextRoot, String path, String urlPattern) {
    ContextAdapter serviceInfo = store.get(contextRoot);
    if (serviceInfo == null) {
      return null;
    }
    return serviceInfo.getAdapter(path, urlPattern);
  }

  public void removeAdapter(String contextRoot) {
    if (contextRoot == null) contextRoot = "";
    synchronized (store) {
      ContextAdapter serviceInfo = store.get(contextRoot);
      if (serviceInfo == null) {
        return;
      }
      store.remove(contextRoot);
    }
  }

  static class ContextAdapter {

    final Map<String, Adapter> fixedUrlPatternEndpoints;
    final List<Adapter> pathUrlPatternEndpoints;

    ContextAdapter() {

      fixedUrlPatternEndpoints = Collections.synchronizedMap(new HashMap<String, Adapter>());
      pathUrlPatternEndpoints = Collections.synchronizedList(new ArrayList<Adapter>());
    }

    void addAdapter(String urlPattern, Adapter info) {
      if (urlPattern.indexOf("*.") != -1) {
        // cannot deal with implicit mapping right now
        logger.log(Level.SEVERE, LogUtils.ENTERPRISE_WEBSERVICE_IMPLICIT_MAPPING_NOT_SUPPORTED);
      } else if (urlPattern.endsWith("/*")) {
        pathUrlPatternEndpoints.add(info);
      } else {
        synchronized (fixedUrlPatternEndpoints) {
          if (fixedUrlPatternEndpoints.containsKey(urlPattern)) {
            logger.log(Level.SEVERE, LogUtils.ENTERPRISE_WEBSERVICE_DUPLICATE_SERVICE, urlPattern);
          }
          fixedUrlPatternEndpoints.put(urlPattern, info);
        }
      }
    }

    Adapter getAdapter(String path, String urlPattern) {
      Adapter result = fixedUrlPatternEndpoints.get(path);
      if (result == null) {
        // This loop is unnecessary.Essentially what it is doing to always
        // return the first element from pathUrlPatternEndpoints
        // TO DO clean up after SCF required
        synchronized (pathUrlPatternEndpoints) {
          for (Iterator<Adapter> iter = pathUrlPatternEndpoints.iterator(); iter.hasNext(); ) {
            Adapter candidate = iter.next();
            if (path.startsWith(getValidPathForEndpoint(urlPattern))) {
              result = candidate;
              break;
            }
          }
        }
      }
      return result;
    }

    private String getValidPathForEndpoint(String s) {
      if (s.endsWith("/*")) {
        return s.substring(0, s.length() - 2);
      } else {
        return s;
      }
    }
  }
}
 public SGTestNGListener() {
   if (enableLogstash) {
     LogUtils.log("in SGTestNGListener constructor");
   }
 }