private void ScenarioExecutionFinished(IAsyncResult result)
        {
            TaskLogger.LogEnter();
            object[]  array    = result.AsyncState as object[];
            ITestStep testStep = array[0] as ITestStep;

            TestCasConnectivity.TestCasConnectivityRunInstance testCasConnectivityRunInstance = array[1] as TestCasConnectivity.TestCasConnectivityRunInstance;
            IResponseTracker      responseTracker       = array[2] as IResponseTracker;
            CasTransactionOutcome casTransactionOutcome = array[3] as CasTransactionOutcome;
            SecureString          secureString          = array[4] as SecureString;

            try
            {
                testStep.EndExecute(result);
                this.CompleteSuccessfulOutcome(casTransactionOutcome, testCasConnectivityRunInstance, responseTracker);
            }
            catch (Exception ex)
            {
                testCasConnectivityRunInstance.Outcomes.Enqueue(TestWebApplicationConnectivity2.GenerateVerboseMessage(ex.ToString()));
                this.CompleteFailedOutcome(casTransactionOutcome, testCasConnectivityRunInstance, responseTracker, ex);
            }
            finally
            {
                TaskLogger.LogExit();
                if (secureString != null)
                {
                    secureString.Dispose();
                }
                if (testCasConnectivityRunInstance != null)
                {
                    testCasConnectivityRunInstance.Outcomes.Enqueue(casTransactionOutcome);
                    testCasConnectivityRunInstance.Result.Complete();
                }
            }
        }
Пример #2
0
 internal static LocalizedException SetExchangePrincipalInformation(TestCasConnectivity.TestCasConnectivityRunInstance instance, ADUser user)
 {
     if (instance == null)
     {
         return(new LocalizedException(Strings.ErrorNullParameter("instance")));
     }
     if (user == null)
     {
         return(new LocalizedException(Strings.ErrorNullParameter("user")));
     }
     if (instance.exchangePrincipal == null)
     {
         try
         {
             if (user is ADSystemMailbox)
             {
                 throw new NotSupportedException("not supported for ADSystemMailbox");
             }
             instance.exchangePrincipal = ExchangePrincipal.FromADUser(user, null);
         }
         catch (ObjectNotFoundException result)
         {
             return(result);
         }
         catch (InvalidCastException innerException)
         {
             return(new LocalizedException(Strings.ErrorInvalidCasting, innerException));
         }
         catch (LocalizedException result2)
         {
             return(result2);
         }
     }
     return(null);
 }
 protected sealed override List <CasTransactionOutcome> ExecuteTests(TestCasConnectivity.TestCasConnectivityRunInstance instance)
 {
     TaskLogger.LogEnter();
     try
     {
         VirtualDirectoryUriScope virtualDirectoryUriScope;
         Uri testUri = this.GetTestUri(instance, out virtualDirectoryUriScope);
         base.WriteVerbose(Strings.CasHealthWebAppStartTest(testUri));
         IRequestAdapter    requestAdapter    = this.CreateRequestAdapter(virtualDirectoryUriScope);
         IExceptionAnalyzer exceptionAnalyzer = this.CreateExceptionAnalyzer(testUri);
         IResponseTracker   responseTracker   = this.CreateResponseTracker();
         IHttpSession       session           = this.CreateHttpSession(requestAdapter, exceptionAnalyzer, responseTracker, instance);
         this.HookupEventHandlers(session);
         CasTransactionOutcome casTransactionOutcome = this.CreateOutcome(instance, testUri, responseTracker);
         string       userName;
         string       domain;
         SecureString secureString;
         this.GetUserParameters(instance, out userName, out domain, out secureString);
         ITestStep testStep = this.CreateScenario(instance, testUri, userName, domain, secureString, virtualDirectoryUriScope, instance.CasFqdn);
         testStep.BeginExecute(session, new AsyncCallback(this.ScenarioExecutionFinished), new object[]
         {
             testStep,
             instance,
             responseTracker,
             casTransactionOutcome,
             secureString
         });
     }
     finally
     {
         TaskLogger.LogExit();
     }
     return(null);
 }
