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
@@ -1,7 +1,7 @@
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--This file and it's contents are updated at build time moving or editing might result in build failure. Take due deligence while editing this file-->
<PropertyGroup>
<AzureApiTag>Security_2015-06-01-preview;Security_2019-01-01;Security_2019-01-01-preview;Security_2017-08-01-preview;Security_2017-08-01;Security_2019-08-01;Security_2018-06-01;Security_2020-01-01;</AzureApiTag>
<AzureApiTag>Security_2015-06-01-preview;Security_2019-01-01;Security_2019-01-01-preview;Security_2017-08-01-preview;Security_2017-08-01;Security_2019-08-01;Security_2018-06-01;Security_2020-01-01-preview;Security_2020-01-01;</AzureApiTag>
<PackageTags>$(PackageTags);$(CommonTags);$(AzureApiTag);</PackageTags>
</PropertyGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
<PropertyGroup>
<PackageId>Microsoft.Azure.Management.SecurityCenter</PackageId>
<Description>Provides developers with libraries for the updated Azure Security Center platform under Azure Resource manager to view and manage security posture in and outside Azure.</Description>
<Version>2.1.1</Version>
<Version>2.2.0</Version>
<AssemblyName>Microsoft.Azure.Management.SecurityCenter</AssemblyName>
<PackageTags>management;security center;security;IoT security;</PackageTags>
<PackageReleaseNotes>Updated SDK client. General bugfixes</PackageReleaseNotes>
<PackageReleaseNotes>Updated SDK client. Added Secure score</PackageReleaseNotes>
</PropertyGroup>
<PropertyGroup>
<TargetFrameworks>$(SdkTargetFx)</TargetFrameworks>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
[assembly: AssemblyTitle("Microsoft Azure Security Center Library")]
[assembly: AssemblyDescription("Provides management functionality for Microsoft Azure Security Center Resources.")]

[assembly: AssemblyVersion("2.1.1.0")]
[assembly: AssemblyFileVersion("2.1.1.0")]
[assembly: AssemblyVersion("2.2.0.0")]
[assembly: AssemblyFileVersion("2.2.0.0")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("Microsoft Azure .NET SDK")]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.

using System.IO;
using System.Linq;
using System.Net;
using System.Text.RegularExpressions;
Expand Down Expand Up @@ -37,11 +38,20 @@ private static SecurityCenterClient GetSecurityCenterClient(MockContext context)
? context.GetServiceClient<SecurityCenterClient>(TestEnvironment, handlers: handler)
: context.GetServiceClient<SecurityCenterClient>(handlers: handler);

securityCenterClient.AscLocation = "centralus";
securityCenterClient.AscLocation = "westeurope";

return securityCenterClient;
}

private static SecurityCenterClient GetSecurityCenterClientWithLocation(MockContext context, string location)
{
var client = GetSecurityCenterClient(context);

client.AscLocation = location;

return client;
}

#endregion

#region Alerts
Expand All @@ -64,16 +74,16 @@ public async Task SecurityAlerts_GetResourceGroupLevelAlerts()
{
var securityCenterClient = GetSecurityCenterClient(context);

securityCenterClient.AscLocation = "centralus"; // Alert is in central us

var alerts = await securityCenterClient.Alerts.ListAsync();
ValidateAlerts(alerts);

var firstAlert = alerts.First();
var alertLocation = GetAlertLocation(firstAlert.Id);
var clientWithLocation = GetSecurityCenterClientWithLocation(context, alertLocation);
var alertName = firstAlert.Name;
var resourceGroupName = Regex.Match(firstAlert.Id, @"(?<=resourceGroups/)[^/]+?(?=/)").Value;

var foundAlert = await securityCenterClient.Alerts.GetResourceGroupLevelAlertsAsync(alertName, resourceGroupName);
var foundAlert = await clientWithLocation.Alerts.GetResourceGroupLevelAlertsAsync(alertName, resourceGroupName);
ValidateAlert(foundAlert);
}
}
Expand All @@ -88,12 +98,20 @@ public async Task SecurityAlerts_GetSubscriptionLevelAlert()
var alerts = await securityCenterClient.Alerts.ListAsync();
ValidateAlerts(alerts);

