private void VerifyPreferHeaderOnRequest(HttpRequestData request, DataServiceResponsePreference responsePreference)
        {
            bool preferExists = request.Headers.Keys.Contains(HttpHeaders.Prefer);

            // NOTE: if the prefer header is not present, we cannot tell if it should have been, because we don't 
            // know here whether or not this is an entity-specific operation
            // In other words: even though this is POST/PUT/PATCH, it might be AddLink, SetLink, or a media-resource 
            // update, and therefore should NOT have a prefer header
            // For now, this component will simply verify what it can, and the rest will be covered by the 
            // verification of the requests sent during SaveChanges. We may be able to remove this component altogether.
            if (responsePreference == DataServiceResponsePreference.None || !this.IsCreateOrUpdate(request.GetEffectiveVerb()))
            {
                this.Assert.IsFalse(preferExists, "Unexpected presence of Prefer Header");
            }
            else if (preferExists)
            {
                string value = request.Headers[HttpHeaders.Prefer];
                if (responsePreference == DataServiceResponsePreference.IncludeContent)
                {
                    this.Assert.AreEqual(HttpHeaders.ReturnContent, value, "Incorrect value of Prefer Header");
                }

                if (responsePreference == DataServiceResponsePreference.NoContent)
                {
                    this.Assert.AreEqual(HttpHeaders.ReturnNoContent, value, "Incorrect value of Prefer Header");
                }
            }
        }
Example #2
0
        private void VerifyPreferHeaderOnRequest(HttpRequestData request, DataServiceResponsePreference responsePreference)
        {
            bool preferExists = request.Headers.Keys.Contains(HttpHeaders.Prefer);

            // NOTE: if the prefer header is not present, we cannot tell if it should have been, because we don't
            // know here whether or not this is an entity-specific operation
            // In other words: even though this is POST/PUT/PATCH, it might be AddLink, SetLink, or a media-resource
            // update, and therefore should NOT have a prefer header
            // For now, this component will simply verify what it can, and the rest will be covered by the
            // verification of the requests sent during SaveChanges. We may be able to remove this component altogether.
            if (responsePreference == DataServiceResponsePreference.None || !this.IsCreateOrUpdate(request.GetEffectiveVerb()))
            {
                this.Assert.IsFalse(preferExists, "Unexpected presence of Prefer Header");
            }
            else if (preferExists)
            {
                string value = request.Headers[HttpHeaders.Prefer];
                if (responsePreference == DataServiceResponsePreference.IncludeContent)
                {
                    this.Assert.AreEqual(HttpHeaders.ReturnContent, value, "Incorrect value of Prefer Header");
                }

                if (responsePreference == DataServiceResponsePreference.NoContent)
                {
                    this.Assert.AreEqual(HttpHeaders.ReturnNoContent, value, "Incorrect value of Prefer Header");
                }
            }
        }
Example #3
0
 protected static void ApplyPreferences(ODataRequestMessageWrapper requestMessage, string method, DataServiceResponsePreference responsePreference, ref Version requestVersion)
 {
     if (((string.CompareOrdinal("POST", method) == 0) || (string.CompareOrdinal("PUT", method) == 0)) || ((string.CompareOrdinal("MERGE", method) == 0) || (string.CompareOrdinal("PATCH", method) == 0)))
     {
         string preferHeaderAndRequestVersion = WebUtil.GetPreferHeaderAndRequestVersion(responsePreference, ref requestVersion);
         if (preferHeaderAndRequestVersion != null)
         {
             requestMessage.SetHeader("Prefer", preferHeaderAndRequestVersion);
         }
     }
 }
        private static int GetStatusCodeForUpdate(DSClient.DataServiceContext context)
        {
            DataServiceResponsePreference preference = DataServiceResponsePreference.Unspecified;

            preference = context.AddAndUpdateResponsePreference.ToTestEnum();

            if (preference == DataServiceResponsePreference.IncludeContent)
            {
                return((int)HttpStatusCode.OK);
            }
            else
            {
                return((int)HttpStatusCode.NoContent);
            }
        }
Example #5
0
 /// <summary>
 /// Gets the header value for the given response preference
 /// </summary>
 /// <param name="preference">The response preference</param>
 /// <returns>The header value for the given response preference</returns>
 public static string ToHeaderValue(this DataServiceResponsePreference preference)
 {
     if (preference == DataServiceResponsePreference.None)
     {
         return(null);
     }
     else if (preference == DataServiceResponsePreference.IncludeContent)
     {
         return(HttpHeaders.ReturnContent);
     }
     else
     {
         ExceptionUtilities.Assert(preference == DataServiceResponsePreference.NoContent, "Unexpected preference value");
         return(HttpHeaders.ReturnNoContent);
     }
 }
 private static void SetExpectedPreferHeader(HttpRequestData request, DataServiceResponsePreference preference)
 {
     if (preference == DataServiceResponsePreference.None)
     {
         SetUnexpectedPreferHeader(request);
     }
     else if (preference == DataServiceResponsePreference.IncludeContent)
     {
         request.Headers[HttpHeaders.Prefer] = HttpHeaders.ReturnContent;
     }
     else
     {
         ExceptionUtilities.Assert(preference == DataServiceResponsePreference.NoContent, "Unexpected preference value");
         request.Headers[HttpHeaders.Prefer] = HttpHeaders.ReturnNoContent;
     }
 }
