|
26 | 26 | from opentelemetry.context import Context
|
27 | 27 | from opentelemetry.sdk import resources, trace
|
28 | 28 | from opentelemetry.sdk.environment_variables import (
|
| 29 | + OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT, |
29 | 30 | OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,
|
30 | 31 | OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT,
|
31 | 32 | OTEL_SPAN_EVENT_COUNT_LIMIT,
|
@@ -1335,6 +1336,25 @@ def test_limits_defaults(self):
|
1335 | 1336 | limits.max_links, trace._DEFAULT_OTEL_SPAN_LINK_COUNT_LIMIT
|
1336 | 1337 | )
|
1337 | 1338 | self.assertIsNone(limits.max_attribute_length)
|
| 1339 | + self.assertIsNone(limits.max_span_attribute_length) |
| 1340 | + |
| 1341 | + def test_limits_attribute_length_limits_code(self): |
| 1342 | + # global limit unset while span limit is set |
| 1343 | + limits = trace.SpanLimits(max_span_attribute_length=22) |
| 1344 | + self.assertIsNone(limits.max_attribute_length) |
| 1345 | + self.assertEqual(limits.max_span_attribute_length, 22) |
| 1346 | + |
| 1347 | + # span limit falls back to global limit when no value is provided |
| 1348 | + limits = trace.SpanLimits(max_attribute_length=22) |
| 1349 | + self.assertEqual(limits.max_attribute_length, 22) |
| 1350 | + self.assertEqual(limits.max_span_attribute_length, 22) |
| 1351 | + |
| 1352 | + # global and span limits set to different values |
| 1353 | + limits = trace.SpanLimits( |
| 1354 | + max_attribute_length=22, max_span_attribute_length=33 |
| 1355 | + ) |
| 1356 | + self.assertEqual(limits.max_attribute_length, 22) |
| 1357 | + self.assertEqual(limits.max_span_attribute_length, 33) |
1338 | 1358 |
|
1339 | 1359 | def test_limits_values_code(self):
|
1340 | 1360 | max_attributes, max_events, max_links, max_attr_length = (
|
@@ -1375,8 +1395,113 @@ def test_limits_values_env(self):
|
1375 | 1395 | self.assertEqual(limits.max_events, max_events)
|
1376 | 1396 | self.assertEqual(limits.max_links, max_links)
|
1377 | 1397 |
|
| 1398 | + @mock.patch.dict( |
| 1399 | + "os.environ", |
| 1400 | + { |
| 1401 | + OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: "13", |
| 1402 | + OTEL_SPAN_EVENT_COUNT_LIMIT: "7", |
| 1403 | + OTEL_SPAN_LINK_COUNT_LIMIT: "4", |
| 1404 | + OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT: "11", |
| 1405 | + OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT: "15", |
| 1406 | + }, |
| 1407 | + ) |
| 1408 | + def test_span_limits_env(self): |
| 1409 | + self._test_span_limits( |
| 1410 | + new_tracer(), |
| 1411 | + max_attrs=13, |
| 1412 | + max_events=7, |
| 1413 | + max_links=4, |
| 1414 | + max_attr_len=11, |
| 1415 | + max_span_attr_len=15, |
| 1416 | + ) |
| 1417 | + |
| 1418 | + @mock.patch.dict( |
| 1419 | + "os.environ", |
| 1420 | + { |
| 1421 | + OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: "10", |
| 1422 | + OTEL_SPAN_EVENT_COUNT_LIMIT: "20", |
| 1423 | + OTEL_SPAN_LINK_COUNT_LIMIT: "30", |
| 1424 | + OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT: "40", |
| 1425 | + OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT: "50", |
| 1426 | + }, |
| 1427 | + ) |
| 1428 | + def test_span_limits_default_to_env(self): |
| 1429 | + self._test_span_limits( |
| 1430 | + new_tracer( |
| 1431 | + span_limits=trace.SpanLimits( |
| 1432 | + max_attributes=None, |
| 1433 | + max_events=None, |
| 1434 | + max_links=None, |
| 1435 | + max_attribute_length=None, |
| 1436 | + max_span_attribute_length=None, |
| 1437 | + ) |
| 1438 | + ), |
| 1439 | + max_attrs=10, |
| 1440 | + max_events=20, |
| 1441 | + max_links=30, |
| 1442 | + max_attr_len=40, |
| 1443 | + max_span_attr_len=50, |
| 1444 | + ) |
| 1445 | + |
| 1446 | + def test_span_limits_code(self): |
| 1447 | + self._test_span_limits( |
| 1448 | + new_tracer( |
| 1449 | + span_limits=trace.SpanLimits( |
| 1450 | + max_attributes=11, |
| 1451 | + max_events=15, |
| 1452 | + max_links=13, |
| 1453 | + max_attribute_length=9, |
| 1454 | + max_span_attribute_length=25, |
| 1455 | + ) |
| 1456 | + ), |
| 1457 | + max_attrs=11, |
| 1458 | + max_events=15, |
| 1459 | + max_links=13, |
| 1460 | + max_attr_len=9, |
| 1461 | + max_span_attr_len=25, |
| 1462 | + ) |
| 1463 | + |
| 1464 | + @mock.patch.dict( |
| 1465 | + "os.environ", |
| 1466 | + { |
| 1467 | + OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: "", |
| 1468 | + OTEL_SPAN_EVENT_COUNT_LIMIT: "", |
| 1469 | + OTEL_SPAN_LINK_COUNT_LIMIT: "", |
| 1470 | + OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT: "", |
| 1471 | + }, |
| 1472 | + ) |
| 1473 | + def test_span_no_limits_env(self): |
| 1474 | + self._test_span_no_limits(new_tracer()) |
| 1475 | + |
| 1476 | + def test_span_no_limits_code(self): |
| 1477 | + self._test_span_no_limits( |
| 1478 | + new_tracer( |
| 1479 | + span_limits=trace.SpanLimits( |
| 1480 | + max_attributes=trace.SpanLimits.UNSET, |
| 1481 | + max_links=trace.SpanLimits.UNSET, |
| 1482 | + max_events=trace.SpanLimits.UNSET, |
| 1483 | + max_attribute_length=trace.SpanLimits.UNSET, |
| 1484 | + ) |
| 1485 | + ) |
| 1486 | + ) |
| 1487 | + |
| 1488 | + def test_dropped_attributes(self): |
| 1489 | + span = get_span_with_dropped_attributes_events_links() |
| 1490 | + self.assertEqual(1, span.dropped_links) |
| 1491 | + self.assertEqual(2, span.dropped_attributes) |
| 1492 | + self.assertEqual(3, span.dropped_events) |
| 1493 | + self.assertEqual(2, span.events[0].attributes.dropped) |
| 1494 | + self.assertEqual(2, span.links[0].attributes.dropped) |
| 1495 | + self.assertEqual(2, span.resource.attributes.dropped) |
| 1496 | + |
1378 | 1497 | def _test_span_limits(
|
1379 |
| - self, tracer, max_attrs, max_events, max_links, max_attr_len |
| 1498 | + self, |
| 1499 | + tracer, |
| 1500 | + max_attrs, |
| 1501 | + max_events, |
| 1502 | + max_links, |
| 1503 | + max_attr_len, |
| 1504 | + max_span_attr_len, |
1380 | 1505 | ):
|
1381 | 1506 | id_generator = RandomIdGenerator()
|
1382 | 1507 | some_links = [
|
@@ -1426,7 +1551,7 @@ def _test_span_limits(
|
1426 | 1551 | self._assert_attr_length(attr_val, max_attr_len)
|
1427 | 1552 |
|
1428 | 1553 | for attr_val in root.attributes.values():
|
1429 |
| - self._assert_attr_length(attr_val, max_attr_len) |
| 1554 | + self._assert_attr_length(attr_val, max_span_attr_len) |
1430 | 1555 |
|
1431 | 1556 | def _test_span_no_limits(self, tracer):
|
1432 | 1557 | num_links = int(trace._DEFAULT_OTEL_SPAN_LINK_COUNT_LIMIT) + randint(
|
@@ -1470,95 +1595,3 @@ def _test_span_no_limits(self, tracer):
|
1470 | 1595 | self.assertEqual(len(root.attributes), num_attributes)
|
1471 | 1596 | for attr_val in root.attributes.values():
|
1472 | 1597 | self.assertEqual(attr_val, self.long_val)
|
1473 |
| - |
1474 |
| - @mock.patch.dict( |
1475 |
| - "os.environ", |
1476 |
| - { |
1477 |
| - OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: "13", |
1478 |
| - OTEL_SPAN_EVENT_COUNT_LIMIT: "7", |
1479 |
| - OTEL_SPAN_LINK_COUNT_LIMIT: "4", |
1480 |
| - OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT: "11", |
1481 |
| - }, |
1482 |
| - ) |
1483 |
| - def test_span_limits_env(self): |
1484 |
| - self._test_span_limits( |
1485 |
| - new_tracer(), |
1486 |
| - max_attrs=13, |
1487 |
| - max_events=7, |
1488 |
| - max_links=4, |
1489 |
| - max_attr_len=11, |
1490 |
| - ) |
1491 |
| - |
1492 |
| - @mock.patch.dict( |
1493 |
| - "os.environ", |
1494 |
| - { |
1495 |
| - OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: "10", |
1496 |
| - OTEL_SPAN_EVENT_COUNT_LIMIT: "20", |
1497 |
| - OTEL_SPAN_LINK_COUNT_LIMIT: "30", |
1498 |
| - OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT: "40", |
1499 |
| - }, |
1500 |
| - ) |
1501 |
| - def test_span_limits_default_to_env(self): |
1502 |
| - self._test_span_limits( |
1503 |
| - new_tracer( |
1504 |
| - span_limits=trace.SpanLimits( |
1505 |
| - max_attributes=None, |
1506 |
| - max_events=None, |
1507 |
| - max_links=None, |
1508 |
| - max_attribute_length=None, |
1509 |
| - ) |
1510 |
| - ), |
1511 |
| - max_attrs=10, |
1512 |
| - max_events=20, |
1513 |
| - max_links=30, |
1514 |
| - max_attr_len=40, |
1515 |
| - ) |
1516 |
| - |
1517 |
| - def test_span_limits_code(self): |
1518 |
| - self._test_span_limits( |
1519 |
| - new_tracer( |
1520 |
| - span_limits=trace.SpanLimits( |
1521 |
| - max_attributes=11, |
1522 |
| - max_events=15, |
1523 |
| - max_links=13, |
1524 |
| - max_attribute_length=9, |
1525 |
| - ) |
1526 |
| - ), |
1527 |
| - max_attrs=11, |
1528 |
| - max_events=15, |
1529 |
| - max_links=13, |
1530 |
| - max_attr_len=9, |
1531 |
| - ) |
1532 |
| - |
1533 |
| - @mock.patch.dict( |
1534 |
| - "os.environ", |
1535 |
| - { |
1536 |
| - OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: "", |
1537 |
| - OTEL_SPAN_EVENT_COUNT_LIMIT: "", |
1538 |
| - OTEL_SPAN_LINK_COUNT_LIMIT: "", |
1539 |
| - OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT: "", |
1540 |
| - }, |
1541 |
| - ) |
1542 |
| - def test_span_no_limits_env(self): |
1543 |
| - self._test_span_no_limits(new_tracer()) |
1544 |
| - |
1545 |
| - def test_span_no_limits_code(self): |
1546 |
| - self._test_span_no_limits( |
1547 |
| - new_tracer( |
1548 |
| - span_limits=trace.SpanLimits( |
1549 |
| - max_attributes=trace.SpanLimits.UNSET, |
1550 |
| - max_links=trace.SpanLimits.UNSET, |
1551 |
| - max_events=trace.SpanLimits.UNSET, |
1552 |
| - max_attribute_length=trace.SpanLimits.UNSET, |
1553 |
| - ) |
1554 |
| - ) |
1555 |
| - ) |
1556 |
| - |
1557 |
| - def test_dropped_attributes(self): |
1558 |
| - span = get_span_with_dropped_attributes_events_links() |
1559 |
| - self.assertEqual(1, span.dropped_links) |
1560 |
| - self.assertEqual(2, span.dropped_attributes) |
1561 |
| - self.assertEqual(3, span.dropped_events) |
1562 |
| - self.assertEqual(2, span.events[0].attributes.dropped) |
1563 |
| - self.assertEqual(2, span.links[0].attributes.dropped) |
1564 |
| - self.assertEqual(2, span.resource.attributes.dropped) |
|
0 commit comments