public void QueryEntitySet()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in mimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Products", 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))
                    {
                        List <ODataEntry> entries = new List <ODataEntry>();
                        var reader = messageReader.CreateODataFeedReader();

                        while (reader.Read())
                        {
                            if (reader.State == ODataReaderState.EntryEnd)
                            {
                                ODataEntry entry = reader.Item as ODataEntry;
                                Assert.IsNotNull(entry);
                                entries.Add(entry);
                            }
                            else if (reader.State == ODataReaderState.FeedEnd)
                            {
                                Assert.IsNotNull(reader.Item as ODataFeed);
                            }
                        }

                        Assert.AreEqual(ODataReaderState.Completed, reader.State);
                        Assert.AreEqual(5, entries.Count);

                        ODataEnumValue skinColor  = (ODataEnumValue)entries[1].Properties.Single(p => p.Name == "SkinColor").Value;
                        ODataEnumValue userAccess = (ODataEnumValue)entries[1].Properties.Single(p => p.Name == "UserAccess").Value;
                        Assert.AreEqual("Blue", skinColor.Value);
                        Assert.AreEqual("ReadWrite", userAccess.Value);
                    }
                }
            }
        }
示例#2
0
        private void VerifyAtomBeDisabledQueryTest(string uri)
        {
            var message = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + uri, UriKind.Absolute));

            message.SetHeader("Accept", MimeTypes.ApplicationAtomXml);

            var responseMessage = message.GetResponse();

            Assert.AreEqual(415, responseMessage.StatusCode);

            using (var messageReader = new ODataMessageReader(responseMessage))
            {
                var error = messageReader.ReadError();
                Assert.AreEqual(typeof(Microsoft.OData.ODataError), error.GetType());
                Assert.AreEqual("UnsupportedMediaType", error.ErrorCode);
            }
        }
示例#3
0
        public void AnnotationComputedOptimisticConcurrency()
        {
            var requestMessage = new HttpWebRequestMessage(
                new DataServiceClientRequestMessageArgs(
                    "GET",
                    new Uri(this.ServiceBaseUri.OriginalString + "$metadata", UriKind.Absolute),
                    true,
                    false,
                    new Dictionary <string, string>()));

            using (var r = new StreamReader(requestMessage.GetResponse().GetStream()))
            {
                var modelStr = r.ReadToEnd();
                Assert.Contains("<Annotation Term=\"Org.OData.Core.V1.Computed\" Bool=\"true\" />", modelStr, StringComparison.Ordinal);
                Assert.Contains("<Annotation Term=\"Org.OData.Core.V1.OptimisticConcurrency\">", modelStr, StringComparison.Ordinal);
            }
        }
示例#4
0
        public void MetadataShouldContainDerivedType()
        {
            var requestMessage = new HttpWebRequestMessage(
                new DataServiceClientRequestMessageArgs(
                    "GET",
                    new Uri(this.ServiceBaseUri.OriginalString + "$metadata", UriKind.Absolute),
                    true,
                    false,
                    new Dictionary <string, string>()));

            using (var r = new StreamReader(requestMessage.GetResponse().GetStream()))
            {
                var modelStr = r.ReadToEnd();
                Assert.Contains("<EntityType Name=\"Manager\" BaseType=\"Microsoft.OData.Service.Sample.Trippin.Models.Person\">", modelStr, StringComparison.Ordinal);
                Assert.Contains("<EntityType Name=\"Employee\" BaseType=\"Microsoft.OData.Service.Sample.Trippin.Models.Person\">", modelStr, StringComparison.Ordinal);
            }
        }
