Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-basictracer for 
openSUSE:Factory checked in at 2022-01-15 20:05:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-basictracer (Old)
 and      /work/SRC/openSUSE:Factory/.python-basictracer.new.1892 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-basictracer"

Sat Jan 15 20:05:26 2022 rev:2 rq:946673 version:3.2.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-basictracer/python-basictracer.changes    
2021-01-03 21:27:50.403650722 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-basictracer.new.1892/python-basictracer.changes
  2022-01-15 20:05:48.529787488 +0100
@@ -1,0 +2,13 @@
+Sat Jan 15 16:49:06 UTC 2022 - Dirk M??ller <dmuel...@suse.com>
+
+- update to 3.2.0:
+- setup.py: Remove test dependency doubles
+- Do not throw error when no tracing headers are sent
+- Stop testing with Python 3.5
+- Provide meaningful error messages when failed to extract headers from carrier
+  - TextPropagator.extract raises SpanContextCorruptedException with
+    more meaningful error messages.
+  - Tracer.start_span validates type of ``references=`` preventing
+    problems for users migrating code from opentracing==1.3.0.
+
+-------------------------------------------------------------------

Old:
----
  basictracer-3.1.0.tar.gz

New:
----
  basictracer-3.2.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-basictracer.spec ++++++
--- /var/tmp/diff_new_pack.uEBYzL/_old  2022-01-15 20:05:48.865787750 +0100
+++ /var/tmp/diff_new_pack.uEBYzL/_new  2022-01-15 20:05:48.869787753 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-basictracer
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-basictracer
-Version:        3.1.0
+Version:        3.2.0
 Release:        0
 Summary:        BasicTracer reference implementation for OpenTracing
 License:        MIT

++++++ basictracer-3.1.0.tar.gz -> basictracer-3.2.0.tar.gz ++++++
Binary files old/basictracer-3.1.0/.coverage and 
new/basictracer-3.2.0/.coverage differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/basictracer-3.1.0/.travis.yml 
new/basictracer-3.2.0/.travis.yml
--- old/basictracer-3.1.0/.travis.yml   2019-05-12 22:09:12.000000000 +0200
+++ new/basictracer-3.2.0/.travis.yml   2021-04-12 23:41:04.000000000 +0200
@@ -3,7 +3,6 @@
 language: python
 python:
   - "2.7"
-  - "3.5"
   - "3.6"
   - "3.7"
   - "3.8-dev"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/basictracer-3.1.0/CHANGELOG.rst 
new/basictracer-3.2.0/CHANGELOG.rst
--- old/basictracer-3.1.0/CHANGELOG.rst 2019-05-12 22:12:15.000000000 +0200
+++ new/basictracer-3.2.0/CHANGELOG.rst 2021-04-12 23:45:51.000000000 +0200
@@ -3,6 +3,19 @@
 History
 -------
 
