/* 解析得到的数据,准备转换为JSON*/
        private void ResolveData()
        {
            int resolvedIndex = 0;
            int index         = 0;

            Resolved[] resolved = new Resolved[listUserInfo.Count];
            foreach (UserInfo user in listUserInfo)
            {
                /* 如果该alias以前出现过并且index > 0, 那就在以前的Alias的基础上,将该alias的信息添加到原来的Alias里面,
                 *  因为 alias的信息都是以List<string>的形式存储的*/
                if (index > 0 && IsContainsAlias(resolved, user.queryName, out resolvedIndex))
                {
                    resolved[resolvedIndex].AccountName.Add(user.userAlias);
                    resolved[resolvedIndex].DisplayName.Add(user.userDisplayName);
                    resolved[resolvedIndex].OriginalText.Add(user.queryName);
                    resolved[resolvedIndex].Type.Add(user.Type);
                }
                /* 如果该alias以前没有出现过, 就重新分配一个存储alias信息的空间 。*/
                else
                {
                    Resolved re = new Resolved();
                    re.AccountName = new List <string>()
                    {
                        (user.userAlias)
                    };
                    re.DisplayName = new List <string>()
                    {
                        (user.userDisplayName)
                    };
                    re.OriginalText = new List <string>()
                    {
                        (user.queryName)
                    };
                    re.Type = new List <string>()
                    {
                        (user.Type)
                    };
                    resolved[index++] = re;
                }
            }
            result.ResolvedResult = resolved;   /* 这是已经得到的解析好的alias的数组*/

            /*  得到处理出错的Alias的信息*/
            if (errorAlias.ToString().Length > 0)
            {
                ResolveError error = new ResolveError();
                error.OriginalText         = errorAlias.ToString();
                result.ResolvedErrorResult = error;
            }
        }
Пример #2
0
        public void DoesNotThrowWithNullError()
        {
            TestExecutionHelpers.SetUpSessionAndProfile();
            var cmdlet = new ResolveError();
            var output = cmdlet.ExecuteCmdletInPipeline <AzureErrorRecord>("Resolve-Error");

            Assert.True(output == null || output.Count == 0);
            output = cmdlet.ExecuteCmdletInPipeline <AzureErrorRecord>("Resolve-Error", new ErrorRecord[] { null, null });
            Assert.True(output == null || output.Count == 0);
            output = cmdlet.ExecuteCmdletInPipeline <AzureErrorRecord>("Resolve-Error", new ErrorRecord[] { null, new ErrorRecord(new Exception(null), null, ErrorCategory.AuthenticationError, null) });
            Assert.NotNull(output);
            Assert.Single(output);
            var record = output[0] as AzureExceptionRecord;

            Assert.NotNull(record);
            Assert.Equal(ErrorCategory.AuthenticationError, record.ErrorCategory.Category);
        }
Пример #3
0
        public void HandlesNullValuesInArmExceptions()
        {
            var runtime       = new MockCommandRuntime();
            var hyakException = new TestHyakException(null, null, null);

            var autorestException = new Microsoft.Rest.Azure.CloudException();

            var cmdlet = new ResolveError
            {
                Error = new[]
                {
                    new ErrorRecord(new Exception(), null, ErrorCategory.AuthenticationError, null),
                    new ErrorRecord(hyakException, null, ErrorCategory.ConnectionError, null),
                    new ErrorRecord(autorestException, null, ErrorCategory.InvalidOperation, null),
                },
                CommandRuntime = runtime
            };

            Assert.Throws <NotImplementedException>(() => cmdlet.ExecuteCmdlet());
            Assert.NotNull(runtime.OutputPipeline);
            Assert.Equal(3, runtime.OutputPipeline.Count);
            var errorResult = runtime.OutputPipeline[0] as AzureExceptionRecord;

            Assert.NotNull(errorResult);
            Assert.Equal(ErrorCategory.AuthenticationError, errorResult.ErrorCategory.Category);
            Assert.NotNull(errorResult.Exception);
            Assert.Equal(typeof(Exception), errorResult.Exception.GetType());
            var hyakResult = runtime.OutputPipeline[1] as AzureRestExceptionRecord;

            Assert.NotNull(hyakResult);
            Assert.Equal(ErrorCategory.ConnectionError, hyakResult.ErrorCategory.Category);
            Assert.NotNull(errorResult.Exception);
            Assert.Equal(typeof(TestHyakException), hyakResult.Exception.GetType());
            var autorestResult = runtime.OutputPipeline[2] as AzureRestExceptionRecord;

            Assert.NotNull(autorestResult);
            Assert.Equal(ErrorCategory.InvalidOperation, autorestResult.ErrorCategory.Category);
            Assert.NotNull(autorestResult.Exception);
            Assert.Equal(typeof(Microsoft.Rest.Azure.CloudException), autorestResult.Exception.GetType());
        }