示例#5
0
        /// <summary>
        /// Stores the metadata document from the test service as an IEdmModel
        /// </summary>
        private void RetrieveServiceEdmModel()
        {
            HttpWebRequestMessage message = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "$metadata", UriKind.Absolute));

            message.SetHeader("Accept", MimeTypes.ApplicationXml);

            using (var messageReader = new ODataMessageReader(message.GetResponse()))
            {
                Func <Uri, XmlReader> getReferencedSchemaFunc = uri =>
                {
                    return(XmlReader.Create(GetStreamFromUrl(uri.AbsoluteUri)));
                };
                Model = messageReader.ReadMetadataDocument(getReferencedSchemaFunc);
            }
            //$metadata request failed
            Assert.NotNull(Model.EntityContainer);
        }
        public void InvokeActionWithEnumParameterAndReturnType()
        {
            var writerSettings = new ODataMessageWriterSettings();

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

            readerSettings.BaseUri = ServiceBaseUri;

            foreach (var mimeType in mimeTypes)
            {
                if (mimeType == MimeTypes.ApplicationAtomXml)
                {
                    continue;
                }

                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri + "Products(5)/Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight"));

                requestMessage.SetHeader("Content-Type", mimeType);
                requestMessage.SetHeader("Accept", "*/*");
                requestMessage.Method = "POST";
                ODataEnumValue accessRight = new ODataEnumValue("Read,Execute", NameSpacePrefix + "AccessLevel");
                using (var messageWriter = new ODataMessageWriter(requestMessage, writerSettings, Model))
                {
                    var odataWriter = messageWriter.CreateODataParameterWriter((IEdmOperation)null);
                    odataWriter.WriteStart();
                    odataWriter.WriteValue("accessRight", accessRight);
                    odataWriter.WriteEnd();
                }

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

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        var            userAccessPropertyValue = messageReader.ReadProperty();
                        ODataEnumValue enumValue = userAccessPropertyValue.Value as ODataEnumValue;
                        Assert.AreEqual("Read, Execute", enumValue.Value);
                    }
                }
            }
        }
        public void ModelReferenceWithSelectOption()
        {
            Dictionary <string, int> testCases = new Dictionary <string, int>()
            {
                { "Trucks('Key1')?$select=Key,FuelLevel", 2 },
                { "DerivedVehicleGPSSet('VehicleKey4')?$select=DisplayName,Map,StartLocation", 3 },
                { "VehicleGPSSetInGPS('DerivedVehicleGPSInGPSKey3')/Microsoft.OData.SampleService.Models.ModelRefDemo.TruckDemo.DerivedVehicleGPSType?$select=DisplayName,Map,StartLocation", 3 }
            };

            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>();

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

                            Assert.Equal(ODataReaderState.Completed, reader.State);
                            Assert.Equal(testCase.Value, entries.Last().Properties.Count() + entries.Count - 1 /*non-ComplexP + ComplexP*/);
                        }
                    }
                }
            }
        }