Пример #4
0
        private WebApplication GetWebApplication(TestCasConnectivity.TestCasConnectivityRunInstance instance)
        {
            CasTransactionOutcome casTransactionOutcome = base.CreateLogonOutcome(instance);
            WebApplication        result = null;

            try
            {
                WebApplication webApplication = this.CreateWebApplication(instance);
                if (webApplication.ValidateLogin())
                {
                    casTransactionOutcome.Update(CasTransactionResultEnum.Success, LocalizedString.Empty);
                    result = webApplication;
                }
                else
                {
                    casTransactionOutcome.Update(CasTransactionResultEnum.Failure, Strings.CasHealthOwaNoLogonCookieReturned);
                }
            }
            catch (AuthenticationException ex)
            {
                casTransactionOutcome.Update(CasTransactionResultEnum.Failure, Strings.CasHealthWebAppNoSession(instance.CasFqdn, ex.LocalizedString, (ex.InnerException != null) ? ex.GetBaseException().Message : ""));
            }
            catch (WebException ex2)
            {
                casTransactionOutcome.Update(CasTransactionResultEnum.Failure, Strings.CasHealthWebAppNoSession(instance.CasFqdn, ex2.Message, (ex2.InnerException != null) ? ex2.GetBaseException().Message : ""));
            }
            instance.Outcomes.Enqueue(casTransactionOutcome);
            instance.Result.Outcomes.Add(casTransactionOutcome);
            return(result);
        }
 internal override CasTransactionOutcome CreateOutcome(TestCasConnectivity.TestCasConnectivityRunInstance instance, Uri testUri, IResponseTracker responseTracker)
 {
     return(new TestEcpConnectivityOutcome(instance.CasFqdn, (instance.exchangePrincipal == null) ? null : instance.exchangePrincipal.MailboxInfo.Location.ServerFqdn, Strings.CasHealthEcpScenarioTestWebService, Strings.CasHealthEcpScenarioTestWebServiceDescription, "Logon Latency", base.LocalSiteName, instance.trustAllCertificates, instance.credentials.UserName, instance.VirtualDirectoryName, testUri, instance.UrlType)
     {
         HttpData = responseTracker.Items
     });
 }
        protected override List <TestCasConnectivity.TestCasConnectivityRunInstance> PopulateInfoPerCas(TestCasConnectivity.TestCasConnectivityRunInstance instance, List <CasTransactionOutcome> outcomeList)
        {
            TaskLogger.LogEnter();
            List <TestCasConnectivity.TestCasConnectivityRunInstance> result;

            try
            {
                if (base.Fields.IsModified("ConnectionUri"))
                {
                    base.WriteVerbose(Strings.CasHealthOwaTestUrlSpecified(this.ConnectionUri.AbsoluteUri));
                    TestCasConnectivity.TestCasConnectivityRunInstance testCasConnectivityRunInstance = new TestCasConnectivity.TestCasConnectivityRunInstance(instance);
                    testCasConnectivityRunInstance.baseUri = TestCasConnectivity.GetUrlWithTrailingSlash(this.ConnectionUri);
                    testCasConnectivityRunInstance.UrlType = VirtualDirectoryUriScope.Unknown;
                    testCasConnectivityRunInstance.CasFqdn = null;
                    result = new List <TestCasConnectivity.TestCasConnectivityRunInstance>
                    {
                        testCasConnectivityRunInstance
                    };
                }
                else
                {
                    result = base.PopulateInfoPerCas(instance, outcomeList);
                }
            }
            finally
            {
                TaskLogger.LogExit();
            }
            return(result);
        }
        internal override void UpdateTransientErrorCache(TestCasConnectivity.TestCasConnectivityRunInstance instance, int cFailed, int cWarning, ref int cFailedTransactions, ref int cWarningTransactions, StringBuilder failedStr, StringBuilder warningStr, ref StringBuilder failedTransactionsStr, ref StringBuilder warningTransactionsStr)
        {
            TransientErrorCache transientErrorCache = this.GetTransientErrorCache();
            string text = (instance.exchangePrincipal != null) ? instance.exchangePrincipal.MailboxInfo.Location.ServerFqdn : null;

            if (cFailed > 0 || cWarning > 0)
            {
                if (transientErrorCache != null && !string.IsNullOrEmpty(text) && !transientErrorCache.ContainsError(text, instance.VirtualDirectoryName))
                {
                    transientErrorCache.Add(new CASServiceError(text, instance.VirtualDirectoryName));
                    return;
                }
                if (cFailed > 0)
                {
                    cFailedTransactions += cFailed;
                    failedTransactionsStr.Append(failedStr);
                }
                if (cWarning > 0)
                {
                    cWarningTransactions += cWarning;
                    warningTransactionsStr.Append(warningStr);
                    return;
                }
            }
            else if (transientErrorCache != null && !string.IsNullOrEmpty(text) && !string.IsNullOrEmpty(instance.VirtualDirectoryName))
            {
                transientErrorCache.Remove(text, instance.VirtualDirectoryName);
            }
        }
Пример #8
0
 protected override List <CasTransactionOutcome> BuildPerformanceOutcomes(TestCasConnectivity.TestCasConnectivityRunInstance instance, string mbxFqdn)
 {
     return(new List <CasTransactionOutcome>
     {
         new CasTransactionOutcome(instance.CasFqdn, Strings.TestProtocolConnectivity(this.CurrentProtocol), Strings.ProtocolConnectivityScenario(this.CurrentProtocol), this.MonitoringLatencyPerformanceCounter(), base.LocalSiteName, true, instance.credentials.UserName)
     });
 }
Пример #9
0
 protected override List <CasTransactionOutcome> BuildPerformanceOutcomes(TestCasConnectivity.TestCasConnectivityRunInstance instance, string mailboxFqdn)
 {
     return(new List <CasTransactionOutcome>
     {
         this.CreateLogonOutcome(instance)
     });
 }
