Esempio n. 1
0
        public async Task <ODataResponse> GetResponseAsync(IODataResponseMessageAsync responseMessage)
        {
            var readerSettings = new ODataMessageReaderSettings();

            // TODO ODataLib7
            if (_session.Settings.IgnoreUnmappedProperties)
            {
                readerSettings.Validations &= ~ValidationKinds.ThrowOnUndeclaredPropertyForNonOpenType;
            }
            readerSettings.MessageQuotas.MaxReceivedMessageSize = Int32.MaxValue;
            readerSettings.ShouldIncludeAnnotation = x => _session.Settings.IncludeAnnotationsInResults;
            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, _model))
            {
                var payloadKind = messageReader.DetectPayloadKind();
                if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Error))
                {
                    return(ODataResponse.FromStatusCode(responseMessage.StatusCode));
                }
                else if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Value))
                {
                    if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Collection))
                    {
                        throw new NotImplementedException();
                    }
                    else
                    {
                        return(ODataResponse.FromValueStream(await responseMessage.GetStreamAsync().ConfigureAwait(false), responseMessage is ODataBatchOperationResponseMessage));
                    }
                }
                else if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Batch))
                {
                    return(await ReadResponse(messageReader.CreateODataBatchReader()).ConfigureAwait(false));
                }
                else if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.ResourceSet))
                {
                    return(ReadResponse(messageReader.CreateODataResourceSetReader()));
                }
                else if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Collection))
                {
                    return(ReadResponse(messageReader.CreateODataCollectionReader()));
                }
                else if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Property))
                {
                    if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Resource))
                    {
                        return(ReadResponse(messageReader.CreateODataResourceReader()));
                    }
                    else
                    {
                        var property = messageReader.ReadProperty();
                        return(ODataResponse.FromProperty(property.Name, GetPropertyValue(property.Value)));
                    }
                }
                else
                {
                    return(ReadResponse(messageReader.CreateODataResourceReader()));
                }
            }
        }
        public async Task <ODataResponse> GetResponseAsync(IODataResponseMessageAsync responseMessage)
        {
            if (responseMessage.StatusCode == (int)HttpStatusCode.NoContent)
            {
                return(ODataResponse.FromStatusCode(TypeCache, responseMessage.StatusCode, responseMessage.Headers));
            }
            var readerSettings = _session.ToReaderSettings();

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, _model))
            {
                var payloadKind = messageReader.DetectPayloadKind().ToList();
                if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Error))
                {
                    return(ODataResponse.FromStatusCode(TypeCache, responseMessage.StatusCode, responseMessage.Headers));
                }
                else if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Value))
                {
                    if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Collection))
                    {
                        throw new NotImplementedException();
                    }
                    else
                    {
                        return(ODataResponse.FromValueStream(TypeCache, await responseMessage.GetStreamAsync().ConfigureAwait(false), responseMessage is ODataBatchOperationResponseMessage));
                    }
                }
                else if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Batch))
                {
                    return(await ReadResponse(messageReader.CreateODataBatchReader()).ConfigureAwait(false));
                }
                else if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.ResourceSet))
                {
                    return(ReadResponse(messageReader.CreateODataResourceSetReader(), responseMessage));
                }
                else if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Collection))
                {
                    return(ReadResponse(messageReader.CreateODataCollectionReader()));
                }
                else if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Property))
                {
                    if (payloadKind.Any(x => x.PayloadKind == ODataPayloadKind.Resource))
                    {
                        return(ReadResponse(messageReader.CreateODataResourceReader(), responseMessage));
                    }
                    else
                    {
                        var property = messageReader.ReadProperty();
                        return(ODataResponse.FromProperty(TypeCache, property.Name, GetPropertyValue(property.Value)));
                    }
                }
                else
                {
                    return(ReadResponse(messageReader.CreateODataResourceReader(), responseMessage));
                }
            }
        }
