summaryrefslogtreecommitdiffstats
path: root/mocktracer/src/mock_span.h
blob: bf8ba05cf028b35a662fb7925996a4440e6a8439 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#ifndef OPENTRACING_MOCKTRACER_SPAN_H
#define OPENTRACING_MOCKTRACER_SPAN_H

#include <opentracing/mocktracer/tracer.h>
#include <atomic>
#include <mutex>
#include "mock_span_context.h"

namespace opentracing {
BEGIN_OPENTRACING_ABI_NAMESPACE
namespace mocktracer {

class MockSpan : public Span {
 public:
  MockSpan(std::shared_ptr<const Tracer>&& tracer, Recorder* recorder,
           string_view operation_name, const StartSpanOptions& options);

  ~MockSpan() override;

  void FinishWithOptions(const FinishSpanOptions& options) noexcept override;

  void SetOperationName(string_view name) noexcept override;

  void SetTag(string_view key,
              const opentracing::Value& value) noexcept override;

  void Log(std::initializer_list<std::pair<string_view, Value>>
               fields) noexcept override;

  void Log(SystemTime timestamp,
           std::initializer_list<std::pair<string_view, Value>>
               fields) noexcept override;

  void Log(SystemTime timestamp,
           const std::vector<std::pair<string_view, Value>>&
               fields) noexcept override;

  void SetBaggageItem(string_view restricted_key,
                      string_view value) noexcept override;

  std::string BaggageItem(string_view restricted_key) const noexcept override;

  const SpanContext& context() const noexcept override { return span_context_; }

  const opentracing::Tracer& tracer() const noexcept override {
    return *tracer_;
  }

 private:
  std::shared_ptr<const Tracer> tracer_;
  Recorder* recorder_;
  MockSpanContext span_context_;
  SteadyTime start_steady_;

  std::atomic<bool> is_finished_{false};

  // Mutex protects data_
  std::mutex mutex_;
  SpanData data_;
};

}  // namespace mocktracer
END_OPENTRACING_ABI_NAMESPACE
}  // namespace opentracing

#endif  // OPENTRACING_MOCKTRACER_SPAN_H