def setUpClass(cls):
     cls.project_id = "PROJECT"
     cls.attributes_variety_pack = {
         "str_key": "str_value",
         "bool_key": False,
         "double_key": 1.421,
         "int_key": 123,
     }
     cls.extracted_attributes_variety_pack = ProtoSpan.Attributes(
         attribute_map={
             "str_key":
             AttributeValue(string_value=TruncatableString(
                 value="str_value", truncated_byte_count=0)),
             "bool_key":
             AttributeValue(bool_value=False),
             "double_key":
             AttributeValue(string_value=TruncatableString(
                 value="1.4210", truncated_byte_count=0)),
             "int_key":
             AttributeValue(int_value=123),
         })
     cls.agent_code = _format_attribute_value(
         "opentelemetry-python {}; google-cloud-trace-exporter {}".format(
             _strip_characters(
                 pkg_resources.get_distribution(
                     "opentelemetry-sdk").version),
             _strip_characters(google_ext_version),
         ))
     cls.example_trace_id = "6e0c63257de34c92bf9efcd03927272e"
     cls.example_span_id = "95bb5edabd45950f"
     cls.example_time_in_ns = 1589919268850900051
     cls.example_time_stamp = _get_time_from_ns(cls.example_time_in_ns)
     cls.str_300 = "a" * 300
     cls.str_256 = "a" * 256
     cls.str_128 = "a" * 128
    def test_export(self):
        trace_id = "6e0c63257de34c92bf9efcd03927272e"
        span_id = "95bb5edabd45950f"
        resource_info = Resource(
            {
                "cloud.account.id": 123,
                "host.id": "host",
                "cloud.zone": "US",
                "cloud.provider": "gcp",
                "gcp.resource_type": "gce_instance",
            }
        )
        span_datas = [
            Span(
                name="span_name",
                context=SpanContext(
                    trace_id=int(trace_id, 16),
                    span_id=int(span_id, 16),
                    is_remote=False,
                ),
                parent=None,
                kind=SpanKind.INTERNAL,
                resource=resource_info,
                attributes={"attr_key": "attr_value"},
            )
        ]

        cloud_trace_spans = {
            "name": "projects/{}/traces/{}/spans/{}".format(
                self.project_id, trace_id, span_id
            ),
            "span_id": span_id,
            "parent_span_id": None,
            "display_name": TruncatableString(
                value="span_name", truncated_byte_count=0
            ),
            "attributes": ProtoSpan.Attributes(
                attribute_map={
                    "g.co/r/gce_instance/zone": _format_attribute_value("US"),
                    "g.co/r/gce_instance/instance_id": _format_attribute_value(
                        "host"
                    ),
                    "g.co/r/gce_instance/project_id": _format_attribute_value(
                        "123"
                    ),
                    "g.co/agent": _format_attribute_value(
                        "opentelemetry-python {}; google-cloud-trace-exporter {}".format(
                            _strip_characters(
                                pkg_resources.get_distribution(
                                    "opentelemetry-sdk"
                                ).version
                            ),
                            _strip_characters(cloud_trace_version),
                        )
                    ),
                    "attr_key": _format_attribute_value("attr_value"),
                }
            ),
            "links": None,
            "status": None,
            "time_events": None,
            "start_time": None,
            "end_time": None,
        }

        client = mock.Mock()

        exporter = CloudTraceSpanExporter(self.project_id, client=client)

        exporter.export(span_datas)

        self.assertTrue(client.batch_write_spans.called)
        client.batch_write_spans.assert_called_with(
            "projects/{}".format(self.project_id), [cloud_trace_spans]
        )
 def test_strip_characters(self):
     self.assertEqual("0.10.0", _strip_characters("0.10.0b"))
     self.assertEqual("1.20.5", _strip_characters("1.20.5"))
     self.assertEqual("3.1.0", _strip_characters("3.1.0beta"))
     self.assertEqual("4.2.0", _strip_characters("4b.2rc.0a"))
     self.assertEqual("6.20.15", _strip_characters("b6.20.15"))