Skip to content

Allow insights powershell to unselect data sinks in diagnosticsettings. #3452

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Feb 21, 2017
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,18 @@
// limitations under the License.
// ----------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Management.Automation;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Azure.Commands.Insights.Diagnostics;
using Microsoft.Azure.Management.Insights;
using Microsoft.Azure.Management.Insights.Models;
using Microsoft.Rest.Azure;
using Microsoft.WindowsAzure.Commands.ScenarioTest;
using Moq;
using System;
using System.Collections.Generic;
using System.Management.Automation;
using System.Threading.Tasks;
using Xunit;

namespace Microsoft.Azure.Commands.Insights.Test.Diagnostics
{
Expand All @@ -31,27 +33,249 @@ public class SetDiagnosticSettingCommandTests
private readonly Mock<InsightsManagementClient> insightsManagementClientMock;
private readonly Mock<IServiceDiagnosticSettingsOperations> insightsDiagnosticsOperationsMock;
private Mock<ICommandRuntime> commandRuntimeMock;
private ServiceDiagnosticSettingsResource request;
private const string resourceId = "/subscriptions/123/resourcegroups/rg/providers/rp/resource/myresource";
private const string storageAccountId = "/subscriptions/123/resourcegroups/rg/providers/microsoft.storage/accounts/myaccount";
private string calledResourceId;
ServiceDiagnosticSettingsResource calledPutParameters;
private const string serviceBusRuleId = "/subscriptions/123/resourcegroups/rg/providers/microsoft.eventhub/namespaces/ns/authorizationrules/ar";
private const string workspaceId = "/subscriptions/123/resourcegroups/rg/providers/microsoft.operationalinsights/workspaces/wp";

ServiceDiagnosticSettingsResource ExistingSetting;
ServiceDiagnosticSettingsResource calledSettings = null;

public SetDiagnosticSettingCommandTests(Xunit.Abstractions.ITestOutputHelper output)
{
//ServiceManagemenet.Common.Models.XunitTracingInterceptor.AddToContext(new ServiceManagemenet.Common.Models.XunitTracingInterceptor(output));
insightsDiagnosticsOperationsMock = new Mock<IServiceDiagnosticSettingsOperations>();
insightsManagementClientMock = new Mock<InsightsManagementClient>();
commandRuntimeMock = new Mock<ICommandRuntime>();
cmdlet = new SetAzureRmDiagnosticSettingCommand()
this.insightsDiagnosticsOperationsMock = new Mock<IServiceDiagnosticSettingsOperations>();
this.insightsManagementClientMock = new Mock<InsightsManagementClient>();
this.commandRuntimeMock = new Mock<ICommandRuntime>();
this.cmdlet = new SetAzureRmDiagnosticSettingCommand()
{
CommandRuntime = commandRuntimeMock.Object,
InsightsManagementClient = insightsManagementClientMock.Object
};

this.ExistingSetting = GetDefaultSetting();

insightsDiagnosticsOperationsMock.Setup(f => f.GetWithHttpMessagesAsync(
It.IsAny<string>(),
It.IsAny<Dictionary<string, List<string>>>(),
It.IsAny<CancellationToken>()))
.Returns(Task.FromResult<AzureOperationResponse<ServiceDiagnosticSettingsResource>>(new AzureOperationResponse<ServiceDiagnosticSettingsResource>
{
Body = this.ExistingSetting
}));

insightsDiagnosticsOperationsMock.Setup(f => f.CreateOrUpdateWithHttpMessagesAsync(
It.IsAny<string>(),
It.IsAny<ServiceDiagnosticSettingsResource>(),
It.IsAny<Dictionary<string, List<string>>>(),
It.IsAny<CancellationToken>()))
.Returns((string a, ServiceDiagnosticSettingsResource x, Dictionary<string, List<string>> b, CancellationToken c) =>
{
calledSettings = x;
return Task.FromResult(new AzureOperationResponse<ServiceDiagnosticSettingsResource>
{
Body = x
});
});

insightsManagementClientMock.SetupGet(f => f.ServiceDiagnosticSettings).Returns(this.insightsDiagnosticsOperationsMock.Object);

cmdlet.ResourceId = resourceId;
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void DisableStorage()
{
cmdlet.MyInvocation.BoundParameters["StorageAccountId"] = null;
cmdlet.ExecuteCmdlet();

ServiceDiagnosticSettingsResource expectedSettings = GetDefaultSetting();
expectedSettings.StorageAccountId = null;

VerifyCalledOnce();
VerifySettings(expectedSettings, this.calledSettings);
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void SetStorage()
{
string newStorageId = "otherstorage";
cmdlet.StorageAccountId = newStorageId;
cmdlet.MyInvocation.BoundParameters[SetAzureRmDiagnosticSettingCommand.StorageAccountIdParamName] = newStorageId;
cmdlet.ExecuteCmdlet();

ServiceDiagnosticSettingsResource expectedSettings = GetDefaultSetting();
expectedSettings.StorageAccountId = newStorageId;

VerifyCalledOnce();
VerifySettings(expectedSettings, this.calledSettings);
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void SetServiceBus()
{
string newServiceBusId = "otherservicebus";
cmdlet.ServiceBusRuleId = newServiceBusId;
cmdlet.MyInvocation.BoundParameters[SetAzureRmDiagnosticSettingCommand.ServiceBusRuleIdParamName] = newServiceBusId;
cmdlet.ExecuteCmdlet();

ServiceDiagnosticSettingsResource expectedSettings = GetDefaultSetting();
expectedSettings.ServiceBusRuleId = newServiceBusId;

VerifyCalledOnce();
VerifySettings(expectedSettings, this.calledSettings);
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void SetWorkspace()
{
string newWorkspaceId = "otherworkspace";
cmdlet.WorkspaceId = newWorkspaceId;
cmdlet.MyInvocation.BoundParameters[SetAzureRmDiagnosticSettingCommand.WorkspacetIdParamName] = newWorkspaceId;
cmdlet.ExecuteCmdlet();

ServiceDiagnosticSettingsResource expectedSettings = GetDefaultSetting();
expectedSettings.WorkspaceId = newWorkspaceId;

VerifyCalledOnce();
VerifySettings(expectedSettings, this.calledSettings);
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void SetSomeCategories()
{
cmdlet.Categories = new List<string> { "TestCategory1"};
cmdlet.Enabled = false;
cmdlet.MyInvocation.BoundParameters[SetAzureRmDiagnosticSettingCommand.EnabledParamName] = false;
cmdlet.ExecuteCmdlet();

ServiceDiagnosticSettingsResource expectedSettings = GetDefaultSetting();
expectedSettings.Logs[0].Enabled = false;

VerifyCalledOnce();
VerifySettings(expectedSettings, this.calledSettings);
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void SetSomeTimeGrains()
{
cmdlet.Timegrains = new List<string> { "PT1H" };
cmdlet.Enabled = false;
cmdlet.MyInvocation.BoundParameters[SetAzureRmDiagnosticSettingCommand.EnabledParamName] = false;
cmdlet.ExecuteCmdlet();

request = new ServiceDiagnosticSettingsResource
ServiceDiagnosticSettingsResource expectedSettings = GetDefaultSetting();
expectedSettings.Metrics[1].Enabled = false;

VerifyCalledOnce();
VerifySettings(expectedSettings, this.calledSettings);
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void DisableEventHub()
{
cmdlet.MyInvocation.BoundParameters[SetAzureRmDiagnosticSettingCommand.ServiceBusRuleIdParamName] = null;
cmdlet.ExecuteCmdlet();

ServiceDiagnosticSettingsResource expectedSettings = GetDefaultSetting();
expectedSettings.ServiceBusRuleId = null;

VerifyCalledOnce();
VerifySettings(expectedSettings, this.calledSettings);
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void DisableWorkspace()
{
cmdlet.MyInvocation.BoundParameters["WorkspaceId"] = null;
cmdlet.ExecuteCmdlet();

ServiceDiagnosticSettingsResource expectedSettings = GetDefaultSetting();
expectedSettings.WorkspaceId = null;

VerifyCalledOnce();
VerifySettings(expectedSettings, this.calledSettings);
}

private void VerifyCalledOnce()
{
insightsDiagnosticsOperationsMock.Verify(x => x.CreateOrUpdateWithHttpMessagesAsync(
resourceId,
It.IsAny<ServiceDiagnosticSettingsResource>(),
It.IsAny<Dictionary<string, List<string>>>(),
It.IsAny<CancellationToken>()),
Times.Once);
}

private void VerifySettings(
ServiceDiagnosticSettingsResource expectedSettings,
ServiceDiagnosticSettingsResource actualSettings)
{
Assert.Equal(expectedSettings.StorageAccountId, actualSettings.StorageAccountId);
Assert.Equal(expectedSettings.ServiceBusRuleId, actualSettings.ServiceBusRuleId);
Assert.Equal(expectedSettings.WorkspaceId, actualSettings.WorkspaceId);
if (expectedSettings.Logs == null)
{
Assert.Null(actualSettings.Logs);
}
else
{
Assert.Equal(expectedSettings.Logs.Count, actualSettings.Logs.Count);
for (int i = 0; i < expectedSettings.Logs.Count; i++)
{
var expected = expectedSettings.Logs[i];
var actual = actualSettings.Logs[i];
Assert.Equal(expected.Category, actual.Category);
Assert.Equal(expected.Enabled, actual.Enabled);
VerifyRetentionPolicy(expected.RetentionPolicy, actual.RetentionPolicy);
}
}

if (expectedSettings.Metrics == null)
{
Assert.Null(actualSettings.Metrics);
}
else
{
Assert.Equal(expectedSettings.Metrics.Count, actualSettings.Metrics.Count);
for (int i = 0; i < expectedSettings.Metrics.Count; i++)
{
var expected = expectedSettings.Metrics[i];
var actual = actualSettings.Metrics[i];
Assert.Equal(expected.TimeGrain, actual.TimeGrain);
Assert.Equal(expected.Enabled, actual.Enabled);
VerifyRetentionPolicy(expected.RetentionPolicy, actual.RetentionPolicy);
}
}
}

private static void VerifyRetentionPolicy(RetentionPolicy expected, RetentionPolicy actual)
{
if (expected == null)
{
Assert.Null(actual);
}
else
{
Assert.Equal(expected.Days, actual.Days);
Assert.Equal(expected.Enabled, actual.Enabled);
}
}

private ServiceDiagnosticSettingsResource GetDefaultSetting()
{
return new ServiceDiagnosticSettingsResource
{
StorageAccountId = storageAccountId,
ServiceBusRuleId = serviceBusRuleId,
WorkspaceId = workspaceId,
Logs = new List<LogSettings>
{
new LogSettings
Expand Down Expand Up @@ -79,28 +303,6 @@ public SetDiagnosticSettingCommandTests(Xunit.Abstractions.ITestOutputHelper out
}
}
};

insightsDiagnosticsOperationsMock.Setup(f => f.GetAsync(It.IsAny<string>(), It.IsAny<CancellationToken>()))
.Returns(Task.FromResult<ServiceDiagnosticSettingsResource>(request))
.Callback((string resourceId) =>
{
this.calledResourceId = resourceId;
});

Rest.Azure.AzureOperationResponse<ServiceDiagnosticSettingsResource> response = new AzureOperationResponse<ServiceDiagnosticSettingsResource>
{
Body = request
};

insightsDiagnosticsOperationsMock.Setup(f => f.CreateOrUpdateWithHttpMessagesAsync(It.IsAny<string>(), It.IsAny<ServiceDiagnosticSettingsResource>(), It.IsAny<Dictionary<string,List<string>>>(), It.IsAny<CancellationToken>()))
.Returns(Task.FromResult<Rest.Azure.AzureOperationResponse<ServiceDiagnosticSettingsResource>>(response))
.Callback((string resourceId, ServiceDiagnosticSettingsResource putParameters, Dictionary<string,List<string>> headers) =>
{
this.calledResourceId = resourceId;
this.calledPutParameters = putParameters;
});

insightsManagementClientMock.SetupGet(f => f.ServiceDiagnosticSettings).Returns(this.insightsDiagnosticsOperationsMock.Object);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ function Test-SetAzureRmDiagnosticSetting
{
try
{
$actual = Set-AzureRmDiagnosticSetting -ResourceId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourcegroups/insights-integration/providers/test.shoebox/testresources2/pstest0000eastusR2 -StorageAccountId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.Storage/storageAccounts/montest3470 -Enable $true
$actual = Set-AzureRmDiagnosticSetting -ResourceId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourcegroups/insights-integration/providers/test.shoebox/testresources2/pstest0000eastusR2 -StorageAccountId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.Storage/storageAccounts/montest3470 -Enabled $true

Assert-AreEqual $actual.StorageAccountId "/subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.Storage/storageAccounts/montest3470"
Assert-AreEqual "/subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.ServiceBus/namespaces/ns1/authorizationrules/ar1" $actual.ServiceBusRuleId
Expand Down Expand Up @@ -80,7 +80,7 @@ function Test-SetAzureRmDiagnosticSettingWithRetention
{
try
{
$actual = Set-AzureRmDiagnosticSetting -ResourceId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourcegroups/insights-integration/providers/test.shoebox/testresources2/pstest0000eastusR2 -StorageAccountId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.Storage/storageAccounts/montest3470 -Enable $true -RetentionEnabled $true -RetentionInDays 90
$actual = Set-AzureRmDiagnosticSetting -ResourceId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourcegroups/insights-integration/providers/test.shoebox/testresources2/pstest0000eastusR2 -StorageAccountId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.Storage/storageAccounts/montest3470 -Enabled $true -RetentionEnabled $true -RetentionInDays 90

Assert-AreEqual $actual.StorageAccountId "/subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.Storage/storageAccounts/montest3470"
Assert-AreEqual "workspace1" $actual.WorkspaceId
Expand Down Expand Up @@ -115,7 +115,7 @@ function Test-SetAzureRmDiagnosticSetting-CategoriesOnly
{
try
{
$actual = Set-AzureRmDiagnosticSetting -ResourceId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourcegroups/insights-integration/providers/test.shoebox/testresources2/pstest0000eastusR2 -StorageAccountId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.Storage/storageAccounts/montest3470 -Enable $true -Categories TestLog2
$actual = Set-AzureRmDiagnosticSetting -ResourceId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourcegroups/insights-integration/providers/test.shoebox/testresources2/pstest0000eastusR2 -StorageAccountId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.Storage/storageAccounts/montest3470 -Enabled $true -Categories TestLog2

Assert-AreEqual $actual.StorageAccountId "/subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.Storage/storageAccounts/montest3470"
Assert-AreEqual "/subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.ServiceBus/namespaces/ns1/authorizationrules/ar1" $actual.ServiceBusRuleId
Expand Down Expand Up @@ -144,7 +144,7 @@ function Test-SetAzureRmDiagnosticSetting-TimegrainsOnly
{
try
{
$actual = Set-AzureRmDiagnosticSetting -ResourceId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourcegroups/insights-integration/providers/test.shoebox/testresources2/pstest0000eastusR2 -StorageAccountId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.Storage/storageAccounts/montest3470 -Enable $true -Timegrains PT1M
$actual = Set-AzureRmDiagnosticSetting -ResourceId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourcegroups/insights-integration/providers/test.shoebox/testresources2/pstest0000eastusR2 -StorageAccountId /subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.Storage/storageAccounts/montest3470 -Enabled $true -Timegrains PT1M

Assert-AreEqual $actual.StorageAccountId "/subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/Microsoft.Storage/storageAccounts/montest3470"
Assert-AreEqual "workspace1" $actual.WorkspaceId
Expand Down
Loading