Esempio n. 3
0
        public void QueryByDateKey()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in mimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Calendars(2015-11-11)", UriKind.Absolute));
                requestMessage.SetHeader("Accept", mimeType);
                var responseMessage = requestMessage.GetResponse();
                Assert.Equal(200, responseMessage.StatusCode);

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        var reader = messageReader.CreateODataResourceReader();

                        while (reader.Read())
                        {
                            if (reader.State == ODataReaderState.ResourceEnd)
                            {
                                ODataResource entry = reader.Item as ODataResource;
                                // Verify Date Property
                                Assert.Equal(new Date(2015, 11, 11), entry.Properties.Single(p => p.Name == "Day").Value);
                            }
                        }
                        Assert.Equal(ODataReaderState.Completed, reader.State);
                    }
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Specifically use to query single entry or multi entries(query with $expand)
        /// </summary>
        /// <param name="requestUri"></param>
        /// <param name="mimeType"></param>
        /// <returns></returns>
        public List <ODataResource> QueryEntries(string requestUri, string mimeType)
        {
            List <ODataResource> entries = new List <ODataResource>();

            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = baseUri
            };
            var requestMessage = new HttpWebRequestMessage(new Uri(baseUri.AbsoluteUri + requestUri, UriKind.Absolute));

            requestMessage.SetHeader("Accept", mimeType);
            requestMessage.SetHeader("Prefer", string.Format("{0}={1}", IncludeAnnotation, "*"));
            var responseMessage = requestMessage.GetResponse();

            Assert.AreEqual(200, responseMessage.StatusCode);

            if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
            {
                using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, model))
                {
                    var reader = messageReader.CreateODataResourceReader();

                    while (reader.Read())
                    {
                        if (reader.State == ODataReaderState.ResourceEnd)
                        {
                            entries.Add(reader.Item as ODataResource);
                        }
                    }
                    Assert.AreEqual(ODataReaderState.Completed, reader.State);
                }
            }
            return(entries);
        }
Esempio n. 5
0
        public ODataResourceSet QueryInnerFeed(string requestUri, string mimeType)
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = baseUri
            };
            var requestMessage = new HttpWebRequestMessage(new Uri(baseUri.AbsoluteUri + requestUri, UriKind.Absolute));

            requestMessage.SetHeader("Accept", mimeType);
            var responseMessage = requestMessage.GetResponse();

            Assert.AreEqual(200, responseMessage.StatusCode);

            if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
            {
                using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, model))
                {
                    var reader = messageReader.CreateODataResourceReader();

                    while (reader.Read())
                    {
                        if (reader.State == ODataReaderState.ResourceSetEnd)
                        {
                            return(reader.Item as ODataResourceSet);
                        }
                    }
                }
            }
            return(null);
        }
        private void ReadEntryPayload(IEdmModel userModel, string payload, EdmEntitySet entitySet, IEdmEntityType entityType, Action <ODataReader> action, bool isIeee754Compatible = true, IServiceProvider container = null)
        {
            var message = new InMemoryMessage()
            {
                Stream = new MemoryStream(Encoding.UTF8.GetBytes(payload)), Container = container
            };
            string contentType = isIeee754Compatible
                ? "application/json;odata.metadata=minimal;IEEE754Compatible=true"
                : "application/json;odata.metadata=minimal;IEEE754Compatible=false";

            message.SetHeader("Content-Type", contentType);
            var readerSettings = new ODataMessageReaderSettings {
                EnableMessageStreamDisposal = true
            };

            readerSettings.Validations &= ~ValidationKinds.ThrowOnUndeclaredPropertyForNonOpenType;
            using (var msgReader = new ODataMessageReader((IODataResponseMessage)message, readerSettings, userModel))
            {
                var reader = msgReader.CreateODataResourceReader(entitySet, entityType);
                while (reader.Read())
                {
                    action(reader);
                }
            }
        }
Esempio n. 7
0
            private ODataResource ReadEntityFromStream(Stream content, Uri requestUrl, String contentType, out IEdmEntitySet entitySet)
            {
                ODataUri odataUri = OeParser.ParseUri(_edmModel, _baseUri, requestUrl);

                entitySet      = ((EntitySetSegment)odataUri.Path.FirstSegment).EntitySet;
                _edmEntityType = entitySet.EntityType();
                IEdmModel edmModel = _edmModel.GetEdmModel(entitySet);

                ODataResource        entry          = null;
                IODataRequestMessage requestMessage = new Infrastructure.OeInMemoryMessage(content, contentType, _serviceProvider);
                var settings = new ODataMessageReaderSettings
                {
                    ClientCustomTypeResolver    = ClientCustomTypeResolver,
                    EnableMessageStreamDisposal = false
                };

                using (var messageReader = new ODataMessageReader(requestMessage, settings, edmModel))
                {
                    ODataReader reader = messageReader.CreateODataResourceReader(entitySet, entitySet.EntityType());
                    while (reader.Read())
                    {
                        if (reader.State == ODataReaderState.ResourceEnd)
                        {
                            entry = (ODataResource)reader.Item;
                        }
                    }
                    if (entry == null)
                    {
                        throw new InvalidOperationException("operation not contain entry");
                    }
                }

                return(entry);
            }
