diff --git a/tests/core/dune b/tests/core/dune index 0a373429..9f1cf937 100644 --- a/tests/core/dune +++ b/tests/core/dune @@ -1,4 +1,4 @@ (tests - (names test_trace_context t_size t_histogram) + (names test_trace_context t_size t_histogram test_span_dummy) (package opentelemetry) (libraries pbrt opentelemetry opentelemetry-client)) diff --git a/tests/core/test_span_dummy.expected b/tests/core/test_span_dummy.expected new file mode 100644 index 00000000..22703951 --- /dev/null +++ b/tests/core/test_span_dummy.expected @@ -0,0 +1,27 @@ +ok: add_attrs +ok: add_attrs' +ok: add_event +ok: add_event' +ok: add_links +ok: add_links' +ok: set_status +ok: set_kind +ok: record_exception +span dummy at the end: { trace_id = ; + span_id = ; + trace_state = "" (* absent *); + parent_span_id = (* absent *); + flags = 0 (* absent *); + name = "" (* absent *); + kind = Span_kind_unspecified (* absent *); + start_time_unix_nano = 0 (* absent *); + end_time_unix_nano = 0 (* absent *); + attributes = []; + dropped_attributes_count = 0 (* absent *); + events = []; + dropped_events_count = 0 (* absent *); + links = []; + dropped_links_count = 0 (* absent *); + status = None; + } +all ok diff --git a/tests/core/test_span_dummy.ml b/tests/core/test_span_dummy.ml new file mode 100644 index 00000000..fe64c3b6 --- /dev/null +++ b/tests/core/test_span_dummy.ml @@ -0,0 +1,47 @@ +open Opentelemetry + +(** Check that Span.dummy is never modified by mutation functions *) + +let check_pristine () = + let d = Span.dummy in + assert (Span.attrs d = []); + assert (Span.events d = []); + assert (Span.links d = []); + assert (Span.status d = None); + assert (Span.kind d = None); + assert (not (Span.is_not_dummy d)) + +let check name f = + f (); + check_pristine (); + Printf.printf "ok: %s\n" name + +let trace_id = Trace_id.create () + +let span_id = Span_id.create () + +let () = + check_pristine (); + check "add_attrs" (fun () -> Span.add_attrs Span.dummy [ "k", `String "v" ]); + check "add_attrs'" (fun () -> + Span.add_attrs' Span.dummy (fun () -> [ "k", `Int 42 ])); + check "add_event" (fun () -> Span.add_event Span.dummy (Event.make "ev")); + check "add_event'" (fun () -> + Span.add_event' Span.dummy (fun () -> Event.make "ev")); + check "add_links" (fun () -> + Span.add_links Span.dummy [ Span_link.make ~trace_id ~span_id () ]); + check "add_links'" (fun () -> + Span.add_links' Span.dummy (fun () -> + [ Span_link.make ~trace_id ~span_id () ])); + check "set_status" (fun () -> + Span.set_status Span.dummy + (Span_status.make ~message:"err" ~code:Span_status.Status_code_error)); + check "set_kind" (fun () -> Span.set_kind Span.dummy Span_kind_server); + check "record_exception" (fun () -> + try raise Exit + with exn -> + let bt = Printexc.get_raw_backtrace () in + Span.record_exception Span.dummy exn bt); + Format.printf "span dummy at the end: %a@." Opentelemetry_proto.Trace.pp_span + Span.dummy; + print_endline "all ok"