public void MSASCMD_S21_TC14_CommonStatusCode_145()
        {
            Site.Assume.AreNotEqual <string>("12.1", Common.GetConfigurationPropertyValue("ActiveSyncProtocolVersion", this.Site), "This test case is not supported when the MS-ASProtocolVersion header is set to 12.1.. MS-ASProtocolVersion header value is determined using Common PTFConfig property named ActiveSyncProtocolVersion.");

            #region User calls Provision command to download policies from server
            // Calls Provision command to download policies
            ProvisionRequest  provisionRequest  = TestSuiteBase.GenerateDefaultProvisionRequest();
            ProvisionResponse provisionResponse = this.CMDAdapter.Provision(provisionRequest);


            // Get policyKey, policyType and statusCode from server response
            string policyKey = null;
            if (null != provisionResponse.ResponseData.Policies)
            {
                Response.ProvisionPoliciesPolicy policyInResponse = provisionResponse.ResponseData.Policies.Policy;
                if (policyInResponse != null)
                {
                    policyKey = policyInResponse.PolicyKey;
                }
            }

            string policyType = provisionResponse.ResponseData.Policies.Policy.PolicyType;
            Response.ProvisionPoliciesPolicyData data = provisionResponse.ResponseData.Policies.Policy.Data;
            byte statusCode = provisionResponse.ResponseData.Status;
            #endregion

            #region User calls Provision command to acknowledge policies.

            // Set acknowledgeStatus value to 1, means accept the policy.
            ProvisionRequest provisionAcknowledgeRequest = TestSuiteBase.GenerateDefaultProvisionRequest();
            provisionAcknowledgeRequest.RequestData.Policies.Policy.PolicyKey = policyKey;
            provisionAcknowledgeRequest.RequestData.Policies.Policy.Status    = "4";

            // Calls Provision command
            ProvisionResponse provisionAcknowledgeResponse = this.CMDAdapter.Provision(provisionAcknowledgeRequest);
            statusCode = provisionAcknowledgeResponse.ResponseData.Status;

            this.Site.CaptureRequirementIfAreEqual <byte>(
                145,
                statusCode,
                4917,
                @"[In Common Status Codes] When the protocol version is 14.0, 14.1 or 16.0,  [The meaning of the status value 145 is] The device claimed to be externally managed, but the server doesn't allow externally managed devices to sync.");
            #endregion
        }
        public void MSASCMD_S12_TC02_Provision_WithoutPolicyTypeElement()
        {
            #region User calls Provision command to download policies without policy type element in request.
            ProvisionRequest provisionRequest = TestSuiteBase.GenerateDefaultProvisionRequest();

            // Set the policy type Element value to null
            provisionRequest.RequestData.Policies.Policy.PolicyType = null;
            ProvisionResponse provisionResponse = this.CMDAdapter.Provision(provisionRequest);

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-ASCMD_R4989");

            // Verify MS-ASCMD requirement: MS-ASCMD_R4989
            Site.CaptureRequirementIfAreEqual <int>(
                2,
                provisionResponse.ResponseData.Status,
                4989,
                @"[In Downloading Policy Settings] If the provision:PolicyType element is not included in the initial Provision command request, the server responds with a provision:Status element value of 2.");
            #endregion
        }
        public void MSASCMD_S21_TC03_CommonStatusCode_165()
        {
            Site.Assume.AreNotEqual <string>("12.1", Common.GetConfigurationPropertyValue("ActiveSyncProtocolVersion", this.Site), "Status value 165 is not returned when the MS-ASProtocolVersion header is set to 12.1. MS-ASProtocolVersion header value is determined using Common PTFConfig property named ActiveSyncProtocolVersion.");
            Site.Assume.AreNotEqual <string>("14.0", Common.GetConfigurationPropertyValue("ActiveSyncProtocolVersion", this.Site), "Status value 165 is not returned when the MS-ASProtocolVersion header is set to 14.0. MS-ASProtocolVersion header value is determined using Common PTFConfig property named ActiveSyncProtocolVersion.");

            #region User calls Provision command without the DeviceInformation element

            ProvisionRequest provisionRequest = TestSuiteBase.GenerateDefaultProvisionRequest();
            provisionRequest.RequestData.DeviceInformation = null;

            ProvisionResponse provisionResponse = this.CMDAdapter.Provision(provisionRequest);

            #endregion

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-ASCMD_R4954");

            // Verify MS-ASCMD requirement: MS-ASCMD_R4954
            Site.CaptureRequirementIfAreEqual <byte>(
                165,
                provisionResponse.ResponseData.Status,
                4954,
                @"[In Common Status Codes] [The meaning of the status value 165 is] The required DeviceInformation element (as specified in [MS-ASPROV] section 2.2.2.52) is missing in the Provision request.<99>");
        }
        public void MSASCMD_S12_TC01_Provision_DownloadPolicy()
        {
            #region User calls Provision command to download policies from server
            // Calls Provision command to download policies
            ProvisionRequest  provisionRequest  = TestSuiteBase.GenerateDefaultProvisionRequest();
            ProvisionResponse provisionResponse = this.CMDAdapter.Provision(provisionRequest);

            // Get policyKey, policyType and statusCode from server response
            string policyKey  = GetPolicyKeyFromResponse(provisionResponse);
            string policyType = provisionResponse.ResponseData.Policies.Policy.PolicyType;
            Response.ProvisionPoliciesPolicyData data = provisionResponse.ResponseData.Policies.Policy.Data;
            byte statusCode = provisionResponse.ResponseData.Status;
            #endregion

            #region Verify Requirements MS-ASCMD_R5026, MS-ASCMD_R4990, MS-ASCMD_R4992
            // If User calls Provision command to download policies successful, server will return policyKey, policyType, data and statusCode in response, then MS-ASCMD_R5026, MS-ASCMD_R4990, MS-ASCMD_R4992 are verified.
            // The policy settings with the format specified in PolicyType element, are contained in Data element of Provision command response.
            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-ASCMD_R5026");

            // Verify MS-ASCMD requirement: MS-ASCMD_R5026
            Site.CaptureRequirementIfIsTrue(
                policyKey != null && policyType != null && data != null && statusCode == 1,
                5026,
                @"[In Downloading Policy Settings] [Provision sequence for downloading policy settings, order 1:] The server responds with the policy type, policy key, data, and status code.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-ASCMD_R4990");

            // Verify MS-ASCMD requirement: MS-ASCMD_R4990
            Site.CaptureRequirementIfIsTrue(
                policyKey != null && policyType != null && data != null,
                4990,
                @"[In Downloading Policy Settings] The server then responds with the provision:PolicyType, provision:PolicyKey (as specified in [MS-ASPROV] section 2.2.2.41), and provision:Data ([MS-ASPROV] section 2.2.2.23) elements.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-ASCMD_R4992");

            // Verify MS-ASCMD requirement: MS-ASCMD_R4992
            Site.CaptureRequirementIfIsTrue(
                policyType != null && data != null,
                4992,
                @"[In Downloading Policy Settings] The policy settings, in the format specified in the provision:PolicyType element, are contained in the provision:Data element.");
            #endregion

            #region User calls Provision command to acknowledge policies.

            // Set acknowledgeStatus value to 1, means accept the policy.
            string           acknowledgeStatus           = "1";
            ProvisionRequest provisionAcknowledgeRequest = TestSuiteBase.GenerateDefaultProvisionRequest();
            provisionAcknowledgeRequest.RequestData.Policies.Policy.PolicyKey = policyKey;
            provisionAcknowledgeRequest.RequestData.Policies.Policy.Status    = acknowledgeStatus;

            // Calls Provision command
            ProvisionResponse provisionAcknowledgeResponse = this.CMDAdapter.Provision(provisionAcknowledgeRequest);

            // Get policyKey, policyType and status code from server response
            policyKey  = GetPolicyKeyFromResponse(provisionAcknowledgeResponse);
            policyType = provisionAcknowledgeResponse.ResponseData.Policies.Policy.PolicyType;
            statusCode = provisionAcknowledgeResponse.ResponseData.Policies.Policy.Status;

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-ASCMD_R5028");

            // Verify MS-ASCMD requirement: MS-ASCMD_R5028
            Site.CaptureRequirementIfIsTrue(
                policyKey != null && policyType != null && statusCode == 1,
                5028,
                @"[In Downloading Policy Settings] [Provision sequence for downloading policy settings, order 2:] The server responds with the policy type, policy key, and status code to indicate that the server recorded the client's acknowledgement.");
            #endregion
        }
        public void MSASCMD_S12_TC03_Provision_Status144()
        {
            #region User calls Provision command to download policies from server
            // Calls Provision command to download policies
            ProvisionRequest  provisionRequest  = TestSuiteBase.GenerateDefaultProvisionRequest();
            ProvisionResponse provisionResponse = this.CMDAdapter.Provision(provisionRequest);
            Site.Assert.AreEqual(1, provisionResponse.ResponseData.Status, "If Provision operation executes successfully, server should return status 1");

            // Get policyKey
            string policyKey = GetPolicyKeyFromResponse(provisionResponse);
            #endregion

            #region User calls Provision command to acknowledge policies.
            // Set acknowledgeStatus value to 1, means accept the policy.
            string           acknowledgeStatus           = "1";
            ProvisionRequest provisionAcknowledgeRequest = TestSuiteBase.GenerateDefaultProvisionRequest();
            provisionAcknowledgeRequest.RequestData.Policies.Policy.PolicyKey = policyKey;
            provisionAcknowledgeRequest.RequestData.Policies.Policy.Status    = acknowledgeStatus;

            // Calls Provision command
            ProvisionResponse provisionAcknowledgeResponse = this.CMDAdapter.Provision(provisionAcknowledgeRequest);
            Site.Assert.AreEqual(1, provisionResponse.ResponseData.Status, "If Provision operation executes successfully, server should return status 1");

            // Get policyKey
            string finalPolicyKey = GetPolicyKeyFromResponse(provisionAcknowledgeResponse);
            #endregion

            #region Call FolderSync command with an invalid PolicyKey which is different from the one got from last step.
            this.CMDAdapter.ChangePolicyKey(finalPolicyKey.Substring(0, 1));
            this.RecordPolicyKeyChanged();

            if ("12.1" == Common.GetConfigurationPropertyValue("ActiveSyncProtocolVersion", this.Site))
            {
                string httpErrorCode = null;
                try
                {
                    // Call FolderSync command
                    this.CMDAdapter.FolderSync(Common.CreateFolderSyncRequest("0"));
                }
                catch (WebException exception)
                {
                    httpErrorCode = Common.GetErrorCodeFromException(exception);
                }

                Site.Assert.AreEqual("449", httpErrorCode, "[In MS-ASPROV Appendix A: Product Behavior] <2> Section 3.1.5.1: When the MS-ASProtocolVersion header is set to 12.1, the server sends an HTTP 449 response to request a Provision command from the client.");
            }
            else
            {
                // Call FolderSync command
                FolderSyncResponse folderSyncResponse = this.CMDAdapter.FolderSync(Common.CreateFolderSyncRequest("0"));

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-ASCMD_R4912");

                // Verify MS-ASCMD requirement: MS-ASCMD_R4912
                Site.CaptureRequirementIfAreEqual <int>(
                    144,
                    int.Parse(folderSyncResponse.ResponseData.Status),
                    4912,
                    @"[In Common Status Codes] [The meaning of the status value 144 is] The device's policy key is invalid.");
            }

            #endregion
        }