Esempio n. 8
0
        private ODataResource QueryComplexProperty(string uri, string mimeType)
        {
            ODataResource complex = null;
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + uri, UriKind.Absolute));

            requestMessage.SetHeader("Accept", mimeType);
            var responseMessage = requestMessage.GetResponse();

            Assert.AreEqual(200, responseMessage.StatusCode);

            if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
            {
                using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                {
                    var odataReader = messageReader.CreateODataResourceReader();
                    while (odataReader.Read())
                    {
                        if (odataReader.State == ODataReaderState.ResourceEnd)
                        {
                            complex = odataReader.Item as ODataResource;
                        }
                    }

                    Assert.IsNotNull(complex);
                }
            }

            return(complex);
        }
        public void ReadCompletedAsyncResponse()
        {
            string payload = "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nOData-Version: 4.0\r\n\r\n{\"@odata.context\":\"http://host/service/$metadata#MySingleton\",\"Id\":1}";

            var asyncReader   = this.CreateAsyncReader(payload);
            var asyncResponse = asyncReader.CreateResponseMessage();

            Assert.Equal(200, asyncResponse.StatusCode);
            Assert.Equal("application/json", asyncResponse.GetHeader("Content-Type"));
            Assert.Equal("4.0", asyncResponse.GetHeader("OData-Version"));

            using (var innerMessageReader = new ODataMessageReader(asyncResponse, new ODataMessageReaderSettings(), userModel))
            {
                var reader = innerMessageReader.CreateODataResourceReader();

                while (reader.Read())
                {
                    if (reader.State == ODataReaderState.ResourceEnd)
                    {
                        ODataResource entry = reader.Item as ODataResource;
                        Assert.Equal(1, entry.Properties.Single(p => p.Name == "Id").Value);
                    }
                }
            }
        }
        public void EntryTypeDefinedInReferencedModel()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in mimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "VehicleGPSSet('VehicleKey2')", UriKind.Absolute));
                requestMessage.SetHeader("Accept", mimeType);
                var responseMessage = requestMessage.GetResponse();
                Assert.Equal(200, responseMessage.StatusCode);

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        var reader = messageReader.CreateODataResourceReader();

                        List <ODataResource> entries = new List <ODataResource>();
                        while (reader.Read())
                        {
                            if (reader.State == ODataReaderState.ResourceEnd)
                            {
                                entries.Add(reader.Item as ODataResource);
                            }
                        }
                        Assert.Equal("VehicleKey2", entries.Last().Properties.Single(p => p.Name == "Key").Value);
                        Assert.Equal(ODataReaderState.Completed, reader.State);
                    }
                }
            }
        }
        public void PropertyDefinedInReferencedModel()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };
            var requestMessage = new HttpWebRequestMessage(
                new Uri(ServiceBaseUri.AbsoluteUri + "DerivedVehicleGPSSet('VehicleKey4')/Microsoft.OData.SampleService.Models.ModelRefDemo.GPS.VehicleGPSType/StartLocation", UriKind.Absolute));

            requestMessage.SetHeader("Accept", MimeTypes.ApplicationJson + MimeTypes.ODataParameterFullMetadata);
            var responseMessage = requestMessage.GetResponse();

            Assert.Equal(200, responseMessage.StatusCode);

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var odatareader = messageReader.CreateODataResourceReader();
                while (odatareader.Read())
                {
                    if (odatareader.State == ODataReaderState.ResourceEnd)
                    {
                        Assert.NotNull(odatareader.Item as ODataResource);
                    }
                }
            }
        }
        public void UnBoundFunctionReturnTypeInReferencedModel()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "GetDefaultOutsideGeoFenceAlarm()", UriKind.Absolute));

            requestMessage.SetHeader("Accept", "*/*");
            var responseMessage = requestMessage.GetResponse();

            Assert.Equal(200, responseMessage.StatusCode);

            ODataResource perp = null;

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var odataReader = messageReader.CreateODataResourceReader();
                while (odataReader.Read())
                {
                    if (odataReader.State == ODataReaderState.ResourceEnd)
                    {
                        perp = odataReader.Item as ODataResource;
                    }
                }

                Assert.Equal(1, perp.Properties.Single(p => p.Name == "Severity").Value);
            }
        }
