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 @@ -4,6 +4,12 @@ OpenTelemetry.OpAmp.Client.Messages.AgentConfigFile
OpenTelemetry.OpAmp.Client.Messages.AgentConfigFile.Body.get -> System.ReadOnlySpan<byte>
OpenTelemetry.OpAmp.Client.Messages.AgentConfigFile.ContentType.get -> string?
OpenTelemetry.OpAmp.Client.Messages.AgentConfigFile.Name.get -> string!
OpenTelemetry.OpAmp.Client.Messages.CustomCapabilitiesMessage
OpenTelemetry.OpAmp.Client.Messages.CustomCapabilitiesMessage.Capabilities.get -> System.Collections.Generic.ICollection<string!>!
OpenTelemetry.OpAmp.Client.Messages.CustomMessageMessage
OpenTelemetry.OpAmp.Client.Messages.CustomMessageMessage.Capability.get -> string!
OpenTelemetry.OpAmp.Client.Messages.CustomMessageMessage.Data.get -> System.ReadOnlySpan<byte>
OpenTelemetry.OpAmp.Client.Messages.CustomMessageMessage.Type.get -> string!
OpenTelemetry.OpAmp.Client.Messages.OpAmpMessage
OpenTelemetry.OpAmp.Client.Messages.OpAmpMessage.OpAmpMessage() -> void
OpenTelemetry.OpAmp.Client.Messages.RemoteConfigMessage
Expand Down
3 changes: 3 additions & 0 deletions src/OpenTelemetry.OpAmp.Client/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
* Add settings for remote configuration and update advertised capabilities.
([#3618](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/3618))

* Expose public `CustomCapabilitiesMessage` and `CustomMessageMessage`.
([#3681](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/3681))

## 0.1.0-alpha.3

Released 2025-Nov-13
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

using OpAmp.Proto.V1;

namespace OpenTelemetry.OpAmp.Client.Messages;

/// <summary>
/// Represents an OpAMP server-to-agent custom capabilities message.
/// </summary>
public class CustomCapabilitiesMessage : OpAmpMessage
{
internal CustomCapabilitiesMessage(CustomCapabilities customCapabilities)
{
this.Capabilities = [.. customCapabilities.Capabilities];
}

/// <summary>
/// Gets the collection of custom capabilities.
/// </summary>
public ICollection<string> Capabilities { get; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

using Google.Protobuf;
using OpAmp.Proto.V1;

namespace OpenTelemetry.OpAmp.Client.Messages;

/// <summary>
/// Represents an OpAMP server-to-agent custom message message.
/// </summary>
public class CustomMessageMessage : OpAmpMessage
{
private readonly ByteString data;

internal CustomMessageMessage(CustomMessage customMessage)
{
this.data = customMessage.Data;

this.Capability = customMessage.Capability;
this.Type = customMessage.Type;
}

/// <summary>
/// Gets the capability associated with custom message.
/// </summary>
public string Capability { get; }

/// <summary>
/// Gets the type of custom message.
/// </summary>
public string Type { get; }

/// <summary>
/// Gets the data of custom message.
/// </summary>
public ReadOnlySpan<byte> Data => this.data.Span;
}
10 changes: 9 additions & 1 deletion test/OpenTelemetry.OpAmp.Client.Tests/FrameProcessorTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

using System.Text;
using OpenTelemetry.OpAmp.Client.Internal;
using OpenTelemetry.OpAmp.Client.Tests.Mocks;
using OpenTelemetry.OpAmp.Client.Tests.Tools;
Expand All @@ -21,7 +22,14 @@ public void FrameProcessor_Subscribe()
processor.OnServerFrame(mockFrame.Frame.ToSequence());

var message = Assert.Single(listener.Messages);
Assert.Equal(mockFrame.ExptectedContent, message.CustomMessage.Data.ToStringUtf8());
var messageContent =
#if NET
Encoding.UTF8.GetString(message.Data);
#else
Encoding.UTF8.GetString([.. message.Data]);
#endif

Assert.Equal(mockFrame.ExptectedContent, messageContent);
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

using Xunit;

namespace OpenTelemetry.OpAmp.Client.Tests.Messages;

public class CustomCapabilitiesMessageTests
{
private const string Capability1Name = "Capability1";
private const string Capability2Name = "Capability2";

[Fact]
public void Constructor_WithValidCapabilities_InitializesCapabilities()
{
// Arrange
var customCapabilities = this.CreateCustomCapabilities();

// Act
var customCapabilitiesMessage = new Client.Messages.CustomCapabilitiesMessage(customCapabilities);

// Assert
Assert.Equal(2, customCapabilitiesMessage.Capabilities.Count);
Assert.True(customCapabilitiesMessage.Capabilities.Contains(Capability1Name));
Assert.True(customCapabilitiesMessage.Capabilities.Contains(Capability2Name));
}

[Fact]
public void Constructor_WithEmptyCapabilities_InitializesEmptyCapabilitiesCollection()
{
// Arrange
var customCapabilities = new global::OpAmp.Proto.V1.CustomCapabilities();

// Act
var customCapabilitiesMessage = new Client.Messages.CustomCapabilitiesMessage(customCapabilities);

// Assert
Assert.Empty(customCapabilitiesMessage.Capabilities);
}

private global::OpAmp.Proto.V1.CustomCapabilities CreateCustomCapabilities()
{
var capabilities = new global::OpAmp.Proto.V1.CustomCapabilities();
capabilities.Capabilities.Add(Capability1Name);
capabilities.Capabilities.Add(Capability2Name);

return capabilities;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

using System.Text;
using Google.Protobuf;
using Xunit;

namespace OpenTelemetry.OpAmp.Client.Tests.Messages;

public class CustomMessageMessageTests
{
private const string CapabilityName = "Capability1";
private const string TypeName = "CustomMessageType";
private const string DataString = "Custom Message Data Example";

[Fact]
public void Constructor_WithValidMessage_InitializesCustomMessage()
{
// Arrange
var customMessage = this.CreateCustomMessagesMessage();

// Act
var customMessageMessage = new Client.Messages.CustomMessageMessage(customMessage);

// Assert
Assert.Equal(CapabilityName, customMessageMessage.Capability);
Assert.Equal(TypeName, customMessageMessage.Type);
#if NET
Assert.Equal(DataString, Encoding.UTF8.GetString(customMessageMessage.Data));
#else
Assert.Equal(DataString, Encoding.UTF8.GetString([.. customMessageMessage.Data]));
#endif
}

private global::OpAmp.Proto.V1.CustomMessage CreateCustomMessagesMessage()
{
return new global::OpAmp.Proto.V1.CustomMessage
{
Capability = CapabilityName,
Type = TypeName,
Data = ByteString.CopyFromUtf8(DataString),
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0

using System.Collections.Concurrent;
using OpenTelemetry.OpAmp.Client.Internal.Listeners.Messages;
using OpenTelemetry.OpAmp.Client.Listeners;
using OpenTelemetry.OpAmp.Client.Messages;

namespace OpenTelemetry.OpAmp.Client.Tests.Mocks;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Net.Http;
#endif

using System.Text;
using OpenTelemetry.OpAmp.Client.Internal;
using OpenTelemetry.OpAmp.Client.Internal.Transport.Http;
using OpenTelemetry.OpAmp.Client.Settings;
Expand Down Expand Up @@ -40,7 +41,12 @@ public async Task PlainHttpTransport_SendReceiveCommunication(bool useSmallPacke
// Assert
var serverReceivedFrames = opAmpServer.GetFrames();
var clientReceivedFrames = mockListener.Messages;
var receivedTextData = clientReceivedFrames.First().CustomMessage.Data.ToStringUtf8();
var receivedTextData =
#if NET
Encoding.UTF8.GetString(clientReceivedFrames.First().Data);
#else
Encoding.UTF8.GetString([.. clientReceivedFrames.First().Data]);
#endif

var frame = Assert.Single(serverReceivedFrames);
Assert.Equal(mockFrame.Uid, frame.InstanceUid);
Expand Down
8 changes: 7 additions & 1 deletion test/OpenTelemetry.OpAmp.Client.Tests/WsTransportTest.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

using System.Text;
using OpenTelemetry.OpAmp.Client.Internal;
using OpenTelemetry.OpAmp.Client.Internal.Transport.WebSocket;
using OpenTelemetry.OpAmp.Client.Tests.Mocks;
Expand Down Expand Up @@ -42,7 +43,12 @@ public async Task WsTransport_SendReceiveCommunication(bool useSmallPackets)
// Assert
var serverReceivedFrames = opAmpServer.GetFrames();
var clientReceivedFrames = mockListener.Messages;
var receivedTextData = clientReceivedFrames.First().CustomMessage.Data.ToStringUtf8();
var receivedTextData =
#if NET
Encoding.UTF8.GetString(clientReceivedFrames.First().Data);
#else
Encoding.UTF8.GetString([.. clientReceivedFrames.First().Data]);
#endif

Assert.Single(serverReceivedFrames);
Assert.Equal(mockFrame.Uid, serverReceivedFrames.First().InstanceUid);
Expand Down