Exemplo n.º 1
0
        /// <summary>
        /// Parse ResourceRecommendationBase to equivalent PSObject
        /// </summary>
        /// <param name="recommendationBase">ResourceRecommendationBase to be parsed</param>
        /// <returns>PsAzureAdvisorResourceRecommendationBase generated</returns>
        internal static PsAzureAdvisorResourceRecommendationBase GetFromResourceRecommendationBase(ResourceRecommendationBase recommendationBase)
        {
            if (recommendationBase == null)
            {
                return(null);
            }

            return(new PsAzureAdvisorResourceRecommendationBase()
            {
                Id = recommendationBase.Id,
                Category = recommendationBase.Category,
                ExtendedProperties = recommendationBase.ExtendedProperties != null ? new Dictionary <string, string>(recommendationBase.ExtendedProperties) : new Dictionary <string, string>(),
                Impact = recommendationBase.Impact,
                ImpactedField = recommendationBase.ImpactedField,
                ImpactedValue = recommendationBase.ImpactedValue,
                LastUpdated = recommendationBase.LastUpdated,
                Metadata = recommendationBase.Metadata != null ? new Dictionary <string, object>(recommendationBase.Metadata) : new Dictionary <string, object>(),
                RecommendationTypeId = recommendationBase.RecommendationTypeId,
                Risk = recommendationBase.Risk,
                ShortDescription = recommendationBase.ShortDescription != null?PsRecommendationBaseShortDescription.FromShortDescription(recommendationBase.ShortDescription) : null,
                                       SuppressionIds = recommendationBase.SuppressionIds == null ? new List <Guid?>() : recommendationBase.SuppressionIds,
                                       Name = recommendationBase.Name,
                                       Type = recommendationBase.Type,
            });
        }
        public void SuppressionsTest()
        {
            using (var context = MockContext.Start(this.GetType()))
            {
                using (var client = context.GetServiceClient <AdvisorManagementClient>())
                {
                    // get recommendations, we should get a non-empty list
                    var recs = client.Recommendations.List();
                    Assert.NotEmpty(recs);

                    ResourceRecommendationBase recommendation = null;

                    // standard properties must all be populated
                    foreach (var rec in recs)
                    {
                        Assert.False(string.IsNullOrWhiteSpace(rec.Id));
                        Assert.False(string.IsNullOrWhiteSpace(rec.Name));
                        Assert.False(string.IsNullOrWhiteSpace(rec.Type));
                        Assert.False(string.IsNullOrWhiteSpace(rec.Category));
                        Assert.False(string.IsNullOrWhiteSpace(rec.Impact));
                        Assert.False(string.IsNullOrWhiteSpace(rec.Risk));
                        Assert.NotNull(rec.ShortDescription);
                        Assert.False(string.IsNullOrWhiteSpace(rec.ShortDescription.Problem));
                        Assert.False(string.IsNullOrWhiteSpace(rec.ShortDescription.Solution));
                        if (!string.IsNullOrWhiteSpace(rec.ImpactedValue))
                        {
                            recommendation = rec;
                        }
                    }

                    // at least one recommendation must have ImpactedValue
                    Assert.NotNull(recommendation);

                    // extract the URI for the tracked resource and the recommendation name
                    var resourceUri = recommendation.Id.Substring(0,
                                                                  recommendation.Id.IndexOf("/providers/Microsoft.Advisor/recommendations",
                                                                                            StringComparison.Ordinal));
                    var recommendationName = recommendation.Name;

                    // we should be able to fetch the recommendation by name
                    var output = client.Recommendations.Get(resourceUri, recommendationName);
                    Assert.Equal(recommendation.Id, output.Id);
                    Assert.Equal(recommendation.Name, output.Name);

                    // we should be able to create a suppression with a specific TTL
                    var suppression = client.Suppressions.Create(resourceUri, recommendationName, SuppressionName,
                                                                 new SuppressionContract(ttl: TimeToLive));
                    Assert.Equal(TimeToLive, suppression.Ttl);

                    // we should be able to fetch the suppression by name
                    var sup = client.Suppressions.Get(resourceUri, recommendationName, SuppressionName);
                    Assert.Equal(sup.Name, SuppressionName);
                    Assert.Equal(sup.Id, recommendation.Id + "/suppressions/" + SuppressionName);

                    // we should be able to delete the suppression by name
                    client.Suppressions.Delete(resourceUri, recommendationName, SuppressionName);
                    var sups = client.Suppressions.List();
                    foreach (var s in sups)
                    {
                        Assert.NotEqual(SuppressionName, s.Name);
                    }
                }
            }
        }