public void WriteCompletedAsyncResponse() { var asyncWriter = this.TestInit(); var innerMessage = asyncWriter.CreateResponseMessage(); innerMessage.StatusCode = 200; innerMessage.SetHeader("Content-Type", "application/json"); var settings = new ODataMessageWriterSettings(); settings.SetServiceDocumentUri(new Uri(ServiceDocumentUri)); settings.EnableMessageStreamDisposal = false; using (var innerMessageWriter = new ODataMessageWriter(innerMessage, settings, this.userModel)) { var entryWriter = innerMessageWriter.CreateODataResourceWriter(singleton, testType); var entry = new ODataResource() { TypeName = "NS.Test", Properties = new[] { new ODataProperty() { Name = "Id", Value = 1 } } }; entryWriter.WriteStart(entry); entryWriter.WriteEnd(); } asyncWriter.Flush(); var payload = this.TestFinish(); Assert.Equal("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}", payload); }
private void WriteEntity(Stream stream, OeEntityItem entityItem) { var settings = new ODataMessageWriterSettings() { BaseUri = _baseUri, Version = ODataVersion.V4, ODataUri = new ODataUri() { ServiceRoot = _baseUri }, EnableMessageStreamDisposal = false }; IODataResponseMessage responseMessage = new OeInMemoryMessage(stream, null); using (ODataMessageWriter messageWriter = new ODataMessageWriter(responseMessage, settings, _model)) { ODataUtils.SetHeadersForPayload(messageWriter, ODataPayloadKind.Resource); ODataWriter writer = messageWriter.CreateODataResourceWriter(entityItem.EntitySet, entityItem.EntityType); entityItem.RefreshEntry(); writer.WriteStart(entityItem.Entry); writer.WriteEnd(); } }
private string GetWriterOutputForContentTypeAndKnobValue(ODataResource entry, EdmModel model, IEdmEntitySetBase entitySet, EdmEntityType entityType) { MemoryStream outputStream = new MemoryStream(); IODataResponseMessage message = new InMemoryMessage() { Stream = outputStream }; message.SetHeader("Content-Type", "application/json;odata.metadata=full"); ODataMessageWriterSettings settings = new ODataMessageWriterSettings(); settings.SetServiceDocumentUri(new Uri("http://example.com")); string output; using (var messageWriter = new ODataMessageWriter(message, settings, model)) { ODataWriter writer = messageWriter.CreateODataResourceWriter(entitySet, entityType); writer.WriteStart(entry); writer.WriteEnd(); outputStream.Seek(0, SeekOrigin.Begin); output = new StreamReader(outputStream).ReadToEnd(); } return(output); }
private string SerializeEntryInFullMetadataJson( bool useKeyAsSegment, IEdmModel edmModel, IEdmEntityType entityType = null, IEdmEntitySet entitySet = null) { var settings = new ODataMessageWriterSettings { }; settings.SetServiceDocumentUri(new Uri("http://example.com/")); var outputStream = new MemoryStream(); var container = ContainerBuilderHelper.BuildContainer(null); container.GetRequiredService <ODataSimplifiedOptions>().EnableWritingKeyAsSegment = useKeyAsSegment; var responseMessage = new InMemoryMessage { Stream = outputStream, Container = container }; responseMessage.SetHeader("Content-Type", "application/json;odata.metadata=full"); string output; using (var messageWriter = new ODataMessageWriter((IODataResponseMessage)responseMessage, settings, edmModel)) { var entryWriter = messageWriter.CreateODataResourceWriter(entitySet, entityType); ODataProperty keyProperty = new ODataProperty() { Name = "Key", Value = "KeyValue" }; var entry = new ODataResource { Properties = new[] { keyProperty }, TypeName = "Namespace.Person" }; if (edmModel == null) { keyProperty.SetSerializationInfo(new ODataPropertySerializationInfo { PropertyKind = ODataPropertyKind.Key }); entry.SetSerializationInfo(new ODataResourceSerializationInfo { NavigationSourceEntityTypeName = "Namespace.Person", NavigationSourceName = "People", ExpectedTypeName = "Namespace.Person", NavigationSourceKind = EdmNavigationSourceKind.EntitySet }); } entryWriter.WriteStart(entry); entryWriter.WriteEnd(); entryWriter.Flush(); outputStream.Seek(0, SeekOrigin.Begin); output = new StreamReader(outputStream).ReadToEnd(); } return(output); }
public static string ConvertToOData(object value) { // TODO: // 1. if primitive // 2. if enum // 3. if collection of (primitive or enum) // 4. InMemoryMessage message = new InMemoryMessage(); message.SetHeader("Content-Type", "application/json;odata.metadata=minimal"); message.Stream = new MemoryStream(); var settings = new ODataMessageWriterSettings { ODataUri = new ODataUri { ServiceRoot = new Uri("http://localhost/"), }, }; var model = GetEdmModel(value.GetType()); var writer = new ODataMessageWriter((IODataResponseMessage)message, settings, model); IEdmEntitySet entitySet = model.FindDeclaredEntitySet(value.GetType().Name + "s"); ODataWriter odataWriter = writer.CreateODataResourceWriter(entitySet); Type valueType = value.GetType(); bool isCollection = IsCollection(valueType, out Type elementType); if (value == null) { if (isCollection) { odataWriter.WriteStart(new ODataResourceSet { TypeName = "Collection(" + elementType.FullName + ")" }); } else { odataWriter.WriteStart(resource: null); } odataWriter.WriteEnd(); } else { if (isCollection) { WriteResourceSet(model, odataWriter, value); } else { WriteResource(model, odataWriter, value); } } message.Stream.Position = 0; return((new StreamReader(message.Stream)).ReadToEnd()); }
private static string WriteJsonLightEntryForUndeclared(bool isOpenType, Action <ODataWriter> writeAction, bool throwOnUndeclaredProperty = true) { EdmModel model = new EdmModel(); AddAndGetComplexType(model); EdmEntityType entityType = AddAndGetEntityType(model); if (isOpenType) { entityType = AddAndGetOpenEntityType(model); } var entitySet = GetEntitySet(model, entityType); var requestUri = new Uri("http://temp.org/FakeSet('parent')"); var odataUri = new ODataUri { RequestUri = requestUri }; odataUri.Path = new ODataUriParser(model, new Uri("http://temp.org/"), requestUri).ParsePath(); var stream = new MemoryStream(); var message = new InMemoryMessage { Stream = stream }; var settings = new ODataMessageWriterSettings { Version = ODataVersion.V4 }; if (!throwOnUndeclaredProperty) { settings.Validations &= ~ValidationKinds.ThrowOnUndeclaredPropertyForNonOpenType; } settings.ODataUri = odataUri; settings.SetServiceDocumentUri(new Uri("http://temp.org")); settings.SetContentType(ODataFormat.Json); settings.SetContentType("application/json;odata.metadata=full", null); ODataMessageWriter messageWriter; messageWriter = new ODataMessageWriter((IODataResponseMessage)message, settings, model); ODataWriter writer = null; writer = messageWriter.CreateODataResourceWriter(entitySet, entityType); if (writeAction != null) { writeAction(writer); } writer.Flush(); var actual = Encoding.UTF8.GetString(stream.ToArray()); return(actual); }
public void PutEntity() { int RequestsPerIteration = 100; foreach (var iteration in Benchmark.Iterations) { int PersonIdBase = 1; ResetDataSource(); using (iteration.StartMeasurement()) { for (int i = 0; i < RequestsPerIteration; i++) { ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { BaseUri = serviceFixture.ServiceBaseUri }; writerSettings.ODataUri = new ODataUri() { ServiceRoot = serviceFixture.ServiceBaseUri }; var requestMessage = new HttpWebRequestMessage(new Uri(serviceFixture.ServiceBaseUri.AbsoluteUri + "SimplePeopleSet(" + PersonIdBase + ")", UriKind.Absolute)); requestMessage.Method = "PUT"; var peopleEntry = new ODataResource() { Properties = new[] { new ODataProperty { Name = "PersonID", Value = PersonIdBase++ }, new ODataProperty { Name = "FirstName", Value = "PostEntity" }, new ODataProperty { Name = "LastName", Value = "PostEntity" }, new ODataProperty { Name = "MiddleName", Value = "NewMiddleName" } }, }; using (var messageWriter = new ODataMessageWriter(requestMessage, writerSettings)) { var odataWriter = messageWriter.CreateODataResourceWriter(); odataWriter.WriteStart(peopleEntry); odataWriter.WriteEnd(); } var responseMessage = requestMessage.GetResponse(); Assert.Equal(204, responseMessage.StatusCode); } } } }
private void WriteAnnotationsAndValidatePayload(Action <ODataWriter> action, IEdmNavigationSource navigationSource, ODataFormat format, string expectedPayload, bool request, bool createFeedWriter, bool enableWritingODataAnnotationWithoutPrefix = false, IEdmStructuredType resourceType = null) { var writerSettings = new ODataMessageWriterSettings { EnableMessageStreamDisposal = false }; writerSettings.SetContentType(format); writerSettings.SetServiceDocumentUri(new Uri("http://www.example.com/")); var container = ContainerBuilderHelper.BuildContainer(null); container.GetRequiredService <ODataSimplifiedOptions>().SetOmitODataPrefix( enableWritingODataAnnotationWithoutPrefix); MemoryStream stream = new MemoryStream(); if (request) { IODataRequestMessage requestMessageToWrite = new InMemoryMessage { Method = "GET", Stream = stream, Container = container }; using (var messageWriter = new ODataMessageWriter(requestMessageToWrite, writerSettings, Model)) { ODataWriter odataWriter = (createFeedWriter && !(navigationSource is EdmSingleton)) ? messageWriter.CreateODataResourceSetWriter(navigationSource as EdmEntitySet, EntityType) : messageWriter.CreateODataResourceWriter(navigationSource, resourceType ?? EntityType); action(odataWriter); } } else { IODataResponseMessage responseMessageToWrite = new InMemoryMessage { StatusCode = 200, Stream = stream, Container = container }; responseMessageToWrite.PreferenceAppliedHeader().AnnotationFilter = "*"; using (var messageWriter = new ODataMessageWriter(responseMessageToWrite, writerSettings, Model)) { ODataWriter odataWriter = (createFeedWriter && !(navigationSource is EdmSingleton)) ? messageWriter.CreateODataResourceSetWriter(navigationSource as EdmEntitySet, EntityType) : messageWriter.CreateODataResourceWriter(navigationSource, resourceType ?? EntityType); action(odataWriter); } } stream.Position = 0; string payload = (new StreamReader(stream)).ReadToEnd(); Assert.Equal(expectedPayload, payload); }
public string GetSampleEntityPayload(object entity, IEnumerable <string> projectedProperties) { var message = new SimpleResponseMessage(this.StatusCode, this.ContentType); using (var writer = new ODataMessageWriter(message, Settings)) { WriteEntry(writer.CreateODataResourceWriter(), entity, projectedProperties); } return(message.GetMessageString()); }
public void PostEntity() { int RequestsPerIteration = 100; int PersonIdBase = 100; for (int i = 0; i < RequestsPerIteration; i++) { ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { BaseUri = serviceFixture.ServiceBaseUri }; writerSettings.ODataUri = new ODataUri() { ServiceRoot = serviceFixture.ServiceBaseUri }; var requestMessage = new HttpWebRequestMessage( new Uri(serviceFixture.ServiceBaseUri.AbsoluteUri + "SimplePeopleSet", UriKind.Absolute)); requestMessage.Method = "POST"; var peopleEntry = new ODataResource() { EditLink = new Uri("/SimplePeopleSet(" + (PersonIdBase++) + ")", UriKind.Relative), Id = new Uri("/SimplePeopleSet(" + PersonIdBase + ")", UriKind.Relative), TypeName = NameSpacePrefix + "Person", Properties = new[] { new ODataProperty { Name = "PersonID", Value = PersonIdBase }, new ODataProperty { Name = "FirstName", Value = "PostEntity" }, new ODataProperty { Name = "LastName", Value = "PostEntity" }, new ODataProperty { Name = "MiddleName", Value = "PostEntity" } }, }; using (var messageWriter = new ODataMessageWriter(requestMessage, writerSettings)) { var odataWriter = messageWriter.CreateODataResourceWriter(); odataWriter.WriteStart(peopleEntry); odataWriter.WriteEnd(); } var responseMessage = requestMessage.GetResponse(); Assert.Equal(201, responseMessage.StatusCode); } }
public void TestCreateODataEntryWriter_InJsonLight_WithoutEntitySetOrType_DoesNotThrow() { // Arrange IODataResponseMessage response = CreateResponse(); ODataMessageWriterSettings settings = CreateJsonLightSettings(); IEdmModel model = CreateModel(); using (ODataMessageWriter writer = new ODataMessageWriter(response, settings, model)) { // Act & Assert ExceptionAssert.DoesNotThrow(() => writer.CreateODataResourceWriter()); } }
private void WriteEntity(Stream stream, OeEntityItem entityItem) { IODataResponseMessage responseMessage = new OeInMemoryMessage(stream, null); using (ODataMessageWriter messageWriter = new ODataMessageWriter(responseMessage, _settings, _model)) { ODataUtils.SetHeadersForPayload(messageWriter, ODataPayloadKind.Resource); ODataWriter writer = messageWriter.CreateODataResourceWriter(entityItem.EntitySet, entityItem.EntityType); writer.WriteStart(entityItem.Entry); writer.WriteEnd(); } }
public void UpdateEnumProperty() { // query an entry ODataResource productEntry = this.QueryEntityItem("Products(5)") as ODataResource; // send a request to update an entry property productEntry = new ODataResource() { TypeName = NameSpacePrefix + "Product", Properties = new[] { new ODataProperty { Name = "SkinColor", Value = new ODataEnumValue("Green") }, new ODataProperty { Name = "UserAccess", Value = new ODataEnumValue("Read") } } }; var settings = new ODataMessageWriterSettings(); settings.BaseUri = ServiceBaseUri; var productType = Model.FindDeclaredType(NameSpacePrefix + "Product") as IEdmEntityType; var productSet = Model.EntityContainer.FindEntitySet("Products"); foreach (var mimeType in mimeTypes) { var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri + "Products(5)")); requestMessage.SetHeader("Content-Type", mimeType); requestMessage.SetHeader("Accept", mimeType); requestMessage.Method = "PATCH"; using (var messageWriter = new ODataMessageWriter(requestMessage, settings, Model)) { var odataWriter = messageWriter.CreateODataResourceWriter(productSet, productType); odataWriter.WriteStart(productEntry); odataWriter.WriteEnd(); } var responseMessage = requestMessage.GetResponse(); // verify the update Assert.AreEqual(204, responseMessage.StatusCode); ODataResource updatedProduct = this.QueryEntityItem("Products(5)") as ODataResource; ODataEnumValue skinColor = updatedProduct.Properties.Single(p => p.Name == "SkinColor").Value as ODataEnumValue; ODataEnumValue userAccess = updatedProduct.Properties.Single(p => p.Name == "UserAccess").Value as ODataEnumValue; Assert.AreEqual("Green", skinColor.Value); Assert.AreEqual("Read", userAccess.Value); } }
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>(); }
public void TestCreateODataEntryWriter_InJsonLight_WithEntitySetButWithoutType_DoesNotThrow() { // Arrange IODataResponseMessage response = CreateResponse(); ODataMessageWriterSettings settings = CreateJsonLightSettings(); IEdmModel model = CreateModel(); IEdmEntitySet entitySet = model.EntityContainer.EntitySets().First(); using (ODataMessageWriter writer = new ODataMessageWriter(response, settings, model)) { // Act & Assert Assert.DoesNotThrow(() => writer.CreateODataResourceWriter(entitySet)); } }
public void BasicTest() { Model = GetModel(); // create entry and insert var personEntry = new ODataResource() { TypeName = nameSpace + ".Person" }; var userName = new ODataProperty { Name = "UserName", Value = "Test" }; var firstName = new ODataProperty { Name = "FirstName", Value = "Test" }; var lastName = new ODataProperty { Name = "LastName", Value = "1" }; var emails = new ODataProperty { Name = "Emails", Value = new ODataCollectionValue() }; personEntry.Properties = new[] { userName, firstName, lastName, emails }; var settings = new ODataMessageWriterSettings(); settings.BaseUri = baseUri; var personType = Model.FindDeclaredType(nameSpace + ".Person") as IEdmEntityType; var people = Model.EntityContainer.FindEntitySet("People"); var requestMessage = new HttpWebRequestMessage(new Uri(settings.BaseUri + "People")); requestMessage.SetHeader("Content-Type", "application/json"); requestMessage.SetHeader("Accept", "application/json"); requestMessage.Method = "POST"; using (var messageWriter = new ODataMessageWriter(requestMessage, settings)) { var odataWriter = messageWriter.CreateODataResourceWriter(people, personType); odataWriter.WriteStart(personEntry); odataWriter.WriteEnd(); } var responseMessage = requestMessage.GetResponse(); int expectedStatus = 201; Assert.True(expectedStatus.Equals(responseMessage.StatusCode)); }
private void UpdateEntry(string singletonType, string singletonName, string mimeType, IEnumerable <object> properties) { ODataResource entry = new ODataResource() { TypeName = NameSpacePrefix + singletonType }; var elementType = properties != null && properties.Count() > 0 ? properties.ElementAt(0).GetType() : null; if (elementType == typeof(ODataProperty)) { entry.Properties = properties.Cast <ODataProperty>(); } var settings = new ODataMessageWriterSettings(); settings.BaseUri = ServiceBaseUri; var customerType = Model.FindDeclaredType(NameSpacePrefix + singletonType) as IEdmEntityType; var customerSet = Model.EntityContainer.FindSingleton(singletonName); var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri + singletonName)); requestMessage.SetHeader("Content-Type", mimeType); requestMessage.SetHeader("Accept", mimeType); requestMessage.Method = "PATCH"; using (var messageWriter = new ODataMessageWriter(requestMessage, settings)) { var odataWriter = messageWriter.CreateODataResourceWriter(customerSet, customerType); odataWriter.WriteStart(entry); if (elementType == typeof(ODataNestedResourceInfo)) { foreach (var p in properties) { var nestedInfo = (ODataNestedResourceInfo)p; odataWriter.WriteStart(nestedInfo); odataWriter.WriteStart(nestedInfo.GetAnnotation <ODataResource>()); odataWriter.WriteEnd(); odataWriter.WriteEnd(); } } odataWriter.WriteEnd(); } var responseMessage = requestMessage.GetResponse(); // verify the update Assert.Equal(204, responseMessage.StatusCode); }
private string WriterEntry(IEdmModel userModel, ODataResource entry, EdmEntitySet entitySet, IEdmEntityType entityType, bool fullMetadata = false, Action <ODataWriter> writeAction = null, ODataStringEscapeOption?stringEscapeOption = null) { var message = new InMemoryMessage() { Stream = new MemoryStream() }; if (stringEscapeOption != null) { var containerBuilder = new Test.OData.DependencyInjection.TestContainerBuilder(); containerBuilder.AddDefaultODataServices(); containerBuilder.AddService <IJsonWriterFactory>(ServiceLifetime.Singleton, sp => new DefaultJsonWriterFactory(stringEscapeOption.Value)); message.Container = containerBuilder.BuildContainer(); } var writerSettings = new ODataMessageWriterSettings { EnableMessageStreamDisposal = false }; writerSettings.SetContentType(ODataFormat.Json); writerSettings.SetServiceDocumentUri(new Uri("http://www.example.com")); writerSettings.SetContentType(fullMetadata ? "application/json;odata.metadata=full;odata.streaming=false" : "application/json;odata.metadata=minimal;odata.streaming=false", "utf-8"); using (var msgReader = new ODataMessageWriter((IODataResponseMessage)message, writerSettings, userModel)) { var writer = msgReader.CreateODataResourceWriter(entitySet, entityType); if (writeAction != null) { writeAction(writer); } else { writer.WriteStart(entry); writer.WriteEnd(); } } message.Stream.Seek(0, SeekOrigin.Begin); using (StreamReader reader = new StreamReader(message.Stream)) { return(reader.ReadToEnd()); } }
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 void HandCraftEdmType() { foreach (var mimeType in this.testMimeTypes) { EdmModel edmModel = new EdmModel(); EdmEntityType edmEntityType = new EdmEntityType(NameSpace, "Person"); edmModel.AddElement(edmEntityType); var keyProperty = new EdmStructuralProperty(edmEntityType, "PersonId", EdmCoreModel.Instance.GetInt32(false)); edmEntityType.AddKeys(new IEdmStructuralProperty[] { keyProperty }); edmEntityType.AddProperty(keyProperty); var property = new EdmStructuralProperty(edmEntityType, "Name", EdmCoreModel.Instance.GetString(true)); edmEntityType.AddKeys(new IEdmStructuralProperty[] { property }); edmEntityType.AddProperty(property); var defaultContainer = new EdmEntityContainer(NameSpace, "DefaultContainer"); edmModel.AddElement(defaultContainer); EdmEntitySet entitySet = new EdmEntitySet(defaultContainer, "Person", edmEntityType); defaultContainer.AddElement(entitySet); var settings = new ODataMessageWriterSettings(); settings.ODataUri = new ODataUri() { ServiceRoot = this.ServiceUri }; var responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var odataWriter = messageWriter.CreateODataResourceWriter(entitySet, edmEntityType); var entry = this.CreatePersonEntryWithoutSerializationInfo(); odataWriter.WriteStart(entry); odataWriter.WriteEnd(); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { Assert.IsTrue( WritePayloadHelper.ReadStreamContent(responseMessageWithoutModel.GetStream()) .Contains("Person/$entity")); } } } }
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); }
private static string WriteJsonLightEntry(IEdmModel model, IEdmEntitySet entitySet, Action <ODataWriter> writeAction, bool isFullMetadata = false) { var stream = new MemoryStream(); var message = new InMemoryMessage { Stream = stream }; var settings = new ODataMessageWriterSettings { Version = ODataVersion.V4 }; var odataUri = new ODataUri { ServiceRoot = ServiceRoot }; odataUri.Path = new ODataUriParser(model, ServiceRoot, new Uri(ServiceRoot + "/EntitySet")).ParsePath(); settings.ODataUri = odataUri; settings.SetServiceDocumentUri(ServiceRoot); settings.SetContentType(ODataFormat.Json); if (isFullMetadata) { settings.SetContentType("application/json;odata.metadata=full", null); } else { settings.SetContentType("application/json;odata.metadata=minimal", null); } var messageWriter = new ODataMessageWriter((IODataResponseMessage)message, settings, model); ODataWriter writer = null; writer = messageWriter.CreateODataResourceWriter(entitySet); if (writeAction != null) { writeAction(writer); } writer.Flush(); var actual = Encoding.UTF8.GetString(stream.ToArray()); return(actual); }
private string WriteEntryPayload(EdmEntitySet entitySet, EdmEntityType entityType, Action <ODataWriter> action) { MemoryStream stream = new MemoryStream(); IODataResponseMessage message = new InMemoryMessage() { Stream = stream }; message.SetHeader("Content-Type", "application/json"); writerSettings.SetServiceDocumentUri(new Uri("http://www.sampletest.com")); using (var msgReader = new ODataMessageWriter((IODataResponseMessage)message, writerSettings, this.serverModel)) { var writer = msgReader.CreateODataResourceWriter(entitySet, entityType); action(writer); stream.Seek(0, SeekOrigin.Begin); string payload = (new StreamReader(stream)).ReadToEnd(); return(payload); } }
/// <inheritdoc /> public override void WriteObject(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw Error.ArgumentNull("messageWriter"); } if (writeContext == null) { throw Error.ArgumentNull("writeContext"); } IEdmTypeReference edmType = writeContext.GetEdmType(graph, type); Contract.Assert(edmType != null); IEdmNavigationSource navigationSource = writeContext.NavigationSource; ODataWriter writer = messageWriter.CreateODataResourceWriter(navigationSource, edmType.ToStructuredType()); WriteObjectInline(graph, edmType, writer, writeContext); }
public void ChangeSerializationInfoAfterWriteStart() { foreach (var mimeType in this.testMimeTypes) { var settings = new ODataMessageWriterSettings(); settings.ODataUri = new ODataUri() { ServiceRoot = this.ServiceUri }; var responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var odataWriter = messageWriter.CreateODataResourceWriter(); var entry = this.CreatePersonEntryWithoutSerializationInfo(); entry.SetSerializationInfo(new ODataResourceSerializationInfo() { NavigationSourceName = "Person", NavigationSourceEntityTypeName = NameSpace + "Person" }); odataWriter.WriteStart(entry); entry.SetSerializationInfo(new ODataResourceSerializationInfo() { NavigationSourceName = "Parsen", NavigationSourceEntityTypeName = NameSpace + "Person" }); odataWriter.WriteEnd(); Stream stream = responseMessageWithoutModel.GetStream(); // nometadata option does not write odata.metadata in the payload if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { Assert.IsTrue(WritePayloadHelper.ReadStreamContent(stream).Contains("Person/$entity")); } } } }
public void PatchEntity() { int RequestsPerIteration = 100; int PersonIdBase = 1; for (int i = 0; i < RequestsPerIteration; i++) { ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { BaseUri = serviceFixture.ServiceBaseUri }; writerSettings.ODataUri = new ODataUri() { ServiceRoot = serviceFixture.ServiceBaseUri }; var requestMessage = new HttpWebRequestMessage(new Uri(serviceFixture.ServiceBaseUri.AbsoluteUri + "SimplePeopleSet(" + (PersonIdBase++) + ")", UriKind.Absolute)); requestMessage.Method = "PATCH"; var peopleEntry = new ODataResource() { Properties = new[] { new ODataProperty { Name = "MiddleName", Value = "NewMiddleName" } }, }; using (var messageWriter = new ODataMessageWriter(requestMessage, writerSettings)) { var odataWriter = messageWriter.CreateODataResourceWriter(); odataWriter.WriteStart(peopleEntry); odataWriter.WriteEnd(); } var responseMessage = requestMessage.GetResponse(); Assert.Equal(204, responseMessage.StatusCode); } }
private static string GetWriterOutput(ODataResource entry, EdmModel model, IEdmEntitySetBase entitySet, EdmEntityType entityType, IServiceProvider container) { var outputStream = new MemoryStream(); IODataResponseMessage message = new InMemoryMessage { Stream = outputStream, Container = container }; message.SetHeader("Content-Type", "application/json"); var settings = new ODataMessageWriterSettings(); settings.SetServiceDocumentUri(new Uri("http://test")); using (var messageWriter = new ODataMessageWriter(message, settings, model)) { var writer = messageWriter.CreateODataResourceWriter(entitySet, entityType); writer.WriteStart(entry); writer.WriteEnd(); outputStream.Seek(0, SeekOrigin.Begin); return(new StreamReader(outputStream).ReadToEnd()); } }
private void WriteEntry() { var asyncWriter = this.CreateAsyncWriter(); var innerMessage = asyncWriter.CreateResponseMessage(); innerMessage.StatusCode = 200; innerMessage.SetHeader("Content-Type", "application/json"); var settings = new ODataMessageWriterSettings(); settings.SetServiceDocumentUri(new Uri(ServiceDocumentUri)); settings.EnableMessageStreamDisposal = false; using (var innerMessageWriter = new ODataMessageWriter(innerMessage, settings, userModel)) { var entryWriter = innerMessageWriter.CreateODataResourceWriter(singleton, testType); entryWriter.WriteStart(entry); entryWriter.WriteEnd(); } asyncWriter.Flush(); }
public void WriteEntryWithWrongSerializationInfoWithModel() { bool[] autoComputeMetadataBools = new bool[] { true, false, }; foreach (var mimeType in this.testMimeTypes) { foreach (var autoComputeMetadata in autoComputeMetadataBools) { var settings = new ODataMessageWriterSettings(); settings.ODataUri = new ODataUri() { ServiceRoot = this.ServiceUri }; var responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings, WritePayloadHelper.Model)) { var odataWriter = messageWriter.CreateODataResourceWriter(WritePayloadHelper.PersonSet, WritePayloadHelper.PersonType); var entry = this.CreatePersonEntryWithoutSerializationInfo(); entry.SetSerializationInfo(new ODataResourceSerializationInfo() { NavigationSourceName = "Parsen", NavigationSourceEntityTypeName = NameSpace + "Person" }); odataWriter.WriteStart(entry); odataWriter.WriteEnd(); var result = WritePayloadHelper.ReadStreamContent(responseMessageWithoutModel.GetStream()); Assert.IsTrue(result.Contains("\"PersonId\":-5")); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { // no metadata does not write odata.metadata Assert.IsTrue(result.Contains("$metadata#Parsen/$entity")); } } } } }
private string WriterEntry(IEdmModel userModel, ODataResource entry, EdmEntitySet entitySet, IEdmEntityType entityType, bool fullMetadata = false, Action <ODataWriter> writeAction = null) { var message = new InMemoryMessage() { Stream = new MemoryStream() }; var writerSettings = new ODataMessageWriterSettings { EnableMessageStreamDisposal = false }; writerSettings.SetContentType(ODataFormat.Json); writerSettings.SetServiceDocumentUri(new Uri("http://www.example.com")); writerSettings.SetContentType(fullMetadata ? "application/json;odata.metadata=full;odata.streaming=false" : "application/json;odata.metadata=minimal;odata.streaming=false", "utf-8"); using (var msgReader = new ODataMessageWriter((IODataResponseMessage)message, writerSettings, userModel)) { var writer = msgReader.CreateODataResourceWriter(entitySet, entityType); if (writeAction != null) { writeAction(writer); } else { writer.WriteStart(entry); writer.WriteEnd(); } } message.Stream.Seek(0, SeekOrigin.Begin); using (StreamReader reader = new StreamReader(message.Stream)) { return(reader.ReadToEnd()); } }