Esempio n. 13
0
        private ODataItem QueryEntityItem(string uri, int expectedStatusCode = 200)
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var queryRequestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + uri, UriKind.Absolute));

            queryRequestMessage.SetHeader("Accept", MimeTypes.ApplicationJsonLight);
            var queryResponseMessage = queryRequestMessage.GetResponse();

            Assert.AreEqual(expectedStatusCode, queryResponseMessage.StatusCode);

            ODataItem item = null;

            if (expectedStatusCode == 200)
            {
                using (var messageReader = new ODataMessageReader(queryResponseMessage, readerSettings, Model))
                {
                    var reader = messageReader.CreateODataResourceReader();
                    while (reader.Read())
                    {
                        if (reader.State == ODataReaderState.ResourceEnd)
                        {
                            item = reader.Item;
                        }
                    }

                    Assert.AreEqual(ODataReaderState.Completed, reader.State);
                }
            }

            return(item);
        }
        public void QueryVCardEntityProperty()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri,
            };

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "People(31)/BusinessCard", UriKind.Absolute));

            SetVCardMediaTypeResolver(requestMessage);
            requestMessage.SetHeader("Accept", "text/x-vCard");
            var responseMessage = requestMessage.GetResponse();

            Assert.Equal(200, responseMessage.StatusCode);

            ODataResource resource = null;

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var odataReader = messageReader.CreateODataResourceReader();
                while (odataReader.Read())
                {
                    if (odataReader.State == ODataReaderState.ResourceEnd)
                    {
                        resource = odataReader.Item as ODataResource;
                    }
                }
            }

            Assert.NotNull(resource);
            Assert.Equal("Name1", resource.Properties.Single(p => p.Name == "N").Value);
        }
Esempio n. 15
0
        private static ODataResource GetReadedResource(string messageContent, EdmModel model, IEdmEntitySetBase entitySet, EdmEntityType entityType, IServiceProvider container)
        {
            var outputStream = new MemoryStream();
            var writer       = new StreamWriter(outputStream);

            writer.Write(messageContent);
            writer.Flush();
            outputStream.Seek(0, SeekOrigin.Begin);

            IODataResponseMessage message = new InMemoryMessage
            {
                Stream    = outputStream,
                Container = container
            };

            message.SetHeader("Content-Type", "application/json");

            var settings = new ODataMessageReaderSettings();

            using (var messageReader = new ODataMessageReader(message, settings, model))
            {
                var reader = messageReader.CreateODataResourceReader(entitySet, entityType);
                Assert.True(reader.Read());
                return(reader.Item as ODataResource);
            }
        }
Esempio n. 16
0
        private OeEntityItem ReadEntityFromStream(OeMessageContext context, Stream content)
        {
            var                     parser = new ODataUriParser(context.Model, context.BaseUri, RequestUrl);
            IEdmEntitySet           entitySet;
            IEdmEntityTypeReference entityTypeRef = GetEdmEntityTypeRef(parser.ParsePath(), out entitySet);
            var                     entityType    = (IEdmEntityType)entityTypeRef.Definition;

            ODataResource        entry          = null;
            IODataRequestMessage requestMessage = new OeInMemoryMessage(content, ContentType);
            var settings = new ODataMessageReaderSettings {
                EnableMessageStreamDisposal = false
            };

            using (var messageReader = new ODataMessageReader(requestMessage, settings, context.Model))
            {
                ODataReader reader = messageReader.CreateODataResourceReader(entitySet, entityType);

                while (reader.Read())
                {
                    if (reader.State == ODataReaderState.ResourceEnd)
                    {
                        entry = (ODataResource)reader.Item;
                    }
                }
                if (entry == null)
                {
                    throw new InvalidOperationException("operation not contain entry");
                }
            }

            Db.OeEntitySetMetaAdapter entitySetMetaAdapter = context.EntitySetMetaAdapters.FindByEntitySetName(entitySet.Name);
            return(new OeEntityItem(entitySet, entityType, entitySetMetaAdapter.EntityType, entry));
        }