示例#8
0
        public void PostDeleteTypeInReferencingModel()
        {
            var entryWrapper = CreateVehicleGPS(true);

            #region Create and Delete
            var settings = new ODataMessageWriterSettings();
            settings.BaseUri = ServiceBaseUri;

            var vehicleGPSType = Model.FindType(TestModelNameSpace + ".GPS.VehicleGPSType") as IEdmEntityType;

            var vehicleGPSSet = Model.FindEntityContainer(TestModelNameSpace + ".GPS.GPSContainer").FindEntitySet("VehicleGPSSetInGPS");

            foreach (var mimeType in mimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri + "VehicleGPSSetInGPS"));

                requestMessage.SetHeader("Content-Type", mimeType);
                requestMessage.SetHeader("Accept", mimeType);
                requestMessage.Method = "POST";
                using (var messageWriter = new ODataMessageWriter(requestMessage, settings, Model))
                {
                    var odataWriter = messageWriter.CreateODataResourceWriter(vehicleGPSSet, vehicleGPSType);
                    ODataWriterHelper.WriteResource(odataWriter, entryWrapper);
                }

                // send the http request
                var responseMessage = requestMessage.GetResponse();

                // Verify Created
                Assert.AreEqual(201, responseMessage.StatusCode);
                ODataResource entry = this.QueryEntityItem("VehicleGPSSetInGPS('000')") as ODataResource;
                Assert.AreEqual("000", entry.Properties.Single(p => p.Name == "Key").Value);

                // Delete the entry
                var deleteRequestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri + "VehicleGPSSetInGPS('000')"));
                deleteRequestMessage.Method = "DELETE";
                var deleteResponseMessage = deleteRequestMessage.GetResponse();

                // Verift Deleted
                Assert.AreEqual(204, deleteResponseMessage.StatusCode);
                ODataResource deletedEntry = this.QueryEntityItem("VehicleGPSSetInGPS('000')", 204) as ODataResource;
                Assert.IsNull(deletedEntry);
            }
            #endregion
        }
        public async Task <IEnumerable <T> > ExecuteAsyncInternal <T>(Uri uri, string httpMethod, bool singleResult, Stream stream, params OperationParameter[] operationParameters)
        {
            try
            {
                if (stream != null)
                {
                    Configurations.RequestPipeline.OnMessageCreating = args =>
                    {
                        args.Headers.Remove("Content-Length");

                        var msg = new HttpWebRequestMessage(args);

                        Task.Factory.FromAsync <Stream>(msg.BeginGetRequestStream, msg.EndGetRequestStream, null)
                        .ContinueWith(s => stream.CopyTo(s.Result))
                        .Wait();

                        return(msg);
                    };
                }

                return(await Task.Factory.FromAsync <IEnumerable <T> >(
                           (callback, state) =>
                           BeginExecute <T>(uri, callback, state, httpMethod, singleResult, operationParameters),
                           EndExecute <T>,
                           TaskCreationOptions.None));
            }
            catch (Exception ex)
            {
                var newException = ProcessException(ex);

                if (newException != null)
                {
                    throw newException;
                }

                throw;
            }
            finally
            {
                if (stream != null)
                {
                    Configurations.RequestPipeline.OnMessageCreating = null;
                }
            }
        }
        public void QueryWithFormat()
        {
            Dictionary <string, string> testCases = new Dictionary <string, string>()
            {
                //{"Customers?$format=application/atom%2Bxml", "application/atom+xml"},
                { "Customers?$format=application/json", "application/json" },
                { "Customers?$format=application/json;odata.metadata=full", "application/json;odata.metadata=full" },
                { "Customers?$format=json", "application/json" },
            };

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

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

                string contentType = responseMessage.Headers.FirstOrDefault(x => x.Key.Equals("Content-Type")).Value;
                Assert.IsTrue(contentType.StartsWith(testCase.Value));

                using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                {
                    var reader = messageReader.CreateODataFeedReader();

                    while (reader.Read())
                    {
                        if (reader.State == ODataReaderState.EntryEnd)
                        {
                            ODataEntry entry = reader.Item as ODataEntry;
                            Assert.IsNotNull(entry.Properties.Single(p => p.Name == "PersonID").Value);
                        }
                        else if (reader.State == ODataReaderState.FeedEnd)
                        {
                            Assert.IsNotNull(reader.Item as ODataFeed);
                        }
                    }

                    Assert.AreEqual(ODataReaderState.Completed, reader.State);
                }
            }
        }
示例#11
0
        internal DataServiceClientRequestMessage ShimDataServiceRequest(DataServiceClientRequestMessageArgs args)
        {
            DataServiceClientRequestMessage message = null;

            if (_dataServiceHandler != null)
            {
                message = _dataServiceHandler(args);
            }
            else
            {
                message = new HttpWebRequestMessage(args);
            }

            // apply proxy and credential settings on the core web request
            InitializeMessage(message);

            return(message);
        }
示例#12
0
        public void QueryWithOrderByTime()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in mimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Orders?$OrderBy=ShipTime", UriKind.Absolute));
                requestMessage.SetHeader("Accept", mimeType);
                var responseMessage = requestMessage.GetResponse();
                Assert.Equal(200, responseMessage.StatusCode);

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

                        while (reader.Read())
                        {
                            if (reader.State == ODataReaderState.ResourceEnd)
                            {
                                ODataResource entry = reader.Item as ODataResource;
                                if (entry != null)
                                {
                                    foreach (ODataResource pre in list)
                                    {
                                        TimeOfDay entryTimeOfDay = (TimeOfDay)entry.Properties.Single(p => p.Name == "ShipTime").Value;
                                        TimeOfDay preTimeOfDay   = (TimeOfDay)pre.Properties.Single(p => p.Name == "ShipTime").Value;
                                        Assert.True(preTimeOfDay > entryTimeOfDay);
                                    }

                                    list.Add(entry);
                                }
                            }
                        }
                        Assert.Equal(ODataReaderState.Completed, reader.State);
                    }
                }
            }
        }
