README.md

# opengleametry_test

```gleam
import gleam/dict
import gleeunit
import opengleametry/span
import opengleametry_test

pub fn main() {
  opengleametry_test.reconfigure_opentelemetry()
  gleeunit.main()
}

pub fn a_test() {
  opengleametry_test.set_self_as_exporter_pid()
  {
    use _ctx <- span.with("hello", [#("zapf", "dingbat")])
    Nil
  }
  assert opengleametry_test.receive_attributes(123, "hello")
    == Ok(#(opengleametry_test.OkStatus, dict.from_list([#("zapf", "dingbat")])))
}
```

The full span as this test package receives under the hood is of no
interest. The status and attributes should do.

The function takes a `name` argument, so you do not need to receive
all spans. *Beware that spans will linger in the inbox of your test
process* you may receive spans by name from an earlier test!

## Special Note

Part of the output is this:
```text
=WARNING REPORT==== 6-Sep-2025::21:30:55.530928 ===
OTLP exporter failed to initialize with exception throw:{application_either_not_started_or_not_ready,
                                                         tls_certificate_check}

 === opengleametry_test does not care about opentelemetry_exporter
 === opengleametry_test will now stop opentelemetry and configure+restart
     it to direct spans to the current process.

=INFO REPORT==== 6-Sep-2025::21:30:55.645980 ===
    application: opentelemetry
    exited: stopped
    type: temporary
```

Gleam launches all dependent apps. That includes:
 - `opentelemetry` on which this package depends. We must reconfigure
   it. That is what the first line in `main` does. We print a warning
   and then a supervisor reports on what we are doing.
 - `opentelemetry_exporter` if your package depends on it (very
   likely). This produces the top warning. We do not care, we do not
   need it for this package, but it is not in the way after
   `opentelemetry` was reconfigured.