Esempio n. 17
0
        private static IList <ODataResource> GetReadedResourceWithNestedInfo(string messageContent, EdmModel model, IEdmEntitySetBase entitySet, EdmEntityType entityType, IServiceProvider container)
        {
            var outputStream = new MemoryStream();
            var writer       = new StreamWriter(outputStream);

            writer.Write(messageContent);
            writer.Flush();
            outputStream.Seek(0, SeekOrigin.Begin);

            IODataResponseMessage message = new InMemoryMessage
            {
                Stream    = outputStream,
                Container = container
            };

            message.SetHeader("Content-Type", "application/json;odata.metadata=full");

            var settings = new ODataMessageReaderSettings();

            using (var messageReader = new ODataMessageReader(message, settings, model))
            {
                var reader = messageReader.CreateODataResourceReader(entitySet, entityType);
                IList <ODataResource> resources = new List <ODataResource>();

                while (reader.Read())
                {
                    if (reader.State == ODataReaderState.ResourceEnd)
                    {
                        resources.Add(reader.Item as ODataResource);
                    }
                }

                return(resources);
            }
        }
        public void EntityInstanceAnnotation()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in TestMimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Boss", UriKind.Absolute));
                requestMessage.SetHeader("Accept", mimeType);
                requestMessage.SetHeader("Prefer", string.Format("{0}={1}", IncludeAnnotation, "*"));
                var responseMessage = requestMessage.GetResponse();
                Assert.AreEqual(200, responseMessage.StatusCode);

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        var reader = messageReader.CreateODataResourceReader();
                        List <ODataResource> entries = new List <ODataResource>();
                        while (reader.Read())
                        {
                            if (reader.State == ODataReaderState.ResourceEnd)
                            {
                                entries.Add(reader.Item as ODataResource);
                            }
                        }

                        Assert.AreEqual(true, (entries.Last().InstanceAnnotations.First(i => i.Name.Equals(string.Format("{0}.IsBoss", TestModelNameSpace))).Value as ODataPrimitiveValue).Value);
                        Assert.AreEqual(ODataReaderState.Completed, reader.State);
                    }
                }
            }
        }
Esempio n. 19
0
        private static ODataResource ReadEntityFromStream(IEdmModel edmModel, Uri baseUri, Stream content, Uri requestUrl, String contentType, out IEdmEntitySet entitySet)
        {
            var parser = new ODataUriParser(edmModel, baseUri, requestUrl);
            IEdmEntityTypeReference entityTypeRef = GetEdmEntityTypeRef(parser.ParsePath(), out entitySet);

            ODataResource        entry          = null;
            IODataRequestMessage requestMessage = new OeInMemoryMessage(content, contentType);
            var settings = new ODataMessageReaderSettings {
                EnableMessageStreamDisposal = false
            };

            using (var messageReader = new ODataMessageReader(requestMessage, settings, edmModel))
            {
                ODataReader reader = messageReader.CreateODataResourceReader(entitySet, entitySet.EntityType());
                while (reader.Read())
                {
                    if (reader.State == ODataReaderState.ResourceEnd)
                    {
                        entry = (ODataResource)reader.Item;
                    }
                }
                if (entry == null)
                {
                    throw new InvalidOperationException("operation not contain entry");
                }
            }

            return(entry);
        }
Esempio n. 20
0
        private ODataResource QueryEntry(string uri, string mimeType)
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var queryRequestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + uri, UriKind.Absolute));

            queryRequestMessage.SetHeader("Accept", mimeType);
            var queryResponseMessage = queryRequestMessage.GetResponse();

            Assert.AreEqual(200, queryResponseMessage.StatusCode);

            ODataResource entry = null;

            if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
            {
                using (var messageReader = new ODataMessageReader(queryResponseMessage, readerSettings, Model))
                {
                    var reader = messageReader.CreateODataResourceReader();
                    while (reader.Read())
                    {
                        if (reader.State == ODataReaderState.ResourceEnd)
                        {
                            entry = reader.Item as ODataResource;
                        }
                    }

                    Assert.AreEqual(ODataReaderState.Completed, reader.State);
                }
            }

            return(entry);
        }
Esempio n. 21
0
        private List <ODataResource> ReadPayload(string payload, IEdmModel model, IEdmNavigationSource entitySet, IEdmStructuredType entityType, bool isFullMetadata = false)
        {
            InMemoryMessage message = new InMemoryMessage();

            if (isFullMetadata)
            {
                message.SetHeader("Content-Type", "application/json;odata.metadata=full");
            }
            else
            {
                message.SetHeader("Content-Type", "application/json;odata.metadata=minimal");
            }
            message.Stream = new MemoryStream(Encoding.UTF8.GetBytes(payload));

            List <ODataResource> entryList = new List <ODataResource>();

            using (var messageReader = new ODataMessageReader((IODataResponseMessage)message, null, model))
            {
                var reader = messageReader.CreateODataResourceReader(entitySet, entityType);
                while (reader.Read())
                {
                    switch (reader.State)
                    {
                    case ODataReaderState.ResourceEnd:
                        entryList.Add((ODataResource)reader.Item);
                        break;
                    }
                }
            }

            return(entryList);
        }