var alert = await securityCenterClient.Alerts.GetSubscriptionLevelAlertAsync(alerts.First().Name);
var firstAlert = alerts.First();
var alertLocation = GetAlertLocation(firstAlert.Id);
var clientWithLocation = GetSecurityCenterClientWithLocation(context, alertLocation);
var alert = clientWithLocation.Alerts.GetSubscriptionLevelAlert(firstAlert.Name);

ValidateAlert(alert);
}
}

private string GetAlertLocation(string id)
{
return Regex.Match(id, @"(?<=locations/)[^/]+?(?=/)").Value;
}

[Fact]
public async Task SecurityAlerts_ListByResourceGroup()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
using Microsoft.Azure.Management.Security;
using Microsoft.Azure.Management.Security.Models;
using Microsoft.Azure.Test.HttpRecorder;
using Microsoft.Rest.Azure;
using Microsoft.Rest.ClientRuntime.Azure.TestFramework;
using SecurityCenter.Tests.Helpers;
using System.Net;
using Xunit;

namespace Microsoft.Azure.Management.SecurityCenter.Tests.SecureScores
{
public class SecureScoreControlDefinitionsTests : TestBase
{
#region Test setup
private static readonly string AscLocation = "centralus";
private static TestEnvironment TestEnvironment { get; set; }
#endregion

private static SecurityCenterClient GetSecurityCenterClient(MockContext context)
{
if (TestEnvironment == null && HttpMockServer.Mode == HttpRecorderMode.Record)
{
TestEnvironment = TestEnvironmentFactory.GetTestEnvironment();
}

var handler = new RecordedDelegatingHandler { StatusCodeToReturn = HttpStatusCode.OK, IsPassThrough = true };

var securityCenterClient = HttpMockServer.Mode == HttpRecorderMode.Record
? context.GetServiceClient<SecurityCenterClient>(TestEnvironment, handlers: handler)
: context.GetServiceClient<SecurityCenterClient>(handlers: handler);

securityCenterClient.AscLocation = AscLocation;

return securityCenterClient;
}

#region Tests
[Fact]
public void SecureScoreControlDefinitions_ListAll()
{
using (var context = MockContext.Start(GetType()))
{
var securityCenterClient = GetSecurityCenterClient(context);
Assert.Throws<CloudException>(() => securityCenterClient.SecureScoreControlDefinitions.List());
}
}

[Fact]
public void SecureScoreControlDefinitions_ListBySubscription()
{
using (var context = MockContext.Start(GetType()))
{
var securityCenterClient = GetSecurityCenterClient(context);
var ret = securityCenterClient.SecureScoreControlDefinitions.ListBySubscription();
ValidateSecureScoreControlDefinitionsList(ret);
}
}

#endregion

#region Validations
private static void ValidateSecureScoreControlDefinitionsList(IPage<SecureScoreControlDefinitionItem> ret)
{
Assert.True(ret.IsAny(), "Got empty list");
foreach (var item in ret)
{
ValidateSecureScoreControlItem(item);
}
}

private static void ValidateSecureScoreControlItem(SecureScoreControlDefinitionItem item)
{
Assert.NotNull(item);
Assert.NotNull(item.DisplayName);
Assert.NotNull(item.Id);
Assert.NotNull(item.Type);
Assert.NotNull(item.AssessmentDefinitions);
Assert.NotNull(item.MaxScore);
Assert.NotNull(item.Name);
Assert.NotNull(item.Source);
Assert.Equal("Microsoft.Security/secureScoreControlDefinitions", item.Type);
Assert.NotEmpty(item.AssessmentDefinitions);
}
#endregion
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
using Microsoft.Azure.Management.Security;
using Microsoft.Azure.Management.Security.Models;
using Microsoft.Azure.Test.HttpRecorder;
using Microsoft.Rest.Azure;
using Microsoft.Rest.ClientRuntime.Azure.TestFramework;
using SecurityCenter.Tests.Helpers;
using System.Net;
using Xunit;

namespace Microsoft.Azure.Management.SecurityCenter.Tests.SecureScores
{
public class SecureScoreControlTests : TestBase
{
#region Test setup
private static readonly string AscLocation = "centralus";
private static TestEnvironment TestEnvironment { get; set; }
#endregion

private static SecurityCenterClient GetSecurityCenterClient(MockContext context)
{
if (TestEnvironment == null && HttpMockServer.Mode == HttpRecorderMode.Record)
{
TestEnvironment = TestEnvironmentFactory.GetTestEnvironment();
}

var handler = new RecordedDelegatingHandler { StatusCodeToReturn = HttpStatusCode.OK, IsPassThrough = true };

var securityCenterClient = HttpMockServer.Mode == HttpRecorderMode.Record
? context.GetServiceClient<SecurityCenterClient>(TestEnvironment, handlers: handler)
: context.GetServiceClient<SecurityCenterClient>(handlers: handler);

securityCenterClient.AscLocation = AscLocation;

return securityCenterClient;
}

#region Tests
[Fact]
public void SecureScoreControls_ListAll()
{
using (var context = MockContext.Start(GetType()))
{
var securityCenterClient = GetSecurityCenterClient(context);
var ret = securityCenterClient.SecureScoreControls.List(expand: "definitions");
ValidateSecureScoreControlsList(ret, false);
}
}

[Fact]
public void SecureScoreControls_ListAllWithDefinitions()
{
using (var context = MockContext.Start(GetType()))
{
var securityCenterClient = GetSecurityCenterClient(context);
var ret = securityCenterClient.SecureScoreControls.List(expand: "definition");
ValidateSecureScoreControlsList(ret, true);
}
}

[Fact]
public void SecureScores_Get()
{
using (var context = MockContext.Start(GetType()))
{
var securityCenterClient = GetSecurityCenterClient(context);
var ret = securityCenterClient.SecureScoreControls.ListBySecureScore("ascScore");
ValidateSecureScoreControlsList(ret, false);
}
}

[Fact]
public void SecureScores_Get_Unknown()
{
using (var context = MockContext.Start(GetType()))
{
var securityCenterClient = GetSecurityCenterClient(context);
var a = securityCenterClient.SecureScoreControls.ListBySecureScore("unknown");
Assert.Empty(a);
}
}
#endregion

#region Validations
private static void ValidateSecureScoreControlsList(IPage<SecureScoreControlDetails> ret, bool expectedMetadata)
{
Assert.True(ret.IsAny(), "Got empty list");
foreach (var item in ret)
{
ValidateSecureScoreControlItem(item, expectedMetadata);
}
}

private static void ValidateSecureScoreControlItem(SecureScoreControlDetails item, bool expectedMetadata)
{
Assert.NotNull(item);
Assert.NotNull(item.DisplayName);
Assert.NotNull(item.Id);
Assert.NotNull(item.Type);
Assert.NotNull(item.Current);
Assert.NotNull(item.Max);
Assert.NotNull(item.Weight);
Assert.NotNull(item.Percentage);
Assert.Equal(expectedMetadata, item.Definition != null);
Assert.True(item.Max >= 0);
Assert.Equal("Microsoft.Security/secureScores/secureScoreControls", item.Type);
Assert.True(item.Current >= 0.00 && item.Current <= item.Max);
Assert.True(item.Weight >= 0);
Assert.True(item.Percentage >= 0.00 && item.Percentage <= 1.00);
}
#endregion
}
}
Loading