Skip to content

Commit 663c1c4

Browse files
[Api] Extend fuzz tests
Add fuzzing for previous commit.
1 parent f9e9e1d commit 663c1c4

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

test/OpenTelemetry.Api.FuzzTests/Context/Propagation/BaggagePropagatorFuzzTests.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,27 @@ public Property ExtractIsDeterministicForArbitraryHeaders() => Prop.ForAll(Gener
7878
}
7979
});
8080

81+
[Property(MaxTest = MaxTests)]
82+
public Property ExtractMatchesReplayableGetterForSinglePassEnumerables() => Prop.ForAll(Generators.BaggageCarrierArbitrary(), (carrier) =>
83+
{
84+
try
85+
{
86+
var propagator = new BaggagePropagator();
87+
var original = FuzzTestHelpers.CloneCarrier(carrier);
88+
89+
var replayable = propagator.Extract(default, carrier, FuzzTestHelpers.ArrayGetter);
90+
var singlePass = propagator.Extract(default, carrier, FuzzTestHelpers.SinglePassArrayGetter);
91+
92+
return
93+
FuzzTestHelpers.CarriersEqual(original, carrier) &&
94+
DictionariesEqual(replayable.Baggage.GetBaggage(), singlePass.Baggage.GetBaggage());
95+
}
96+
catch (Exception ex) when (FuzzTestHelpers.IsAllowedException(ex))
97+
{
98+
return true;
99+
}
100+
});
101+
81102
[Property(MaxTest = MaxTests)]
82103
public Property OversizedExtractionHonorsConfiguredLimits() => Prop.ForAll(Generators.OversizedBaggageValuesArbitrary(), (values) =>
83104
{

test/OpenTelemetry.Api.FuzzTests/Context/Propagation/FuzzTestHelpers.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ internal static class FuzzTestHelpers
1111
public static readonly Func<IDictionary<string, string[]>, string, IEnumerable<string>> ArrayGetter =
1212
static (carrier, name) => carrier.TryGetValue(name, out var value) ? value : [];
1313

14+
public static readonly Func<IDictionary<string, string[]>, string, IEnumerable<string>> SinglePassArrayGetter =
15+
static (carrier, name) => carrier.TryGetValue(name, out var value) ? EnumerateOnce(value) : [];
16+
1417
public static readonly Action<IDictionary<string, string>, string, string> Setter =
1518
static (carrier, name, value) => carrier[name] = value;
1619

@@ -31,4 +34,12 @@ public static bool CarriersEqual(Dictionary<string, string[]> left, Dictionary<s
3134
left.All(pair => right.TryGetValue(pair.Key, out var value) && pair.Value.SequenceEqual(value));
3235

3336
public static bool IsAllowedException(Exception ex) => ex is ArgumentException;
37+
38+
private static IEnumerable<string> EnumerateOnce(IEnumerable<string> values)
39+
{
40+
foreach (var value in values)
41+
{
42+
yield return value;
43+
}
44+
}
3445
}

0 commit comments

Comments
 (0)