Esempio n. 22
0
        public void ActionTakeDateAndTimeAsParameter()
        {
            var writerSettings = new ODataMessageWriterSettings();

            writerSettings.BaseUri = ServiceBaseUri;
            var readerSettings = new ODataMessageReaderSettings();

            readerSettings.BaseUri = ServiceBaseUri;

            foreach (var mimeType in mimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri + "Orders(7)/Microsoft.Test.OData.Services.ODataWCFService.ChangeShipTimeAndDate"));

                requestMessage.SetHeader("Content-Type", mimeType);
                requestMessage.SetHeader("Accept", mimeType);
                requestMessage.Method = "POST";

                Date      newDate = Date.MinValue;
                TimeOfDay newTime = TimeOfDay.MinValue;
                using (var messageWriter = new ODataMessageWriter(requestMessage, writerSettings, Model))
                {
                    var odataWriter = messageWriter.CreateODataParameterWriter((IEdmOperation)null);
                    odataWriter.WriteStart();
                    odataWriter.WriteValue("date", newDate);
                    odataWriter.WriteValue("time", newTime);
                    odataWriter.WriteEnd();
                }

                // send the http request
                var responseMessage = requestMessage.GetResponse();
                Assert.Equal(200, responseMessage.StatusCode);

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        var reader = messageReader.CreateODataResourceReader();

                        while (reader.Read())
                        {
                            if (reader.State == ODataReaderState.ResourceEnd)
                            {
                                ODataResource entry = reader.Item as ODataResource;
                                if (entry != null)
                                {
                                    Assert.Equal(Date.MinValue, entry.Properties.Single(p => p.Name == "ShipDate").Value);
                                    Assert.Equal(TimeOfDay.MinValue, entry.Properties.Single(p => p.Name == "ShipTime").Value);
                                }
                            }
                        }
                        Assert.Equal(ODataReaderState.Completed, reader.State);
                    }
                }
            }
        }
Esempio n. 23
0
        /// <summary>
        /// Read the response message and perform given verifications
        /// </summary>
        /// <param name="isFeed">Whether the response has a feed</param>
        /// <param name="responseMessage">The response message</param>
        /// <param name="expectedSet">Expected IEdmEntitySet</param>
        /// <param name="expectedType">Expected IEdmEntityType</param>
        /// <param name="verifyFeed">Action to verify the feed</param>
        /// <param name="verifyEntry">Action to verify the entry</param>
        /// <param name="verifyNavigation">Action to verify the navigation</param>
        public static void ReadAndVerifyFeedEntryMessage(bool isFeed, StreamResponseMessage responseMessage,
                                                         IEdmEntitySet expectedSet, IEdmEntityType expectedType,
                                                         Action <ODataResourceSet> verifyFeed, Action <ODataResource> verifyEntry,
                                                         Action <ODataNestedResourceInfo> verifyNavigation)
        {
            var settings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceUri
            };

            settings.ShouldIncludeAnnotation = s => true;
            ODataMessageReader messageReader = new ODataMessageReader(responseMessage, settings, Model);
            ODataReader        reader        = isFeed
                                     ? messageReader.CreateODataResourceSetReader(expectedSet, expectedType)
                                     : messageReader.CreateODataResourceReader(expectedSet, expectedType);

            while (reader.Read())
            {
                switch (reader.State)
                {
                case ODataReaderState.ResourceSetEnd:
                {
                    if (verifyFeed != null)
                    {
                        verifyFeed((ODataResourceSet)reader.Item);
                    }

                    break;
                }

                case ODataReaderState.ResourceEnd:
                {
                    if (verifyEntry != null && reader.Item != null)
                    {
                        verifyEntry((ODataResource)reader.Item);
                    }

                    break;
                }

                case ODataReaderState.NestedResourceInfoEnd:
                {
                    if (verifyNavigation != null)
                    {
                        verifyNavigation((ODataNestedResourceInfo)reader.Item);
                    }

                    break;
                }
                }
            }

            Assert.AreEqual(ODataReaderState.Completed, reader.State);
        }
Esempio n. 24
0
        /// <summary>
        /// Creates and Wraps an ODataReader for feeds or entries.
        /// </summary>
        /// <param name="messageReader">The message reader.</param>
        /// <param name="messageType">The message type.</param>
        /// <param name="expectedType">The expected EDM type.</param>
        /// <param name="responsePipeline">The data service response pipeling configuration object.</param>
        /// <returns>A reader.</returns>
        internal static ODataReaderWrapper Create(ODataMessageReader messageReader, ODataPayloadKind messageType, IEdmType expectedType, DataServiceClientResponsePipelineConfiguration responsePipeline)
        {
            IEdmStructuredType entityType = expectedType as IEdmStructuredType;

            if (messageType == ODataPayloadKind.Resource)
            {
                return(new ODataReaderWrapper(messageReader.CreateODataResourceReader(entityType), responsePipeline));
            }

            return(new ODataReaderWrapper(messageReader.CreateODataResourceSetReader(entityType), responsePipeline));
        }
