/* 解析得到的数据,准备转换为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; } }
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); }
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()); }
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); }
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); }