Skip to content

Commit

Permalink
fix: Remove 'Dns.GetHostName' from the message source resolution chai…
Browse files Browse the repository at this point in the history
…n and set '/aws/messaging' as the fallback source
  • Loading branch information
96malhar committed Nov 15, 2023
1 parent 88e46a2 commit 8bbd779
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 164 deletions.
1 change: 0 additions & 1 deletion src/AWS.Messaging/Configuration/MessageBusBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,6 @@ internal void Build(IServiceCollection services)
services.TryAddSingleton<IAWSClientProvider, AWSClientProvider>();
services.TryAddSingleton<IMessageSourceHandler, MessageSourceHandler>();
services.TryAddSingleton<IEnvironmentManager, EnvironmentManager>();
services.TryAddSingleton<IDnsManager, DnsManager>();
services.TryAddSingleton<IEC2InstanceMetadataManager, EC2InstanceMetadataManager>();
services.TryAddSingleton<IECSContainerMetadataManager, ECSContainerMetadataManager>();
services.AddHttpClient("ECSMetadataClient");
Expand Down
15 changes: 0 additions & 15 deletions src/AWS.Messaging/Services/DnsManager.cs

This file was deleted.

18 changes: 0 additions & 18 deletions src/AWS.Messaging/Services/IDnsManager.cs

This file was deleted.

