Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
1605ace
Support W3C Baggage spec.
CodeBlanch Aug 9, 2020
37f6df5
Moved baggage propagation to its own ITextFormat. Removed IsInjected.
CodeBlanch Aug 9, 2020
a34a80c
updating some tests
eddynaka Aug 9, 2020
7483e90
creating nw files
eddynaka Aug 9, 2020
4d7fd7d
updating files
eddynaka Aug 9, 2020
ec65bc0
buildable in release
eddynaka Aug 9, 2020
1964da6
adding baggage tests
eddynaka Aug 10, 2020
685c298
updating tests
eddynaka Aug 10, 2020
a26e2ce
updating default textformat for http instrumentation
eddynaka Aug 10, 2020
de2898e
Removed a few null checks.
CodeBlanch Aug 11, 2020
1ab0969
Removed DistributedContext. Drive CorrelationContext off of Activity.…
CodeBlanch Aug 11, 2020
3a1f65b
Merge branch 'master' into baggage
eddynaka Aug 11, 2020
387406a
Merge branch 'baggage' of https://github.com/CodeBlanch/opentelemetry…
eddynaka Aug 11, 2020
6454533
updating issues after merge
eddynaka Aug 11, 2020
a07482c
updating based on sanity check
eddynaka Aug 11, 2020
0fecef0
updating baggage test
eddynaka Aug 11, 2020
2a02388
updating tests
eddynaka Aug 11, 2020
6f5f2f1
reiley's comments
eddynaka Aug 11, 2020
90ca374
move to using
eddynaka Aug 11, 2020
a5196e7
Merge branch 'master' into baggage
CodeBlanch Aug 12, 2020
9b815e7
Updates for http-in and http-out. Updated CHANGELOGs.
CodeBlanch Aug 12, 2020
0503bbb
Merge branch 'master' into baggage
eddynaka Aug 12, 2020
172dd1b
Adding tests.
CodeBlanch Aug 13, 2020
f48bc05
Merge branch 'master' into baggage
eddynaka Aug 13, 2020
f9a3f8b
updating correlation context
eddynaka Aug 13, 2020
2f6a3ff
Added test for TraceContextFormat + BaggageFormat used together.
CodeBlanch Aug 14, 2020
80c56b8
Merging from master.
CodeBlanch Aug 14, 2020
34c6667
Fixed broken tests.
CodeBlanch Aug 14, 2020
1a8a922
Code review.
CodeBlanch Aug 14, 2020
8c95541
Test fixup.
CodeBlanch Aug 14, 2020
302267f
updating order
eddynaka Aug 14, 2020
bb25ad0
updating tests
eddynaka Aug 14, 2020
374b4b0
updating tests, adding dispose, clearing objects
eddynaka Aug 14, 2020
e913a56
Merge branch 'master' into baggage
CodeBlanch Aug 15, 2020
f8c967b
Merge branch 'master' into baggage
cijothomas Aug 18, 2020
c3f05f8
Merge branch 'master' into baggage
cijothomas Aug 18, 2020
4fb391a
updating changelog
eddynaka Aug 18, 2020
eb85991
Use "Baggage" instead of "baggage" as the header name.
CodeBlanch Aug 18, 2020
1b3b49f
Added some basic support for the Baggage limits specified in the spec.
CodeBlanch Aug 18, 2020
0a283bf
Fixed and improved ITextFormat log messages.
CodeBlanch Aug 18, 2020
3c2e9fd
Rename TextFormatContext -> PropagationContext.
CodeBlanch Aug 18, 2020
07b8b46
Updated ITextFormat implementations so they don't double-extract.
CodeBlanch Aug 18, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
adding baggage tests
  • Loading branch information
eddynaka committed Aug 10, 2020
commit 1964da6e24fd31b09255365920a57879c16c5e8b
9 changes: 7 additions & 2 deletions src/OpenTelemetry.Api/Context/Propagation/BaggageFormat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,9 @@ public void Inject<T>(TextFormatContext context, T carrier, Action<T, string, st
return;
}

