Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -51,32 +51,7 @@ private static async Task<int> Egress<TProvider, TOptions>(Action<IServiceCollec
EgressArtifactResult result = new();
try
{
StdInStream = Console.OpenStandardInput();

int dotnetMonitorPayloadProtocolVersion;
long payloadLengthBuffer;
byte[] payloadBuffer;

using (BinaryReader reader = new BinaryReader(StdInStream, Encoding.UTF8, leaveOpen: true))
{
dotnetMonitorPayloadProtocolVersion = reader.ReadInt32();
if (dotnetMonitorPayloadProtocolVersion != ExpectedPayloadProtocolVersion)
{
throw new EgressException(string.Format(CultureInfo.CurrentCulture, Strings.ErrorMessage_IncorrectPayloadVersion, dotnetMonitorPayloadProtocolVersion, ExpectedPayloadProtocolVersion));
}

payloadLengthBuffer = reader.ReadInt64();

if (payloadLengthBuffer < 0)
{
throw new ArgumentOutOfRangeException(nameof(payloadLengthBuffer));
}
}

payloadBuffer = new byte[payloadLengthBuffer];
await ReadExactlyAsync(payloadBuffer, token);

ExtensionEgressPayload configPayload = JsonSerializer.Deserialize<ExtensionEgressPayload>(payloadBuffer);
ExtensionEgressPayload configPayload = await GetPayload(token);

ServiceCollection services = CreateServices<TOptions>(configPayload, configureServices);

Expand Down Expand Up @@ -115,6 +90,38 @@ private static async Task<int> Egress<TProvider, TOptions>(Action<IServiceCollec
return result.Succeeded ? 0 : 1;
}

internal static async Task<ExtensionEgressPayload> GetPayload(CancellationToken token)
{
StdInStream = Console.OpenStandardInput();

int dotnetMonitorPayloadProtocolVersion;
long payloadLengthBuffer;
byte[] payloadBuffer;

using (BinaryReader reader = new BinaryReader(StdInStream, Encoding.UTF8, leaveOpen: true))
{
dotnetMonitorPayloadProtocolVersion = reader.ReadInt32();
if (dotnetMonitorPayloadProtocolVersion != ExpectedPayloadProtocolVersion)
{
throw new EgressException(string.Format(CultureInfo.CurrentCulture, Strings.ErrorMessage_IncorrectPayloadVersion, dotnetMonitorPayloadProtocolVersion, ExpectedPayloadProtocolVersion));
}

payloadLengthBuffer = reader.ReadInt64();

if (payloadLengthBuffer < 0)
{
throw new ArgumentOutOfRangeException(nameof(payloadLengthBuffer));
}
}

payloadBuffer = new byte[payloadLengthBuffer];
await ReadExactlyAsync(payloadBuffer, token);

ExtensionEgressPayload configPayload = JsonSerializer.Deserialize<ExtensionEgressPayload>(payloadBuffer);

return configPayload;
}

private static ServiceCollection CreateServices<TOptions>(ExtensionEgressPayload payload, Action<IServiceCollection> configureServices)
where TOptions : class, new()
{
Expand Down Expand Up @@ -161,7 +168,7 @@ private static async Task GetStream(Stream outputStream, CancellationToken cance
await StdInStream.CopyToAsync(outputStream, DefaultBufferSize, cancellationToken);
}

private static async Task ReadExactlyAsync(Memory<byte> buffer, CancellationToken token)
internal static async Task ReadExactlyAsync(Memory<byte> buffer, CancellationToken token)
{
#if NET7_0_OR_GREATER
await StdInStream.ReadExactlyAsync(buffer, token);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
<InternalsVisibleTo Include="dotnet-monitor-egress-s3storage" />
<InternalsVisibleTo Include="Microsoft.Diagnostics.Monitoring.AzureBlobStorageTests.UnitTests" />
<InternalsVisibleTo Include="Microsoft.Diagnostics.Monitoring.S3StorageTests.UnitTests" />
<InternalsVisibleTo Include="Microsoft.Diagnostics.Monitoring.EgressExtensibilityApp" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\Extensions\Microsoft.Diagnostics.Monitoring.Extension.Common\Microsoft.Diagnostics.Monitoring.Extension.Common.csproj" />
<ProjectReference Include="..\Microsoft.Diagnostics.Monitoring.TestCommon\Microsoft.Diagnostics.Monitoring.TestCommon.csproj" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@
// The .NET Foundation licenses this file to you under the MIT license.

using Microsoft.Diagnostics.Monitoring.Tool.UnitTests;
using Microsoft.Diagnostics.Tools.Monitor.Egress;
using Microsoft.Diagnostics.Monitoring.Extension.Common;
using Microsoft.Extensions.Configuration;
using System;
using System.CommandLine;
using System.Text.Json;
using System.Threading.Tasks;
using System.Threading;
using Xunit;

namespace Microsoft.Diagnostics.Monitoring.EgressExtensibilityApp
Expand All @@ -19,21 +21,19 @@ static int Main(string[] args)

CliCommand egressCmd = new CliCommand("Egress");

egressCmd.SetAction(Egress);
egressCmd.SetAction((result, token) => Egress(token));

rootCommand.Add(egressCmd);

return rootCommand.Parse(args).Invoke();
}

private static int Egress(ParseResult parseResult)
private static async Task<int> Egress(CancellationToken token)
{
EgressArtifactResult result = new();
try
{
string jsonConfig = Console.ReadLine();

ExtensionEgressPayload configPayload = JsonSerializer.Deserialize<ExtensionEgressPayload>(jsonConfig);
ExtensionEgressPayload configPayload = await EgressHelper.GetPayload(token);
TestEgressProviderOptions options = BuildOptions(configPayload);

Assert.Single(options.Metadata.Keys);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

namespace Microsoft.Diagnostics.Monitoring.Tool.UnitTests
{
[TargetFrameworkMonikerTrait(TargetFrameworkMonikerExtensions.CurrentTargetFrameworkMoniker)]
public sealed class EgressExtensibilityTests
{
private ITestOutputHelper _outputHelper;
Expand Down