示例#13
0
        public void UpdateEntityInstanceProperty()
        {
            // query an entry
            ODataResource customerEntry = this.QueryEntityItem("Customers(1)") as ODataResource;

            Assert.AreEqual("London", customerEntry.Properties.Single(p => p.Name == "City").Value);

            // send a request to update an entry property
            customerEntry = new ODataResource()
            {
                TypeName = NameSpacePrefix + "Customer"
            };
            customerEntry.Properties = new[] { new ODataProperty {
                                                   Name = "City", Value = "Seattle"
                                               } };

            var settings = new ODataMessageWriterSettings();

            settings.BaseUri = ServiceBaseUri;

            var customerType = Model.FindDeclaredType(NameSpacePrefix + "Customer") as IEdmEntityType;
            var customerSet  = Model.EntityContainer.FindEntitySet("Customers");

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri + "Customers(1)"));

            requestMessage.SetHeader("Content-Type", MimeTypes.ApplicationJson);
            requestMessage.SetHeader("Accept", MimeTypes.ApplicationJson);
            requestMessage.Method = "PATCH";

            using (var messageWriter = new ODataMessageWriter(requestMessage, settings))
            {
                var odataWriter = messageWriter.CreateODataResourceWriter(customerSet, customerType);
                odataWriter.WriteStart(customerEntry);
                odataWriter.WriteEnd();
            }

            var responseMessage = requestMessage.GetResponse();

            // verify the update
            Assert.AreEqual(204, responseMessage.StatusCode);
            ODataResource updatedCustomer = this.QueryEntityItem("Customers(1)") as ODataResource;

            Assert.AreEqual("Seattle", updatedCustomer.Properties.Single(p => p.Name == "City").Value);
        }
        public void PostAndQuerySingleBinaryProperty()
        {
            var person = new Person
            {
                Picture = new byte[] { 3, 1, 4 },
            };

            this.TestClientContext.AddToPeople(person);
            this.TestClientContext.SaveChanges();

            var requestMessage =
                new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "People(" + person.Id + ")/Picture", UriKind.Absolute));
            var responseMessage = requestMessage.GetResponse();

            Assert.Equal(200, responseMessage.StatusCode);
            var dat = new StreamReader(responseMessage.GetStream()).ReadToEnd();

            Assert.True(dat.Contains("\"value\":\"3-1-4\""));
        }
        public void QueryWithAvroError()
        {
            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Products(-9)", UriKind.Absolute));

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

            Assert.AreEqual(404, responseMessage.StatusCode);
            ODataError error;

            using (var reader = new ODataMessageReader(responseMessage, GetAvroReaderSettings()))
            {
                error = reader.ReadError();
            }

            Assert.IsNotNull(error);
            Assert.AreEqual("NotFound", error.ErrorCode);
            Assert.AreEqual("An server side error occured.", error.Message);
        }
        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.AreEqual(200, responseMessage.StatusCode);

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                messageReader.ReadProperty();
            }
        }
        public void ModelReferneceWithFilterOption()
        {
            Dictionary <string, int> testCases = new Dictionary <string, int>()
            {
                { "VehicleGPSSet?$filter=VehicleSpeed gt 90", 3 },
                { "DerivedVehicleGPSSet?$filter=DisplayName eq 'DisplayName4'", 1 },
            };

            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.AreEqual(200, responseMessage.StatusCode);

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

                            var reader = messageReader.CreateODataFeedReader();
                            while (reader.Read())
                            {
                                if (reader.State == ODataReaderState.EntryEnd)
                                {
                                    entries.Add(reader.Item as ODataEntry);
                                }
                            }
                            Assert.AreEqual(ODataReaderState.Completed, reader.State);
                            Assert.AreEqual(testCase.Value, entries.Count);
                        }
                    }
                }
            }
        }
