示例#1
0
        public void TestCustomMediaTypeGetFormatFromContentType()
        {
            var resolver = new MyMediaTypeResolver();

            foreach (var payloadKind in Enum.GetValues(typeof(ODataPayloadKind)).Cast <ODataPayloadKind>())
            {
                if (payloadKind == ODataPayloadKind.Unsupported)
                {
                    continue;
                }

                string         contentType       = "text/x-A";
                string         expectedBoundary  = null;
                ODataMediaType expectedMediaType = MyFormat.MediaTypeWithFormatA.MediaType;
                if (payloadKind == ODataPayloadKind.Batch)
                {
                    expectedBoundary  = "ba_" + Guid.NewGuid();
                    contentType      += ";boundary=" + expectedBoundary;
                    expectedMediaType = new ODataMediaType("text", "x-A", new KeyValuePair <string, string>("boundary", expectedBoundary));
                }

                ODataMediaType   mediaType;
                Encoding         encoding;
                ODataPayloadKind selectedPayloadKind;
                ODataFormat      actual = MediaTypeUtils.GetFormatFromContentType(contentType, new[] { payloadKind }, resolver, out mediaType, out encoding, out selectedPayloadKind);

                Console.WriteLine(payloadKind);
                actual.ShouldBeEquivalentTo(MyFormat.Instance);
                mediaType.ShouldBeEquivalentTo(expectedMediaType);
                encoding.ShouldBeEquivalentTo(payloadKind == ODataPayloadKind.BinaryValue ? null : Encoding.UTF8);
                selectedPayloadKind.ShouldBeEquivalentTo(payloadKind);
            }
        }
示例#2
0
        public void MultipartBoundariesShouldNotGrowCache()
        {
            for (int i = 1; i < 100; i++)
            {
                ODataMediaType   mediaType;
                Encoding         encoding;
                ODataPayloadKind payloadKind;
                MediaTypeUtils.GetFormatFromContentType(string.Format("multipart/mixed;boundary={0}", Guid.NewGuid()), new ODataPayloadKind[] { ODataPayloadKind.Batch }, ODataMediaTypeResolver.GetMediaTypeResolver(null), out mediaType, out encoding, out payloadKind);
            }

            Assert.True(MediaTypeUtils.GetCacheKeys().Count(k => k.StartsWith("multipart/mixed")) == 1, "Multiple multipart/mixed keys in cache");
        }
示例#3
0
        internal static TestMediaTypeWithFormat ParseContentType(string contentType, ODataVersion version, ODataMediaTypeResolver resolver = null)
        {
            ODataMediaType   mediaType;
            Encoding         encoding;
            ODataPayloadKind payloadKind;
            var format = MediaTypeUtils.GetFormatFromContentType(contentType, new[] { ODataPayloadKind.Resource }, resolver ?? ODataMediaTypeResolver.GetMediaTypeResolver(null), out mediaType, out encoding, out payloadKind);

            Assert.NotNull(mediaType);
            Assert.NotNull(format);
            return(new TestMediaTypeWithFormat {
                MediaType = mediaType, Format = format
            });
        }
示例#4
0
        internal static TestMediaTypeWithFormat ParseContentType(string contentType, ODataVersion version, ODataMediaTypeResolver resolver = null)
        {
            ODataMediaType   mediaType;
            Encoding         encoding;
            ODataPayloadKind payloadKind;
            string           batchBoundary;
            var format = MediaTypeUtils.GetFormatFromContentType(contentType, new[] { ODataPayloadKind.Entry }, resolver ?? ODataMediaTypeResolver.DefaultMediaTypeResolver, out mediaType, out encoding, out payloadKind, out batchBoundary);

            mediaType.Should().NotBeNull();
            format.Should().NotBeNull();
            return(new TestMediaTypeWithFormat {
                MediaType = mediaType, Format = format
            });
        }
示例#5
0
        /// <summary>
        /// Parse the content type header value to retrieve the boundary and encoding of a changeset.
        /// </summary>
        /// <param name="contentType">The content type to parse.</param>
        private void DetermineChangesetBoundaryAndEncoding(string contentType)
        {
            Debug.Assert(!string.IsNullOrEmpty(contentType), "Should have validated that non-null, non-empty content type header exists.");

            ODataMediaType   mediaType;
            ODataPayloadKind readerPayloadKind;

            MediaTypeUtils.GetFormatFromContentType(
                contentType,
                new ODataPayloadKind[] { ODataPayloadKind.Batch },
                this.mediaTypeResolver,
                out mediaType,
                out this.changesetEncoding,
                out readerPayloadKind);
            Debug.Assert(readerPayloadKind == ODataPayloadKind.Batch, "Must find batch payload kind.");
            Debug.Assert(HttpUtils.CompareMediaTypeNames(MimeConstants.MimeMultipartMixed, mediaType.FullTypeName), "Must be multipart/mixed media type.");
            this.changesetBoundary = ODataMultipartMixedBatchWriterUtils.GetBatchBoundaryFromMediaType(mediaType);
            Debug.Assert(this.changesetBoundary != null && this.changesetBoundary.Length > 0, "Boundary string should have been validated by now.");
        }
示例#6
0
        public void MediaTypeResolutionForJsonBatchShouldWork()
        {
            string[] contentTypes = new string[]
            {
                "application/json",
                "application/json;odata.metadata=minimal",
                "application/json;odata.metadata=minimal;odata.streaming=true",
                "application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false"
            };
            foreach (string contentType in contentTypes)
            {
                ODataMediaType   mediaType;
                Encoding         encoding;
                ODataPayloadKind payloadKind;

                ODataFormat format = MediaTypeUtils.GetFormatFromContentType(contentType, new[] { ODataPayloadKind.Batch },
                                                                             ODataMediaTypeResolver.GetMediaTypeResolver(null),
                                                                             out mediaType, out encoding, out payloadKind);
                Assert.NotNull(mediaType);
                Assert.NotNull(encoding);
                Assert.Equal(ODataPayloadKind.Batch, payloadKind);
                Assert.Equal(ODataFormat.Json, format);
            }
        }