Пример #4
0
        public void LastParameterFindsLastError()
        {
            TestExecutionHelpers.SetUpSessionAndProfile();
            var mock   = new MockCommandRuntime();
            var cmdlet = new ResolveError {
                CommandRuntime = mock
            };
            var message   = "RuntimeErrorMessage";
            var exception = new Exception(message);

            cmdlet.ExecuteCmdletWithExceptionInPipeline <AzureErrorRecord>("Resolve-AzureRmError", exception, new KeyValuePair <string, object>("Last", null));
            Assert.NotNull(mock.ErrorStream);
            Assert.Single(mock.ErrorStream);
            Assert.NotNull(mock.OutputPipeline);
            Assert.Single(mock.OutputPipeline);
            var record = mock.OutputPipeline[0] as AzureExceptionRecord;

            Assert.NotNull(record);
            Assert.NotNull(record.Exception);
            Assert.Equal(typeof(Exception), record.Exception.GetType());
            Assert.Equal(message, record.Message);
        }
Пример #5
0
        public void HandlesExceptionError()
        {
            var runtime = new MockCommandRuntime();
            var request = new HttpRequestMessage(HttpMethod.Get, new Uri("https://www.contoso.com/resource?api-version-1.0"));

            request.Headers.Add("x-ms-request-id", "HyakRequestId");
            var response      = new HttpResponseMessage(HttpStatusCode.BadRequest);
            var hyakException = new TestHyakException("exception message", CloudHttpRequestErrorInfo.Create(request), CloudHttpResponseErrorInfo.Create(response))
            {
                Error = new Hyak.Common.CloudError {
                    Code = "HyakCode", Message = "HyakError"
                }
            };

            var autorestException = new Microsoft.Rest.Azure.CloudException("exception message")
            {
                Body = new Microsoft.Rest.Azure.CloudError {
                    Code = "AutorestCode", Message = "Autorest message"
                },
                Request   = new Microsoft.Rest.HttpRequestMessageWrapper(request, ""),
                Response  = new Microsoft.Rest.HttpResponseMessageWrapper(response, ""),
                RequestId = "AutoRestRequestId"
            };

            var cmdlet = new ResolveError
            {
                Error = new[]
                {
                    new ErrorRecord(new Exception("exception message"), "errorCode", ErrorCategory.AuthenticationError, this),
                    new ErrorRecord(hyakException, "errorCode", ErrorCategory.ConnectionError, this),
                    new ErrorRecord(autorestException, "errorCode", ErrorCategory.InvalidOperation, this),
                },
                CommandRuntime = runtime
            };

            Assert.Throws <NotImplementedException>(() => cmdlet.ExecuteCmdlet());
            Assert.NotNull(runtime.OutputPipeline);
            Assert.Equal(3, runtime.OutputPipeline.Count);
            var errorResult = runtime.OutputPipeline[0] as AzureExceptionRecord;

            Assert.NotNull(errorResult);
            Assert.Equal(ErrorCategory.AuthenticationError, errorResult.ErrorCategory.Category);
            Assert.NotNull(errorResult.Exception);
            Assert.Equal(typeof(Exception), errorResult.Exception.GetType());
            Assert.Equal("exception message", errorResult.Exception.Message);
            var hyakResult = runtime.OutputPipeline[1] as AzureRestExceptionRecord;

            Assert.NotNull(hyakResult);
            Assert.Equal(ErrorCategory.ConnectionError, hyakResult.ErrorCategory.Category);
            Assert.NotNull(errorResult.Exception);
            Assert.Equal(typeof(TestHyakException), hyakResult.Exception.GetType());
            Assert.Equal("exception message", hyakResult.Exception.Message);
            Assert.NotNull(hyakResult.RequestMessage);
            Assert.Equal(HttpMethod.Get.ToString(), hyakResult.RequestMessage.Verb);
            Assert.Equal(new Uri("https://www.contoso.com/resource?api-version-1.0"), hyakResult.RequestMessage.Uri);
            Assert.NotNull(hyakResult.ServerResponse);
            Assert.Equal(HttpStatusCode.BadRequest.ToString(), hyakResult.ServerResponse.ResponseStatusCode);
            var autorestResult = runtime.OutputPipeline[2] as AzureRestExceptionRecord;

            Assert.NotNull(autorestResult);
            Assert.Equal(ErrorCategory.InvalidOperation, autorestResult.ErrorCategory.Category);
            Assert.NotNull(autorestResult.Exception);
            Assert.Equal(typeof(Microsoft.Rest.Azure.CloudException), autorestResult.Exception.GetType());
            Assert.Equal("exception message", autorestResult.Exception.Message);
            Assert.NotNull(autorestResult.RequestMessage);
            Assert.Equal(HttpMethod.Get.ToString(), autorestResult.RequestMessage.Verb);
            Assert.Equal(new Uri("https://www.contoso.com/resource?api-version-1.0"), autorestResult.RequestMessage.Uri);
            Assert.NotNull(autorestResult.ServerResponse);
            Assert.Equal(HttpStatusCode.BadRequest.ToString(), autorestResult.ServerResponse.ResponseStatusCode);
            Assert.Equal("AutoRestRequestId", autorestResult.RequestId);
            Assert.Contains("AutorestCode", autorestResult.ServerMessage);
            Assert.Contains("Autorest message", autorestResult.ServerMessage);
        }