示例#18
0
        protected void TestPostPayloadContains(string uriStringAfterServiceRoot, string expectedSubString)
        {
            var requestMessage = new HttpWebRequestMessage(
                new DataServiceClientRequestMessageArgs(
                    "POST",
                    new Uri(this.ServiceBaseUri, uriStringAfterServiceRoot),
                    useDefaultCredentials: true,
                    usePostTunneling: false,
                    headers: new Dictionary <string, string>()
            {
                { "Content-Length", "0" }
            }));

            using (var r = new StreamReader(requestMessage.GetResponse().GetStream()))
            {
                var payloadString = r.ReadToEnd();
                Assert.Contains(expectedSubString, payloadString);
            }
        }
        public void TopLevelComplexTypeInstanceAnnotation()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in TestMimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "People(1)/HomeAddress", 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           odataReader = messageReader.CreateODataResourceReader();
                        ODataResource resource    = null;
                        while (odataReader.Read())
                        {
                            if (odataReader.State == ODataReaderState.ResourceEnd)
                            {
                                resource = odataReader.Item as ODataResource;
                            }
                        }

                        // Verify Annotation on Complex Type
                        ODataInstanceAnnotation annotationOnHomeAddress = resource.InstanceAnnotations
                                                                          .SingleOrDefault(annotation => annotation.Name.Equals(string.Format("{0}.AddressType", TestModelNameSpace)));
                        Assert.AreEqual("Home", (annotationOnHomeAddress.Value as ODataPrimitiveValue).Value);

                        // TODO : Fix #625
                        //// Verify Annotation on Property in Complex Type
                        //ODataInstanceAnnotation annotationOnCity = complexValue.Properties.SingleOrDefault(p => p.Name.Equals("City")).InstanceAnnotations.SingleOrDefault();
                        //Assert.AreEqual(string.Format("{0}.CityInfo", TestModelNameSpace), annotationOnCity.Name);
                        //Assert.AreEqual(2, (annotationOnCity.Value as ODataComplexValue).Properties.Count());
                    }
                }
            }
        }
        public void QueryEntitiesOrderByEnumProperty()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in mimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Products?$orderby=SkinColor", 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))
                    {
                        List <ODataEntry> entries = new List <ODataEntry>();
                        var reader = messageReader.CreateODataFeedReader();

                        while (reader.Read())
                        {
                            if (reader.State == ODataReaderState.EntryEnd)
                            {
                                ODataEntry entry = reader.Item as ODataEntry;
                                Assert.IsNotNull(entry);
                                entries.Add(entry);
                            }
                        }

                        Assert.AreEqual(ODataReaderState.Completed, reader.State);
                        Assert.AreEqual(5, entries.Count);

                        Assert.AreEqual(5, entries[0].Properties.Single(p => p.Name == "ProductID").Value);
                        Assert.AreEqual(7, entries[1].Properties.Single(p => p.Name == "ProductID").Value);
                        Assert.AreEqual(8, entries[2].Properties.Single(p => p.Name == "ProductID").Value);
                        Assert.AreEqual(9, entries[3].Properties.Single(p => p.Name == "ProductID").Value);
                        Assert.AreEqual(6, entries[4].Properties.Single(p => p.Name == "ProductID").Value);
                    }
                }
            }
        }
示例#21
0
        private List <ODataResource> QueryFeed(string uri, string mimeType, params string[] entryTypeNames)
        {
            List <ODataResource>       entries        = new List <ODataResource>();
            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 reader = messageReader.CreateODataResourceSetReader();

                    while (reader.Read())
                    {
                        if (reader.State == ODataReaderState.ResourceEnd)
                        {
                            ODataResource entry = reader.Item as ODataResource;
                            if (entry != null && (entryTypeNames.Length == 0 || entryTypeNames.Any(e => entry.TypeName.Contains(e))))
                            {
                                entries.Add(entry);
                            }
                        }
                        else if (reader.State == ODataReaderState.ResourceSetEnd)
                        {
                            Assert.IsNotNull(reader.Item as ODataResourceSet);
                        }
                    }
                    Assert.AreEqual(ODataReaderState.Completed, reader.State);
                }
            }

            return(entries);
        }
        private void SendRequestAndVerifyResponse(Dictionary <string, int> testCases)
        {
            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.AreEqual(200, responseMessage.StatusCode);
                    if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                    {
                        ODataEntry entry = null;
                        using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                        {
                            var reader = messageReader.CreateODataFeedReader();

                            while (reader.Read())
                            {
                                if (reader.State == ODataReaderState.EntryEnd)
                                {
                                    entry = reader.Item as ODataEntry;
                                }
                                else if (reader.State == ODataReaderState.FeedEnd)
                                {
                                    Assert.IsNotNull(reader.Item as ODataFeed);
                                }
                            }
                        }

                        Assert.IsNotNull(entry);
                        Assert.AreEqual(testCase.Value, entry.Properties.Single(p => p.Name == "PersonID").Value,
                                        String.Format("Mime:{0},URL:{1}", mimeType, testCase.Key));
                    }
                }
            }
        }