+3.2.0 (2021-04-12)
+------------------
+
+- setup.py: Remove test dependency doubles (#44) <John Vandenberg>
+- Do not throw error when no tracing headers are sent (#43) <Logan Capaldo>
+- Stop testing with Python 3.5 <Yuri Shkuro>
+- Provide meaningful error messages when failed to extract headers from 
carrier (#42) <Gabriel Falc??o>
+  - TextPropagator.extract raises SpanContextCorruptedException with
+    more meaningful error messages.
+  - Tracer.start_span validates type of ``references=`` preventing
+    problems for users migrating code from opentracing==1.3.0.
+
+
 3.1.0 (2019-05-12)
 ------------------
 
@@ -94,4 +107,3 @@
 ----------------
 
 - Initial public API
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/basictracer-3.1.0/PKG-INFO 
new/basictracer-3.2.0/PKG-INFO
--- old/basictracer-3.1.0/PKG-INFO      2019-05-12 22:12:36.000000000 +0200
+++ new/basictracer-3.2.0/PKG-INFO      2021-04-12 23:46:44.871994300 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: basictracer
-Version: 3.1.0
+Version: 3.2.0
 Summary: UNKNOWN
 Home-page: https://github.com/opentracing/basictracer-python
 Author: The OpenTracing Authors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/basictracer-3.1.0/README.md 
new/basictracer-3.2.0/README.md
--- old/basictracer-3.1.0/README.md     2019-05-12 22:09:12.000000000 +0200
+++ new/basictracer-3.2.0/README.md     2021-04-12 23:41:04.000000000 +0200
@@ -2,7 +2,10 @@
 
 # Basictracer Python
 
-A python version of the "BasicTracer" reference implementation for OpenTracing.
+A python version of the "BasicTracer" reference implementation for 
OpenTracing.  
+
+The `examples/` directory contains a sample of how the BasicTracer 
+implementation could be used to display spans in the console.
 
 ## Development
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/basictracer-3.1.0/basictracer/text_propagator.py 
new/basictracer-3.2.0/basictracer/text_propagator.py
--- old/basictracer-3.1.0/basictracer/text_propagator.py        2019-05-12 
22:09:12.000000000 +0200
+++ new/basictracer-3.2.0/basictracer/text_propagator.py        2021-04-12 
23:41:04.000000000 +0200
@@ -12,6 +12,37 @@
 field_count = 3
 
 
+def parse_hex_for_field(field_name, value):
+    """parses the hexadecimal value of a field into an integer.
+    Raises SpanContextCorruptedException in case of failure
+    """
+    try:
+        return int(value, 16)
+    except ValueError:
+        msg = '{field_name} got an invalid hexadecimal value {value!r}'
+        msg = msg.format(field_name=field_name, value=value)
+        raise SpanContextCorruptedException(msg)
+
+
+def parse_boolean_for_field(field_name, value):
+    """parses the string value of a field into a boolean.
+    Raises SpanContextCorruptedException in case of failure
+    """
+    if value in ('true', '1'):
+        return True
+    elif value in ('false', '0'):
+        return False
+
+    msg = (
+        '{field} got an invalid value {value!r}, '
+        "should be one of \'true\', \'false\', \'0\', \'1\'"
+    )
+    raise SpanContextCorruptedException(msg.format(
+        value=value,
+        field=field_name_sampled
+    ))
+
+
 class TextPropagator(Propagator):
     """A BasicTracer Propagator for Format.TEXT_MAP."""
 
@@ -31,24 +62,33 @@
             v = carrier[k]
             k = k.lower()
             if k == field_name_span_id:
-                span_id = int(v, 16)
+                span_id = parse_hex_for_field(field_name_span_id, v)
                 count += 1
             elif k == field_name_trace_id:
-                trace_id = int(v, 16)
+                trace_id = parse_hex_for_field(field_name_trace_id, v)
                 count += 1
             elif k == field_name_sampled:
-                if v in ('true', '1'):
-                    sampled = True
-                elif v in ('false', '0'):
-                    sampled = False
-                else:
-                    raise SpanContextCorruptedException()
+                sampled = parse_boolean_for_field(field_name_sampled, v)
                 count += 1
             elif k.startswith(prefix_baggage):
                 baggage[k[len(prefix_baggage):]] = v
 
+        if count == 0:
+            if len(baggage) > 0:
+                raise SpanContextCorruptedException(
+                                'found baggage without required fields')
+
+            return None
+
         if count != field_count:
-            raise SpanContextCorruptedException()
+            msg = (
+                'expected to parse {field_count} fields'
+                ', but parsed {count} instead'
+            )
+            raise SpanContextCorruptedException(msg.format(
+                field_count=field_count,
+                count=count,
+            ))
 
         return SpanContext(
             span_id=span_id,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/basictracer-3.1.0/basictracer/tracer.py 
new/basictracer-3.2.0/basictracer/tracer.py
--- old/basictracer-3.1.0/basictracer/tracer.py 2019-05-12 22:09:12.000000000 
+0200
+++ new/basictracer-3.2.0/basictracer/tracer.py 2021-04-12 23:41:04.000000000 
+0200
@@ -77,6 +77,9 @@
                    start_time=None,
                    ignore_active_span=False):
 
+        if isinstance(references, opentracing.Reference):
+            references = [references]
+
         start_time = time.time() if start_time is None else start_time
 
         # See if we have a parent_ctx in `references`
@@ -87,7 +90,14 @@
                 else child_of.context)
         elif references is not None and len(references) > 0:
             # TODO only the first reference is currently used
-            parent_ctx = references[0].referenced_context
+            first_ref = references[0]
+            if not isinstance(first_ref, opentracing.Reference):
+                msg = (
+                    'references[0] should be a opentracing.Reference '
+                    'objects, got %r instead'
+                )
+                raise TypeError(msg % first_ref)
+            parent_ctx = first_ref.referenced_context
 
         # retrieve the active SpanContext
         if not ignore_active_span and parent_ctx is None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/basictracer-3.1.0/basictracer.egg-info/PKG-INFO 
new/basictracer-3.2.0/basictracer.egg-info/PKG-INFO
--- old/basictracer-3.1.0/basictracer.egg-info/PKG-INFO 2019-05-12 
22:12:36.000000000 +0200
+++ new/basictracer-3.2.0/basictracer.egg-info/PKG-INFO 2021-04-12 
23:46:44.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: basictracer
-Version: 3.1.0
+Version: 3.2.0
 Summary: UNKNOWN
 Home-page: https://github.com/opentracing/basictracer-python
 Author: The OpenTracing Authors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/basictracer-3.1.0/basictracer.egg-info/requires.txt 
new/basictracer-3.2.0/basictracer.egg-info/requires.txt
--- old/basictracer-3.1.0/basictracer.egg-info/requires.txt     2019-05-12 
22:12:36.000000000 +0200
+++ new/basictracer-3.2.0/basictracer.egg-info/requires.txt     2021-04-12 
23:46:44.000000000 +0200
@@ -3,7 +3,6 @@
 six<2.0,>=1.10.0
 
 [tests]
-doubles
 flake8
 flake8-quotes
 mock<1.1.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/basictracer-3.1.0/coverage.xml 
new/basictracer-3.2.0/coverage.xml
--- old/basictracer-3.1.0/coverage.xml  2019-05-12 22:10:53.000000000 +0200
+++ new/basictracer-3.2.0/coverage.xml  2021-04-12 23:42:59.000000000 +0200
@@ -1,324 +1,350 @@
 <?xml version="1.0" ?>
-<coverage branch-rate="0" branches-covered="0" branches-valid="0" 
complexity="0" line-rate="0.9658" lines-covered="254" lines-valid="263" 
timestamp="1557691853652" version="4.5.3">
+<coverage version="5.5" timestamp="1618263779058" lines-valid="289" 
lines-covered="279" line-rate="0.9654" branches-covered="0" branches-valid="0" 
branch-rate="0" complexity="0">
        <!-- Generated by coverage.py: https://coverage.readthedocs.io -->
        <!-- Based on 
https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd
 -->
        <sources>
-               
<source>/Users/yurishkuro/Uber/basictracer-python/basictracer</source>
+               
<source>/Users/ysh/dev/opentracing/basictracer-python/basictracer</source>
        </sources>
        <packages>
-               <package branch-rate="0" complexity="0" line-rate="0.9658" 
name=".">
+               <package name="." line-rate="0.9654" branch-rate="0" 
complexity="0">
                        <classes>
-                               <class branch-rate="0" complexity="0" 
filename="__init__.py" line-rate="1" name="__init__.py">
+                               <class name="__init__.py" 
filename="__init__.py" complexity="0" line-rate="1" branch-rate="0">
                                        <methods/>
                                        <lines>
-                                               <line hits="1" number="1"/>
-                                               <line hits="1" number="3"/>
-                                               <line hits="1" number="4"/>
+                                               <line number="1" hits="1"/>
+                                               <line number="3" hits="1"/>
+                                               <line number="4" hits="1"/>
                                        </lines>
                                </class>
-                               <class branch-rate="0" complexity="0" 
filename="binary_propagator.py" line-rate="0.931" name="binary_propagator.py">
+                               <class name="binary_propagator.py" 
filename="binary_propagator.py" complexity="0" line-rate="0.931" 
branch-rate="0">
                                        <methods/>
                                        <lines>
-                                               <line hits="1" number="1"/>
-                                               <line hits="1" number="3"/>
-                                               <line hits="1" number="4"/>
-                                               <line hits="1" number="5"/>
-                                               <line hits="1" number="7"/>
-                                               <line hits="1" number="8"/>
-                                               <line hits="1" number="10"/>
-                                               <line hits="1" number="13"/>
-                                               <line hits="1" number="16"/>
-                                               <line hits="1" number="17"/>
-                                               <line hits="0" number="18"/>
-                                               <line hits="1" number="19"/>
-                                               <line hits="1" number="20"/>
-                                               <line hits="1" number="21"/>
-                                               <line hits="1" number="22"/>
-                                               <line hits="1" number="23"/>
-                                               <line hits="1" number="24"/>
-                                               <line hits="1" number="25"/>
-                                               <line hits="1" number="28"/>
-                                               <line hits="1" number="29"/>
-                                               <line hits="1" number="31"/>
-                                               <line hits="1" number="32"/>
-                                               <line hits="0" number="33"/>
-                                               <line hits="1" number="34"/>
-                                               <line hits="1" number="35"/>
-                                               <line hits="1" number="36"/>
-                                               <line hits="1" number="37"/>
-                                               <line hits="1" number="38"/>
-                                               <line hits="1" number="40"/>
+                                               <line number="1" hits="1"/>
+                                               <line number="3" hits="1"/>
+                                               <line number="4" hits="1"/>
+                                               <line number="5" hits="1"/>
+                                               <line number="7" hits="1"/>
+                                               <line number="8" hits="1"/>
+                                               <line number="10" hits="1"/>
+                                               <line number="13" hits="1"/>
+                                               <line number="16" hits="1"/>
+                                               <line number="17" hits="1"/>
+                                               <line number="18" hits="0"/>
+                                               <line number="19" hits="1"/>
+                                               <line number="20" hits="1"/>
+                                               <line number="21" hits="1"/>
+                                               <line number="22" hits="1"/>
+                                               <line number="23" hits="1"/>
+                                               <line number="24" hits="1"/>
+                                               <line number="25" hits="1"/>
+                                               <line number="28" hits="1"/>
+                                               <line number="29" hits="1"/>
+                                               <line number="31" hits="1"/>
+                                               <line number="32" hits="1"/>
+                                               <line number="33" hits="0"/>
+                                               <line number="34" hits="1"/>
+                                               <line number="35" hits="1"/>
+                                               <line number="36" hits="1"/>
+                                               <line number="37" hits="1"/>
+                                               <line number="38" hits="1"/>
+                                               <line number="40" hits="1"/>
                                        </lines>
                                </class>
-                               <class branch-rate="0" complexity="0" 
filename="context.py" line-rate="1" name="context.py">
+                               <class name="context.py" filename="context.py" 
complexity="0" line-rate="1" branch-rate="0">
                                        <methods/>
                                        <lines>
-                                               <line hits="1" number="1"/>
-                                               <line hits="1" number="3"/>
-                                               <line hits="1" number="6"/>
-                                               <line hits="1" number="12"/>
-                                               <line hits="1" number="18"/>
-                                               <line hits="1" number="19"/>
-                                               <line hits="1" number="20"/>
-                                               <line hits="1" number="21"/>
-                                               <line hits="1" number="23"/>
-                                               <line hits="1" number="25"/>
-                                               <line hits="1" number="27"/>
-                                               <line hits="1" number="28"/>
-                                               <line hits="1" number="29"/>
-                                               <line hits="1" number="30"/>
+                                               <line number="1" hits="1"/>
+                                               <line number="3" hits="1"/>
+                                               <line number="6" hits="1"/>
+                                               <line number="12" hits="1"/>
+                                               <line number="18" hits="1"/>
+                                               <line number="19" hits="1"/>
+                                               <line number="20" hits="1"/>
+                                               <line number="21" hits="1"/>
+                                               <line number="23" hits="1"/>
+                                               <line number="24" hits="1"/>
+                                               <line number="25" hits="1"/>
+                                               <line number="27" hits="1"/>
+                                               <line number="28" hits="1"/>
+                                               <line number="29" hits="1"/>
+                                               <line number="30" hits="1"/>
                                        </lines>
                                </class>
-                               <class branch-rate="0" complexity="0" 
filename="propagator.py" line-rate="0.75" name="propagator.py">
+                               <class name="propagator.py" 
filename="propagator.py" complexity="0" line-rate="0.8" branch-rate="0">
                                        <methods/>
                                        <lines>
-                                               <line hits="1" number="1"/>
-                                               <line hits="1" number="3"/>
-                                               <line hits="1" number="4"/>
-                                               <line hits="1" number="7"/>
-                                               <line hits="1" number="9"/>
-                                               <line hits="0" number="11"/>
-                                               <line hits="1" number="13"/>
-                                               <line hits="0" number="15"/>
+                                               <line number="1" hits="1"/>
+                                               <line number="3" hits="1"/>
+                                               <line number="4" hits="1"/>
+                                               <line number="7" hits="1"/>
+                                               <line number="9" hits="1"/>
+                                               <line number="10" hits="1"/>
+                                               <line number="11" hits="0"/>
+                                               <line number="13" hits="1"/>
+                                               <line number="14" hits="1"/>
+                                               <line number="15" hits="0"/>
                                        </lines>
                                </class>
-                               <class branch-rate="0" complexity="0" 
filename="recorder.py" line-rate="0.9167" name="recorder.py">
+                               <class name="recorder.py" 
filename="recorder.py" complexity="0" line-rate="0.9231" branch-rate="0">
                                        <methods/>
                                        <lines>
-                                               <line hits="1" number="1"/>
-                                               <line hits="1" number="3"/>
-                                               <line hits="1" number="4"/>
-                                               <line hits="1" number="7"/>
-                                               <line hits="1" number="11"/>
-                                               <line hits="0" number="18"/>
-                                               <line hits="1" number="21"/>
-                                               <line hits="1" number="26"/>
-                                               <line hits="1" number="27"/>
-                                               <line hits="1" number="28"/>
-                                               <line hits="1" number="30"/>
-                                               <line hits="1" number="31"/>
-                                               <line hits="1" number="32"/>
-                                               <line hits="1" number="34"/>
-                                               <line hits="1" number="35"/>
-                                               <line hits="1" number="36"/>
-                                               <line hits="1" number="39"/>
-                                               <line hits="1" number="45"/>
-                                               <line hits="0" number="47"/>
-                                               <line hits="1" number="50"/>
-                                               <line hits="1" number="53"/>
-                                               <line hits="1" number="54"/>
-                                               <line hits="1" number="56"/>
-                                               <line hits="1" number="57"/>
+                                               <line number="1" hits="1"/>
+                                               <line number="3" hits="1"/>
+                                               <line number="4" hits="1"/>
+                                               <line number="7" hits="1"/>
+                                               <line number="11" hits="1"/>
+                                               <line number="12" hits="1"/>
+                                               <line number="18" hits="0"/>
+                                               <line number="21" hits="1"/>
+                                               <line number="26" hits="1"/>
+                                               <line number="27" hits="1"/>
+                                               <line number="28" hits="1"/>
+                                               <line number="30" hits="1"/>
+                                               <line number="31" hits="1"/>
+                                               <line number="32" hits="1"/>
+                                               <line number="34" hits="1"/>
+                                               <line number="35" hits="1"/>
+                                               <line number="36" hits="1"/>
+                                               <line number="39" hits="1"/>
+                                               <line number="45" hits="1"/>
+                                               <line number="46" hits="1"/>
+                                               <line number="47" hits="0"/>
+                                               <line number="50" hits="1"/>
+                                               <line number="53" hits="1"/>
+                                               <line number="54" hits="1"/>
+                                               <line number="56" hits="1"/>
+                                               <line number="57" hits="1"/>
                                        </lines>
                                </class>
-                               <class branch-rate="0" complexity="0" 
filename="span.py" line-rate="0.9796" name="span.py">
+                               <class name="span.py" filename="span.py" 
complexity="0" line-rate="0.9796" branch-rate="0">
                                        <methods/>
                                        <lines>
-                                               <line hits="1" number="1"/>
-                                               <line hits="1" number="3"/>
-                                               <line hits="1" number="4"/>
-                                               <line hits="1" number="6"/>
-                                               <line hits="1" number="7"/>
-                                               <line hits="1" number="10"/>
-                                               <line hits="1" number="14"/>
-                                               <line hits="1" number="22"/>
-                                               <line hits="1" number="23"/>
-                                               <line hits="1" number="24"/>
-                                               <line hits="1" number="26"/>
-                                               <line hits="1" number="27"/>
-                                               <line hits="1" number="28"/>
-                                               <line hits="1" number="29"/>
-                                               <line hits="1" number="30"/>
-                                               <line hits="1" number="31"/>
-                                               <line hits="1" number="33"/>
-                                               <line hits="1" number="34"/>
-                                               <line hits="1" number="35"/>
-                                               <line hits="1" number="36"/>
-                                               <line hits="1" number="38"/>
-                                               <line hits="1" number="39"/>
-                                               <line hits="1" number="40"/>
-                                               <line hits="1" number="41"/>
-                                               <line hits="1" number="42"/>
-                                               <line hits="0" number="43"/>
-                                               <line hits="1" number="44"/>
-                                               <line hits="1" number="45"/>
-                                               <line hits="1" number="47"/>
-                                               <line hits="1" number="48"/>
-                                               <line hits="1" number="49"/>
-                                               <line hits="1" number="50"/>
-                                               <line hits="1" number="52"/>
-                                               <line hits="1" number="53"/>
-                                               <line hits="1" number="54"/>
-                                               <line hits="1" number="55"/>
-                                               <line hits="1" number="56"/>
-                                               <line hits="1" number="58"/>
-                                               <line hits="1" number="59"/>
-                                               <line hits="1" number="60"/>
-                                               <line hits="1" number="61"/>
-                                               <line hits="1" number="62"/>
-                                               <line hits="1" number="64"/>
-                                               <line hits="1" number="65"/>
-                                               <line hits="1" number="66"/>
-                                               <line hits="1" number="69"/>
-                                               <line hits="1" number="70"/>
-                                               <line hits="1" number="74"/>
-                                               <line hits="1" number="75"/>
+                                               <line number="1" hits="1"/>
+                                               <line number="3" hits="1"/>
+                                               <line number="4" hits="1"/>
+                                               <line number="6" hits="1"/>
+                                               <line number="7" hits="1"/>
+                                               <line number="10" hits="1"/>
+                                               <line number="14" hits="1"/>
+                                               <line number="22" hits="1"/>
+                                               <line number="23" hits="1"/>
+                                               <line number="24" hits="1"/>
+                                               <line number="26" hits="1"/>
+                                               <line number="27" hits="1"/>
+                                               <line number="28" hits="1"/>
+                                               <line number="29" hits="1"/>
+                                               <line number="30" hits="1"/>
+                                               <line number="31" hits="1"/>
+                                               <line number="33" hits="1"/>
+                                               <line number="34" hits="1"/>
+                                               <line number="35" hits="1"/>
+                                               <line number="36" hits="1"/>
+                                               <line number="38" hits="1"/>
+                                               <line number="39" hits="1"/>
+                                               <line number="40" hits="1"/>
+                                               <line number="41" hits="1"/>
+                                               <line number="42" hits="1"/>
+                                               <line number="43" hits="0"/>
+                                               <line number="44" hits="1"/>
+                                               <line number="45" hits="1"/>
+                                               <line number="47" hits="1"/>
+                                               <line number="48" hits="1"/>
+                                               <line number="49" hits="1"/>
+                                               <line number="50" hits="1"/>
+                                               <line number="52" hits="1"/>
+                                               <line number="53" hits="1"/>
+                                               <line number="54" hits="1"/>
+                                               <line number="55" hits="1"/>
+                                               <line number="56" hits="1"/>
+                                               <line number="58" hits="1"/>
+                                               <line number="59" hits="1"/>
+                                               <line number="60" hits="1"/>
+                                               <line number="61" hits="1"/>
+                                               <line number="62" hits="1"/>
+                                               <line number="64" hits="1"/>
+                                               <line number="65" hits="1"/>
+                                               <line number="66" hits="1"/>
+                                               <line number="69" hits="1"/>
+                                               <line number="70" hits="1"/>
+                                               <line number="74" hits="1"/>
+                                               <line number="75" hits="1"/>
                                        </lines>
                                </class>
-                               <class branch-rate="0" complexity="0" 
filename="text_propagator.py" line-rate="0.9535" name="text_propagator.py">
+                               <class name="text_propagator.py" 
filename="text_propagator.py" complexity="0" line-rate="1" branch-rate="0">
                                        <methods/>
                                        <lines>
-                                               <line hits="1" number="1"/>
-                                               <line hits="1" number="3"/>
-                                               <line hits="1" number="4"/>
-                                               <line hits="1" number="5"/>
-                                               <line hits="1" number="7"/>
-                                               <line hits="1" number="8"/>
-                                               <line hits="1" number="9"/>
-                                               <line hits="1" number="10"/>
-                                               <line hits="1" number="11"/>
-                                               <line hits="1" number="12"/>
-                                               <line hits="1" number="15"/>
-                                               <line hits="1" number="18"/>
-                                               <line hits="1" number="19"/>
-                                               <line hits="1" number="20"/>
-                                               <line hits="1" number="21"/>
-                                               <line hits="1" number="22"/>
-                                               <line hits="1" number="23"/>
-                                               <line hits="1" number="24"/>
-                                               <line hits="1" number="26"/>
-                                               <line hits="1" number="27"/>
-                                               <line hits="1" number="28"/>
-                                               <line hits="1" number="29"/>
-                                               <line hits="1" number="30"/>
-                                               <line hits="1" number="31"/>
-                                               <line hits="1" number="32"/>
-                                               <line hits="1" number="33"/>
-                                               <line hits="1" number="34"/>
-                                               <line hits="1" number="35"/>
-                                               <line hits="1" number="36"/>
-                                               <line hits="1" number="37"/>
-                                               <line hits="1" number="38"/>
-                                               <line hits="1" number="39"/>
-                                               <line hits="1" number="40"/>
-                                               <line hits="1" number="41"/>
-                                               <line hits="1" number="42"/>
-                                               <line hits="1" number="43"/>
-                                               <line hits="0" number="45"/>
-                                               <line hits="1" number="46"/>
-                                               <line hits="1" number="47"/>
-                                               <line hits="1" number="48"/>
-                                               <line hits="1" number="50"/>
-                                               <line hits="0" number="51"/>
-                                               <line hits="1" number="53"/>
+                                               <line number="1" hits="1"/>
+                                               <line number="3" hits="1"/>
+                                               <line number="4" hits="1"/>
+                                               <line number="5" hits="1"/>
+                                               <line number="7" hits="1"/>
+                                               <line number="8" hits="1"/>
+                                               <line number="9" hits="1"/>
+                                               <line number="10" hits="1"/>
+                                               <line number="11" hits="1"/>
+                                               <line number="12" hits="1"/>
+                                               <line number="15" hits="1"/>
+                                               <line number="19" hits="1"/>
+                                               <line number="20" hits="1"/>
+                                               <line number="21" hits="1"/>
+                                               <line number="22" hits="1"/>
+                                               <line number="23" hits="1"/>
+                                               <line number="24" hits="1"/>
+                                               <line number="27" hits="1"/>
+                                               <line number="31" hits="1"/>
+                                               <line number="32" hits="1"/>
+                                               <line number="33" hits="1"/>
+                                               <line number="34" hits="1"/>
+                                               <line number="36" hits="1"/>
+                                               <line number="40" hits="1"/>
+                                               <line number="46" hits="1"/>
+                                               <line number="49" hits="1"/>
+                                               <line number="50" hits="1"/>
+                                               <line number="51" hits="1"/>
+                                               <line number="52" hits="1"/>
+                                               <line number="53" hits="1"/>
+                                               <line number="54" hits="1"/>
+                                               <line number="55" hits="1"/>
+                                               <line number="57" hits="1"/>
+                                               <line number="58" hits="1"/>
+                                               <line number="59" hits="1"/>
+                                               <line number="60" hits="1"/>
+                                               <line number="61" hits="1"/>
+                                               <line number="62" hits="1"/>
+                                               <line number="63" hits="1"/>
+                                               <line number="64" hits="1"/>
+                                               <line number="65" hits="1"/>
+                                               <line number="66" hits="1"/>
+                                               <line number="67" hits="1"/>
+                                               <line number="68" hits="1"/>
+                                               <line number="69" hits="1"/>
+                                               <line number="70" hits="1"/>
+                                               <line number="71" hits="1"/>
+                                               <line number="72" hits="1"/>
+                                               <line number="73" hits="1"/>
+                                               <line number="74" hits="1"/>
+                                               <line number="76" hits="1"/>
+                                               <line number="77" hits="1"/>
+                                               <line number="78" hits="1"/>
+                                               <line number="81" hits="1"/>
+                                               <line number="83" hits="1"/>
+                                               <line number="84" hits="1"/>
+                                               <line number="88" hits="1"/>
+                                               <line number="93" hits="1"/>
                                        </lines>
                                </class>
-                               <class branch-rate="0" complexity="0" 
filename="tracer.py" line-rate="1" name="tracer.py">
+                               <class name="tracer.py" filename="tracer.py" 
complexity="0" line-rate="0.9545" branch-rate="0">
                                        <methods/>
                                        <lines>
-                                               <line hits="1" number="1"/>
-                                               <line hits="1" number="3"/>
-                                               <line hits="1" number="4"/>
-                                               <line hits="1" number="5"/>
-                                               <line hits="1" number="6"/>
-                                               <line hits="1" number="7"/>
-                                               <line hits="1" number="8"/>
-                                               <line hits="1" number="9"/>
-                                               <line hits="1" number="10"/>
-                                               <line hits="1" number="13"/>
-                                               <line hits="1" number="15"/>
-                                               <line hits="1" number="27"/>
-                                               <line hits="1" number="29"/>
-                                               <line hits="1" number="31"/>
-                                               <line hits="1" number="32"/>
-                                               <line hits="1" number="33"/>
-                                               <line hits="1" number="35"/>
-                                               <line hits="1" number="42"/>
-                                               <line hits="1" number="44"/>
-                                               <line hits="1" number="45"/>
-                                               <line hits="1" number="46"/>
-                                               <line hits="1" number="47"/>
-                                               <line hits="1" number="48"/>
-                                               <line hits="1" number="49"/>
-                                               <line hits="1" number="51"/>
-                                               <line hits="1" number="61"/>
-                                               <line hits="1" number="70"/>
-                                               <line hits="1" number="72"/>
-                                               <line hits="1" number="80"/>
-                                               <line hits="1" number="83"/>
-                                               <line hits="1" number="84"/>
-                                               <line hits="1" number="85"/>
-                                               <line hits="1" number="88"/>
-                                               <line hits="1" number="90"/>
-                                               <line hits="1" number="93"/>
-                                               <line hits="1" number="94"/>
-                                               <line hits="1" number="95"/>
-                                               <line hits="1" number="96"/>
-                                               <line hits="1" number="99"/>
-                                               <line hits="1" number="100"/>
-                                               <line hits="1" number="101"/>
-                                               <line hits="1" number="102"/>
-                                               <line hits="1" number="103"/>
-                                               <line hits="1" number="104"/>
-                                               <line hits="1" number="106"/>
-                                               <line hits="1" number="107"/>
-                                               <line hits="1" number="110"/>
-                                               <line hits="1" number="118"/>
-                                               <line hits="1" number="119"/>
-                                               <line hits="1" number="120"/>
-                                               <line hits="1" number="122"/>
-                                               <line hits="1" number="124"/>
-                                               <line hits="1" number="125"/>
-                                               <line hits="1" number="126"/>
-                                               <line hits="1" number="128"/>
-                                               <line hits="1" number="130"/>
-                                               <line hits="1" number="131"/>
-                                               <line hits="1" number="134"/>
-                                               <line hits="1" number="135"/>
-                                               <line hits="1" number="136"/>
+                                               <line number="1" hits="1"/>
+                                               <line number="3" hits="1"/>
+                                               <line number="4" hits="1"/>
+                                               <line number="5" hits="1"/>
+                                               <line number="6" hits="1"/>
+                                               <line number="7" hits="1"/>
+                                               <line number="8" hits="1"/>
+                                               <line number="9" hits="1"/>
+                                               <line number="10" hits="1"/>
+                                               <line number="13" hits="1"/>
+                                               <line number="15" hits="1"/>
+                                               <line number="27" hits="1"/>
+                                               <line number="29" hits="1"/>
+                                               <line number="31" hits="1"/>
+                                               <line number="32" hits="1"/>
+                                               <line number="33" hits="1"/>
+                                               <line number="35" hits="1"/>
+                                               <line number="42" hits="1"/>
+                                               <line number="44" hits="1"/>
+                                               <line number="45" hits="1"/>
+                                               <line number="46" hits="1"/>
+                                               <line number="47" hits="1"/>
+                                               <line number="48" hits="1"/>
+                                               <line number="49" hits="1"/>
+                                               <line number="51" hits="1"/>
+                                               <line number="61" hits="1"/>
+                                               <line number="70" hits="1"/>
+                                               <line number="72" hits="1"/>
+                                               <line number="80" hits="1"/>
+                                               <line number="81" hits="0"/>
+                                               <line number="83" hits="1"/>
+                                               <line number="86" hits="1"/>
+                                               <line number="87" hits="1"/>
+                                               <line number="88" hits="1"/>
+                                               <line number="91" hits="1"/>
+                                               <line number="93" hits="1"/>
+                                               <line number="94" hits="1"/>
+                                               <line number="95" hits="0"/>
+                                               <line number="99" hits="0"/>
+                                               <line number="100" hits="1"/>
+                                               <line number="103" hits="1"/>
+                                               <line number="104" hits="1"/>
+                                               <line number="105" hits="1"/>
+                                               <line number="106" hits="1"/>
+                                               <line number="109" hits="1"/>
+                                               <line number="110" hits="1"/>
+                                               <line number="111" hits="1"/>
+                                               <line number="112" hits="1"/>
+                                               <line number="113" hits="1"/>
+                                               <line number="114" hits="1"/>
+                                               <line number="116" hits="1"/>
+                                               <line number="117" hits="1"/>
+                                               <line number="120" hits="1"/>
+                                               <line number="128" hits="1"/>
+                                               <line number="129" hits="1"/>
+                                               <line number="130" hits="1"/>
+                                               <line number="132" hits="1"/>
+                                               <line number="134" hits="1"/>
+                                               <line number="135" hits="1"/>
+                                               <line number="136" hits="1"/>
+                                               <line number="138" hits="1"/>
+                                               <line number="140" hits="1"/>
+                                               <line number="141" hits="1"/>
+                                               <line number="144" hits="1"/>
+                                               <line number="145" hits="1"/>
+                                               <line number="146" hits="1"/>
                                        </lines>
                                </class>
-                               <class branch-rate="0" complexity="0" 
filename="util.py" line-rate="1" name="util.py">
+                               <class name="util.py" filename="util.py" 
complexity="0" line-rate="1" branch-rate="0">
                                        <methods/>
                                        <lines>
-                                               <line hits="1" number="1"/>
-                                               <line hits="1" number="2"/>
-                                               <line hits="1" number="3"/>
-                                               <line hits="1" number="6"/>
-                                               <line hits="1" number="10"/>
-                                               <line hits="1" number="13"/>
-                                               <line hits="1" number="17"/>
-                                               <line hits="1" number="18"/>
-                                               <line hits="1" number="19"/>
-                                               <line hits="1" number="20"/>
-                                               <line hits="1" number="21"/>
+                                               <line number="1" hits="1"/>
+                                               <line number="2" hits="1"/>
+                                               <line number="3" hits="1"/>
+                                               <line number="6" hits="1"/>
+                                               <line number="10" hits="1"/>
+                                               <line number="13" hits="1"/>
+                                               <line number="17" hits="1"/>
+                                               <line number="18" hits="1"/>
+                                               <line number="19" hits="1"/>
+                                               <line number="20" hits="1"/>
+                                               <line number="21" hits="1"/>
                                        </lines>
                                </class>
-                               <class branch-rate="0" complexity="0" 
filename="wire_pb2.py" line-rate="1" name="wire_pb2.py">
+                               <class name="wire_pb2.py" 
filename="wire_pb2.py" complexity="0" line-rate="1" branch-rate="0">
                                        <methods/>
                                        <lines>
-                                               <line hits="1" number="4"/>
-                                               <line hits="1" number="5"/>
-                                               <line hits="1" number="6"/>
-                                               <line hits="1" number="7"/>
-                                               <line hits="1" number="8"/>
-                                               <line hits="1" number="9"/>
-                                               <line hits="1" number="10"/>
-                                               <line hits="1" number="13"/>
-                                               <line hits="1" number="18"/>
-                                               <line hits="1" number="24"/>
-                                               <line hits="1" number="29"/>
-                                               <line hits="1" number="66"/>
-                                               <line hits="1" number="117"/>
-                                               <line hits="1" number="118"/>
-                                               <line hits="1" number="119"/>
-                                               <line hits="1" number="121"/>
-                                               <line hits="1" number="133"/>
-                                               <line hits="1" number="134"/>
-                                               <line hits="1" number="137"/>
-                                               <line hits="1" number="138"/>
-                                               <line hits="1" number="139"/>
-                                               <line hits="1" number="140"/>
+                                               <line number="4" hits="1"/>
+                                               <line number="5" hits="1"/>
+                                               <line number="6" hits="1"/>
+                                               <line number="7" hits="1"/>
+                                               <line number="8" hits="1"/>
+                                               <line number="9" hits="1"/>
+                                               <line number="10" hits="1"/>
+                                               <line number="13" hits="1"/>
+                                               <line number="18" hits="1"/>
+                                               <line number="24" hits="1"/>
+                                               <line number="29" hits="1"/>
+                                               <line number="66" hits="1"/>
+                                               <line number="117" hits="1"/>
+                                               <line number="118" hits="1"/>
+                                               <line number="119" hits="1"/>
+                                               <line number="121" hits="1"/>
+                                               <line number="133" hits="1"/>
+                                               <line number="134" hits="1"/>
+                                               <line number="137" hits="1"/>
+                                               <line number="138" hits="1"/>
+                                               <line number="139" hits="1"/>
+                                               <line number="140" hits="1"/>
                                        </lines>
                                </class>
                        </classes>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/basictracer-3.1.0/setup.py 
new/basictracer-3.2.0/setup.py
--- old/basictracer-3.1.0/setup.py      2019-05-12 22:12:15.000000000 +0200
+++ new/basictracer-3.2.0/setup.py      2021-04-12 23:45:51.000000000 +0200
@@ -2,7 +2,7 @@
 
 setup(
     name='basictracer',
-    version='3.1.0',
+    version='3.2.0',
     author='The OpenTracing Authors',
     author_email='i...@opentracing.io',
     license='MIT',
@@ -30,7 +30,6 @@
     ],
     extras_require={
         'tests': [
-            'doubles',
             'flake8',
             'flake8-quotes',
             'mock<1.1.0',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/basictracer-3.1.0/tests/test_propagation.py 
new/basictracer-3.2.0/tests/test_propagation.py
--- old/basictracer-3.1.0/tests/test_propagation.py     2019-05-12 
22:09:12.000000000 +0200
+++ new/basictracer-3.2.0/tests/test_propagation.py     2021-04-12 
23:41:04.000000000 +0200
@@ -1,5 +1,9 @@
 import pytest
-from opentracing import Format, UnsupportedFormatException
+from opentracing import (
+    Format,
+    UnsupportedFormatException,
+    SpanContextCorruptedException,
+)
 from basictracer import BasicTracer
 
 
@@ -52,3 +56,150 @@
     assert child.context.sampled == sp.context.sampled
     assert child.context.baggage == sp.context.baggage
     assert child.parent_id == sp.context.span_id
+
+
+def test_span_missing_all_fields():
+    tracer = BasicTracer()
+    tracer.register_required_propagators()
+
+    # Given an empty carrier
+    headers = {}
+
+    # When .extract is called
+    ctx = tracer.extract(Format.TEXT_MAP, headers)
+
+    # Then it should return None
+    assert ctx is None
+
+
+def test_span_missing_all_headers():
+    tracer = BasicTracer()
+    tracer.register_required_propagators()
+
+    # Given an carrier with no ot-headers
+    headers = {
+       'Content-Type': 'text/html',
+       'Authorization': 'Digest 123456',
+    }
+
+    # When .extract is called
+    ctx = tracer.extract(Format.TEXT_MAP, headers)
+
+    # Then it should return None
+    assert ctx is None
+
+
+def test_span_missing_one_field():
+    tracer = BasicTracer()
+    tracer.register_required_propagators()
+
+    # Given a carrier missing ot-tracer-sampled:
+    headers = {
+        'ot-tracer-spanid': 'deadbeaf',
+        'ot-tracer-traceid': '1c3b00da',
+    }
+
+    # When .extract is called
+    with pytest.raises(SpanContextCorruptedException) as exc:
+        tracer.extract(Format.TEXT_MAP, headers)
+
+    # Then it should raise SpanContextCorruptedException
+    assert str(exc.value) == 'expected to parse 3 fields, but parsed 2 instead'
+
+
+def test_span_missing_two_fields():
+    tracer = BasicTracer()
+    tracer.register_required_propagators()
+
+    # Given a carrier with only ot-tracer-traceid:
+    headers = {
+        'ot-tracer-traceid': '1c3b00da',
+    }
+
+    # When .extract is called
+    with pytest.raises(SpanContextCorruptedException) as exc:
+        tracer.extract(Format.TEXT_MAP, headers)
+
+    # Then it should raise SpanContextCorruptedException
+    assert str(exc.value) == 'expected to parse 3 fields, but parsed 1 instead'
+
+
+def test_span_with_baggage_only():
+    tracer = BasicTracer()
+    tracer.register_required_propagators()
+
+    # Given a carrier with only baggage:
+    headers = {
+        'ot-baggage-example': 'ok',
+    }
+
+    # When .extract is called
+    with pytest.raises(SpanContextCorruptedException) as exc:
+        tracer.extract(Format.TEXT_MAP, headers)
+
+    # Then it should raise SpanContextCorruptedException
+    assert str(exc.value) == 'found baggage without required fields'
+
+
+def test_span_corrupted_invalid_sampled_value():
+    tracer = BasicTracer()
+    tracer.register_required_propagators()
+
+    # Given a carrier with invalid "ot-tracer-sampled" value
+    headers = {
+        'ot-tracer-spanid': 'deadbeef',
+        'ot-tracer-sampled': 'notbool',
+        'ot-tracer-traceid': '1c3b00da',
+    }
+
+    # When .extract is called
+    with pytest.raises(SpanContextCorruptedException) as exc:
+        tracer.extract(Format.TEXT_MAP, headers)
+
+    # Then it should raise SpanContextCorruptedException
+    assert str(exc.value) == (
+        "ot-tracer-sampled got an invalid value 'notbool', "
+        "should be one of 'true', 'false', '0', '1'"
+    )
+
+
+def test_span_corrupted_invalid_spanid_value():
+    tracer = BasicTracer()
+    tracer.register_required_propagators()
+
+    # Given a carrier with invalid "ot-tracer-spanid" value
+    headers = {
+        'ot-tracer-spanid': 'nothex',
+        'ot-tracer-sampled': 'false',
+        'ot-tracer-traceid': '1c3b00da',
+    }
+
+    # When .extract is called
+    with pytest.raises(SpanContextCorruptedException) as exc:
+        tracer.extract(Format.TEXT_MAP, headers)
+
+    # Then it should raise SpanContextCorruptedException
+    assert str(exc.value) == (
+        "ot-tracer-spanid got an invalid hexadecimal value 'nothex'"
+    )
+
+
+def test_span_corrupted_invalid_traceid_value():
+    tracer = BasicTracer()
+    tracer.register_required_propagators()
+
+    # Given a carrier with invalid 'ot-tracer-traceid' value
+    headers = {
+        'ot-tracer-traceid': 'nothex',
+        'ot-tracer-sampled': 'false',
+        'ot-tracer-spanid': '1c3b00da',
+    }
+
+    # When .extract is called
+    with pytest.raises(SpanContextCorruptedException) as exc:
+        tracer.extract(Format.TEXT_MAP, headers)
+
+    # Then it should raise SpanContextCorruptedException
+    assert str(exc.value) == (
+        "ot-tracer-traceid got an invalid hexadecimal value 'nothex'"
+    )

Reply via email to