Skip to content

Commit

Permalink
http metrics test
Browse files Browse the repository at this point in the history
  • Loading branch information
RangelReale committed Aug 25, 2022
1 parent ee00bbb commit 5bf0048
Show file tree
Hide file tree
Showing 3 changed files with 185 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@
AggregationTemporality,
Gauge,
Histogram as HistogramType,
Metric,
MetricExporter,
MetricExportResult,
MetricsData,
Expand Down
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
# Copyright The OpenTelemetry Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import unittest
from unittest.mock import patch

import requests

from opentelemetry.exporter.otlp.proto.http import Compression
from opentelemetry.exporter.otlp.proto.http.metric_exporter import (
DEFAULT_COMPRESSION,
DEFAULT_ENDPOINT,
DEFAULT_TIMEOUT,
DEFAULT_METRICS_EXPORT_PATH,
OTLPMetricExporter,
)
from opentelemetry.sdk.environment_variables import (
OTEL_EXPORTER_OTLP_CERTIFICATE,
OTEL_EXPORTER_OTLP_COMPRESSION,
OTEL_EXPORTER_OTLP_ENDPOINT,
OTEL_EXPORTER_OTLP_HEADERS,
OTEL_EXPORTER_OTLP_TIMEOUT,
OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE,
OTEL_EXPORTER_OTLP_METRICS_COMPRESSION,
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT,
OTEL_EXPORTER_OTLP_METRICS_HEADERS,
OTEL_EXPORTER_OTLP_METRICS_TIMEOUT,
)

OS_ENV_ENDPOINT = "os.env.base"
OS_ENV_CERTIFICATE = "os/env/base.crt"
OS_ENV_HEADERS = "envHeader1=val1,envHeader2=val2"
OS_ENV_TIMEOUT = "30"


# pylint: disable=protected-access
class TestOTLPMetricExporter(unittest.TestCase):
def test_constructor_default(self):

exporter = OTLPMetricExporter()

self.assertEqual(
exporter._endpoint, DEFAULT_ENDPOINT + DEFAULT_METRICS_EXPORT_PATH
)
self.assertEqual(exporter._certificate_file, True)
self.assertEqual(exporter._timeout, DEFAULT_TIMEOUT)
self.assertIs(exporter._compression, DEFAULT_COMPRESSION)
self.assertEqual(exporter._headers, {})
self.assertIsInstance(exporter._session, requests.Session)

@patch.dict(
"os.environ",
{
OTEL_EXPORTER_OTLP_CERTIFICATE: OS_ENV_CERTIFICATE,
OTEL_EXPORTER_OTLP_COMPRESSION: Compression.Gzip.value,
OTEL_EXPORTER_OTLP_ENDPOINT: OS_ENV_ENDPOINT,
OTEL_EXPORTER_OTLP_HEADERS: OS_ENV_HEADERS,
OTEL_EXPORTER_OTLP_TIMEOUT: OS_ENV_TIMEOUT,
OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE: "metrics/certificate.env",
OTEL_EXPORTER_OTLP_METRICS_COMPRESSION: Compression.Deflate.value,
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: "https://metrics.endpoint.env",
OTEL_EXPORTER_OTLP_METRICS_HEADERS: "metricsEnv1=val1,metricsEnv2=val2,metricEnv3===val3==",
OTEL_EXPORTER_OTLP_METRICS_TIMEOUT: "40",
},
)
def test_exporter_metrics_env_take_priority(self):
exporter = OTLPMetricExporter()

self.assertEqual(exporter._endpoint, "https://metrics.endpoint.env")
self.assertEqual(exporter._certificate_file, "metrics/certificate.env")
self.assertEqual(exporter._timeout, 40)
self.assertIs(exporter._compression, Compression.Deflate)
self.assertEqual(
exporter._headers,
{
"metricsenv1": "val1",
"metricsenv2": "val2",
"metricenv3": "==val3==",
},
)
self.assertIsInstance(exporter._session, requests.Session)

@patch.dict(
"os.environ",
{
OTEL_EXPORTER_OTLP_CERTIFICATE: OS_ENV_CERTIFICATE,
OTEL_EXPORTER_OTLP_COMPRESSION: Compression.Gzip.value,
OTEL_EXPORTER_OTLP_ENDPOINT: OS_ENV_ENDPOINT,
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: "https://metrics.endpoint.env",
OTEL_EXPORTER_OTLP_HEADERS: OS_ENV_HEADERS,
OTEL_EXPORTER_OTLP_TIMEOUT: OS_ENV_TIMEOUT,
},
)
def test_exporter_constructor_take_priority(self):
exporter = OTLPMetricExporter(
endpoint="example.com/1234",
certificate_file="path/to/service.crt",
headers={"testHeader1": "value1", "testHeader2": "value2"},
timeout=20,
compression=Compression.NoCompression,
session=requests.Session(),
)

self.assertEqual(exporter._endpoint, "example.com/1234")
self.assertEqual(exporter._certificate_file, "path/to/service.crt")
self.assertEqual(exporter._timeout, 20)
self.assertIs(exporter._compression, Compression.NoCompression)
self.assertEqual(
exporter._headers,
{"testHeader1": "value1", "testHeader2": "value2"},
)
self.assertIsInstance(exporter._session, requests.Session)

@patch.dict(
"os.environ",
{
OTEL_EXPORTER_OTLP_CERTIFICATE: OS_ENV_CERTIFICATE,
OTEL_EXPORTER_OTLP_COMPRESSION: Compression.Gzip.value,
OTEL_EXPORTER_OTLP_HEADERS: OS_ENV_HEADERS,
OTEL_EXPORTER_OTLP_TIMEOUT: OS_ENV_TIMEOUT,
},
)
def test_exporter_env(self):

exporter = OTLPMetricExporter()

self.assertEqual(exporter._certificate_file, OS_ENV_CERTIFICATE)
self.assertEqual(exporter._timeout, int(OS_ENV_TIMEOUT))
self.assertIs(exporter._compression, Compression.Gzip)
self.assertEqual(
exporter._headers, {"envheader1": "val1", "envheader2": "val2"}
)

@patch.dict(
"os.environ",
{OTEL_EXPORTER_OTLP_ENDPOINT: OS_ENV_ENDPOINT},
)
def test_exporter_env_endpoint_without_slash(self):

exporter = OTLPMetricExporter()

self.assertEqual(
exporter._endpoint,
OS_ENV_ENDPOINT + f"/{DEFAULT_METRICS_EXPORT_PATH}",
)

@patch.dict(
"os.environ",
{OTEL_EXPORTER_OTLP_ENDPOINT: OS_ENV_ENDPOINT + "/"},
)
def test_exporter_env_endpoint_with_slash(self):

exporter = OTLPMetricExporter()

self.assertEqual(
exporter._endpoint,
OS_ENV_ENDPOINT + f"/{DEFAULT_METRICS_EXPORT_PATH}",
)

@patch.dict(
"os.environ",
{
OTEL_EXPORTER_OTLP_HEADERS: "envHeader1=val1,envHeader2=val2,missingValue"
},
)
def test_headers_parse_from_env(self):

with self.assertLogs(level="WARNING") as cm:
_ = OTLPMetricExporter()

self.assertEqual(
cm.records[0].message,
"Header doesn't match the format: missingValue.",
)

0 comments on commit 5bf0048

Please sign in to comment.