Esempio n. 25
0
        public static async Task Main1(string[] args)
        {
            String path = @"C:\Users\kibandi\Desktop\SimpleExchangeOutput.txt";

            using (StreamReader sr = File.OpenText(path))
            {
                IEdmModel model = null;

                /*model = builder
                 *  .BuildAddressType()
                 *  .BuildCategoryType()
                 *  .BuildCustomerType()
                 *  .BuildDefaultContainer()
                 *  .BuildCustomerSet()
                 *  .GetModel();*/

                Stream stream = sr.BaseStream;
                ODataMessageReaderSettings settings        = new ODataMessageReaderSettings();
                IODataResponseMessage      responseMessage = new InMemoryMessage {
                    Stream = stream
                };
                responseMessage.SetHeader("Content-Type", "application/json;odata.metadata=minimal;");
                // ODataMessageReader reader = new ODataMessageReader((IODataResponseMessage)message, settings, GetEdmModel());
                ODataMessageReader reader = new ODataMessageReader(responseMessage, settings, new EdmModel());
                var oDataResourceReader   = reader.CreateODataResourceReader();
                var property = reader.ReadProperty();

                //ODataStreamInfo odataStream = reader.Item as ODataStreamInfo;

                stream.Position = 0;
                //var asynchronousReader = reader.CreateODataAsynchronousReader();
                IEdmStructuredType resource = new EdmComplexType("odata", "odata");
                oDataResourceReader = reader.CreateODataResourceReader(resourceType: resource);
                while (oDataResourceReader.Read())
                {
                    var oItem = oDataResourceReader.Item;
                    Console.WriteLine(oItem.ToString());
                }
                //var responseMessage = asynchronousReader.CreateResponseMessage();
            }
        }
        public void ModelReferenceWithExpandOption()
        {
            Dictionary <string, int[]> testCases = new Dictionary <string, int[]>()
            {
                { "Trucks('Key1')?$select=Key,VehicleGPS&$expand=VehicleGPS", new int[] { 2, 1 } },
                { "Trucks('Key1')?$expand=HeadUnit,VehicleGPS", new int[] { 3, 4 } },
            };

            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var testCase in testCases)
            {
                foreach (var mimeType in mimeTypes)
                {
                    var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + testCase.Key, UriKind.Absolute));
                    requestMessage.SetHeader("Accept", mimeType);
                    var responseMessage = requestMessage.GetResponse();
                    Assert.Equal(200, responseMessage.StatusCode);

                    if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                    {
                        using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                        {
                            List <ODataResource>           entries         = new List <ODataResource>();
                            List <ODataNestedResourceInfo> navigationLinks = new List <ODataNestedResourceInfo>();

                            var reader = messageReader.CreateODataResourceReader();
                            while (reader.Read())
                            {
                                if (reader.State == ODataReaderState.ResourceEnd)
                                {
                                    entries.Add(reader.Item as ODataResource);
                                }
                                else if (reader.State == ODataReaderState.NestedResourceInfoEnd)
                                {
                                    navigationLinks.Add(reader.Item as ODataNestedResourceInfo);
                                }
                            }

                            Assert.Equal(ODataReaderState.Completed, reader.State);
                            Assert.Equal(testCase.Value[0], entries.Where(e => e.TypeName.Contains("TruckType") ||
                                                                          e.TypeName.Contains("VehicleGPSType") ||
                                                                          e.TypeName.Contains("HeadUnitType")).Count());
                            Assert.Equal(testCase.Value[1], navigationLinks.Where(n => n.Url != null).Count());
                        }
                    }
                }
            }
        }
