content: /*
   * Copyright The OpenTelemetry Authors
   * SPDX-License-Identifier: Apache-2.0
   */
  
  package io.opentelemetry.javaagent.instrumentation.wicket;
  
  import static org.assertj.core.api.Assertions.assertThat;
  
  import io.opentelemetry.api.trace.SpanKind;
  import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
  import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerUsingTest;
  import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension;
  import io.opentelemetry.sdk.trace.data.StatusData;
  import io.opentelemetry.testing.internal.armeria.common.AggregatedHttpResponse;
  import org.jsoup.Jsoup;
  import org.jsoup.nodes.Document;
  import org.junit.jupiter.api.BeforeAll;
  import org.junit.jupiter.api.Test;
  import org.junit.jupiter.api.extension.RegisterExtension;
  
  abstract class AbstractWicketTest<SERVER> extends AbstractHttpServerUsingTest<SERVER> {
  
    @RegisterExtension
    public static final InstrumentationExtension testing =
        HttpServerInstrumentationExtension.forAgent();
  
    @Override
    protected String getContextPath() {
      return "/jetty-context";
    }
  
    @BeforeAll
    void setup() {
      startServer();
    }
  
    @Test
    void testHello() {
      AggregatedHttpResponse response =
          client.get(address.resolve("wicket-test/").toString()).aggregate().join();
      Document doc = Jsoup.parse(response.contentUtf8());
  
      assertThat(response.status().code()).isEqualTo(200);
      assertThat(doc.selectFirst("#message").text()).isEqualTo("Hello World!");
  
      testing.waitAndAssertTraces(
          trace ->
              trace.hasSpansSatisfyingExactly(
                  span ->
                      span.hasName("GET " + getContextPath() + "/wicket-test/hello.HelloPage")
                          .hasNoParent()
                          .hasKind(SpanKind.SERVER)));
    }
  
    @Test
    void testException() {
      AggregatedHttpResponse response =
          client.get(address.resolve("wicket-test/exception").toString()).aggregate().join();
  
      assertThat(response.status().code()).isEqualTo(500);
  
      testing.waitAndAssertTraces(
          trace ->
              trace.hasSpansSatisfyingExactly(
                  span ->
                      span.hasName("GET " + getContextPath() + "/wicket-test/hello.ExceptionPage")
                          .hasKind(SpanKind.SERVER)
                          .hasNoParent()
                          .hasStatus(StatusData.error())
                          .hasException(new Exception("test exception"))));
    }
  }
  