Пример #10
0
 private TestCasConnectivity.TestCasConnectivityRunInstance CreateRunInstanceForVirtualDirectory(TestCasConnectivity.TestCasConnectivityRunInstance clientAccessServerInstance, ExchangeVirtualDirectory virtualDirectory)
 {
     TestCasConnectivity.TestCasConnectivityRunInstance testCasConnectivityRunInstance = new TestCasConnectivity.TestCasConnectivityRunInstance(clientAccessServerInstance)
     {
         UrlType          = (this.UseInternalUrl ? VirtualDirectoryUriScope.Internal : VirtualDirectoryUriScope.External),
         VirtualDirectory = virtualDirectory
     };
     base.WriteVerbose(Strings.CasHealthWebAppAddingTestInstance(clientAccessServerInstance.CasFqdn, testCasConnectivityRunInstance.baseUri.AbsoluteUri));
     return(testCasConnectivityRunInstance);
 }
 protected Uri GetTestUri(TestCasConnectivity.TestCasConnectivityRunInstance instance, out VirtualDirectoryUriScope uriType)
 {
     if (this.explicitlySetUrl != null)
     {
         uriType = VirtualDirectoryUriScope.Unknown;
         return(this.explicitlySetUrl);
     }
     uriType = instance.UrlType;
     return(instance.baseUri);
 }
Пример #12
0
        protected override WebSession CreateWebSession(TestCasConnectivity.TestCasConnectivityRunInstance instance)
        {
            ExchangeWebAppVirtualDirectory exchangeWebAppVirtualDirectory = (ExchangeWebAppVirtualDirectory)instance.VirtualDirectory;

            if (exchangeWebAppVirtualDirectory.LiveIdAuthentication && instance.UrlType == VirtualDirectoryUriScope.Internal)
            {
                return(new WindowsLiveIdWebSession(TestCasConnectivity.GetUrlWithTrailingSlash(exchangeWebAppVirtualDirectory.ExternalUrl), instance.baseUri, instance.credentials, instance.LiveIdAuthenticationConfiguration));
            }
            return(base.CreateWebSession(instance));
        }
Пример #13
0
        protected override void ExecuteTestConnectivity(TestCasConnectivity.TestCasConnectivityRunInstance instance)
        {
            int perConnectionTimeout = base.PerConnectionTimeout;
            CasTransactionOutcome casTransactionOutcome = new CasTransactionOutcome(base.CasFqdn, Strings.TestProtocolConnectivity("POP3"), Strings.ProtocolConnectivityScenario("POP3"), "POPConnectivity-Latency", base.LocalSiteName, false, instance.credentials.UserName);

            if (base.PortClientAccessServer == 0)
            {
                switch (base.ConnectionType)
                {
                case ProtocolConnectionType.Plaintext:
                case ProtocolConnectionType.Tls:
                    base.PortClientAccessServer = 110;
                    break;

                case ProtocolConnectionType.Ssl:
                    base.PortClientAccessServer = 995;
                    break;
                }
            }
            else
            {
                switch (base.ConnectionType)
                {
                case ProtocolConnectionType.Plaintext:
                case ProtocolConnectionType.Tls:
                    if (110 != base.PortClientAccessServer)
                    {
                        instance.Outcomes.Enqueue(new Warning(Strings.PopImapTransactionWarning(base.PortClientAccessServer, base.ConnectionType.ToString(), 995, 110)));
                    }
                    break;

                case ProtocolConnectionType.Ssl:
                    if (995 != base.PortClientAccessServer)
                    {
                        instance.Outcomes.Enqueue(new Warning(Strings.PopImapTransactionWarning(base.PortClientAccessServer, base.ConnectionType.ToString(), 995, 110)));
                    }
                    break;
                }
            }
            casTransactionOutcome.Port           = base.PortClientAccessServer;
            casTransactionOutcome.ConnectionType = base.ConnectionType;
            instance.Port           = base.PortClientAccessServer;
            instance.ConnectionType = base.ConnectionType;
            LocalizedString localizedString = Strings.ProtocolTransactionsDetails(base.CasFqdn, string.IsNullOrEmpty(base.MailboxFqdn) ? base.User.ServerName : base.MailboxFqdn, base.User.Database.Name, base.User.PrimarySmtpAddress.ToString(), base.PortClientAccessServer.ToString(CultureInfo.InvariantCulture), base.ConnectionType.ToString(), this.trustAllCertificates);

            instance.Outcomes.Enqueue(localizedString);
            this.transactionTarget = new PopTransaction(base.User, this.casToTest.Name, instance.credentials.Password, base.PortClientAccessServer);
            this.transactionTarget.ConnectionType         = base.ConnectionType;
            this.transactionTarget.TrustAnySslCertificate = instance.trustAllCertificates;
            this.transactionTarget.MailSubject            = base.MailSubject;
            this.transactionTarget.TransactionResult      = casTransactionOutcome;
            this.transactionTarget.Instance = instance;
            this.transactionTarget.Execute();
        }