示例#23
0
        public void ValidMetadata()
        {
            var message = new HttpWebRequestMessage(new Uri(ServiceUri + "$metadata"));

            message.SetHeader("Accept", MimeTypes.ApplicationXml);

            using (var messageReader = new ODataMessageReader(message.GetResponse()))
            {
                var model     = messageReader.ReadMetadataDocument();
                var container = model.EntityContainer;
                var entities  = container.Elements.Where(e => e is IEdmEntitySet).ToArray();
                // Verify all the entities are exposed
                Assert.AreEqual(21, entities.Count(e => e.Name.StartsWith("EF")));
                Assert.IsTrue(entities.All(e => e.Name.StartsWith("EF")));

                // Verify all the service operation are exposed
                var functions = container.Elements.Where(e => e is IEdmOperationImport).ToArray();
                Assert.AreEqual(3, functions.Count());
            }
        }
示例#24
0
        public void FunctionReturnTime()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Orders(7)/Microsoft.Test.OData.Services.ODataWCFService.GetShipTime", UriKind.Absolute));

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

            Assert.AreEqual(200, responseMessage.StatusCode);

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var time = messageReader.ReadProperty().Value;
                Assert.AreEqual(new TimeOfDay(12, 40, 5, 50), time);
            }
        }
        public void BoundFunctionInReferencedModel()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "VehicleGPSSet('VehicleKey2')/Microsoft.OData.SampleService.Models.ModelRefDemo.GPS.GetVehicleSpeed()", UriKind.Absolute));

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

            Assert.Equal(200, responseMessage.StatusCode);

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var amount = messageReader.ReadProperty().Value;
                Assert.Equal((double)120, amount);
            }
        }
示例#26
0
        public void FunctionWithTime()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Orders(7)/Microsoft.Test.OData.Services.ODataWCFService.CheckShipTime(time = 12:40:5.5)", UriKind.Absolute));

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

            Assert.AreEqual(200, responseMessage.StatusCode);

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var isTrue = messageReader.ReadProperty().Value;
                Assert.AreEqual(false, isTrue);
            }
        }
示例#27
0
        public void QueryPropertyValueWithTypeDefinition()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "People(1)/LastName/$value", UriKind.Absolute));

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

            Assert.AreEqual(200, responseMessage.StatusCode);

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var lastNameValue = messageReader.ReadValue(EdmCoreModel.Instance.GetString(false));
                Assert.AreEqual("Cat", lastNameValue);
            }
        }
示例#28
0
        public void InvokeFunctionBoundedToSingleton()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Company/Microsoft.Test.OData.Services.ODataWCFService.GetEmployeesCount()", UriKind.Absolute));

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

            Assert.AreEqual(200, responseMessage.StatusCode);

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var amount = messageReader.ReadProperty().Value;
                Assert.AreEqual(2, amount);
            }
        }
        public void QueryDollarValue()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };
            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "People(1)/Home/$value", UriKind.Absolute));

            var responseMessage = requestMessage.GetResponse();

            Assert.AreEqual(200, responseMessage.StatusCode);
            object property = null;

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                property = messageReader.ReadValue(new EdmStringTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.String), true));
            }

            Assert.AreEqual("SRID=4326;POINT (23.1 32.1)", property);
        }
        public void QueryEnumPropertyValue()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Products(5)/SkinColor/$value", UriKind.Absolute));

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

            Assert.AreEqual(200, responseMessage.StatusCode);

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var skinColorPropertyValue = messageReader.ReadValue(EdmCoreModel.Instance.GetString(false));
                Assert.AreEqual("Red", skinColorPropertyValue);
            }
        }