using IEnumerator<KeyValuePair<string, string>> e = context.ActivityBaggage.GetEnumerator();
using IEnumerator<KeyValuePair<string, string>> e = context.ActivityBaggage?.GetEnumerator();

if (e.MoveNext())
if (e != null && e.MoveNext())
{
StringBuilder baggage = new StringBuilder();
do
Expand All @@ -118,6 +118,11 @@ internal static bool TryExtractTracestateBaggage(string[] baggageCollection, out
break;
}

if (string.IsNullOrEmpty(item))
{
continue;
}

foreach (var pair in item.Split(','))
{
baggageLength += pair.Length + 1; // pair and comma
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
// <copyright file="BaggageFormatTest.cs" company="OpenTelemetry Authors">
// 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.
// </copyright>
using System;
using System.Collections.Generic;
using System.Linq;
using Xunit;

namespace OpenTelemetry.Context.Propagation.Test
{
public class BaggageFormatTest
{
private static readonly Func<IDictionary<string, string>, string, IEnumerable<string>> Getter =
(d, k) =>
{
d.TryGetValue(k, out var v);
return new string[] { v };
};

private static readonly Action<IDictionary<string, string>, string, string> Setter = (carrier, name, value) =>
{
carrier[name] = value;
};

private readonly BaggageFormat baggage = new BaggageFormat();

[Fact]
public void ValidateFieldsProperty()
{
Assert.Equal(new HashSet<string> { "baggage" }, this.baggage.Fields);
Assert.Single(this.baggage.Fields);
}

[Fact]
public void ValidateDefaultCarrierExtraction()
{
var textFormatContext = this.baggage.Extract<string>(default, null, null);
Assert.Equal(default, textFormatContext);
}

[Fact]
public void ValidateDefaultGetterExtraction()
{
var carrier = new Dictionary<string, string>();
var textFormatContext = this.baggage.Extract(default, carrier, null);
Assert.Equal(default, textFormatContext);
}

[Fact]
public void ValidateNoBaggageExtraction()
{
var carrier = new Dictionary<string, string>();
var textFormatContext = this.baggage.Extract(default, carrier, Getter);
Assert.Equal(default, textFormatContext);
}

[Fact]
public void ValidateOneBaggageExtraction()
{
var carrier = new Dictionary<string, string>
{
{ "baggage", "name=test" },
};
var textFormatContext = this.baggage.Extract(default, carrier, Getter);
Assert.False(textFormatContext == default);
Assert.Single(textFormatContext.ActivityBaggage);

var array = textFormatContext.ActivityBaggage.ToArray();

Assert.Equal("name", array[0].Key);
Assert.Equal("test", array[0].Value);
}

[Fact]
public void ValidateLongBaggageExtraction()
{
var carrier = new Dictionary<string, string>
{
{ "baggage", $"name={new string('x', 1018)},clientId=1234" },
};
var textFormatContext = this.baggage.Extract(default, carrier, Getter);
Assert.False(textFormatContext == default);
Assert.Single(textFormatContext.ActivityBaggage);

var array = textFormatContext.ActivityBaggage.ToArray();

Assert.Equal("name", array[0].Key);
Assert.Equal(new string('x', 1018), array[0].Value);
}

[Fact]
public void ValidateEmptyBaggageInjection()
{
var carrier = new Dictionary<string, string>();
this.baggage.Inject(default, carrier, Setter);

Assert.Empty(carrier);
}

[Fact]
public void ValidateBaggageInjection()
{
var carrier = new Dictionary<string, string>();
var textFormatContext = new TextFormatContext(default, new Dictionary<string, string>
{
{ "key1", "value1" },
{ "key2", "value2" },
});

this.baggage.Inject(textFormatContext, carrier, Setter);

Assert.Single(carrier);
Assert.Equal("key1=value1,key2=value2", carrier["baggage"]);
}
}
}