Пример #14
0
        private void ExecuteCalendarVDirTests(TestCasConnectivity.TestCasConnectivityRunInstance instance, CasTransactionOutcome outcome)
        {
            string            text              = string.Format("{0}/Calendar/calendar.html", instance.exchangePrincipal.MailboxInfo.PrimarySmtpAddress.ToString());
            string            text2             = string.Format("{0}/Calendar/calendar.ics", instance.exchangePrincipal.MailboxInfo.PrimarySmtpAddress.ToString());
            ADSessionSettings adsessionSettings = instance.exchangePrincipal.MailboxInfo.OrganizationId.ToADSessionSettings();
            IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(null, true, ConsistencyMode.IgnoreInvalid, null, adsessionSettings, 293, "ExecuteCalendarVDirTests", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Monitoring\\Tasks\\TestCalendarConnectivity.cs");

            using (MailboxCalendarFolderDataProvider mailboxCalendarFolderDataProvider = new MailboxCalendarFolderDataProvider(adsessionSettings, DirectoryHelper.ReadADRecipient(instance.exchangePrincipal.MailboxInfo.MailboxGuid, instance.exchangePrincipal.MailboxInfo.IsArchive, tenantOrRootOrgRecipientSession) as ADUser, "Test-CalendarConnectivity"))
            {
                StoreObjectId defaultFolderId = mailboxCalendarFolderDataProvider.MailboxSession.GetDefaultFolderId(DefaultFolderType.Calendar);
                Microsoft.Exchange.Data.Storage.Management.MailboxFolderId identity = new Microsoft.Exchange.Data.Storage.Management.MailboxFolderId(instance.exchangePrincipal.ObjectId, defaultFolderId, null);
                MailboxCalendarFolder mailboxCalendarFolder = (MailboxCalendarFolder)mailboxCalendarFolderDataProvider.Read <MailboxCalendarFolder>(identity);
                if (!mailboxCalendarFolder.PublishEnabled)
                {
                    mailboxCalendarFolder.SearchableUrlEnabled = true;
                    mailboxCalendarFolder.PublishEnabled       = true;
                    mailboxCalendarFolder.PublishedCalendarUrl = new Uri(instance.baseUri, text).ToString();
                    mailboxCalendarFolder.PublishedICalUrl     = new Uri(instance.baseUri, text2).ToString();
                    try
                    {
                        mailboxCalendarFolderDataProvider.Save(mailboxCalendarFolder);
                    }
                    catch (NotAllowedPublishingByPolicyException ex)
                    {
                        instance.Outcomes.Enqueue(new Warning(ex.LocalizedString));
                        return;
                    }
                }
            }
            ADOwaVirtualDirectory adowaVirtualDirectory = instance.VirtualDirectory as ADOwaVirtualDirectory;

            if (adowaVirtualDirectory != null && !(adowaVirtualDirectory.AnonymousFeaturesEnabled != true))
            {
                base.WriteMonitoringEvent(1104, this.MonitoringEventSource, EventTypeEnumeration.Success, Strings.CasHealthCalendarVDirSuccess);
                TimeSpan latency;
                if (!this.TestCalendarUrlResponse(text2, instance, TestCalendarConnectivity.CalendarContext.ICalContext, out latency))
                {
                    outcome.Update(CasTransactionResultEnum.Failure);
                }
                else
                {
                    outcome.UpdateLatency(latency);
                }
                if (!this.TestCalendarUrlResponse(text, instance, TestCalendarConnectivity.CalendarContext.ViewCalendarContext, out latency))
                {
                    outcome.Update(CasTransactionResultEnum.Failure);
                }
                return;
            }
            instance.Outcomes.Enqueue(new Warning(Strings.CasHealthCalendarVDirWarning(instance.VirtualDirectoryName, instance.CasFqdn)));
            outcome.Update(CasTransactionResultEnum.Skipped);
            base.WriteMonitoringEvent(1105, this.MonitoringEventSource, EventTypeEnumeration.Warning, Strings.CasHealthCalendarVDirWarning(instance.VirtualDirectoryName, instance.CasFqdn));
        }
Пример #15
0
        private bool SetUpConnTestSendTestMessage(TestCasConnectivity.TestCasConnectivityRunInstance instance, MailboxSession mailboxSession, out CasTransactionOutcome outcome)
        {
            outcome = null;
            if (this.SendTestMessage)
            {
                outcome = this.BuildOutcome(Strings.DatabaseStatus, Strings.CheckDatabaseStatus(this.user.Database.Name), instance);
                bool      flag = false;
                Exception ex   = this.CheckDatabaseStatus(this.user.Database.Name, this.MailboxFqdn, ref flag);
                if (!flag)
                {
                    if (ex == null)
                    {
                        goto IL_16C;
                    }
                }
                try
                {
                    outcome = this.BuildOutcome(Strings.SendMessage, Strings.SendMessage, instance);
                    using (MessageItem messageItem = MessageItem.Create(mailboxSession, mailboxSession.GetDefaultFolderId(DefaultFolderType.Inbox)))
                    {
                        this.mailSubject    = this.MailSubjectPrefix + Guid.NewGuid().ToString();
                        messageItem.Subject = this.MailSubject;
                        using (TextWriter textWriter = messageItem.Body.OpenTextWriter(BodyFormat.TextPlain))
                        {
                            textWriter.Write("Body of -");
                            textWriter.Write(this.MailSubject);
                        }
                        messageItem.IsReadReceiptRequested = false;
                        messageItem.Save(SaveMode.NoConflictResolution);
                        instance.Outcomes.Enqueue(Strings.TestMessageSent(this.MailSubject, this.user.PrimarySmtpAddress.ToString()));
                    }
                    return(true);
                }
                catch (LocalizedException exception)
                {
                    base.WriteMonitoringEvent(2008, this.CmdletMonitoringEventSource, EventTypeEnumeration.Error, base.ShortErrorMsgFromException(exception));
                    outcome.Update(CasTransactionResultEnum.Failure);
                    return(false);
                }
IL_16C:
                if (ex != null)
                {
                    outcome.Update(CasTransactionResultEnum.Failure, ex.Message);
                }
                else
                {
                    outcome.Update(CasTransactionResultEnum.Failure);
                }
                return(false);
            }
            return(true);
        }
 private void GetUserParameters(TestCasConnectivity.TestCasConnectivityRunInstance instance, out string userName, out string userDomain, out SecureString password)
 {
     if (this.explicitlySetMailboxCredential != null)
     {
         userName   = this.explicitlySetMailboxCredential.UserName;
         userDomain = null;
         password   = this.explicitlySetMailboxCredential.Password.Copy();
         return;
     }
     userName   = instance.credentials.UserName;
     userDomain = instance.credentials.Domain;
     password   = instance.credentials.Password.ConvertToSecureString();
 }
Пример #17
0
        private bool SetUpConnectivityTests(TestCasConnectivity.TestCasConnectivityRunInstance instance, out CasTransactionOutcome outcome)
        {
            MailboxSession mailboxSession = null;

            outcome = new CasTransactionOutcome(base.CasFqdn, Strings.ValidatingTestCasConnectivityRunInstance, Strings.ValidatingTestCasConnectivityRunInstance, this.MonitoringLatencyPerformanceCounter(), base.LocalSiteName, true, string.Empty);
            if (instance == null)
            {
                base.WriteMonitoringEvent(2020, this.CmdletMonitoringEventSource, EventTypeEnumeration.Error, base.ShortErrorMsgFromException(new ArgumentNullException("instance")));
                outcome.Update(CasTransactionResultEnum.Failure);
                return(false);
            }
            this.userName = instance.credentials.UserName;
            if (!this.SetUpConnTestValidateAndMakeADUser(instance, out outcome))
            {
                return(false);
            }
            if (!this.SetUpConnTestSetExchangePrincipal(instance, out outcome))
            {
                return(false);
            }
            if (instance.credentials.Password == null)
            {
                base.WriteMonitoringEvent(2020, this.CmdletMonitoringEventSource, EventTypeEnumeration.Error, base.ShortErrorMsgFromException(new ArgumentNullException("password")));
                outcome.Update(CasTransactionResultEnum.Failure);
                return(false);
            }
            if (instance.LightMode)
            {
                return(true);
            }
            try
            {
                if (!this.SetUpConnTestSetCreateMailboxSession(instance, out mailboxSession, out outcome))
                {
                    return(false);
                }
                if (!this.SetUpConnTestSendTestMessage(instance, mailboxSession, out outcome))
                {
                    return(false);
                }
            }
            finally
            {
                if (mailboxSession != null)
                {
                    mailboxSession.Dispose();
                    mailboxSession = null;
                }
            }
            return(true);
        }
Пример #18
0
        private void ExecuteWebServiceTest(TestCasConnectivity.TestCasConnectivityRunInstance instance, WebApplication webApplication)
        {
            StringBody stringBody = new StringBody("{\"filter\":{\"SearchText\":\"\"},\"sort\":{\"Direction\":0,\"PropertyName\":\"Name\"}}");

            stringBody.ContentType = new System.Net.Mime.ContentType("application/json");
            string text        = "RulesEditor/InboxRules.svc/GetList";
            string relativeUrl = "default.aspx";
            CasTransactionOutcome casTransactionOutcome = this.BuildOutcome(Strings.CasHealthEcpScenarioTestWebService, Strings.CasHealthEcpTestWebService(new Uri(webApplication.BaseUri, text).ToString()), "ECP Web Sevice Logon Latency", instance);
            bool   flag = false;
            string additionalInformation = "";

            try
            {
                TextResponse textResponse = webApplication.Get <TextResponse>(relativeUrl);
                flag = (textResponse.StatusCode == HttpStatusCode.OK);
                additionalInformation = (flag ? "" : Strings.CasHealthEcpServiceRequestResult(textResponse.StatusCode.ToString()));
                base.WriteVerbose(Strings.CasHealthEcpServiceResponse(textResponse.Text));
                if (flag)
                {
                    textResponse          = webApplication.Post <TextResponse>(text, stringBody);
                    flag                  = (textResponse.StatusCode == HttpStatusCode.OK);
                    additionalInformation = (flag ? "" : Strings.CasHealthEcpServiceRequestResult(textResponse.StatusCode.ToString()));
                    base.WriteVerbose(Strings.CasHealthEcpServiceResponse(textResponse.Text));
                }
            }
            catch (WebException ex)
            {
                string casServer    = string.Empty;
                string fullResponse = string.Empty;
                if (ex.Response != null)
                {
                    casServer = ex.Response.Headers["X-DiagInfo"];
                    try
                    {
                        fullResponse = this.GetResponseHtml(ex.Response);
                    }
                    catch (Exception ex2)
                    {
                        if (!(ex2 is ProtocolViolationException) && !(ex2 is IOException) && !(ex2 is NotSupportedException))
                        {
                            throw;
                        }
                    }
                }
                additionalInformation = Strings.CasHealthEcpServiceRequestException(ex.Message, casServer, fullResponse);
            }
            casTransactionOutcome.Update(flag ? CasTransactionResultEnum.Success : CasTransactionResultEnum.Failure, additionalInformation);
            instance.Outcomes.Enqueue(casTransactionOutcome);
            instance.Result.Outcomes.Add(casTransactionOutcome);
        }
Пример #19
0
        protected override List <CasTransactionOutcome> ExecuteTests(TestCasConnectivity.TestCasConnectivityRunInstance instance)
        {
            CasTransactionOutcome casTransactionOutcome = null;

            if (!this.SetUpConnectivityTests(instance, out casTransactionOutcome))
            {
                instance.Outcomes.Enqueue(casTransactionOutcome);
                instance.Result.Outcomes.Add(casTransactionOutcome);
                instance.Result.Complete();
                return(null);
            }
            this.ExecuteTestConnectivity(instance);
            return(null);
        }
Пример #20
0
        internal override void CompleteFailedOutcome(CasTransactionOutcome outcome, TestCasConnectivity.TestCasConnectivityRunInstance instance, IResponseTracker responseTracker, Exception e)
        {
            TestEcpConnectivityOutcome testEcpConnectivityOutcome = outcome as TestEcpConnectivityOutcome;
            ScenarioException          scenarioException          = e.GetScenarioException();

            if (scenarioException != null)
            {
                testEcpConnectivityOutcome.FailureSource    = scenarioException.FailureSource.ToString();
                testEcpConnectivityOutcome.FailureReason    = scenarioException.FailureReason.ToString();
                testEcpConnectivityOutcome.FailingComponent = scenarioException.FailingComponent.ToString();
            }
            testEcpConnectivityOutcome.Update(CasTransactionResultEnum.Failure, (scenarioException != null) ? scenarioException.Message.ToString() : e.Message.ToString(), EventTypeEnumeration.Error);
            base.WriteMonitoringEvent(1001, this.MonitoringEventSource, EventTypeEnumeration.Error, Strings.CasHealthTransactionFailures((scenarioException != null) ? scenarioException.Message.ToString() : e.Message.ToString()));
        }
Пример #21
0
        internal override ITestStep CreateScenario(TestCasConnectivity.TestCasConnectivityRunInstance instance, Uri testUri, string userName, string domain, SecureString password, VirtualDirectoryUriScope testType, string serverFqdn)
        {
            ITestFactory testFactory = new TestFactory();
            ITestStep    result;

            if (testType == VirtualDirectoryUriScope.Internal || testType == VirtualDirectoryUriScope.Unknown)
            {
                result = testFactory.CreateEcpLoginScenario(testUri, userName, domain, password, testFactory);
            }
            else
            {
                result = testFactory.CreateEcpExternalLoginAgainstSpecificServerScenario(testUri, userName, domain, password, serverFqdn, testFactory);
            }
            return(result);
        }
Пример #22
0
        public static WebSession GetWebSession(TestCasConnectivity.TestCasConnectivityRunInstance instance)
        {
            ExchangeWebAppVirtualDirectory exchangeWebAppVirtualDirectory = (ExchangeWebAppVirtualDirectory)instance.VirtualDirectory;
            Uri baseUri = instance.baseUri;
            NetworkCredential credentials = instance.credentials;

            if (exchangeWebAppVirtualDirectory.LiveIdAuthentication)
            {
                return(new WindowsLiveIdWebSession(baseUri, credentials, instance.LiveIdAuthenticationConfiguration));
            }
            if (exchangeWebAppVirtualDirectory.FormsAuthentication)
            {
                return(new FbaWebSession(baseUri, credentials));
            }
            return(new AuthenticateWebSession(baseUri, credentials));
        }
Пример #23
0
 private bool SetUpConnTestSetExchangePrincipal(TestCasConnectivity.TestCasConnectivityRunInstance instance, out CasTransactionOutcome outcome)
 {
     outcome = null;
     if (instance.exchangePrincipal == null)
     {
         outcome = new CasTransactionOutcome(base.CasFqdn, Strings.CreateExchangePrincipalObject, Strings.CreateExchangePrincipalObject, this.MonitoringLatencyPerformanceCounter(), base.LocalSiteName, false, this.userName);
         LocalizedException ex = ProtocolConnectivity.SetExchangePrincipalInformation(instance, this.User);
         if (ex != null)
         {
             base.WriteMonitoringEvent(2021, this.CmdletMonitoringEventSource, EventTypeEnumeration.Error, base.ShortErrorMsgFromException(ex));
             outcome.Update(CasTransactionResultEnum.Failure);
             return(false);
         }
         outcome.Update(CasTransactionResultEnum.Success);
     }
     return(true);
 }
        private bool ValidateExternalTest(TestCasConnectivity.TestCasConnectivityRunInstance instance)
        {
            bool result = true;

            if (string.Compare(instance.VirtualDirectory.Name, "PowerShell-LiveID (Default Web Site)", true) == 0)
            {
                base.WriteVerbose(Strings.CasHealthPowerShellSkipCertVDir("PS liveID ExternalUrl"));
                result = false;
            }
            else
            {
                this.GetRpsCertificateThumbprint();
                if (this.certThumbprint == null)
                {
                    this.WriteWarning(Strings.CasHealthPowerShellSkipCertVDir("PS ExternalUrl without ForwardSync Certificate"));
                    result = false;
                }
            }
            return(result);
        }
Пример #25
0
        private bool SetUpConnTestValidateAndMakeADUser(TestCasConnectivity.TestCasConnectivityRunInstance instance, out CasTransactionOutcome outcome)
        {
            outcome = new CasTransactionOutcome(base.CasFqdn, Strings.ValidatingUserObject, Strings.ValidatingUserObjectDescription, this.MonitoringLatencyPerformanceCounter(), base.LocalSiteName, false, this.userName);
            LocalizedException ex = ProtocolConnectivity.SetUserInformation(instance, this.recipientSession, ref this.user);

            if (ex != null)
            {
                base.WriteMonitoringEvent(2001, this.CmdletMonitoringEventSource, EventTypeEnumeration.Error, base.ShortErrorMsgFromException(ex));
                outcome.Update(CasTransactionResultEnum.Failure);
                return(false);
            }
            if (this.user != null && !this.user.IsMailboxEnabled)
            {
                UserIsNotMailBoxEnabledException exception = new UserIsNotMailBoxEnabledException(instance.credentials.UserName);
                base.WriteMonitoringEvent(2003, this.CmdletMonitoringEventSource, EventTypeEnumeration.Error, base.ShortErrorMsgFromException(exception));
                outcome.Update(CasTransactionResultEnum.Failure);
                return(false);
            }
            outcome.Update(CasTransactionResultEnum.Success);
            return(true);
        }
Пример #26
0
 private bool ShouldTestVirtualDirectory(TestCasConnectivity.TestCasConnectivityRunInstance clientAccessServerInstance, List <CasTransactionOutcome> outcomeList, ExchangeVirtualDirectory virtualDirectory)
 {
     if (this.IsOrphanVdir(virtualDirectory))
     {
         this.WriteWarning(Strings.CasHealthWebAppOrphanVirtualDirectory(this.ApplicationShortName, virtualDirectory.Name));
         CasTransactionOutcome casTransactionOutcome = this.CreateVirtualDirectoryConfigErrorOutcome(clientAccessServerInstance, virtualDirectory);
         this.TestFailedBadVdirConfig(casTransactionOutcome);
         base.WriteObject(casTransactionOutcome);
         outcomeList.Add(casTransactionOutcome);
         return(false);
     }
     if ((this.UseInternalUrl && (virtualDirectory.InternalUrl == null || string.IsNullOrEmpty(virtualDirectory.InternalUrl.AbsoluteUri))) || (!this.UseInternalUrl && (virtualDirectory.ExternalUrl == null || string.IsNullOrEmpty(virtualDirectory.ExternalUrl.AbsoluteUri))))
     {
         CasTransactionOutcome casTransactionOutcome2 = this.CreateVirtualDirectoryConfigErrorOutcome(clientAccessServerInstance, virtualDirectory);
         this.TestFailedUrlPropertyNotSet(casTransactionOutcome2);
         base.WriteObject(casTransactionOutcome2);
         outcomeList.Add(casTransactionOutcome2);
         return(false);
     }
     return(true);
 }
Пример #27
0
        private WebSession GetWebSession(TestCasConnectivity.TestCasConnectivityRunInstance instance)
        {
            WebSession webSession = this.CreateWebSession(instance);

            if (instance.UrlType == VirtualDirectoryUriScope.Internal)
            {
                webSession.TrustAnySSLCertificate = true;
                base.WriteVerbose(Strings.CasHealthOwaInternalTrustCertificate);
            }
            else if (instance.trustAllCertificates)
            {
                webSession.TrustAnySSLCertificate = true;
                base.WriteVerbose(Strings.CasHealthOwaTrustAnyCertificate);
            }
            webSession.SendingRequest += delegate(object sender, HttpWebRequestEventArgs e)
            {
                LocalizedString localizedString = Strings.CasHealthWebAppSendingRequest(e.Request.RequestUri);
                instance.Outcomes.Enqueue(localizedString);
            };
            webSession.ResponseReceived += delegate(object sender, HttpWebResponseEventArgs e)
            {
                if (e.Response != null)
                {
                    string          responseHeader  = e.Response.GetResponseHeader("X-DiagInfo");
                    LocalizedString localizedString = Strings.CasHealthWebAppResponseReceived(e.Response.ResponseUri, e.Response.StatusCode, responseHeader ?? string.Empty, TestWebApplicationConnectivity.GetResponseAdditionalInformation(e.Response));
                    instance.Outcomes.Enqueue(localizedString);
                }
            };
            webSession.RequestException += delegate(object sender, WebExceptionEventArgs e)
            {
                if (e.Response != null)
                {
                    string          responseHeader  = e.Response.GetResponseHeader("X-DiagInfo");
                    LocalizedString localizedString = Strings.CasHealthWebAppRequestException(e.Request.RequestUri, e.Exception.Status, responseHeader ?? string.Empty, e.Exception.Message);
                    instance.Outcomes.Enqueue(localizedString);
                }
            };
            webSession.Initialize();
            return(webSession);
        }
Пример #28
0
 protected override List <CasTransactionOutcome> ExecuteTests(TestCasConnectivity.TestCasConnectivityRunInstance instance)
 {
     TaskLogger.LogEnter();
     try
     {
         instance.baseUri = new UriBuilder(new Uri(instance.baseUri, "calendar/"))
         {
             Scheme = Uri.UriSchemeHttp,
             Port   = 80
         }.Uri;
         CasTransactionOutcome casTransactionOutcome = this.BuildOutcome(base.ApplicationShortName, base.ApplicationName, instance);
         casTransactionOutcome.Update(CasTransactionResultEnum.Success);
         this.ExecuteCalendarVDirTests(instance, casTransactionOutcome);
         instance.Result.Outcomes.Add(casTransactionOutcome);
     }
     finally
     {
         instance.Result.Complete();
         TaskLogger.LogExit();
     }
     return(null);
 }
Пример #29
0
 protected override List <CasTransactionOutcome> ExecuteTests(TestCasConnectivity.TestCasConnectivityRunInstance instance)
 {
     TaskLogger.LogEnter();
     instance.liveRSTEndpointUri = this.liveRSTEndpoint;
     try
     {
         base.WriteVerbose(Strings.CasHealthWebAppStartTest(instance.baseUri));
         WebApplication webApplication = this.GetWebApplication(instance);
         if (webApplication != null)
         {
             this.ExecuteWebApplicationTests(instance, webApplication);
         }
         else
         {
             instance.Result.Complete();
         }
     }
     finally
     {
         TaskLogger.LogExit();
     }
     return(null);
 }
Пример #30
0
        private bool SetUpConnTestSetCreateMailboxSession(TestCasConnectivity.TestCasConnectivityRunInstance instance, out MailboxSession mailboxSession, out CasTransactionOutcome outcome)
        {
            this.mailboxFqdn = instance.exchangePrincipal.MailboxInfo.Location.ServerFqdn;
            string text = string.Empty;

            mailboxSession = null;
            outcome        = null;
            try
            {
                outcome        = this.BuildOutcome(Strings.CreateMailboxSession, Strings.CreateMailboxSessionDetail(this.User.PrimarySmtpAddress.ToString()), instance);
                mailboxSession = MailboxSession.OpenAsAdmin(instance.exchangePrincipal, CultureInfo.InvariantCulture, "Client=Monitoring;Action=System Management");
            }
            catch (StorageTransientException exception)
            {
                text = ProtocolConnectivity.ShortErrorMessageFromException(exception);
                new MailboxCreationException(this.User.PrimarySmtpAddress.ToString(), text);
                outcome.Update(CasTransactionResultEnum.Failure, Strings.ErrorMailboxCreationFailure(this.User.PrimarySmtpAddress.ToString(), text));
                return(false);
            }
            catch (StoragePermanentException exception2)
            {
                text = ProtocolConnectivity.ShortErrorMessageFromException(exception2);
                new MailboxCreationException(this.User.PrimarySmtpAddress.ToString(), text);
                outcome.Update(CasTransactionResultEnum.Failure, Strings.ErrorMailboxCreationFailure(this.User.PrimarySmtpAddress.ToString(), text));
                return(false);
            }
            catch (ArgumentException exception3)
            {
                text = ProtocolConnectivity.ShortErrorMessageFromException(exception3);
                LocalizedException exception4 = new LocalizedException(new LocalizedString(text));
                base.WriteMonitoringEvent(2013, this.CmdletMonitoringEventSource, EventTypeEnumeration.Error, base.ShortErrorMsgFromException(exception4));
                outcome.Update(CasTransactionResultEnum.Failure);
                return(false);
            }
            outcome.Update(CasTransactionResultEnum.Success);
            return(true);
        }