30 changes: 2 additions & 28 deletions src/AWS.Messaging/Services/MessageSourceHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,19 @@ namespace AWS.Messaging.Services;
internal class MessageSourceHandler : IMessageSourceHandler
{
private readonly IEnvironmentManager _environmentManager;
private readonly IDnsManager _dnsManager;
private readonly IECSContainerMetadataManager _ecsContainerMetadataManager;
private readonly IEC2InstanceMetadataManager _ec2InstanceMetadataHandler;
private readonly IMessageConfiguration _messageConfiguration;
private readonly ILogger<MessageSourceHandler> _logger;

public MessageSourceHandler(
IEnvironmentManager environmentManager,
IDnsManager dnsManager,
IECSContainerMetadataManager ecsContainerMetadataManager,
IEC2InstanceMetadataManager ec2InstanceMetadataHandler,
IMessageConfiguration messageConfiguration,
ILogger<MessageSourceHandler> logger)
{
_environmentManager = environmentManager;
_dnsManager = dnsManager;
_ecsContainerMetadataManager = ecsContainerMetadataManager;
_ec2InstanceMetadataHandler = ec2InstanceMetadataHandler;
_messageConfiguration = messageConfiguration;
Expand All @@ -56,7 +53,7 @@ public MessageSourceHandler(
/// </item>
/// <item>
/// <description>If the source cannot be resolved from the compute environment,
/// we fallback to using <see cref="Dns.GetHostName"/></description>
/// we fallback to using "/aws/messaging" as the source identifier</description>
/// </item>
/// </list>
/// After a source is computed, the message source suffix is appended if one is set.
Expand All @@ -68,7 +65,7 @@ public async Task<Uri> ComputeMessageSource()
return GetFullSourceUri(_messageConfiguration.Source, _messageConfiguration.SourceSuffix);

_logger.LogTrace("Attempting to compute message source based on the current environment...");
string? messageSource = GetSourceFromLambda();
var messageSource = GetSourceFromLambda();
if (string.IsNullOrEmpty(messageSource))
{
messageSource = await GetSourceFromECS();
Expand All @@ -78,10 +75,6 @@ public async Task<Uri> ComputeMessageSource()
messageSource = GetSourceFromEC2();
}
if (string.IsNullOrEmpty(messageSource))
{
messageSource = GetSourceFromDnsHostName();
}
if (string.IsNullOrEmpty(messageSource))
{
messageSource = "/aws/messaging";
}
Expand Down Expand Up @@ -172,23 +165,4 @@ private Uri GetFullSourceUri(string source, string? suffix)
$"/AmazonEC2/{instanceID}" :
null;
}

/// <summary>
/// Retrieve the DNS host name using <see cref="Dns.GetHostName"/>.
/// </summary>
/// <returns>Message source from DNS host name</returns>
private string? GetSourceFromDnsHostName()
{
_logger.LogTrace("Retrieving the DNS host name...");

try
{
return $"/DNSHostName/{_dnsManager.GetHostName()}";
}
catch (Exception ex)
{
_logger.LogError(ex, "Unable to retrieve the DNS host name.");
return null;
}
}
}
123 changes: 21 additions & 102 deletions test/AWS.Messaging.UnitTests/MessageSourceHandlerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ namespace AWS.Messaging.UnitTests;
public class MessageSourceHandlerTests
{
private readonly Mock<IEnvironmentManager> _environmentManager;
private readonly Mock<IDnsManager> _dnsManager;
private readonly Mock<IEC2InstanceMetadataManager> _ec2InstanceMetadataManager;
private readonly Mock<IECSContainerMetadataManager> _ecsContainerMetadataManager;
private readonly IMessageConfiguration _messageConfiguration;
Expand All @@ -24,7 +23,6 @@ public class MessageSourceHandlerTests
public MessageSourceHandlerTests()
{
_environmentManager = new Mock<IEnvironmentManager>();
_dnsManager = new Mock<IDnsManager>();
_ec2InstanceMetadataManager = new Mock<IEC2InstanceMetadataManager>();
_ecsContainerMetadataManager = new Mock<IECSContainerMetadataManager>();
_messageConfiguration = new MessageConfiguration();
Expand All @@ -36,14 +34,7 @@ public async Task MessageSourceIsSet()
{
_messageConfiguration.Source = "/aws/messaging";

var messageSourceHandler = new MessageSourceHandler(
_environmentManager.Object,
_dnsManager.Object,
_ecsContainerMetadataManager.Object,
_ec2InstanceMetadataManager.Object,
_messageConfiguration,
_logger.Object
);
var messageSourceHandler = GetMessageSourceHandler();

var messageSource = await messageSourceHandler.ComputeMessageSource();

Expand All @@ -56,14 +47,7 @@ public async Task MessageSourceAndSuffixIsSet()
_messageConfiguration.Source = "/aws/messaging";
_messageConfiguration.SourceSuffix = "/suffix";

var messageSourceHandler = new MessageSourceHandler(
_environmentManager.Object,
_dnsManager.Object,
_ecsContainerMetadataManager.Object,
_ec2InstanceMetadataManager.Object,
_messageConfiguration,
_logger.Object
);
var messageSourceHandler = GetMessageSourceHandler();

var messageSource = await messageSourceHandler.ComputeMessageSource();

Expand All @@ -76,14 +60,7 @@ public async Task MessageSourceAndSuffixIsSet_SourceDoesntEndInSlash_SuffixDoesn
_messageConfiguration.Source = "/aws/messaging";
_messageConfiguration.SourceSuffix = "suffix";

var messageSourceHandler = new MessageSourceHandler(
_environmentManager.Object,
_dnsManager.Object,
_ecsContainerMetadataManager.Object,
_ec2InstanceMetadataManager.Object,
_messageConfiguration,
_logger.Object
);
var messageSourceHandler = GetMessageSourceHandler();

var messageSource = await messageSourceHandler.ComputeMessageSource();

Expand All @@ -96,14 +73,7 @@ public async Task MessageSourceAndSuffixIsSet_SourceEndsInSlash_SuffixStartsWith
_messageConfiguration.Source = "/aws/messaging/";
_messageConfiguration.SourceSuffix = "/suffix";

var messageSourceHandler = new MessageSourceHandler(
_environmentManager.Object,
_dnsManager.Object,
_ecsContainerMetadataManager.Object,
_ec2InstanceMetadataManager.Object,
_messageConfiguration,
_logger.Object
);
var messageSourceHandler = GetMessageSourceHandler();

var messageSource = await messageSourceHandler.ComputeMessageSource();

Expand All @@ -116,14 +86,7 @@ public async Task MessageSourceAndSuffixIsSet_SourceAndSuffixHaveWhitespace()
_messageConfiguration.Source = " /aws/messaging/ ";
_messageConfiguration.SourceSuffix = " /suffix ";

var messageSourceHandler = new MessageSourceHandler(
_environmentManager.Object,
_dnsManager.Object,
_ecsContainerMetadataManager.Object,
_ec2InstanceMetadataManager.Object,
_messageConfiguration,
_logger.Object
);
var messageSourceHandler = GetMessageSourceHandler();

var messageSource = await messageSourceHandler.ComputeMessageSource();

Expand All @@ -134,56 +97,33 @@ public async Task MessageSourceAndSuffixIsSet_SourceAndSuffixHaveWhitespace()
public async Task MessageSourceNotSet_RunningLocally()
{
_ecsContainerMetadataManager.Setup(x => x.GetContainerTaskMetadata()).ReturnsAsync(new Dictionary<string, object>());
_dnsManager.Setup(x => x.GetHostName()).Returns("local");

var messageSourceHandler = new MessageSourceHandler(
_environmentManager.Object,
_dnsManager.Object,
_ecsContainerMetadataManager.Object,
_ec2InstanceMetadataManager.Object,
_messageConfiguration,
_logger.Object
);
var messageSourceHandler = GetMessageSourceHandler();

var messageSource = await messageSourceHandler.ComputeMessageSource();

Assert.Equal("/DNSHostName/local", messageSource.ToString());
Assert.Equal("/aws/messaging", messageSource.ToString());
}

[Fact]
public async Task MessageSourceNotSet_SuffixSet_RunningLocally()
{
_messageConfiguration.SourceSuffix = "/suffix";
_ecsContainerMetadataManager.Setup(x => x.GetContainerTaskMetadata()).ReturnsAsync(new Dictionary<string, object>());
_dnsManager.Setup(x => x.GetHostName()).Returns("local");

var messageSourceHandler = new MessageSourceHandler(
_environmentManager.Object,
_dnsManager.Object,
_ecsContainerMetadataManager.Object,
_ec2InstanceMetadataManager.Object,
_messageConfiguration,
_logger.Object
);
var messageSourceHandler = GetMessageSourceHandler();

var messageSource = await messageSourceHandler.ComputeMessageSource();

Assert.Equal("/DNSHostName/local/suffix", messageSource.ToString());
Assert.Equal("/aws/messaging/suffix", messageSource.ToString());
}

[Fact]
public async Task MessageSourceNotSet_RunningInLambda()
{
_environmentManager.Setup(x => x.GetEnvironmentVariable("AWS_LAMBDA_FUNCTION_NAME")).Returns("lambda");

var messageSourceHandler = new MessageSourceHandler(
_environmentManager.Object,
_dnsManager.Object,
_ecsContainerMetadataManager.Object,
_ec2InstanceMetadataManager.Object,
_messageConfiguration,
_logger.Object
);
var messageSourceHandler = GetMessageSourceHandler();

var messageSource = await messageSourceHandler.ComputeMessageSource();

Expand All @@ -199,14 +139,7 @@ public async Task MessageSourceNotSet_RunningInECS()
{ "TaskARN", "taskArn" }
});

var messageSourceHandler = new MessageSourceHandler(
_environmentManager.Object,
_dnsManager.Object,
_ecsContainerMetadataManager.Object,
_ec2InstanceMetadataManager.Object,
_messageConfiguration,
_logger.Object
);
var messageSourceHandler = GetMessageSourceHandler();

var messageSource = await messageSourceHandler.ComputeMessageSource();

Expand All @@ -219,37 +152,23 @@ public async Task MessageSourceNotSet_RunningInEC2()
_ecsContainerMetadataManager.Setup(x => x.GetContainerTaskMetadata()).ReturnsAsync(new Dictionary<string, object>());
_ec2InstanceMetadataManager.Setup(x => x.InstanceId).Returns("instanceId");

var messageSourceHandler = new MessageSourceHandler(
_environmentManager.Object,
_dnsManager.Object,
_ecsContainerMetadataManager.Object,
_ec2InstanceMetadataManager.Object,
_messageConfiguration,
_logger.Object
);
var messageSourceHandler = GetMessageSourceHandler();

var messageSource = await messageSourceHandler.ComputeMessageSource();

Assert.Equal("/AmazonEC2/instanceId", messageSource.ToString());
}

[Fact]
public async Task MessageSourceNotSet_DnsThrowsException()
private IMessageSourceHandler GetMessageSourceHandler()
{
_ecsContainerMetadataManager.Setup(x => x.GetContainerTaskMetadata()).ReturnsAsync(new Dictionary<string, object>());
_dnsManager.Setup(x => x.GetHostName()).Throws<Exception>();

var messageSourceHandler = new MessageSourceHandler(
_environmentManager.Object,
_dnsManager.Object,
_ecsContainerMetadataManager.Object,
_ec2InstanceMetadataManager.Object,
_messageConfiguration,
_logger.Object
);

var messageSource = await messageSourceHandler.ComputeMessageSource();

Assert.Equal("/aws/messaging", messageSource.ToString());
_environmentManager.Object,
_ecsContainerMetadataManager.Object,
_ec2InstanceMetadataManager.Object,
_messageConfiguration,
_logger.Object
);

return messageSourceHandler;
}
}

0 comments on commit 8bbd779

Please sign in to comment.