@Test
  public void testPrettyPrintNullSafe3() {
    ModelFactory mf = ModelFactory.eINSTANCE;

    ErrorReport report = mf.createErrorReport();
    report.setStatus(mf.createStatus());
    Throwable t = mf.createThrowable();
    t.setClassName("org.test");
    report.getStatus().setException(t);
    Reports.prettyPrint(report);
  }
 @Test
 public void testDeclaringClassToNull()
     throws NoSuchFieldException, SecurityException, IllegalArgumentException,
         IllegalAccessException {
   java.lang.Throwable some = new java.lang.Throwable("contains null");
   java.lang.StackTraceElement ste = new java.lang.StackTraceElement("class", "method", null, 1);
   Field field = java.lang.StackTraceElement.class.getDeclaredField("declaringClass");
   field.setAccessible(true);
   field.set(ste, null);
   some.setStackTrace(new java.lang.StackTraceElement[] {ste});
   Throwable sut = Reports.newThrowable(some);
   Assert.assertEquals("MISSING", sut.getStackTrace().get(0).getClassName());
 }
  @Test
  public void testThreadPoolLeakingThreadsWithTribeNode() {
    Settings settings =
        ImmutableSettings.builder()
            .put("node.name", "thread_pool_leaking_threads_tribe_node")
            .put("path.home", createTempDir())
            .put("tribe.t1.cluster.name", "non_existing_cluster")
            // trigger initialization failure of one of the tribes (doesn't require starting the
            // node)
            .put("tribe.t1.plugin.mandatory", "non_existing")
            .build();

    try {
      NodeBuilder.nodeBuilder().settings(settings).build();
      fail("The node startup is supposed to fail");
    } catch (Throwable t) {
      // all good
      assertThat(t.getMessage(), containsString("mandatory plugins [non_existing]"));
    }
  }
 private void extractCauses(Throwable failure, List<Throwable> causes) {
   if (failure instanceof MultipleBuildFailures) {
     MultipleBuildFailures exception = (MultipleBuildFailures) failure;
     for (Throwable componentFailure : exception.getCauses()) {
       extractCauses(componentFailure, causes);
     }
   } else if (failure instanceof LocationAwareException) {
     causes.addAll(((LocationAwareException) failure).getReportableCauses());
   } else {
     causes.add(failure.getCause());
   }
 }
 @Test
 public void testAnonymizeThrowableDtoClassname() {
   Throwable throwable = createThrowable(NOT_WHITELISTED_CLASSNAME);
   visit(throwable, new AnonymizeStacktraceVisitor(PREFIX_WHITELIST));
   assertThat(throwable.getClassName(), is(ANONYMIZED_TAG));
 }
  @Test
  public void testDetachMultipleMultistatusFromCoreException() {
    // #input
    // st9
    // -ex6
    // --cex
    // ---st8
    // ----cex
    // -----mst7
    // ------ex1
    // ------st4
    // -------cex
    // --------mst3
    // ---------ex2
    // ---------st1
    // ----------ex3
    // ---------st2
    // ----------ex4
    // ------st6
    // -------cex
    // --------st5
    // ---------ex5
    Status st =
        st(ex(cex(st(cex(mst(ex(), st(cex(mst(ex(), st(ex()), st(ex())))), st(cex(st(ex())))))))));
    // #expected output
    // st9
    // -st8
    // --mst7
    // ---ex1
    // ---st4
    // ----mst3
    // -----ex2
    // ----st1
    // -----ex3
    // ----st2
    // -----ex4
    // ---st6
    // ----st5
    // -----ex5
    org.eclipse.epp.internal.logging.aeri.ui.model.Status st9 =
        Reports.newStatus(st, configuration);
    Throwable ex6 = st9.getException();
    org.eclipse.epp.internal.logging.aeri.ui.model.Status st8 = st9.getChildren().get(0);
    org.eclipse.epp.internal.logging.aeri.ui.model.Status mst7 = st8.getChildren().get(0);
    org.eclipse.epp.internal.logging.aeri.ui.model.Status st4 = mst7.getChildren().get(0);
    org.eclipse.epp.internal.logging.aeri.ui.model.Status mst3 = st4.getChildren().get(0);
    org.eclipse.epp.internal.logging.aeri.ui.model.Status st2 = mst3.getChildren().get(1);
    Throwable ex4 = st2.getException();
    org.eclipse.epp.internal.logging.aeri.ui.model.Status st6 = mst7.getChildren().get(1);
    org.eclipse.epp.internal.logging.aeri.ui.model.Status st5 = st6.getChildren().get(0);
    Throwable ex5 = st5.getException();

    assertThat(st9.getMessage(), is("st9"));
    assertThat(ex6.getMessage(), is("ex6"));
    assertThat(
        st8.getMessage(),
        is("st8 [detached from CoreException of Status 'st9' by Error Reporting]"));
    assertThat(
        mst7.getMessage(),
        is("mst7 [detached from CoreException of Status 'st8' by Error Reporting]"));
    assertThat(st4.getMessage(), is("st4"));
    assertThat(
        mst3.getMessage(),
        is("mst3 [detached from CoreException of Status 'st4' by Error Reporting]"));
    assertThat(st2.getMessage(), is("st2"));
    assertThat(ex4.getMessage(), is("ex4"));
    assertThat(st6.getMessage(), is("st6"));
    assertThat(
        st5.getMessage(),
        is("st5 [detached from CoreException of Status 'st6' by Error Reporting]"));
    assertThat(ex5.getMessage(), is("ex5"));
  }
  @Test
  public void testDetachMultistatusFromCoreException() {
    // #input
    // st4
    // -ex4
    // --cex
    // ---mst3
    // ----ex1
    // ----st1
    // -----ex2
    // ----st2
    // -----ex3
    Status st = st(ex(cex(mst(ex(), st(ex()), st(ex())))));
    // #expected output
    // st4
    // -ex4
    // --cex(mst3)
    // ---ex1
    // -mst3 (moved from cex to st4.children)
    // --ex1
    // --st1
    // ---ex2
    // --st2
    // ---ex3
    org.eclipse.epp.internal.logging.aeri.ui.model.Status st4 =
        Reports.newStatus(st, configuration);
    Throwable ex4 = st4.getException();
    Throwable cex = ex4.getCause();
    Throwable ex1 = cex.getCause();
    org.eclipse.epp.internal.logging.aeri.ui.model.Status mst3 = st4.getChildren().get(0);
    Throwable ex1b = mst3.getException();
    org.eclipse.epp.internal.logging.aeri.ui.model.Status st1 = mst3.getChildren().get(0);
    Throwable ex2 = st1.getException();
    org.eclipse.epp.internal.logging.aeri.ui.model.Status st2 = mst3.getChildren().get(1);
    Throwable ex3 = st2.getException();

    assertThat(st4.getMessage(), is("st4"));
    assertThat(ex4.getMessage(), is("ex4"));
    assertThat(cex.getMessage(), is("mst3"));
    assertThat(ex1.getMessage(), is("ex1"));
    assertThat(
        mst3.getMessage(),
        is("mst3 [detached from CoreException of Status 'st4' by Error Reporting]"));
    assertThat(ex1b.getMessage(), is("ex1"));
    assertThat(st1.getMessage(), is("st1"));
    assertThat(ex2.getMessage(), is("ex2"));
    assertThat(st2.getMessage(), is("st2"));
    assertThat(ex3.getMessage(), is("ex3"));
  }
 @Test
 public void testAnonymizeThrowableDtoWhitelistedClassname() {
   Throwable throwable = createThrowable(WHITELISTED_CLASSNAME);
   visit(throwable, new AnonymizeStacktraceVisitor(PREFIX_WHITELIST));
   assertThat(throwable.getClassName(), is(WHITELISTED_CLASSNAME));
 }
 @Override
 public void onError(final Throwable t) {
   t.printStackTrace();
   asyncContext.complete();
 }