Example #7
0
        private static int GetStatusCodeForInsert(DSClient.DataServiceContext context)
        {
            DataServiceResponsePreference preference = DataServiceResponsePreference.Unspecified;

#if !WINDOWS_PHONE
            preference = context.AddAndUpdateResponsePreference.ToTestEnum();
#endif
            if (preference == DataServiceResponsePreference.NoContent)
            {
                return((int)HttpStatusCode.NoContent);
            }
            else
            {
                return((int)HttpStatusCode.Created);
            }
        }
Example #8
0
        internal static string GetPreferHeaderAndRequestVersion(DataServiceResponsePreference responsePreference, ref Version requestVersion)
        {
            string str = null;

            if (responsePreference != DataServiceResponsePreference.None)
            {
                if (responsePreference == DataServiceResponsePreference.IncludeContent)
                {
                    str = "return-content";
                }
                else
                {
                    str = "return-no-content";
                }
                RaiseVersion(ref requestVersion, Util.DataServiceVersion3);
            }
            return(str);
        }
Example #9
0
        /// <summary>
        /// Determines the value of the Prefer header based on the response preference settings. Also modifies the request version as necessary.
        /// </summary>
        /// <param name="responsePreference">The response preference setting for the request.</param>
        /// <param name="requestVersion">The request version so far, this might be modified (raised) if necessary due to response preference being applied.</param>
        /// <returns>The value of the Prefer header to apply to the request.</returns>
        internal static string GetPreferHeaderAndRequestVersion(DataServiceResponsePreference responsePreference, ref Version requestVersion)
        {
            string preferHeaderValue = null;

            if (responsePreference != DataServiceResponsePreference.None)
            {
                if (responsePreference == DataServiceResponsePreference.IncludeContent)
                {
                    preferHeaderValue = XmlConstants.HttpPreferReturnContent;
                }
                else
                {
                    Debug.Assert(responsePreference == DataServiceResponsePreference.NoContent, "Invalid value for DataServiceResponsePreference.");
                    preferHeaderValue = XmlConstants.HttpPreferReturnNoContent;
                }

                RaiseVersion(ref requestVersion, Util.ODataVersion4);
            }

            return(preferHeaderValue);
        }
Example #10
0
 /// <summary>
 /// Converts the DataServiceResponsePreference test enum value to the equivalent product enum value
 /// </summary>
 /// <param name="preference">The value to convert</param>
 /// <returns>The converted value</returns>
 public static DSClient.DataServiceResponsePreference ToProductEnum(this DataServiceResponsePreference preference)
 {
     ExceptionUtilities.Assert(preference != DataServiceResponsePreference.Unspecified, "Cannot convert unspecified preference value");
     return(Contracts.ExtensionMethods.ConvertEnum <DataServiceResponsePreference, DSClient.DataServiceResponsePreference>(preference));
 }
Example #11
0
        /// <summary>
        /// Apply the response preferences for the client.
        /// </summary>
        /// <param name="headers">Headers to which preferences will be added.</param>
        /// <param name="method">HTTP method.</param>
        /// <param name="responsePreference">Response preference.</param>
        /// <param name="requestVersion">Request version so far for the request. The method may modify it.</param>
        protected static void ApplyPreferences(HeaderCollection headers, string method, DataServiceResponsePreference responsePreference, ref Version requestVersion)
        {
            // The AddAndUpdateResponsePreference only applies to POST/PUT/PATCH requests
            if (string.CompareOrdinal(XmlConstants.HttpMethodPost, method) != 0 &&
                string.CompareOrdinal(XmlConstants.HttpMethodPut, method) != 0 &&
                string.CompareOrdinal(XmlConstants.HttpMethodPatch, method) != 0)
            {
                return;
            }

            string preferHeaderValue = WebUtil.GetPreferHeaderAndRequestVersion(responsePreference, ref requestVersion);
            if (preferHeaderValue != null)
            {
                headers.SetHeader(XmlConstants.HttpPrefer, preferHeaderValue);
            }
        }
Example #12
0
 protected static void ApplyPreferences(ODataRequestMessageWrapper requestMessage, string method, DataServiceResponsePreference responsePreference, ref Version requestVersion)
 {
     if (((string.CompareOrdinal("POST", method) == 0) || (string.CompareOrdinal("PUT", method) == 0)) || ((string.CompareOrdinal("MERGE", method) == 0) || (string.CompareOrdinal("PATCH", method) == 0)))
     {
         string preferHeaderAndRequestVersion = WebUtil.GetPreferHeaderAndRequestVersion(responsePreference, ref requestVersion);
         if (preferHeaderAndRequestVersion != null)
         {
             requestMessage.SetHeader("Prefer", preferHeaderAndRequestVersion);
         }
     }
 }