From 6fc47945e4c637e14112c6d768576e02dca29776 Mon Sep 17 00:00:00 2001 From: David Wambugu Date: Mon, 23 Dec 2019 14:18:00 +0300 Subject: [PATCH 01/11] added changes to DataServiceClientFormat to load edm model from network for certain cases and updated tests and regression tests for failing test cases --- .../DataServiceClientFormat.cs | 76 ++++++++++++++++++- .../Microsoft.OData.Core.Tests.csproj | 13 ++++ .../Build.NetFramework/packages.config | 1 + .../DataServiceContextUtil.cs | 39 ++++++++++ ...Microsoft.OData.Client.TDDUnitTests.csproj | 1 + .../Tests/ClientPropertyTrackingTests.cs | 2 +- .../Tests/ClientSerializerTests.cs | 36 ++++----- .../Tests/CustomizedHttpWebRequestMessage.cs | 20 +++++ .../Tests/DataServiceClientFormatTests.cs | 23 +++++- .../Tests/DataServiceContextTests.cs | 8 +- .../Tests/DataServiceRequestTests.cs | 3 +- .../Tests/ODataMessageReadingHelperTests.cs | 3 +- .../Tests/ODataMessageWritingHelperTests.cs | 3 +- .../ODataWriterWrapperUnitTests.cs | 7 +- .../Tests/T4/ODataT4CamelCaseTests.cs | 9 ++- .../ClientCSharpRegressionTests.cs | 12 ++- ...lientErrorHandlingShortIntegrationTests.cs | 9 +++ .../ClientShortIntegrationRegressionTests.cs | 2 +- .../ClientUnitTests/ClientRegressionTests.vb | 2 + .../ClientUnitTests/EntitySetResolverTests.vb | 6 +- .../ClientUnitTests/StateManagementTests.vb | 2 + .../UnitTests/ClientUnitTests/UpdateTests.vb | 4 + .../ClientUnitTests/VersionedRequests.vb | 5 ++ .../ClientUnitTests/medialinkentries.vb | 2 + 24 files changed, 246 insertions(+), 42 deletions(-) create mode 100644 test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/DataServiceContextUtil.cs diff --git a/src/Microsoft.OData.Client/DataServiceClientFormat.cs b/src/Microsoft.OData.Client/DataServiceClientFormat.cs index f6f0d5263f..ee85fbe5f7 100644 --- a/src/Microsoft.OData.Client/DataServiceClientFormat.cs +++ b/src/Microsoft.OData.Client/DataServiceClientFormat.cs @@ -4,14 +4,26 @@ // //--------------------------------------------------------------------- + + namespace Microsoft.OData.Client { + #region namespaces using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Microsoft.OData; - using Microsoft.OData.Edm; - + using Edm; + using System.IO; + using System.Xml; + using System.Net; + using Microsoft.OData.Edm.Csdl; + using System.Collections.Generic; +#if PORTABLELIB + using System.Threading.Tasks; +#endif + + #endregion /// /// Tracks the user-preferred format which the client should use when making requests. /// @@ -84,11 +96,24 @@ internal IEdmModel ServiceModel { serviceModel = LoadServiceModel(); } - + // For when the model is null and the user has not specified a method to load the service model + // default to fetching it from the metadata Uri + else if (serviceModel == null && LoadServiceModel == null) + { + serviceModel = LoadServiceModelUsingNetwork(); + } + return serviceModel; } } + /// + /// Invoked during test cases to fake out network calls to get the metadata + /// TODO: Change the visibility of this to internal after adding correct InternalsVisibleTo + /// returns a string that is passed to the csdl parser and is used to bypass the network call while testing + /// + internal Func InjectMetadataHttpNetworkRequest { get; set; } + /// /// Indicates that the client should use the efficient JSON format. /// @@ -246,7 +271,8 @@ private void SetRequestContentTypeHeader(HeaderCollection headers, string mediaT /// /// The headers to update. /// The media type for the accept header. - [SuppressMessage("Microsoft.Performance", "CA1822", Justification = "If this becomes static, then so do its more visible callers, and we do not want to provide a mix of instance and static methods on this class.")] + [SuppressMessage("Microsoft.Performance", "CA1822", Justification = + "If this becomes static, then so do its more visible callers, and we do not want to provide a mix of instance and static methods on this class.")] private void SetAcceptHeaderAndCharset(HeaderCollection headers, string mediaType) { // NOTE: we intentionally do NOT set the DSV header for 'accept' as content-negotiation @@ -274,5 +300,47 @@ private static string ChooseMediaType(bool hasSelectQueryOption) return MimeApplicationJsonODataLight; } + + /// + /// Loads the metadata and converts it into an EdmModel that is then used by a dataservice context + /// This allows the user to use the DataServiceContext directly without having to manually pass an IEdmModel in the Format + /// + /// A service model to be used in format tracking + internal IEdmModel LoadServiceModelUsingNetwork() + { + HttpWebRequestMessage httpRequest; + //internal method + if (InjectMetadataHttpNetworkRequest != null) + { + httpRequest = InjectMetadataHttpNetworkRequest(); + } + else + { + DataServiceClientRequestMessageArgs args = new DataServiceClientRequestMessageArgs( + "GET", + context.GetMetadataUri(), + context.UseDefaultCredentials, + context.UsePostTunneling, + new Dictionary()); + + httpRequest = new HttpWebRequestMessage(args); + } +#if !PORTABLELIB + IODataResponseMessage response = httpRequest.GetResponse(); + +#endif +#if PORTABLELIB + Task asyncResponse = + Task.Factory.FromAsync(httpRequest.BeginGetResponse, httpRequest.EndGetResponse, + httpRequest); + IODataResponseMessage response = asyncResponse.GetAwaiter().GetResult(); +#endif + + StreamReader streamReader = new StreamReader(response.GetStream()); + string xmlResponse = streamReader.ReadToEnd(); + XmlReader xmlReader = XmlReader.Create(new StringReader(xmlResponse)); + return CsdlReader.Parse(xmlReader); + } + } } diff --git a/test/FunctionalTests/Microsoft.OData.Core.Tests/Build.NetFramework/Microsoft.OData.Core.Tests.csproj b/test/FunctionalTests/Microsoft.OData.Core.Tests/Build.NetFramework/Microsoft.OData.Core.Tests.csproj index 4ff5d76b1b..98feddae8b 100644 --- a/test/FunctionalTests/Microsoft.OData.Core.Tests/Build.NetFramework/Microsoft.OData.Core.Tests.csproj +++ b/test/FunctionalTests/Microsoft.OData.Core.Tests/Build.NetFramework/Microsoft.OData.Core.Tests.csproj @@ -45,6 +45,15 @@ + + + ..\..\..\..\sln\packages\System.Runtime.CompilerServices.Unsafe.4.5.0\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll + True + + + ..\..\..\..\sln\packages\System.Threading.Tasks.Extensions.4.5.1\lib\portable-net45+win8+wp8+wpa81\System.Threading.Tasks.Extensions.dll + True + @@ -461,6 +470,10 @@ + + {D1567C63-4A0D-4E18-A14E-79699B9BFFFF} + Microsoft.OData.Client + {989a83cc-b864-4a75-8bf3-5eda99203a86} Microsoft.OData.Core diff --git a/test/FunctionalTests/Microsoft.OData.Core.Tests/Build.NetFramework/packages.config b/test/FunctionalTests/Microsoft.OData.Core.Tests/Build.NetFramework/packages.config index f4663ab670..ad8b9cb605 100644 --- a/test/FunctionalTests/Microsoft.OData.Core.Tests/Build.NetFramework/packages.config +++ b/test/FunctionalTests/Microsoft.OData.Core.Tests/Build.NetFramework/packages.config @@ -1,5 +1,6 @@  + diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/DataServiceContextUtil.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/DataServiceContextUtil.cs new file mode 100644 index 0000000000..bed218490d --- /dev/null +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/DataServiceContextUtil.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.OData.Client.TDDUnitTests.Tests; + +namespace Microsoft.OData.Client.TDDUnitTests +{ + public static class DataServiceContextUtil + { + private const string ValidEdmx = @" + + + + + +"; + + public static DataServiceContext ReConfigureForNetworkLoadingTests(this DataServiceContext context) + { + context.Format.InjectMetadataHttpNetworkRequest = InjectFakeEdmxRequest; + return context; + } + internal static HttpWebRequestMessage InjectFakeEdmxRequest() + { + return new CustomizedHttpWebRequestMessage( + new DataServiceClientRequestMessageArgs( + "GET", + new Uri("http://temp.org/"), + false, + false, + new Dictionary()), + ValidEdmx, + new Dictionary()); + } + } + +} diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Microsoft.OData.Client.TDDUnitTests.csproj b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Microsoft.OData.Client.TDDUnitTests.csproj index 7aa9870fb7..ce7f29d88f 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Microsoft.OData.Client.TDDUnitTests.csproj +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Microsoft.OData.Client.TDDUnitTests.csproj @@ -60,6 +60,7 @@ TestDataServiceClientRequestMessage.cs + diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ClientPropertyTrackingTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ClientPropertyTrackingTests.cs index 7bb28f67bf..3235031876 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ClientPropertyTrackingTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ClientPropertyTrackingTests.cs @@ -199,7 +199,7 @@ public class ClientPropertyTrackingTests [TestInitialize] public void Init() { - this.context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")); + this.context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); } [TestMethod] diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ClientSerializerTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ClientSerializerTests.cs index 8d556977d9..caa1a06e92 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ClientSerializerTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ClientSerializerTests.cs @@ -18,6 +18,7 @@ namespace AstoriaUnitTests.TDD.Tests.Client using Microsoft.OData.Edm; using Microsoft.Spatial; using Microsoft.VisualStudio.TestTools.UnitTesting; + using Microsoft.OData.Client.TDDUnitTests; /// /// Unit tests for client request serialization code. @@ -108,7 +109,7 @@ private abstract class MyMleType [TestMethod] public void WriteNullUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")); + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -120,7 +121,7 @@ public void WriteNullUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteOneUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")); + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -133,7 +134,7 @@ public void WriteOneUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteTwoUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")); + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -147,7 +148,7 @@ public void WriteTwoUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteStringAndBoolUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")); + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -161,7 +162,7 @@ public void WriteStringAndBoolUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WritePrimitiveUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")); + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -178,7 +179,7 @@ public void WritePrimitiveUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteDateAndTimeUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")); + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -194,7 +195,7 @@ public void WriteDateAndTimeUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteGeographyUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")); + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -209,7 +210,8 @@ public void WriteGeographyUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteCollectionUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")); + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) + .ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -224,7 +226,7 @@ public void WriteCollectionUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteEnumUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")); + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri functionBaseRequestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -246,7 +248,7 @@ public void WriteEnumUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteComplexTypeUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }; + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -261,7 +263,7 @@ public void WriteComplexTypeUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteCollectionOfComplexTypeInUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }; + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -281,7 +283,7 @@ public void WriteCollectionOfComplexTypeInUri() [TestMethod] public void WriteCollectionOfComplexTypeInBody() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }; + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); List
addresses = new List
() @@ -300,7 +302,7 @@ public void WriteCollectionOfComplexTypeInBody() [TestMethod] public void WriteEntryAsBodyOperationParameter() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }; + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Customer customer = new Customer() @@ -320,7 +322,7 @@ public void WriteEntryAsBodyOperationParameter() [TestMethod] public void WriteNullAsBodyOperationParameter() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }; + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); List parameters = new List { new BodyOperationParameter("customer", null) }; @@ -333,7 +335,7 @@ public void WriteNullAsBodyOperationParameter() [TestMethod] public void WriteFeedAsBodyOperationParameter() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }; + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Customer customer1 = new Customer() @@ -359,7 +361,7 @@ public void WriteFeedAsBodyOperationParameter() [TestMethod] public void WriteEmptyFeedAsBodyOperationParameter() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }; + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); List parameters = new List { new BodyOperationParameter("customer", new List()) }; @@ -389,7 +391,7 @@ private void VerifyMessageBody(ODataRequestMessageWrapper requestMessage, string [TestMethod] public void WriteEnumTypeUriOperationParameterWithNonExistingValueShouldThrow() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")); + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/CustomizedHttpWebRequestMessage.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/CustomizedHttpWebRequestMessage.cs index e70e2f63c2..bfb7e669ff 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/CustomizedHttpWebRequestMessage.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/CustomizedHttpWebRequestMessage.cs @@ -11,9 +11,13 @@ namespace Microsoft.OData.Client.TDDUnitTests.Tests using System.Text; using Microsoft.OData.Client; using Microsoft.OData; + using System; + using System.Runtime.InteropServices; + using System.Threading.Tasks; public class CustomizedHttpWebRequestMessage : HttpWebRequestMessage { + private MockResponse responseCreator; public string Response { get; set; } public Dictionary CutomizedHeaders { get; set; } @@ -27,6 +31,8 @@ public CustomizedHttpWebRequestMessage(DataServiceClientRequestMessageArgs args, { this.Response = response; this.CutomizedHeaders = headers; + responseCreator = new MockResponse(GetResponse); + } #if (NETCOREAPP1_0 || NETCOREAPP2_0) @@ -44,5 +50,19 @@ public override IODataResponseMessage GetResponse() return new MemoryStream(byteArray); }); } + + + public override IAsyncResult BeginGetResponse(AsyncCallback callback, object state) + { + // using this as APM was deprecated in.net core + return Task.Run((() => callback.Invoke(Task.Run((() => GetResponse()))))); + } + + public override IODataResponseMessage EndGetResponse(IAsyncResult asyncResult) + { + return GetResponse(); + } + + private delegate IODataResponseMessage MockResponse(); } } diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceClientFormatTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceClientFormatTests.cs index 581802c1bc..540bed2682 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceClientFormatTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceClientFormatTests.cs @@ -14,6 +14,9 @@ namespace AstoriaUnitTests.TDD.Tests.Client using FluentAssertions; using Microsoft.OData.Edm; using Microsoft.OData; + using System.IO; + using Microsoft.OData.Client.TDDUnitTests.Tests; + using Microsoft.OData.Client.TDDUnitTests; using Microsoft.VisualStudio.TestTools.UnitTesting; using ClientStrings = Microsoft.OData.Client.Strings; @@ -23,6 +26,8 @@ public class DataServiceClientFormatTests private readonly IEdmModel serviceModel = new EdmModel(); private DataServiceClientFormat v3TestSubject; private DataServiceContext v3Context; + + #if (NETCOREAPP1_0 || NETCOREAPP2_0) private readonly QueryComponents queryComponentsWithSelect = new QueryComponents(new Uri("http://temp.org/?$select=foo"), new Version(1, 1, 1, 1), typeof(object), null, null); private readonly QueryComponents queryComponentsWithoutSelect = new QueryComponents(new Uri("http://temp.org/"), new Version(1, 1, 1, 1), typeof(object), null, null); @@ -46,7 +51,7 @@ public static void InitClass(TestContext testContext) [TestInitialize] public void Init() { - this.v3Context = new DataServiceContext(new Uri("http://temp.org/"), ODataProtocolVersion.V4); + this.v3Context = new DataServiceContext(new Uri("http://temp.org/"), ODataProtocolVersion.V4).ReConfigureForNetworkLoadingTests(); this.v3TestSubject = this.v3Context.Format; } @@ -87,6 +92,16 @@ public void AtomShouldBeTheDefault() this.v3TestSubject.ODataFormat.Should().BeSameAs(ODataFormat.Json); } + [TestMethod] + public void TestNetworkLoading() + { + + // forces metadata to be loaded + this.v3Context.Format.UseJson(); + this.v3Context.Format.ServiceModel.Should().NotBeNull(); + + } + [TestMethod] public void SetRequestAcceptHeaderShouldSetAcceptHeaderToJsonLightWhenUsingJson() { @@ -183,10 +198,10 @@ public void UseJsonOverloadWithNoParameterShouldInvokeDelegate() } [TestMethod] - public void UseJsonOverloadWithNoParameterShouldFailIfNoDelegateProvided() + public void UseJsonOverloadWithNoParameterShouldPassIfNoDelegateProvided() { - Action callOverload = () => this.v3Context.Format.UseJson(); - callOverload.ShouldThrow().WithMessage(ClientStrings.DataServiceClientFormat_LoadServiceModelRequired); + this.v3Context.Format.UseJson(); + this.v3TestSubject.ServiceModel.Should().NotBeNull(); } [TestMethod] diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceContextTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceContextTests.cs index 069f5b5523..de3d86f094 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceContextTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceContextTests.cs @@ -10,6 +10,8 @@ namespace AstoriaUnitTests.TDD.Tests.Client using Microsoft.OData.Client; using System.IO; using System.Linq; + using Microsoft.OData.Client.TDDUnitTests; + #if !PORTABLELIB using AstoriaUnitTests.ClientExtensions; #endif @@ -33,7 +35,7 @@ public void UsePostTunnelingDefaultShouldBeFalseExceptOnSilverlightOrOnPortableL #if SILVERLIGHT usePostTunnelingDefault = true; #endif - var context = new DataServiceContext(); + var context = new DataServiceContext().ReConfigureForNetworkLoadingTests(); context.UsePostTunneling.Should().Be(usePostTunnelingDefault); } @@ -44,7 +46,7 @@ public void UsePostTunnelingDefaultShouldBeFalseExceptOnSilverlightOrOnPortableL [TestInitialize] public void Init() { - this.testSubject = new DataServiceContext(new Uri("http://base.org/")); + this.testSubject = new DataServiceContext(new Uri("http://base.org/")).ReConfigureForNetworkLoadingTests(); } [TestMethod] @@ -240,7 +242,7 @@ public void DefaultResolveTypeShouldReturnType() [TestMethod] public void DisposeShouldBeCalledOnResponseMessageForExecuteWithNoContent() { - DataServiceContext context = new DataServiceContext(); + DataServiceContext context = new DataServiceContext().ReConfigureForNetworkLoadingTests(); bool responseMessageDisposed = false; context.Configurations.RequestPipeline.OnMessageCreating = args => { diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceRequestTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceRequestTests.cs index 17d74893d4..31287d8fcf 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceRequestTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceRequestTests.cs @@ -14,6 +14,7 @@ namespace AstoriaUnitTests.TDD.Tests.Client using Microsoft.OData.Client; using Microsoft.OData; using Microsoft.VisualStudio.TestTools.UnitTesting; + using Microsoft.OData.Client.TDDUnitTests; [TestClass] public class DataServiceRequestTests @@ -51,7 +52,7 @@ public void NoContentMaterializeTestForBinaryValue() private void MaterializeTest(HttpStatusCode statusCode, ODataPayloadKind payloadKind) { var uri = new Uri("http://any"); - var context = new DataServiceContext(); + var context = new DataServiceContext().ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var responseInfo = new ResponseInfo(requestInfo, MergeOption.OverwriteChanges); var queryComponents = new QueryComponents(uri, new Version(4, 0), typeof(Product), null, null); diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ODataMessageReadingHelperTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ODataMessageReadingHelperTests.cs index 485c73f340..98def0a6a8 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ODataMessageReadingHelperTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ODataMessageReadingHelperTests.cs @@ -10,6 +10,7 @@ namespace AstoriaUnitTests.TDD.Tests.Client using Microsoft.OData.Client; using FluentAssertions; using Microsoft.OData; + using Microsoft.OData.Client.TDDUnitTests; using Microsoft.VisualStudio.TestTools.UnitTesting; using ClientStrings = Microsoft.OData.Client.Strings; @@ -25,7 +26,7 @@ public class ODataMessageReadingHelperTests [TestInitialize] public void Init() { - this.context = new DataServiceContext(new Uri("http://temp.org/"), ODataProtocolVersion.V4); + this.context = new DataServiceContext(new Uri("http://temp.org/"), ODataProtocolVersion.V4).ReConfigureForNetworkLoadingTests(); this.responseInfo = new ResponseInfo(new RequestInfo(this.context), MergeOption.NoTracking); this.readingHelper = new ODataMessageReadingHelper(this.responseInfo); this.atomResponseMessage = new ODataResponseMessageSimulator(); diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ODataMessageWritingHelperTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ODataMessageWritingHelperTests.cs index 32b6a8c4d3..b59e0690b8 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ODataMessageWritingHelperTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ODataMessageWritingHelperTests.cs @@ -10,6 +10,7 @@ namespace AstoriaUnitTests.TDD.Tests.Client using Microsoft.OData.Client; using FluentAssertions; using Microsoft.OData; + using Microsoft.OData.Client.TDDUnitTests; using Microsoft.VisualStudio.TestTools.UnitTesting; using ClientStrings = Microsoft.OData.Client.Strings; @@ -25,7 +26,7 @@ public class ODataMessageWritingHelperTests [TestInitialize] public void Init() { - this.context = new DataServiceContext(new Uri("http://temp.org/"), ODataProtocolVersion.V4); + this.context = new DataServiceContext(new Uri("http://temp.org/"), ODataProtocolVersion.V4).ReConfigureForNetworkLoadingTests(); this.requestInfo = new RequestInfo(context); this.writingHelper = new ODataMessageWritingHelper(this.requestInfo); this.atomRequestMessage = new ODataRequestMessageSimulator(); diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/Serialization/ODataWriterWrapperUnitTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/Serialization/ODataWriterWrapperUnitTests.cs index 57c101bc95..3a46d3a5c9 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/Serialization/ODataWriterWrapperUnitTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/Serialization/ODataWriterWrapperUnitTests.cs @@ -15,6 +15,7 @@ namespace AstoriaUnitTests.TDD.Tests.Client using Microsoft.OData; using Microsoft.VisualStudio.TestTools.UnitTesting; using FluentAssertions; + using Microsoft.OData.Client.TDDUnitTests; /// /// Unit tests for the ODataWriterWrapperUnitTests class. @@ -26,7 +27,7 @@ public class ODataWriterWrapperUnitTests public void EndToEndShortIntegrationWriteEntryEventTest() { List> eventArgsCalled = new List>(); - var dataServiceContext = new DataServiceContext(new Uri("http://www.odata.org/Service.svc")); + var dataServiceContext = new DataServiceContext(new Uri("http://www.odata.org/Service.svc")).ReConfigureForNetworkLoadingTests(); dataServiceContext.Configurations.RequestPipeline.OnEntityReferenceLink((args) => eventArgsCalled.Add(new KeyValuePair("OnEntityReferenceLink", args))); dataServiceContext.Configurations.RequestPipeline.OnEntryEnding((args) => eventArgsCalled.Add(new KeyValuePair("OnEntryEnded", args))); dataServiceContext.Configurations.RequestPipeline.OnEntryStarting((args) => eventArgsCalled.Add(new KeyValuePair("OnEntryStarted", args))); @@ -90,7 +91,7 @@ private static Person SetupSerializerAndCallWriteEntry(DataServiceContext dataSe [TestMethod] public void EntityPropertiesShouldBePopulatedBeforeCallingWriteStart() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")); + DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); context.Configurations.RequestPipeline.OnEntryStarting(args => { args.Entry.Should().NotBeNull(); @@ -208,7 +209,7 @@ public void SerializeEnity_TwoNavigationLinksInJsonFormat() var car1 = new Car { ID = 1001 }; var car2 = new Car { ID = 1002 }; - DataServiceContext dataServiceContext = new DataServiceContext(new Uri("http://www.odata.org/service.svc")); + DataServiceContext dataServiceContext = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); dataServiceContext.AttachTo("Persons", person); dataServiceContext.AttachTo("Cars", car1); dataServiceContext.AttachTo("Cars", car2); diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/T4/ODataT4CamelCaseTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/T4/ODataT4CamelCaseTests.cs index f589b97ca0..b980fef993 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/T4/ODataT4CamelCaseTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/T4/ODataT4CamelCaseTests.cs @@ -17,6 +17,7 @@ namespace AstoriaUnitTests.TDD.Tests.Client using Microsoft.OData.Client; using Microsoft.OData.Client.Materialization; using Microsoft.VisualStudio.TestTools.UnitTesting; + using Microsoft.OData.Client.TDDUnitTests; using OData = Microsoft.OData; @@ -207,6 +208,12 @@ public class ODataT4CamelCaseTests public const string ServerNamespace = "namespace.test"; public Container Context = new Container(new Uri("http://www.odata.org/service.svc")); + [TestInitialize] + public void Init() + { + Context.ReConfigureForNetworkLoadingTests(); + } + [TestMethod] public void EntitySetUriShouldUseOriginalName() { @@ -465,7 +472,7 @@ public void WriteBodyOperationParametersShouldUseOriginalName() internal EntryValueMaterializationPolicy CreateEntryMaterializationPolicy(TestMaterializerContext materializerContext = null) { var clientEdmModel = new ClientEdmModel(ODataProtocolVersion.V4); - var context = new DataServiceContext(); + var context = new DataServiceContext().ReConfigureForNetworkLoadingTests(); materializerContext = materializerContext ?? new TestMaterializerContext() { Model = clientEdmModel, Context = context }; var adapter = new EntityTrackingAdapter(new TestEntityTracker(), MergeOption.OverwriteChanges, clientEdmModel, context); var lazyPrimitivePropertyConverter = new Microsoft.OData.Client.SimpleLazy(() => new PrimitivePropertyConverter()); diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs index 5346713fab..5cc512f51f 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs @@ -4,6 +4,8 @@ // //--------------------------------------------------------------------- +using Microsoft.OData.Edm; + namespace AstoriaUnitTests.Tests { using System; @@ -503,6 +505,7 @@ public void RequestDataFailedToCreateWhenSaveChangeOptionsContinueOnErrorSet() (options) => { DataServiceContext context = new DataServiceContext(new Uri("http://localhost/TheTest.svc"), ODataProtocolVersion.V4); + context.Format.UseJson(new EdmModel()); context.AddAndUpdateResponsePreference = DataServiceResponsePreference.NoContent; Customer c = new Customer() { ID = 1, Name = "Foo" }; @@ -587,6 +590,7 @@ public void ClientReadEtagOnlyIfStatusCode201() }; var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, getRequestMessage, getResponseMessage); + context.Format.UseJson(new EdmModel()); context.AddAndUpdateResponsePreference = DataServiceResponsePreference.NoContent; CustomerWithStream c = new CustomerWithStream() { ID = 1, Name = "Foo" }; @@ -1155,9 +1159,8 @@ public void RequestVersionShouldNotBumpForDeletion() }; var ctx = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, getRequestMessage, getResponseMessage); - //ctx.EnableAtom = true; - //ctx.Format.UseAtom(); - + // disables network loading by injecting an empty model + ctx.Format.UseJson(new EdmModel()); ctx.AddObject("Entities", entity); ctx.SaveChanges(); @@ -1502,6 +1505,8 @@ public void HiddenNullReferenceException() // The context does not need to return usable results. It is created with a dummy URI so // that there is actually time to cancel the request. It should not return promptly. var context = new Microsoft.OData.Client.DataServiceContext(new Uri("http://123.32.52.1")); + // this helps bypass network loading in tests + context.Format.UseJson(new EdmModel()); context.UndeclaredPropertyBehavior = UndeclaredPropertyBehavior.Support; Uri uri = new Uri("foo", UriKind.Relative); @@ -1556,6 +1561,7 @@ public void ClientTypeCacheError_LoadProperties() for (int i = 0; i < 2; ++i) { DataServiceContext ctx = new DataServiceContext(new Uri("http://localhost"), ODataProtocolVersion.V4); + ctx.Format.UseJson(new EdmModel()); ctx.AddObject("Entities", new ClientTypeCacheError_EntityType()); Exception ex = TestUtil.RunCatching(() => ctx.SaveChanges()); diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs index 64f98b2112..65fcf7a3b5 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs @@ -4,6 +4,8 @@ // //--------------------------------------------------------------------- +using Microsoft.OData.Edm; + namespace AstoriaUnitTests.Tests { using System; @@ -39,6 +41,7 @@ public void TopBatchReturingODataError() responseMessage.SetHeader("Content-Length", "0"); var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, requestMessage, responseMessage); + context.Format.UseJson(new EdmModel()); context.AddObject("Products", new SimpleNorthwind.Product() { ID = 1 }); Action test = () => context.SaveChanges(SaveChangesOptions.BatchWithSingleChangeset); @@ -54,6 +57,7 @@ public void WebExceptionShouldNotBeSurfacedWhenSaveChangesWithBatch() IODataRequestMessage requestMessage = new ODataTestMessage(); var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, () => requestMessage, () => { throw new WebException("web exception on getting response"); }); + context.Format.UseJson(new EdmModel()); context.AddObject("Products", new SimpleNorthwind.Product() { ID = 1 }); Action test = () => context.SaveChanges(SaveChangesOptions.BatchWithSingleChangeset); @@ -66,6 +70,7 @@ public void WebExceptionShouldNotBeSurfacedWhenSaveChangesWithNonBatch() IODataRequestMessage requestMessage = new ODataTestMessage(); var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, () => requestMessage, () => { throw new WebException("web exception on getting response"); }); + context.Format.UseJson(new EdmModel()); context.AddObject("Products", new SimpleNorthwind.Product() { ID = 1 }); Action test = () => context.SaveChanges(SaveChangesOptions.None); @@ -80,6 +85,7 @@ public void WebExceptionShouldNotBeSurfacedWhenGetResponseThrowsOnBatch() IODataRequestMessage requestMessage = new ODataTestMessage(); var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, () => requestMessage, () => { throw new WebException("web exception on getting response"); }); + context.Format.UseJson(new EdmModel()); Action test = () => context.ExecuteBatch(context.CreateQuery("Products")); test.ShouldThrow().WithMessage("web exception on getting response"); @@ -94,6 +100,7 @@ public void WebExceptionShouldeSurfacedWhenGetResponseThrowsOnNonBatch() IODataRequestMessage requestMessage = new ODataTestMessage(); var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, () => requestMessage, () => { throw new WebException("web exception on getting response"); }); + context.Format.UseJson(new EdmModel()); Action test = () => context.CreateQuery("Products").ToList(); var exception = test.ShouldThrow().And; @@ -142,6 +149,7 @@ private static Action AddObjectWithInjectedObjectDisposedOnGetStreamO(SaveChange var responseMessage = CreateResponseMessageWithGetStreamThrowingObjectDisposeException(); var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, requestMessage, responseMessage); + context.Format.UseJson(new EdmModel()); context.AddObject("Products", new SimpleNorthwind.Product() { ID = 1 }); return () => context.SaveChanges(saveChangesOptions); } @@ -152,6 +160,7 @@ private static Action GetQueryWithInjectedObjectDisposedOnGetStream(bool useExec var responseMessage = CreateResponseMessageWithGetStreamThrowingObjectDisposeException(); var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, requestMessage, responseMessage); + context.Format.UseJson(new EdmModel()); if (useExecuteBatch) { return () => context.ExecuteBatch(context.CreateQuery("Products")); diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientShortIntegrationRegressionTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientShortIntegrationRegressionTests.cs index 0ab5d7b59f..ab74322a5c 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientShortIntegrationRegressionTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientShortIntegrationRegressionTests.cs @@ -229,7 +229,7 @@ public void NotModifiedTest() odataResponseMessage.SetHeader("Content-Type", "0"); DataServiceContextWithCustomTransportLayer context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, () => odataRequestMessage, () => odataResponseMessage); - + context.Format.UseJson(new EdmModel()); Action test = () => context.CreateQuery("Products").ToList(); test.ShouldThrow().WithInnerMessage("NotModified"); } diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb index c11bebdec0..2bf9882db3 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb @@ -27,6 +27,7 @@ Imports Microsoft.Test.ModuleCore Imports Microsoft.VisualStudio.TestTools.UnitTesting Imports NorthwindModel Imports AstoriaUnitTests.ClientExtensions +Imports Microsoft.OData.Edm Imports Imports Imports @@ -443,6 +444,7 @@ Imports Public Sub PerTestSetup() Me.ctx = New DataServiceContext(web.ServiceRoot) + Me.ctx.Format.UseJson(New EdmModel()) 'Me.'ctx.EnableAtom = True 'Me.'ctx.Format.UseAtom() End Sub diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/EntitySetResolverTests.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/EntitySetResolverTests.vb index 9bb0112d7c..1e7ce1686a 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/EntitySetResolverTests.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/EntitySetResolverTests.vb @@ -22,6 +22,7 @@ Imports AstoriaUnitTests.Data Imports AstoriaUnitTests Imports System.Web Imports System.IO +Imports Microsoft.OData.Edm Partial Public Class ClientModule @@ -118,8 +119,9 @@ Partial Public Class ClientModule Public Sub ApiContextBeginExecute_NullBaseUri_AbsoluteRequestUri_Success() Dim context = New DataServiceContext() + 'context.ReConfigureForNetworkLoadingTests() 'context.EnableAtom = True - 'context.Format.UseAtom() + context.Format.UseJson(New EdmModel()) context.BeginExecute(Of Object)(entitySet1AbsoluteUri, Sub(ar As IAsyncResult) CType(ar, DataServiceQuery(Of Object)).EndExecute(ar).ToList() End Sub, @@ -573,7 +575,7 @@ Partial Public Class ClientModule ' context with good uri Dim context = New DataServiceContext(New Uri(web1.BaseUri, UriKind.Absolute)) 'context.EnableAtom = True - 'context.Format.UseAtom() + context.Format.UseJson(New EdmModel()) context.ResolveEntitySet = Function(entitySetName As String) New Uri(context.BaseUri.OriginalString + "/Values", UriKind.Absolute) diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/StateManagementTests.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/StateManagementTests.vb index 6b9ada50a4..69cf00e38a 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/StateManagementTests.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/StateManagementTests.vb @@ -16,6 +16,7 @@ Imports System.Xml.Linq Imports Microsoft.VisualStudio.TestTools.UnitTesting Imports AstoriaUnitTests.Stubs Imports AstoriaUnitTests.Data +Imports Microsoft.OData.Edm Partial Public Class ClientModule @@ -26,6 +27,7 @@ Partial Public Class ClientModule Public Sub BeforeEachTestMethod() ctx = New DataServiceContext(New Uri("http://localhost/svc")) + ctx.Format.UseJson(New EdmModel()) End Sub Public Sub AfterEachTestMethod() diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/UpdateTests.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/UpdateTests.vb index 5ce1a2b7b2..0be333ef60 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/UpdateTests.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/UpdateTests.vb @@ -20,6 +20,7 @@ Imports AstoriaUnitTests.Data Imports AstoriaUnitTests.Stubs Imports AstoriaUnitTests.Stubs.DataServiceProvider Imports AstoriaUnitTests.Tests +Imports Microsoft.OData.Edm Imports Microsoft.Test.ModuleCore Imports Microsoft.VisualStudio.TestTools.UnitTesting Imports @@ -55,6 +56,7 @@ Partial Public Class ClientModule Me.ctx = New NorthwindSimpleModel.NorthwindContext(web.ServiceRoot) 'Me.'ctx.EnableAtom = True 'Me.'ctx.Format.UseAtom() + Me.ctx.Format.UseJson(New EdmModel()) AddHandler Me.ctx.SendingRequest2, AddressOf SendingRequestListenHttpMethod End Sub @@ -1663,6 +1665,7 @@ Partial Public Class ClientModule Dim saveChangesOption = CType(values("SaveChangesOption"), SaveChangesOptions) Dim context As DataServiceContext = New DataServiceContext(web1.ServiceRoot) + context.Format.UseJson(New EdmModel()) Dim location = web1.ServiceRoot.OriginalString & "/foo.svc/location/Customers(1)" Dim etag = "'Foo'" @@ -1681,6 +1684,7 @@ Partial Public Class ClientModule web1.StartService() Dim context As DataServiceContext = New DataServiceContext(web1.ServiceRoot) + context.Format.UseJson(New EdmModel()) Dim location = web1.ServiceRoot.OriginalString & "/foo.svc/location/Customers(key%3avalue)" Dim etag = "'Foo'" diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/VersionedRequests.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/VersionedRequests.vb index f502887de7..c192035227 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/VersionedRequests.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/VersionedRequests.vb @@ -20,6 +20,7 @@ Imports System.Web Imports AstoriaUnitTests.Data Imports AstoriaUnitTests.Stubs Imports Microsoft.OData +Imports Microsoft.OData.Edm Imports Microsoft.Test.ModuleCore Imports Microsoft.VisualStudio.TestTools.UnitTesting Imports NorthwindModel @@ -49,6 +50,7 @@ Partial Public Class ClientModule Me.ctx = New DataServiceContext(web.ServiceRoot) 'Me.'ctx.EnableAtom = True 'Me.'ctx.Format.UseAtom() + Me.ctx.Format.UseJson(New EdmModel()) End Sub Public Sub PerTestCleanup() @@ -241,6 +243,7 @@ Partial Public Class ClientModule Dim e = New SimpleEntityWithLong() e.ID = 1 Dim ctx = New DataServiceContext(web.ServiceRoot, ODataProtocolVersion.V4) + ctx.Format.UseJson(New EdmModel()) ctx.AddAndUpdateResponsePreference = DataServiceResponsePreference.IncludeContent ctx.AttachTo("SimpleEntityWithLong", e) ctx.UpdateObject(e) @@ -264,6 +267,7 @@ Partial Public Class ClientModule Public Sub BytesConsistency() ' Astoria Client: byte[] and Binary used as keys are supported inconsistently Dim ctx = New DataServiceContext(web.ServiceRoot, ODataProtocolVersion.V4) + ctx.Format.UseJson(New EdmModel()) ctx.AddAndUpdateResponsePreference = DataServiceResponsePreference.IncludeContent Dim arr As Byte() ReDim arr(0) @@ -283,6 +287,7 @@ Partial Public Class ClientModule Public Sub BinaryConsistency() ' Astoria Client: byte[] and Binary used as keys are supported inconsistently Dim ctx = New DataServiceContext(web.ServiceRoot, ODataProtocolVersion.V4) + ctx.Format.UseJson(New EdmModel()) ctx.AddAndUpdateResponsePreference = DataServiceResponsePreference.IncludeContent Dim arr As Byte() ReDim arr(0) diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/medialinkentries.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/medialinkentries.vb index 1ad10fc62b..8ab1315661 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/medialinkentries.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/medialinkentries.vb @@ -20,6 +20,7 @@ Imports AstoriaUnitTests.Stubs Imports Microsoft.Test.ModuleCore Imports Microsoft.VisualStudio.TestTools.UnitTesting Imports System.Web +Imports Microsoft.OData.Edm Partial Public Class ClientModule ' For comment out test cases, see github: https://github.com/OData/odata.net/issues/887 @@ -375,6 +376,7 @@ Partial Public Class ClientModule Public Sub PerTestSetup() Me.ctx = New SpacesPhotos.SpacesPhotosService(web.ServiceRoot) + Me.ctx.Format.UseJson(New EdmModel()) 'Me.'ctx.EnableAtom = True End Sub From 3976cbc9f3f78ee57b966a7a83af8b225bd22cc5 Mon Sep 17 00:00:00 2001 From: David Wambugu Date: Wed, 22 Jan 2020 16:10:40 +0300 Subject: [PATCH 02/11] fix name spaces --- .../DataWebClientCSharp/ClientCSharpRegressionTests.cs | 3 +-- .../ClientErrorHandlingShortIntegrationTests.cs | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs index 5cc512f51f..1a460c3662 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs @@ -4,8 +4,6 @@ // //--------------------------------------------------------------------- -using Microsoft.OData.Edm; - namespace AstoriaUnitTests.Tests { using System; @@ -29,6 +27,7 @@ namespace AstoriaUnitTests.Tests using Microsoft.VisualStudio.TestTools.UnitTesting; using CustomDataClient = AstoriaUnitTests.Stubs.CustomDataClient; using DSClient = Microsoft.OData.Client; + using Microsoft.OData.Edm; // For comment out test cases, see github: https://github.com/OData/odata.net/issues/881 [TestClass] diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs index 65fcf7a3b5..4781492dbe 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs @@ -4,8 +4,6 @@ // //--------------------------------------------------------------------- -using Microsoft.OData.Edm; - namespace AstoriaUnitTests.Tests { using System; @@ -19,6 +17,7 @@ namespace AstoriaUnitTests.Tests using Microsoft.OData; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Text; + using Microsoft.OData.Edm; [TestClass] public class ClientErrorHandlingShortIntegrationTests From 907153ae2e495b57dced64dabcf0d18de5e996ac Mon Sep 17 00:00:00 2001 From: David Wambugu Date: Thu, 23 Jan 2020 14:41:02 +0300 Subject: [PATCH 03/11] Remove unused test delegate --- .../Tests/CustomizedHttpWebRequestMessage.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/CustomizedHttpWebRequestMessage.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/CustomizedHttpWebRequestMessage.cs index bfb7e669ff..7a8a3d6cdf 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/CustomizedHttpWebRequestMessage.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/CustomizedHttpWebRequestMessage.cs @@ -17,7 +17,6 @@ namespace Microsoft.OData.Client.TDDUnitTests.Tests public class CustomizedHttpWebRequestMessage : HttpWebRequestMessage { - private MockResponse responseCreator; public string Response { get; set; } public Dictionary CutomizedHeaders { get; set; } @@ -31,8 +30,6 @@ public CustomizedHttpWebRequestMessage(DataServiceClientRequestMessageArgs args, { this.Response = response; this.CutomizedHeaders = headers; - responseCreator = new MockResponse(GetResponse); - } #if (NETCOREAPP1_0 || NETCOREAPP2_0) @@ -51,11 +48,13 @@ public override IODataResponseMessage GetResponse() }); } - public override IAsyncResult BeginGetResponse(AsyncCallback callback, object state) { // using this as APM was deprecated in.net core - return Task.Run((() => callback.Invoke(Task.Run((() => GetResponse()))))); + return Task.Run((() => callback.Invoke(Task.Run((() => + { + // simplified as in the EndResponse we ignore the return of this method + }))))); } public override IODataResponseMessage EndGetResponse(IAsyncResult asyncResult) @@ -63,6 +62,5 @@ public override IODataResponseMessage EndGetResponse(IAsyncResult asyncResult) return GetResponse(); } - private delegate IODataResponseMessage MockResponse(); } } From 9213b585db63b9b7d7d2026da9d37d2e08f4c0de Mon Sep 17 00:00:00 2001 From: David Wambugu Date: Fri, 31 Jan 2020 13:20:39 +0300 Subject: [PATCH 04/11] Incorporate PR feedback --- .../DataServiceClientFormat.cs | 45 +++++++++---------- .../Tests/ClientSerializerTests.cs | 27 ++++------- .../Tests/CustomizedHttpWebRequestMessage.cs | 19 ++++---- .../Tests/DataServiceClientFormatTests.cs | 8 ++-- .../Tests/DataServiceContextTests.cs | 7 ++- .../Tests/DataServiceRequestTests.cs | 4 +- .../Tests/ODataMessageReadingHelperTests.cs | 2 +- .../ODataWriterWrapperUnitTests.cs | 41 +++++++++-------- .../ClientCSharpRegressionTests.cs | 41 ++++++++--------- ...lientErrorHandlingShortIntegrationTests.cs | 28 +++++------- .../ClientUnitTests/ClientRegressionTests.vb | 4 +- .../ClientUnitTests/EntitySetResolverTests.vb | 3 +- .../ClientUnitTests/StateManagementTests.vb | 6 +-- .../ClientUnitTests/VersionedRequests.vb | 6 --- 14 files changed, 106 insertions(+), 135 deletions(-) diff --git a/src/Microsoft.OData.Client/DataServiceClientFormat.cs b/src/Microsoft.OData.Client/DataServiceClientFormat.cs index ee85fbe5f7..056f06964a 100644 --- a/src/Microsoft.OData.Client/DataServiceClientFormat.cs +++ b/src/Microsoft.OData.Client/DataServiceClientFormat.cs @@ -4,24 +4,23 @@ // //--------------------------------------------------------------------- - - namespace Microsoft.OData.Client { #region namespaces using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using Microsoft.OData; - using Edm; + using System.Collections.Generic; + using System.Net; using System.IO; using System.Xml; - using System.Net; - using Microsoft.OData.Edm.Csdl; - using System.Collections.Generic; #if PORTABLELIB using System.Threading.Tasks; #endif + using Edm; + using Microsoft.OData; + using Microsoft.OData.Edm.Csdl; + #endregion /// @@ -92,24 +91,23 @@ internal IEdmModel ServiceModel { get { - if (serviceModel == null && LoadServiceModel != null) + if (serviceModel != null) + return serviceModel; + + if (LoadServiceModel != null) { serviceModel = LoadServiceModel(); } - // For when the model is null and the user has not specified a method to load the service model - // default to fetching it from the metadata Uri - else if (serviceModel == null && LoadServiceModel == null) + else { serviceModel = LoadServiceModelUsingNetwork(); } - return serviceModel; } } /// /// Invoked during test cases to fake out network calls to get the metadata - /// TODO: Change the visibility of this to internal after adding correct InternalsVisibleTo /// returns a string that is passed to the csdl parser and is used to bypass the network call while testing /// internal Func InjectMetadataHttpNetworkRequest { get; set; } @@ -271,8 +269,7 @@ private void SetRequestContentTypeHeader(HeaderCollection headers, string mediaT /// /// The headers to update. /// The media type for the accept header. - [SuppressMessage("Microsoft.Performance", "CA1822", Justification = - "If this becomes static, then so do its more visible callers, and we do not want to provide a mix of instance and static methods on this class.")] + [SuppressMessage("Microsoft.Performance", "CA1822", Justification = "If this becomes static, then so do its more visible callers, and we do not want to provide a mix of instance and static methods on this class.")] private void SetAcceptHeaderAndCharset(HeaderCollection headers, string mediaType) { // NOTE: we intentionally do NOT set the DSV header for 'accept' as content-negotiation @@ -309,7 +306,7 @@ private static string ChooseMediaType(bool hasSelectQueryOption) internal IEdmModel LoadServiceModelUsingNetwork() { HttpWebRequestMessage httpRequest; - //internal method + // test hook for injecting a network request to use instead of the default if (InjectMetadataHttpNetworkRequest != null) { httpRequest = InjectMetadataHttpNetworkRequest(); @@ -327,20 +324,18 @@ internal IEdmModel LoadServiceModelUsingNetwork() } #if !PORTABLELIB IODataResponseMessage response = httpRequest.GetResponse(); - -#endif -#if PORTABLELIB +#else Task asyncResponse = Task.Factory.FromAsync(httpRequest.BeginGetResponse, httpRequest.EndGetResponse, httpRequest); IODataResponseMessage response = asyncResponse.GetAwaiter().GetResult(); #endif - - StreamReader streamReader = new StreamReader(response.GetStream()); - string xmlResponse = streamReader.ReadToEnd(); - XmlReader xmlReader = XmlReader.Create(new StringReader(xmlResponse)); - return CsdlReader.Parse(xmlReader); + using (StreamReader streamReader = new StreamReader(response.GetStream())) + using (StringReader stringReader= new StringReader(streamReader.ReadToEnd())) + using (XmlReader xmlReader = XmlReader.Create(stringReader)) + { + return CsdlReader.Parse(xmlReader); + } } - } } diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ClientSerializerTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ClientSerializerTests.cs index caa1a06e92..c2fd0b3554 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ClientSerializerTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ClientSerializerTests.cs @@ -11,9 +11,9 @@ namespace AstoriaUnitTests.TDD.Tests.Client using System.IO; using System.Linq; using System.Xml; + using FluentAssertions; using Microsoft.OData.Client; using Microsoft.OData.Client.Metadata; - using FluentAssertions; using Microsoft.OData; using Microsoft.OData.Edm; using Microsoft.Spatial; @@ -26,6 +26,13 @@ namespace AstoriaUnitTests.TDD.Tests.Client [TestClass] public class ClientSerializerTests { + private DataServiceContext context; + + [TestInitialize] + public void Init() + { + context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); + } [TestMethod] public void ClientShouldNotIncludeIdInJsonLightUpdates() { @@ -109,7 +116,6 @@ private abstract class MyMleType [TestMethod] public void WriteNullUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -121,7 +127,6 @@ public void WriteNullUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteOneUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -134,7 +139,6 @@ public void WriteOneUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteTwoUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -148,7 +152,6 @@ public void WriteTwoUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteStringAndBoolUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -162,7 +165,6 @@ public void WriteStringAndBoolUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WritePrimitiveUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -179,7 +181,6 @@ public void WritePrimitiveUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteDateAndTimeUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -195,7 +196,6 @@ public void WriteDateAndTimeUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteGeographyUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -210,8 +210,6 @@ public void WriteGeographyUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteCollectionUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) - .ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -226,7 +224,6 @@ public void WriteCollectionUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteEnumUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri functionBaseRequestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -248,7 +245,6 @@ public void WriteEnumUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteComplexTypeUriOperationParametersToUriShouldReturnUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -263,7 +259,6 @@ public void WriteComplexTypeUriOperationParametersToUriShouldReturnUri() [TestMethod] public void WriteCollectionOfComplexTypeInUri() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); @@ -283,7 +278,6 @@ public void WriteCollectionOfComplexTypeInUri() [TestMethod] public void WriteCollectionOfComplexTypeInBody() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); List
addresses = new List
() @@ -302,7 +296,6 @@ public void WriteCollectionOfComplexTypeInBody() [TestMethod] public void WriteEntryAsBodyOperationParameter() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Customer customer = new Customer() @@ -322,7 +315,6 @@ public void WriteEntryAsBodyOperationParameter() [TestMethod] public void WriteNullAsBodyOperationParameter() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); List parameters = new List { new BodyOperationParameter("customer", null) }; @@ -335,7 +327,6 @@ public void WriteNullAsBodyOperationParameter() [TestMethod] public void WriteFeedAsBodyOperationParameter() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Customer customer1 = new Customer() @@ -361,7 +352,6 @@ public void WriteFeedAsBodyOperationParameter() [TestMethod] public void WriteEmptyFeedAsBodyOperationParameter() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")) { ResolveName = type => type.FullName }.ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); List parameters = new List { new BodyOperationParameter("customer", new List()) }; @@ -391,7 +381,6 @@ private void VerifyMessageBody(ODataRequestMessageWrapper requestMessage, string [TestMethod] public void WriteEnumTypeUriOperationParameterWithNonExistingValueShouldThrow() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); Uri requestUri = new Uri("http://www.odata.org/service.svc/Function"); diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/CustomizedHttpWebRequestMessage.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/CustomizedHttpWebRequestMessage.cs index 7a8a3d6cdf..72085ddb00 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/CustomizedHttpWebRequestMessage.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/CustomizedHttpWebRequestMessage.cs @@ -6,14 +6,14 @@ namespace Microsoft.OData.Client.TDDUnitTests.Tests { + using System; using System.Collections.Generic; using System.IO; using System.Text; - using Microsoft.OData.Client; + using System.Threading.Tasks; using Microsoft.OData; - using System; - using System.Runtime.InteropServices; - using System.Threading.Tasks; + using Microsoft.OData.Client; + public class CustomizedHttpWebRequestMessage : HttpWebRequestMessage { @@ -50,17 +50,16 @@ public override IODataResponseMessage GetResponse() public override IAsyncResult BeginGetResponse(AsyncCallback callback, object state) { - // using this as APM was deprecated in.net core - return Task.Run((() => callback.Invoke(Task.Run((() => - { - // simplified as in the EndResponse we ignore the return of this method - }))))); + // using this as APM was deprecated in.net core and Task.CompletedTask is not available in 4.5 + callback.Invoke(Task.FromResult(0)); + return Task.FromResult(0); + + } public override IODataResponseMessage EndGetResponse(IAsyncResult asyncResult) { return GetResponse(); } - } } diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceClientFormatTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceClientFormatTests.cs index 540bed2682..bb87637d14 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceClientFormatTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceClientFormatTests.cs @@ -8,15 +8,15 @@ namespace AstoriaUnitTests.TDD.Tests.Client { using System; using System.Collections.Generic; - using Microsoft.OData.Client; - using Microsoft.OData.Client.Metadata; + using System.IO; using AstoriaUnitTests.TDD.Common; using FluentAssertions; using Microsoft.OData.Edm; using Microsoft.OData; - using System.IO; - using Microsoft.OData.Client.TDDUnitTests.Tests; + using Microsoft.OData.Client; + using Microsoft.OData.Client.Metadata; using Microsoft.OData.Client.TDDUnitTests; + using Microsoft.OData.Client.TDDUnitTests.Tests; using Microsoft.VisualStudio.TestTools.UnitTesting; using ClientStrings = Microsoft.OData.Client.Strings; diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceContextTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceContextTests.cs index de3d86f094..bd39c7ab63 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceContextTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceContextTests.cs @@ -7,9 +7,9 @@ namespace AstoriaUnitTests.TDD.Tests.Client { using System; - using Microsoft.OData.Client; using System.IO; using System.Linq; + using Microsoft.OData.Client; using Microsoft.OData.Client.TDDUnitTests; #if !PORTABLELIB @@ -242,9 +242,8 @@ public void DefaultResolveTypeShouldReturnType() [TestMethod] public void DisposeShouldBeCalledOnResponseMessageForExecuteWithNoContent() { - DataServiceContext context = new DataServiceContext().ReConfigureForNetworkLoadingTests(); bool responseMessageDisposed = false; - context.Configurations.RequestPipeline.OnMessageCreating = args => + testSubject.Configurations.RequestPipeline.OnMessageCreating = args => { var requestMessage = new InMemoryMessage { Url = args.RequestUri, Method = args.Method, Stream = new MemoryStream() }; var responseMessage = new InMemoryMessage { StatusCode = 204, Stream = new MemoryStream() }; @@ -252,7 +251,7 @@ public void DisposeShouldBeCalledOnResponseMessageForExecuteWithNoContent() return new TestDataServiceClientRequestMessage(requestMessage, () => responseMessage); }; - context.Execute(new Uri("http://host/voidAction", UriKind.Absolute), "POST").StatusCode.Should().Be(204); + testSubject.Execute(new Uri("http://host/voidAction", UriKind.Absolute), "POST").StatusCode.Should().Be(204); responseMessageDisposed.Should().BeTrue(); } diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceRequestTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceRequestTests.cs index 31287d8fcf..dea47345e6 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceRequestTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/DataServiceRequestTests.cs @@ -11,10 +11,10 @@ namespace AstoriaUnitTests.TDD.Tests.Client using System.IO; using System.Linq; using System.Net; - using Microsoft.OData.Client; using Microsoft.OData; - using Microsoft.VisualStudio.TestTools.UnitTesting; + using Microsoft.OData.Client; using Microsoft.OData.Client.TDDUnitTests; + using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] public class DataServiceRequestTests diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ODataMessageReadingHelperTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ODataMessageReadingHelperTests.cs index 98def0a6a8..c98c98663f 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ODataMessageReadingHelperTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/ODataMessageReadingHelperTests.cs @@ -7,8 +7,8 @@ namespace AstoriaUnitTests.TDD.Tests.Client { using System; - using Microsoft.OData.Client; using FluentAssertions; + using Microsoft.OData.Client; using Microsoft.OData; using Microsoft.OData.Client.TDDUnitTests; using Microsoft.VisualStudio.TestTools.UnitTesting; diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/Serialization/ODataWriterWrapperUnitTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/Serialization/ODataWriterWrapperUnitTests.cs index 3a46d3a5c9..58f8361b3e 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/Serialization/ODataWriterWrapperUnitTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/Serialization/ODataWriterWrapperUnitTests.cs @@ -23,18 +23,25 @@ namespace AstoriaUnitTests.TDD.Tests.Client [TestClass] public class ODataWriterWrapperUnitTests { + private DataServiceContext context; + + [TestInitialize] + public void Init() + { + context = new DataServiceContext(new Uri("http://www.odata.org/Service.svc")).ReConfigureForNetworkLoadingTests(); + + } [TestMethod] public void EndToEndShortIntegrationWriteEntryEventTest() { List> eventArgsCalled = new List>(); - var dataServiceContext = new DataServiceContext(new Uri("http://www.odata.org/Service.svc")).ReConfigureForNetworkLoadingTests(); - dataServiceContext.Configurations.RequestPipeline.OnEntityReferenceLink((args) => eventArgsCalled.Add(new KeyValuePair("OnEntityReferenceLink", args))); - dataServiceContext.Configurations.RequestPipeline.OnEntryEnding((args) => eventArgsCalled.Add(new KeyValuePair("OnEntryEnded", args))); - dataServiceContext.Configurations.RequestPipeline.OnEntryStarting((args) => eventArgsCalled.Add(new KeyValuePair("OnEntryStarted", args))); - dataServiceContext.Configurations.RequestPipeline.OnNestedResourceInfoEnding((args) => eventArgsCalled.Add(new KeyValuePair("OnNestedResourceInfoEnded", args))); - dataServiceContext.Configurations.RequestPipeline.OnNestedResourceInfoStarting((args) => eventArgsCalled.Add(new KeyValuePair("OnNestedResourceInfoStarted", args))); + context.Configurations.RequestPipeline.OnEntityReferenceLink((args) => eventArgsCalled.Add(new KeyValuePair("OnEntityReferenceLink", args))); + context.Configurations.RequestPipeline.OnEntryEnding((args) => eventArgsCalled.Add(new KeyValuePair("OnEntryEnded", args))); + context.Configurations.RequestPipeline.OnEntryStarting((args) => eventArgsCalled.Add(new KeyValuePair("OnEntryStarted", args))); + context.Configurations.RequestPipeline.OnNestedResourceInfoEnding((args) => eventArgsCalled.Add(new KeyValuePair("OnNestedResourceInfoEnded", args))); + context.Configurations.RequestPipeline.OnNestedResourceInfoStarting((args) => eventArgsCalled.Add(new KeyValuePair("OnNestedResourceInfoStarted", args))); - Person person = SetupSerializerAndCallWriteEntry(dataServiceContext); + Person person = SetupSerializerAndCallWriteEntry(context); eventArgsCalled.Should().HaveCount(8); eventArgsCalled[0].Key.Should().Be("OnEntryStarted"); @@ -91,7 +98,6 @@ private static Person SetupSerializerAndCallWriteEntry(DataServiceContext dataSe [TestMethod] public void EntityPropertiesShouldBePopulatedBeforeCallingWriteStart() { - DataServiceContext context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); context.Configurations.RequestPipeline.OnEntryStarting(args => { args.Entry.Should().NotBeNull(); @@ -209,14 +215,14 @@ public void SerializeEnity_TwoNavigationLinksInJsonFormat() var car1 = new Car { ID = 1001 }; var car2 = new Car { ID = 1002 }; - DataServiceContext dataServiceContext = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); - dataServiceContext.AttachTo("Persons", person); - dataServiceContext.AttachTo("Cars", car1); - dataServiceContext.AttachTo("Cars", car2); - dataServiceContext.AddLink(person, "Cars", car1); - dataServiceContext.AddLink(person, "Cars", car2); + + context.AttachTo("Persons", person); + context.AttachTo("Cars", car1); + context.AttachTo("Cars", car2); + context.AddLink(person, "Cars", car1); + context.AddLink(person, "Cars", car2); - var requestInfo = new RequestInfo(dataServiceContext); + var requestInfo = new RequestInfo(context); var serializer = new Serializer(requestInfo); var headers = new HeaderCollection(); var clientModel = new ClientEdmModel(ODataProtocolVersion.V4); @@ -243,10 +249,9 @@ public void SerializeEnity_TwoNavigationLinksInJsonFormat() internal ODataWriterWrapper SetupTestActionExecuted(Action setup) { - var dataServiceContext = new DataServiceContext(); var writer = new TestODataWriter(); - setup(dataServiceContext, dataServiceContext.Configurations.RequestPipeline); - return ODataWriterWrapper.CreateForEntryTest(writer, dataServiceContext.Configurations.RequestPipeline); + setup(context, context.Configurations.RequestPipeline); + return ODataWriterWrapper.CreateForEntryTest(writer, context.Configurations.RequestPipeline); } public enum MyColor : long diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs index 1a460c3662..e0bed82346 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs @@ -25,9 +25,9 @@ namespace AstoriaUnitTests.Tests using AstoriaUnitTests.Stubs.DataServiceProvider; using Microsoft.OData; using Microsoft.VisualStudio.TestTools.UnitTesting; + using Microsoft.OData.Edm; using CustomDataClient = AstoriaUnitTests.Stubs.CustomDataClient; using DSClient = Microsoft.OData.Client; - using Microsoft.OData.Edm; // For comment out test cases, see github: https://github.com/OData/odata.net/issues/881 [TestClass] @@ -48,7 +48,14 @@ public class ClientCSharpRegressionTests // Use TestInitialize to run code before running each test // [TestInitialize()] // public void MyTestInitialize() { } - // + private DataServiceContext ctx; + + [TestInitialize] + public void Init() + { + ctx = new DataServiceContext(new Uri("http://localhost/test.svc")); + ctx.Format.UseJson(new EdmModel()); + } // Use TestCleanup to run code after each test has run // [TestCleanup()] // public void MyTestCleanup() { } @@ -129,7 +136,6 @@ public void ClientLinqUriWriterReservedCharacterTest() // LINQ Uri reserved characters var operation = new string[] { "eq", "contains", "key", "tolower", "orderby" }; - DataServiceContext ctx = new DataServiceContext(new Uri("http://localhost/test.svc")); TestUtil.RunCombinations(restrictedChars, operation, (r, op) => { @@ -167,7 +173,6 @@ public void ClientLinqUriWriterReservedCharacterTest() public void ClientLinqUriWriterTypeInjectionTests() { // Injection hack in type resolving system - DataServiceContext ctx = new DataServiceContext(new Uri("http://localhost/test.svc")); ctx.ResolveName = (type) => { return "%:/?#[]@=$&;()*+,'\" !"; @@ -503,16 +508,14 @@ public void RequestDataFailedToCreateWhenSaveChangeOptionsContinueOnErrorSet() TestUtil.RunCombinations(new SaveChangesOptions[] { SaveChangesOptions.None, SaveChangesOptions.ContinueOnError }, (options) => { - DataServiceContext context = new DataServiceContext(new Uri("http://localhost/TheTest.svc"), ODataProtocolVersion.V4); - context.Format.UseJson(new EdmModel()); - context.AddAndUpdateResponsePreference = DataServiceResponsePreference.NoContent; + ctx.AddAndUpdateResponsePreference = DataServiceResponsePreference.NoContent; Customer c = new Customer() { ID = 1, Name = "Foo" }; - context.AttachTo("Customers", c); + ctx.AttachTo("Customers", c); MemoryStream stream = new MemoryStream(new byte[] { 0, 1, 2, 3 }); - context.SetSaveStream(c, stream, true, new DataServiceRequestArgs() { ContentType = "image/bmp" }); + ctx.SetSaveStream(c, stream, true, new DataServiceRequestArgs() { ContentType = "image/bmp" }); - DataServiceRequestException ex = TestUtil.RunCatching(() => { context.SaveChanges(options); }); + DataServiceRequestException ex = TestUtil.RunCatching(() => { ctx.SaveChanges(options); }); TestUtil.AssertExceptionExpected(ex, true); InvalidOperationException innerEx = ex.InnerException as InvalidOperationException; Assert.IsNotNull(innerEx, "Expected invalid operation exception in the inner exception"); @@ -1503,16 +1506,13 @@ public void HiddenNullReferenceException() // Cancellation of LoadAsync requests should not cause a null reference exception. // The context does not need to return usable results. It is created with a dummy URI so // that there is actually time to cancel the request. It should not return promptly. - var context = new Microsoft.OData.Client.DataServiceContext(new Uri("http://123.32.52.1")); - // this helps bypass network loading in tests - context.Format.UseJson(new EdmModel()); - context.UndeclaredPropertyBehavior = UndeclaredPropertyBehavior.Support; + ctx.UndeclaredPropertyBehavior = UndeclaredPropertyBehavior.Support; Uri uri = new Uri("foo", UriKind.Relative); - IAsyncResult result = context.BeginExecute(uri, (_) => { }, null); - context.CancelRequest(result); + IAsyncResult result = ctx.BeginExecute(uri, (_) => { }, null); + ctx.CancelRequest(result); - Exception expectedException = TestUtil.RunCatching(() => { context.EndExecute(result); }); + Exception expectedException = TestUtil.RunCatching(() => { ctx.EndExecute(result); }); Assert.IsNotNull(expectedException); Assert.IsTrue(expectedException is InvalidOperationException); @@ -1523,10 +1523,9 @@ public void HiddenNullReferenceException() [TestMethod] public void TestMultipleKeysOfKeyAttribute() { - Microsoft.OData.Client.DataServiceContext context = new Microsoft.OData.Client.DataServiceContext(new Uri("http://DoesNotExist/nope.svc")); TestType7 instance = new TestType7 { FkID = 11, TypeID = 22 }; - context.AttachTo("Set", instance); - Microsoft.OData.Client.EntityDescriptor entity = context.Entities.Single(); + ctx.AttachTo("Set", instance); + Microsoft.OData.Client.EntityDescriptor entity = ctx.Entities.Single(); StringAssert.Contains(entity.Identity.AbsoluteUri, "FkID=11", "didn't get the 1st key value"); StringAssert.Contains(entity.Identity.AbsoluteUri, "TypeID=22", "didn't get the 2nd key value"); } @@ -1559,8 +1558,6 @@ public void ClientTypeCacheError_LoadProperties() // ensure that with an error thrown, the type cache gets deleted, and that when you try again, the same error gets thrown for (int i = 0; i < 2; ++i) { - DataServiceContext ctx = new DataServiceContext(new Uri("http://localhost"), ODataProtocolVersion.V4); - ctx.Format.UseJson(new EdmModel()); ctx.AddObject("Entities", new ClientTypeCacheError_EntityType()); Exception ex = TestUtil.RunCatching(() => ctx.SaveChanges()); diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs index 4781492dbe..e8b3950938 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs @@ -12,16 +12,25 @@ namespace AstoriaUnitTests.Tests using System.IO; using System.Linq; using System.Net; + using System.Text; using AstoriaUnitTests.ClientExtensions; using FluentAssertions; using Microsoft.OData; using Microsoft.VisualStudio.TestTools.UnitTesting; - using System.Text; using Microsoft.OData.Edm; [TestClass] public class ClientErrorHandlingShortIntegrationTests { + private DataServiceContextWithCustomTransportLayer context; + + [TestInitialize] + public void Init() + { + IODataRequestMessage requestMessage = new ODataTestMessage(); + context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, () => requestMessage, () => { throw new WebException("web exception on getting response"); }); + context.Format.UseJson(new EdmModel()); + } [TestMethod] public void TopBatchReturingODataError() { @@ -53,10 +62,6 @@ public void TopBatchReturingODataError() [TestMethod] public void WebExceptionShouldNotBeSurfacedWhenSaveChangesWithBatch() { - IODataRequestMessage requestMessage = new ODataTestMessage(); - - var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, () => requestMessage, () => { throw new WebException("web exception on getting response"); }); - context.Format.UseJson(new EdmModel()); context.AddObject("Products", new SimpleNorthwind.Product() { ID = 1 }); Action test = () => context.SaveChanges(SaveChangesOptions.BatchWithSingleChangeset); @@ -66,10 +71,6 @@ public void WebExceptionShouldNotBeSurfacedWhenSaveChangesWithBatch() [TestMethod] public void WebExceptionShouldNotBeSurfacedWhenSaveChangesWithNonBatch() { - IODataRequestMessage requestMessage = new ODataTestMessage(); - - var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, () => requestMessage, () => { throw new WebException("web exception on getting response"); }); - context.Format.UseJson(new EdmModel()); context.AddObject("Products", new SimpleNorthwind.Product() { ID = 1 }); Action test = () => context.SaveChanges(SaveChangesOptions.None); @@ -81,10 +82,7 @@ public void WebExceptionShouldNotBeSurfacedWhenSaveChangesWithNonBatch() [TestMethod] public void WebExceptionShouldNotBeSurfacedWhenGetResponseThrowsOnBatch() { - IODataRequestMessage requestMessage = new ODataTestMessage(); - - var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, () => requestMessage, () => { throw new WebException("web exception on getting response"); }); - context.Format.UseJson(new EdmModel()); + Action test = () => context.ExecuteBatch(context.CreateQuery("Products")); test.ShouldThrow().WithMessage("web exception on getting response"); @@ -96,10 +94,6 @@ public void WebExceptionShouldNotBeSurfacedWhenGetResponseThrowsOnBatch() [TestMethod] public void WebExceptionShouldeSurfacedWhenGetResponseThrowsOnNonBatch() { - IODataRequestMessage requestMessage = new ODataTestMessage(); - - var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, () => requestMessage, () => { throw new WebException("web exception on getting response"); }); - context.Format.UseJson(new EdmModel()); Action test = () => context.CreateQuery("Products").ToList(); var exception = test.ShouldThrow().And; diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb index 2bf9882db3..3e7211f7a3 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb @@ -23,11 +23,11 @@ Imports AstoriaUnitTests Imports AstoriaUnitTests.Data Imports AstoriaUnitTests.Stubs Imports AstoriaUnitTests.Tests +Imports AstoriaUnitTests.ClientExtensions Imports Microsoft.Test.ModuleCore Imports Microsoft.VisualStudio.TestTools.UnitTesting -Imports NorthwindModel -Imports AstoriaUnitTests.ClientExtensions Imports Microsoft.OData.Edm +Imports NorthwindModel Imports Imports Imports diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/EntitySetResolverTests.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/EntitySetResolverTests.vb index 1e7ce1686a..1bbf828efd 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/EntitySetResolverTests.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/EntitySetResolverTests.vb @@ -11,6 +11,7 @@ Imports System.Collections Imports System.Collections.Generic Imports Microsoft.OData.Service Imports Microsoft.OData.Client +Imports Microsoft.OData.Edm Imports System.Data.Test.Astoria Imports AstoriaUnitTests.Stubs Imports Microsoft.Test.ModuleCore @@ -22,7 +23,6 @@ Imports AstoriaUnitTests.Data Imports AstoriaUnitTests Imports System.Web Imports System.IO -Imports Microsoft.OData.Edm Partial Public Class ClientModule @@ -119,7 +119,6 @@ Partial Public Class ClientModule Public Sub ApiContextBeginExecute_NullBaseUri_AbsoluteRequestUri_Success() Dim context = New DataServiceContext() - 'context.ReConfigureForNetworkLoadingTests() 'context.EnableAtom = True context.Format.UseJson(New EdmModel()) context.BeginExecute(Of Object)(entitySet1AbsoluteUri, Sub(ar As IAsyncResult) diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/StateManagementTests.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/StateManagementTests.vb index 69cf00e38a..bbd0c8c1d0 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/StateManagementTests.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/StateManagementTests.vb @@ -5,18 +5,18 @@ '--------------------------------------------------------------------- Imports System -Imports Microsoft.OData.Service -Imports Microsoft.OData.Client Imports System.Diagnostics Imports System.Text Imports System.Collections Imports System.Collections.Generic Imports System.Xml Imports System.Xml.Linq +Imports Microsoft.OData.Service +Imports Microsoft.OData.Client +Imports Microsoft.OData.Edm Imports Microsoft.VisualStudio.TestTools.UnitTesting Imports AstoriaUnitTests.Stubs Imports AstoriaUnitTests.Data -Imports Microsoft.OData.Edm Partial Public Class ClientModule diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/VersionedRequests.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/VersionedRequests.vb index c192035227..407811634c 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/VersionedRequests.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/VersionedRequests.vb @@ -242,8 +242,6 @@ Partial Public Class ClientModule ' Ensure that keys are produced in key format rather than XML format. Dim e = New SimpleEntityWithLong() e.ID = 1 - Dim ctx = New DataServiceContext(web.ServiceRoot, ODataProtocolVersion.V4) - ctx.Format.UseJson(New EdmModel()) ctx.AddAndUpdateResponsePreference = DataServiceResponsePreference.IncludeContent ctx.AttachTo("SimpleEntityWithLong", e) ctx.UpdateObject(e) @@ -266,8 +264,6 @@ Partial Public Class ClientModule Public Sub BytesConsistency() ' Astoria Client: byte[] and Binary used as keys are supported inconsistently - Dim ctx = New DataServiceContext(web.ServiceRoot, ODataProtocolVersion.V4) - ctx.Format.UseJson(New EdmModel()) ctx.AddAndUpdateResponsePreference = DataServiceResponsePreference.IncludeContent Dim arr As Byte() ReDim arr(0) @@ -286,8 +282,6 @@ Partial Public Class ClientModule Public Sub BinaryConsistency() ' Astoria Client: byte[] and Binary used as keys are supported inconsistently - Dim ctx = New DataServiceContext(web.ServiceRoot, ODataProtocolVersion.V4) - ctx.Format.UseJson(New EdmModel()) ctx.AddAndUpdateResponsePreference = DataServiceResponsePreference.IncludeContent Dim arr As Byte() ReDim arr(0) From 0d29c3a72425c796120be2765aa0936da886dc19 Mon Sep 17 00:00:00 2001 From: David Wambugu Date: Fri, 31 Jan 2020 14:21:59 +0300 Subject: [PATCH 05/11] fix failing test cases --- .../DataWebClientCSharp/ClientCSharpRegressionTests.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs index e0bed82346..2802bf2553 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientCSharpRegressionTests.cs @@ -508,14 +508,16 @@ public void RequestDataFailedToCreateWhenSaveChangeOptionsContinueOnErrorSet() TestUtil.RunCombinations(new SaveChangesOptions[] { SaveChangesOptions.None, SaveChangesOptions.ContinueOnError }, (options) => { - ctx.AddAndUpdateResponsePreference = DataServiceResponsePreference.NoContent; + DataServiceContext context = new DataServiceContext(new Uri("http://localhost/TheTest.svc"), ODataProtocolVersion.V4); + context.Format.UseJson(new EdmModel()); + context.AddAndUpdateResponsePreference = DataServiceResponsePreference.NoContent; Customer c = new Customer() { ID = 1, Name = "Foo" }; - ctx.AttachTo("Customers", c); + context.AttachTo("Customers", c); MemoryStream stream = new MemoryStream(new byte[] { 0, 1, 2, 3 }); - ctx.SetSaveStream(c, stream, true, new DataServiceRequestArgs() { ContentType = "image/bmp" }); + context.SetSaveStream(c, stream, true, new DataServiceRequestArgs() { ContentType = "image/bmp" }); - DataServiceRequestException ex = TestUtil.RunCatching(() => { ctx.SaveChanges(options); }); + DataServiceRequestException ex = TestUtil.RunCatching(() => { context.SaveChanges(options); }); TestUtil.AssertExceptionExpected(ex, true); InvalidOperationException innerEx = ex.InnerException as InvalidOperationException; Assert.IsNotNull(innerEx, "Expected invalid operation exception in the inner exception"); From d3667c93f4c74fb467bf9342096425a64f16044f Mon Sep 17 00:00:00 2001 From: David Wambugu Date: Fri, 31 Jan 2020 17:34:15 +0300 Subject: [PATCH 06/11] update link --- .../Tests/Serialization/ODataWriterWrapperUnitTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/Serialization/ODataWriterWrapperUnitTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/Serialization/ODataWriterWrapperUnitTests.cs index 58f8361b3e..1d41619162 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/Serialization/ODataWriterWrapperUnitTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/Client.TDD.Tests/Tests/Serialization/ODataWriterWrapperUnitTests.cs @@ -28,7 +28,7 @@ public class ODataWriterWrapperUnitTests [TestInitialize] public void Init() { - context = new DataServiceContext(new Uri("http://www.odata.org/Service.svc")).ReConfigureForNetworkLoadingTests(); + context = new DataServiceContext(new Uri("http://www.odata.org/service.svc")).ReConfigureForNetworkLoadingTests(); } [TestMethod] From 59947ce82ad1a25b6fb200326ff0f149ddb36f96 Mon Sep 17 00:00:00 2001 From: David Wambugu Date: Tue, 4 Feb 2020 14:22:46 +0300 Subject: [PATCH 07/11] Added events for requests to allow user to modify the request and response using hooks Sorted namespaces in the committed files --- .../DataServiceClientFormat.cs | 65 ++++++++++++++----- ...lientErrorHandlingShortIntegrationTests.cs | 4 +- .../ClientUnitTests/ClientRegressionTests.vb | 5 +- .../ClientUnitTests/StateManagementTests.vb | 11 ++-- 4 files changed, 57 insertions(+), 28 deletions(-) diff --git a/src/Microsoft.OData.Client/DataServiceClientFormat.cs b/src/Microsoft.OData.Client/DataServiceClientFormat.cs index 056f06964a..9450811615 100644 --- a/src/Microsoft.OData.Client/DataServiceClientFormat.cs +++ b/src/Microsoft.OData.Client/DataServiceClientFormat.cs @@ -10,18 +10,12 @@ namespace Microsoft.OData.Client using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Collections.Generic; - using System.Net; using System.IO; - using System.Xml; -#if PORTABLELIB using System.Threading.Tasks; -#endif - using Edm; + using System.Xml; using Microsoft.OData; + using Microsoft.OData.Edm; using Microsoft.OData.Edm.Csdl; - - #endregion /// /// Tracks the user-preferred format which the client should use when making requests. @@ -92,7 +86,9 @@ internal IEdmModel ServiceModel get { if (serviceModel != null) + { return serviceModel; + } if (LoadServiceModel != null) { @@ -100,7 +96,7 @@ internal IEdmModel ServiceModel } else { - serviceModel = LoadServiceModelUsingNetwork(); + serviceModel = LoadServiceModelFromNetwork(); } return serviceModel; } @@ -303,9 +299,10 @@ private static string ChooseMediaType(bool hasSelectQueryOption) /// This allows the user to use the DataServiceContext directly without having to manually pass an IEdmModel in the Format /// /// A service model to be used in format tracking - internal IEdmModel LoadServiceModelUsingNetwork() + internal IEdmModel LoadServiceModelFromNetwork() { HttpWebRequestMessage httpRequest; + BuildingRequestEventArgs requestEventArgs = null; // test hook for injecting a network request to use instead of the default if (InjectMetadataHttpNetworkRequest != null) { @@ -313,26 +310,58 @@ internal IEdmModel LoadServiceModelUsingNetwork() } else { - DataServiceClientRequestMessageArgs args = new DataServiceClientRequestMessageArgs( + requestEventArgs = new BuildingRequestEventArgs( "GET", context.GetMetadataUri(), + null, + null, + context.HttpStack); + + // fire the right events if they exist to allow user to modify the request + if (context.HasBuildingRequestEventHandlers) + { + requestEventArgs = context.CreateRequestArgsAndFireBuildingRequest( + requestEventArgs.Method, + requestEventArgs.RequestUri, + requestEventArgs.HeaderCollection, + requestEventArgs.ClientHttpStack, + requestEventArgs.Descriptor); + } + + DataServiceClientRequestMessageArgs args = new DataServiceClientRequestMessageArgs( + requestEventArgs.Method, + requestEventArgs.RequestUri, context.UseDefaultCredentials, context.UsePostTunneling, - new Dictionary()); + requestEventArgs.Headers); httpRequest = new HttpWebRequestMessage(args); } -#if !PORTABLELIB - IODataResponseMessage response = httpRequest.GetResponse(); -#else + + Descriptor descriptor = requestEventArgs?.Descriptor; + + // fire the right events if they exist + if (context.HasSendingRequest2EventHandlers) + { + SendingRequest2EventArgs eventArgs = new SendingRequest2EventArgs( + httpRequest, + descriptor, + false); + + context.FireSendingRequest2(eventArgs); + } + Task asyncResponse = Task.Factory.FromAsync(httpRequest.BeginGetResponse, httpRequest.EndGetResponse, httpRequest); IODataResponseMessage response = asyncResponse.GetAwaiter().GetResult(); -#endif + + ReceivingResponseEventArgs responseEvent = new ReceivingResponseEventArgs(response, descriptor); + + context.FireReceivingResponseEvent(responseEvent); + using (StreamReader streamReader = new StreamReader(response.GetStream())) - using (StringReader stringReader= new StringReader(streamReader.ReadToEnd())) - using (XmlReader xmlReader = XmlReader.Create(stringReader)) + using (XmlReader xmlReader = XmlReader.Create(streamReader)) { return CsdlReader.Parse(xmlReader); } diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs index e8b3950938..45394e4460 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientCSharpUnitTests/DataWebClientCSharp/ClientErrorHandlingShortIntegrationTests.cs @@ -8,7 +8,6 @@ namespace AstoriaUnitTests.Tests { using System; using System.Collections.Generic; - using Microsoft.OData.Client; using System.IO; using System.Linq; using System.Net; @@ -16,8 +15,9 @@ namespace AstoriaUnitTests.Tests using AstoriaUnitTests.ClientExtensions; using FluentAssertions; using Microsoft.OData; - using Microsoft.VisualStudio.TestTools.UnitTesting; + using Microsoft.OData.Client; using Microsoft.OData.Edm; + using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] public class ClientErrorHandlingShortIntegrationTests diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb index 3e7211f7a3..95c98500ba 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb @@ -11,8 +11,6 @@ Imports System.Collections Imports System.Collections.Generic Imports System.Collections.ObjectModel Imports System.ComponentModel -Imports Microsoft.OData.Service -Imports Microsoft.OData.Client Imports System.Data.Test.Astoria Imports System.Diagnostics Imports System.IO @@ -24,9 +22,10 @@ Imports AstoriaUnitTests.Data Imports AstoriaUnitTests.Stubs Imports AstoriaUnitTests.Tests Imports AstoriaUnitTests.ClientExtensions +Imports Microsoft.OData.Client +Imports Microsoft.OData.Edm Imports Microsoft.Test.ModuleCore Imports Microsoft.VisualStudio.TestTools.UnitTesting -Imports Microsoft.OData.Edm Imports NorthwindModel Imports Imports diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/StateManagementTests.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/StateManagementTests.vb index bbd0c8c1d0..5ec250d282 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/StateManagementTests.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/StateManagementTests.vb @@ -5,18 +5,19 @@ '--------------------------------------------------------------------- Imports System -Imports System.Diagnostics -Imports System.Text Imports System.Collections Imports System.Collections.Generic +Imports System.Diagnostics +Imports System.Text Imports System.Xml Imports System.Xml.Linq -Imports Microsoft.OData.Service +Imports AstoriaUnitTests.Data +Imports AstoriaUnitTests.Stubs Imports Microsoft.OData.Client Imports Microsoft.OData.Edm +Imports Microsoft.OData.Service Imports Microsoft.VisualStudio.TestTools.UnitTesting -Imports AstoriaUnitTests.Stubs -Imports AstoriaUnitTests.Data + Partial Public Class ClientModule From 121032c672c430a49973a99e88dc5f3ffeaaaed3 Mon Sep 17 00:00:00 2001 From: David Wambugu Date: Tue, 4 Feb 2020 14:49:37 +0300 Subject: [PATCH 08/11] update entries file imports sorting --- .../UnitTests/ClientUnitTests/medialinkentries.vb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/medialinkentries.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/medialinkentries.vb index 8ab1315661..2fb67fbd06 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/medialinkentries.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/medialinkentries.vb @@ -7,19 +7,19 @@ Imports System Imports System.Collections Imports System.Collections.Generic -Imports Microsoft.OData.Service -Imports Microsoft.OData.Client Imports System.Data.Test.Astoria Imports System.IO Imports System.Linq +Imports System.Net Imports System.Xml Imports System.Xml.Linq -Imports System.Net +Imports System.Web Imports AstoriaUnitTests.Data Imports AstoriaUnitTests.Stubs +Imports Microsoft.OData.Client +Imports Microsoft.OData.Service Imports Microsoft.Test.ModuleCore Imports Microsoft.VisualStudio.TestTools.UnitTesting -Imports System.Web Imports Microsoft.OData.Edm Partial Public Class ClientModule From 0373f375e3fa65e5800ae6054e7ee3b4aa8879ee Mon Sep 17 00:00:00 2001 From: David Wambugu Date: Tue, 4 Feb 2020 16:01:45 +0300 Subject: [PATCH 09/11] change to ternary --- src/Microsoft.OData.Client/DataServiceClientFormat.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OData.Client/DataServiceClientFormat.cs b/src/Microsoft.OData.Client/DataServiceClientFormat.cs index 9450811615..03996f9e60 100644 --- a/src/Microsoft.OData.Client/DataServiceClientFormat.cs +++ b/src/Microsoft.OData.Client/DataServiceClientFormat.cs @@ -338,7 +338,7 @@ internal IEdmModel LoadServiceModelFromNetwork() httpRequest = new HttpWebRequestMessage(args); } - Descriptor descriptor = requestEventArgs?.Descriptor; + Descriptor descriptor = requestEventArgs != null ? requestEventArgs.Descriptor : null; // fire the right events if they exist if (context.HasSendingRequest2EventHandlers) From 7f494aea6c46bd7d75cdd47bdd8d24361c8fbee0 Mon Sep 17 00:00:00 2001 From: David Wambugu Date: Tue, 4 Feb 2020 16:59:50 +0300 Subject: [PATCH 10/11] Add missing import --- .../UnitTests/ClientUnitTests/ClientRegressionTests.vb | 1 + 1 file changed, 1 insertion(+) diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb index 95c98500ba..6fd764c03a 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/ClientRegressionTests.vb @@ -24,6 +24,7 @@ Imports AstoriaUnitTests.Tests Imports AstoriaUnitTests.ClientExtensions Imports Microsoft.OData.Client Imports Microsoft.OData.Edm +Imports Microsoft.OData.Service Imports Microsoft.Test.ModuleCore Imports Microsoft.VisualStudio.TestTools.UnitTesting Imports NorthwindModel From 0b3cb92dda49366325dded37cf8a2709f515ae1e Mon Sep 17 00:00:00 2001 From: David Wambugu Date: Tue, 4 Feb 2020 19:55:50 +0300 Subject: [PATCH 11/11] update failing test init and class init methods --- .../ClientUnitTests/EntitySetResolverTests.vb | 41 ++++++++----------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/EntitySetResolverTests.vb b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/EntitySetResolverTests.vb index 1bbf828efd..2fdc35e445 100644 --- a/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/EntitySetResolverTests.vb +++ b/test/FunctionalTests/Tests/DataServices/UnitTests/ClientUnitTests/EntitySetResolverTests.vb @@ -45,6 +45,8 @@ Partial Public Class ClientModule New Tuple(Of String, Uri)("Uri has Query", New Uri("http://foo/awesome.svc?id=10", UriKind.Absolute)), New Tuple(Of String, Uri)("Uri is Relative", New Uri("MySet", UriKind.Relative))} + Private context As DataServiceContext + Public Class MyAllTypes1 Inherits AllTypes @@ -75,6 +77,7 @@ Partial Public Class ClientModule streamContentWeb.ServiceType = GetType(AstoriaUnitTests.Stubs.StreamingContentService) streamContentWeb.StartService() Dim ctx = New DataServiceContext(streamingWeb.ServiceRoot) + ctx.Format.UseJson(New EdmModel()) ' Since we are sending $value payload, we must correctly set the accept type header. ' Otherwise, astoria server sends application/atom+xml as the header value and then client fails to parse. @@ -99,6 +102,8 @@ Partial Public Class ClientModule Me.northwindCtx = New NorthwindSimpleModel.NorthwindContext(northwindWeb.ServiceRoot) 'Me.northwindCtx.EnableAtom = True 'Me.northwindCtx.Format.UseAtom() + Me.context = New DataServiceContext() + context.Format.UseJson(New EdmModel()) End Sub ' Public Sub PerTestCleanup() @@ -106,7 +111,7 @@ Partial Public Class ClientModule Public Sub ApiContextBeginExecute_NullBaseUri_Error() - Dim context = New DataServiceContext() + Dim act As Action = Sub() context.BeginExecute(Of Object)(New Uri("MySet", UriKind.Relative), Sub(ar As IAsyncResult) Return, Nothing) End Sub @@ -118,9 +123,7 @@ Partial Public Class ClientModule Public Sub ApiContextBeginExecute_NullBaseUri_AbsoluteRequestUri_Success() - Dim context = New DataServiceContext() - 'context.EnableAtom = True - context.Format.UseJson(New EdmModel()) + context.BeginExecute(Of Object)(entitySet1AbsoluteUri, Sub(ar As IAsyncResult) CType(ar, DataServiceQuery(Of Object)).EndExecute(ar).ToList() End Sub, @@ -137,9 +140,7 @@ Partial Public Class ClientModule Public Sub ApiContextExecute_NullBaseUri_Error() - Dim context = New DataServiceContext() - 'context.EnableAtom = True - 'context.Format.UseAtom() + Dim act As Action = Sub() context.Execute(Of Object)(New Uri("MySet", UriKind.Relative)) End Sub @@ -150,9 +151,7 @@ Partial Public Class ClientModule Public Sub ApiContextGetMetadataUri_NullBaseUri_Error() - Dim context = New DataServiceContext() - 'context.EnableAtom = True - 'context.Format.UseAtom() + Dim act As Action = Sub() context.GetMetadataUri() End Sub @@ -169,7 +168,6 @@ Partial Public Class ClientModule Console.WriteLine("Running variation - " + variation.Item1) Dim act As Action = Sub() - Dim context = New DataServiceContext() context.BaseUri = variation.Item2 End Sub AssertUtil.RunCatch(Of InvalidOperationException)(act, @@ -180,11 +178,11 @@ Partial Public Class ClientModule Public Sub ApiContextBaseUriStateEquvilentBetweenDefaultCtorAndNullPassedToBaseUriCtor() - Dim context = New DataServiceContext() + 'context.EnableAtom = True 'context.Format.UseAtom() Dim contextNull = New DataServiceContext(Nothing) - + Assert.AreEqual(context.BaseUri, contextNull.BaseUri, "the base uri's should be equivelent") Assert.AreEqual(context.ResolveEntitySet, contextNull.ResolveEntitySet, "the base uri's should be equivelent") @@ -192,9 +190,7 @@ Partial Public Class ClientModule Public Sub ApiContextBaseUriProperty() - Dim context = New DataServiceContext() - 'context.EnableAtom = True - 'context.Format.UseAtom() + Assert.IsNull(context.BaseUri, "The BaseUri property didn't default to null") Dim absoluteUri As Uri = New Uri("http://foo.com/Awesome.svc") @@ -224,9 +220,7 @@ Partial Public Class ClientModule Public Sub ApiContextResolveEntitySetProperty() Const absoluteUri As String = "http://foo.com/Awesome.svc" - Dim context = New DataServiceContext() - 'context.EnableAtom = True - 'context.Format.UseAtom() + Dim esr As Func(Of String, Uri) = Function(setName As String) New Uri(absoluteUri) context.ResolveEntitySet = esr Assert.AreEqual(esr, context.ResolveEntitySet, "the ResolveEntitySet property didn't set properly") @@ -262,7 +256,6 @@ Partial Public Class ClientModule Console.WriteLine("Running variation - " + variation.Item1) Dim act As Action = Sub() - Dim context = New DataServiceContext() context.ResolveEntitySet = Function(setName As String) Dim uri = variation.Item2 Return uri @@ -285,7 +278,8 @@ Partial Public Class ClientModule Public Sub ApiContextResolveEntitySetProperty_Throws() ' we shouldn't catch or modify what the resolver is throwing Dim SetupContext As Func(Of DataServiceContext) = Function() - Dim context = New DataServiceContext + Dim context = New DataServiceContext() + context.Format.UseJson(New EdmModel()) context.ResolveEntitySet = Function(setName As String) Throw New MyTestException End Function @@ -319,7 +313,7 @@ Partial Public Class ClientModule context = New DataServiceContext(New Uri("http://mudd", UriKind.Absolute)) 'context.EnableAtom = True - 'context.Format.UseAtom() + context.Format.UseJson(New EdmModel()) Assert.IsNull(context.ResolveEntitySet, "The default value of the ResolveEntitySetProperty should be null") End Sub @@ -329,6 +323,7 @@ Partial Public Class ClientModule Dim context = New DataServiceContext(New Uri("http://foo/ReturnsNull")) 'context.EnableAtom = True 'context.Format.UseAtom() + context.Format.UseJson(New EdmModel()) context.ResolveEntitySet = Function(setName As String) Return Nothing End Function @@ -525,7 +520,7 @@ Partial Public Class ClientModule Public Sub NoBaseUriAndNoEntitySetResolverOnAddObject_Error() Dim act As Action = Sub() - Dim context As New DataServiceContext() + context.AddObject("foo", New MyAllTypes1()) End Sub AssertUtil.RunCatch(Of InvalidOperationException)(act,