Esempio n. 27
0
        public void TestCreateODataResourceReader_WithoutEntitySetOrType_DoesNotThrow()
        {
            // Arrange
            IODataRequestMessage       request  = CreateRequest();
            ODataMessageReaderSettings settings = CreateSettings();
            IEdmModel model = CreateModel();

            using (ODataMessageReader reader = new ODataMessageReader(request, settings, model))
            {
                // Act & Assert
                ExceptionAssert.DoesNotThrow(() => reader.CreateODataResourceReader());
            }
        }
        public void QueryEntityNavigationWithImplicitKeys()
        {
            // test Uri's
            List <string> testCases = new List <string>
            {
                "Products(5)/Details(3)",
                "Products(5)/Details(ProductDetailID=3)",
                "Products(5)/Details(ProductID=5,ProductDetailID=3)",
                "ProductDetails(ProductID=5,ProductDetailID=2)/Reviews(ReviewTitle='So so',RevisionID=1)",
                "ProductDetails(ProductID=5,ProductDetailID=2)/Reviews(ProductDetailID=2,ReviewTitle='So so',RevisionID=1)",
                "ProductDetails(ProductID=5,ProductDetailID=2)/Reviews(ProductDetailID=2,RevisionID=1,ProductID=5,ReviewTitle='So so')",
            };

            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var testCase in testCases)
            {
                foreach (var mimeType in mimeTypes)
                {
                    var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + testCase, UriKind.Absolute));
                    requestMessage.SetHeader("Accept", mimeType);
                    var responseMessage = requestMessage.GetResponse();
                    Assert.AreEqual(200, responseMessage.StatusCode);

                    if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                    {
                        ODataResource entry = null;
                        using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                        {
                            var reader = messageReader.CreateODataResourceReader();

                            while (reader.Read())
                            {
                                if (reader.State == ODataReaderState.ResourceEnd)
                                {
                                    entry = reader.Item as ODataResource;
                                }
                            }

                            Assert.AreEqual(ODataReaderState.Completed, reader.State);
                        }

                        Assert.IsTrue(entry.Id.OriginalString.EndsWith("ProductDetails(ProductID=5,ProductDetailID=3)") ||
                                      entry.Id.OriginalString.EndsWith("ProductReviews(ProductID=5,ProductDetailID=2,ReviewTitle='So%20so',RevisionID=1)"));
                    }
                }
            }
        }
Esempio n. 29
0
        public void TestCreateODataResourceReader_WithEntitySetButWithoutType_DoesNotThrow()
        {
            // Arrange
            IODataRequestMessage       request  = CreateRequest();
            ODataMessageReaderSettings settings = CreateSettings();
            IEdmModel     model     = CreateModel();
            IEdmEntitySet entitySet = model.EntityContainer.EntitySets().First();

            using (ODataMessageReader reader = new ODataMessageReader(request, settings, model))
            {
                // Act & Assert
                ExceptionAssert.DoesNotThrow(() => reader.CreateODataResourceReader(entitySet, null));
            }
        }
        public void EntryMetadataUrlRoundTrip()
        {
            var stream = new MemoryStream();
            var writerRequestMemoryMessage = new InMemoryMessage();

            writerRequestMemoryMessage.Stream = stream;
            writerRequestMemoryMessage.SetHeader("Content-Type", "application/json");

            var writerSettings = new ODataMessageWriterSettings()
            {
                Version = ODataVersion.V4, EnableMessageStreamDisposal = false
            };

            writerSettings.ODataUri = new ODataUri()
            {
                ServiceRoot = new Uri("http://christro.svc/")
            };

            var messageWriter         = new ODataMessageWriter((IODataResponseMessage)writerRequestMemoryMessage, writerSettings, this.model);
            var organizationSetWriter = messageWriter.CreateODataResourceWriter(this.organizationsSet);
            var odataEntry            = new ODataResource()
            {
                TypeName = ModelNamespace + ".Corporation"
            };

            odataEntry.Property("Id", 1);
            odataEntry.Property("Name", "");
            odataEntry.Property("TickerSymbol", "MSFT");

            organizationSetWriter.WriteStart(odataEntry);
            organizationSetWriter.WriteEnd();

            var readerPayloadInput = Encoding.UTF8.GetString(stream.GetBuffer());

            Console.WriteLine(readerPayloadInput);

            var readerResponseMemoryMessage = new InMemoryMessage();

            readerResponseMemoryMessage.Stream = new MemoryStream(stream.GetBuffer());
            readerResponseMemoryMessage.SetHeader("Content-Type", "application/json");

            var messageReader = new ODataMessageReader((IODataResponseMessage)readerResponseMemoryMessage, new ODataMessageReaderSettings()
            {
                MaxProtocolVersion = ODataVersion.V4, EnableMessageStreamDisposal = false
            }, this.model);
            var organizationReader = messageReader.CreateODataResourceReader(this.organizationsSet, this.organizationsSet.EntityType());

            organizationReader.Read().Should().Be(true);
            organizationReader.Item.As <ODataResource>();
        }