private DataServiceProviderWrapper CreateProviderWrapper(DataServiceConfiguration config, bool hasReflectionOrEFProviderQueryBehavior) { IDataServiceMetadataProvider provider; if (hasReflectionOrEFProviderQueryBehavior) { provider = new ReflectionDataServiceProvider(new object(), new object()); } else { provider = new DataServiceProviderSimulator(); } var dataService = new DataServiceSimulator(); DataServiceStaticConfiguration staticConfiguration = new DataServiceStaticConfiguration(dataService.Instance.GetType(), provider); IDataServiceProviderBehavior providerBehavior = hasReflectionOrEFProviderQueryBehavior ? new DataServiceProviderBehavior(new ProviderBehavior(ProviderQueryBehaviorKind.ReflectionProviderQueryBehavior)) : DataServiceProviderBehavior.CustomDataServiceProviderBehavior; var providerWrapper = new DataServiceProviderWrapper( new DataServiceCacheItem(config, staticConfiguration), provider, (IDataServiceQueryProvider)provider, dataService, hasReflectionOrEFProviderQueryBehavior ? true : false); dataService.ProcessingPipeline = new DataServiceProcessingPipeline(); dataService.Provider = providerWrapper; typeof(DataServiceProviderWrapper).GetField("providerBehavior", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(providerWrapper, providerBehavior); #if DEBUG dataService.ProcessingPipeline.SkipDebugAssert = true; #endif return(providerWrapper); }
public void ReflectionDataServiceProviderBehavior() { ReflectionDataServiceProvider reflectionProvider = new ReflectionDataServiceProvider(new ReflectionBookStoreDataService(), new ReflectionBookStore()); IDataServiceProviderBehavior providerBehavior = (IDataServiceProviderBehavior)reflectionProvider.GetService(typeof(IDataServiceProviderBehavior)); Assert.IsTrue(providerBehavior.ProviderBehavior.ProviderQueryBehavior == ProviderQueryBehaviorKind.ReflectionProviderQueryBehavior); }
public void EntityFrameworkDataServiceProviderBehavior() { ObjectContextServiceProvider objContextProvider = new ObjectContextServiceProvider(new object(), new object()); IDataServiceProviderBehavior providerBehavior = objContextProvider as IDataServiceProviderBehavior; Assert.IsTrue(providerBehavior.ProviderBehavior.ProviderQueryBehavior == ProviderQueryBehaviorKind.EntityFrameworkProviderQueryBehavior); }
public void InitTest() { this.host = new DataServiceHost2Simulator(); this.host.AbsoluteServiceUri = new Uri("http://service/"); this.host.AbsoluteServiceUri = new Uri("http://service/set1"); var providerSimulator = new DataServiceProviderSimulator(); this.service = new DataServiceSimulator { OperationContext = new DataServiceOperationContext(false, this.host), Configuration = new DataServiceConfiguration(providerSimulator) }; DataServiceStaticConfiguration staticConfiguration = new DataServiceStaticConfiguration(this.service.Instance.GetType(), providerSimulator); IDataServiceProviderBehavior providerBehavior = DataServiceProviderBehavior.CustomDataServiceProviderBehavior; this.service.ProcessingPipeline = new DataServiceProcessingPipeline(); this.service.Provider = new DataServiceProviderWrapper( new DataServiceCacheItem( this.service.Configuration, staticConfiguration), providerSimulator, providerSimulator, this.service, false); this.service.Provider.ProviderBehavior = providerBehavior; this.service.OperationContext.InitializeAndCacheHeaders(this.service); }
private static IEdmEntityType CreateModelAndGetEdmType(ResourceType resourceType) { var provider = new DataServiceProviderSimulator(); DataServiceSimulator dataService = new DataServiceSimulator(); DataServiceStaticConfiguration staticConfiguration = new DataServiceStaticConfiguration(dataService.Instance.GetType(), provider); IDataServiceProviderBehavior providerBehavior = DataServiceProviderBehavior.CustomDataServiceProviderBehavior; DataServiceProviderWrapper providerWrapper = new DataServiceProviderWrapper( new DataServiceCacheItem( new DataServiceConfiguration(provider), staticConfiguration), provider, provider, dataService, false); dataService.Provider = providerWrapper; var model = new MetadataProviderEdmModel(providerWrapper, new DataServiceStreamProviderWrapper(dataService), DataServiceActionProviderWrapper.Create(dataService)); dataService.ProcessingPipeline = new DataServiceProcessingPipeline(); model.MetadataProvider.ProviderBehavior = providerBehavior; var edmType = model.EnsureSchemaType(resourceType) as IEdmEntityType; return(edmType); }
/// <summary> /// Gets the ProviderBehavior instance obtained from IDataServiceProviderBehavior interface. /// </summary> /// <param name="providerBehavior">IDataServiceProviderBehavior interface implementation.</param> /// <returns>ProviderBehavior instance.</returns> internal static ProviderBehavior GetBehavior(IDataServiceProviderBehavior providerBehavior) { ProviderBehavior behavior = providerBehavior.ProviderBehavior; if (behavior == null) { throw new InvalidOperationException(Strings.DataServiceProviderBehavior_ProviderBehaviorMustBeNonNull); } return(behavior); }
public void Initialize() { this.host = new DataServiceHost2Simulator(); var context = new DataServiceOperationContext(this.host); this.dataServiceSimulator = new DataServiceSimulator { OperationContext = context }; var providerSimulator = new DataServiceProviderSimulator(); DataServiceStaticConfiguration staticConfiguration = new DataServiceStaticConfiguration(this.dataServiceSimulator.Instance.GetType(), providerSimulator); IDataServiceProviderBehavior providerBehavior = DataServiceProviderBehavior.CustomDataServiceProviderBehavior; var resourceType = new ResourceType(typeof(object), ResourceTypeKind.EntityType, null, "SelectTestNamespace", "Fake", false) { CanReflectOnInstanceType = false, IsOpenType = true }; resourceType.AddProperty(new ResourceProperty("Id", ResourcePropertyKind.Key | ResourcePropertyKind.Primitive, ResourceType.GetPrimitiveResourceType(typeof(int))) { CanReflectOnInstanceTypeProperty = false }); var resourceSet = new ResourceSet("FakeSet", resourceType); resourceSet.SetReadOnly(); providerSimulator.AddResourceSet(resourceSet); var configuration = new DataServiceConfiguration(providerSimulator); configuration.SetEntitySetAccessRule("*", EntitySetRights.All); var provider = new DataServiceProviderWrapper( new DataServiceCacheItem( configuration, staticConfiguration), providerSimulator, providerSimulator, this.dataServiceSimulator, false); this.dataServiceSimulator.ProcessingPipeline = new DataServiceProcessingPipeline(); this.dataServiceSimulator.Provider = provider; provider.ProviderBehavior = providerBehavior; this.dataServiceSimulator.Configuration = new DataServiceConfiguration(providerSimulator); this.dataServiceSimulator.Configuration.DataServiceBehavior.MaxProtocolVersion = ODataProtocolVersion.V4; this.responseMessageSimulator = new ODataResponseMessageSimulator(); }
public DataServiceMetadataProviderWrapper(DSPMetadata metadataProvider) { DataServiceConfiguration config = (DataServiceConfiguration)Activator.CreateInstance( typeof(DataServiceConfiguration), BindingFlags.NonPublic | BindingFlags.Instance, null, new object[] { metadataProvider }, null); config.SetEntitySetAccessRule("*", EntitySetRights.All); config.SetServiceOperationAccessRule("*", ServiceOperationRights.All); Type staticConfigurationType = typeof(ResourceType).Assembly.GetType("Microsoft.OData.Service.DataServiceStaticConfiguration"); object staticConfig = (object)Activator.CreateInstance( staticConfigurationType, BindingFlags.NonPublic | BindingFlags.Instance, null, new object[] { typeof(DummyServiceType), metadataProvider }, null); Type cacheItemType = typeof(ResourceType).Assembly.GetType("Microsoft.OData.Service.Caching.DataServiceCacheItem"); object cacheItem = Activator.CreateInstance( cacheItemType, BindingFlags.NonPublic | BindingFlags.Instance, null, new object[] { config, staticConfig }, null); Type dspProviderBehaviorType = typeof(ResourceType).Assembly.GetType("Microsoft.OData.Service.Providers.DataServiceProviderBehavior"); IDataServiceProviderBehavior providerBehavior = (IDataServiceProviderBehavior)Activator.CreateInstance( dspProviderBehaviorType, BindingFlags.NonPublic | BindingFlags.Instance, null, new object[] { new ProviderBehavior(ProviderQueryBehaviorKind.CustomProviderQueryBehavior) }, null); Type type = typeof(ResourceType).Assembly.GetType("Microsoft.OData.Service.Providers.DataServiceProviderWrapper"); instance = Activator.CreateInstance( type, BindingFlags.NonPublic | BindingFlags.Instance, null, new object[] { cacheItem, metadataProvider, new DSPResourceQueryProvider(metadataProvider, false), /*dataService*/ null, false }, null); type.GetField("providerBehavior", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(instance, providerBehavior); }
private static DataServiceProviderWrapper CreateProviderWrapper(TestActionProvider actionProvider = null, Action <DataServiceProviderSimulator> addMetadata = null) { var provider = new DataServiceProviderSimulator(); if (addMetadata != null) { addMetadata(provider); } var dataService = new DataServiceSimulatorWithGetService(); dataService.Configuration = new DataServiceConfiguration(provider); dataService.ProcessingPipeline = new DataServiceProcessingPipeline(); dataService.Configuration.SetServiceActionAccessRule("*", ServiceActionRights.Invoke); dataService.Configuration.SetEntitySetAccessRule("*", EntitySetRights.All); dataService.Configuration.SetServiceOperationAccessRule("*", ServiceOperationRights.All); dataService.Configuration.DataServiceBehavior.MaxProtocolVersion = ODataProtocolVersion.V4; dataService.OperationContext = new DataServiceOperationContext(false, new DataServiceHost2Simulator { AbsoluteRequestUri = new Uri("http://fake.org/$metadata") }); dataService.OperationContext.InitializeAndCacheHeaders(dataService); DataServiceStaticConfiguration staticConfiguration = new DataServiceStaticConfiguration(dataService.Instance.GetType(), provider); IDataServiceProviderBehavior providerBehavior = DataServiceProviderBehavior.CustomDataServiceProviderBehavior; var providerWrapper = new DataServiceProviderWrapper( new DataServiceCacheItem( dataService.Configuration, staticConfiguration), provider, provider, dataService, false); dataService.Provider = providerWrapper; providerWrapper.ProviderBehavior = providerBehavior; dataService.ActionProvider = DataServiceActionProviderWrapper.Create(dataService); if (actionProvider != null) { dataService.Providers.Add(typeof(IDataServiceActionProvider), actionProvider); } return(providerWrapper); }
private static MetadataProviderEdmModel CreateMetadataProviderEdmModel(DataServiceProviderSimulator metadataProvider, IDataServiceActionProvider actionProvider = null) { var dataServiceSimulator = new DataServiceSimulatorWithGetService { OperationContext = new DataServiceOperationContext(false, new DataServiceHost2Simulator()), ProcessingPipeline = new DataServiceProcessingPipeline() }; dataServiceSimulator.OperationContext.InitializeAndCacheHeaders(dataServiceSimulator); var dataServiceConfiguration = new DataServiceConfiguration(metadataProvider); dataServiceConfiguration.SetEntitySetAccessRule("*", EntitySetRights.AllRead); dataServiceConfiguration.SetServiceActionAccessRule("*", ServiceActionRights.Invoke); dataServiceConfiguration.DataServiceBehavior.MaxProtocolVersion = ODataProtocolVersion.V4; if (actionProvider != null) { dataServiceSimulator.Providers.Add(typeof(IDataServiceActionProvider), actionProvider); } DataServiceStaticConfiguration staticConfiguration = new DataServiceStaticConfiguration(dataServiceSimulator.Instance.GetType(), metadataProvider); IDataServiceProviderBehavior providerBehavior = DataServiceProviderBehavior.CustomDataServiceProviderBehavior; DataServiceProviderWrapper providerWrapper = new DataServiceProviderWrapper( new DataServiceCacheItem( dataServiceConfiguration, staticConfiguration), metadataProvider, metadataProvider, dataServiceSimulator, false); dataServiceSimulator.Provider = providerWrapper; var model = new MetadataProviderEdmModel(providerWrapper, new DataServiceStreamProviderWrapper(dataServiceSimulator), DataServiceActionProviderWrapper.Create(dataServiceSimulator)); model.MetadataProvider.ProviderBehavior = providerBehavior; return(model); }
/// <summary> /// Checks whether provider behaves like Reflection provider. /// </summary> /// <param name="providerBehavior">Provider behavior.</param> /// <returns>true if Reflection provider.</returns> internal static bool HasReflectionProviderQueryBehavior(IDataServiceProviderBehavior providerBehavior) { return(GetBehavior(providerBehavior).ProviderQueryBehavior == ProviderQueryBehaviorKind.ReflectionProviderQueryBehavior); }
private static DataServiceProviderWrapper CreateProvider(out DataServiceConfiguration config, out DataServiceOperationContext operationContext) { var baseUri = new Uri("http://localhost"); var host = new DataServiceHostSimulator() { AbsoluteServiceUri = baseUri, AbsoluteRequestUri = new Uri(baseUri.AbsoluteUri + "/$metadata", UriKind.Absolute), RequestHttpMethod = "GET", RequestAccept = "application/xml+atom", RequestVersion = "4.0", RequestMaxVersion = "4.0", }; operationContext = new DataServiceOperationContext(host); var dataService = new DataServiceSimulator() { OperationContext = operationContext }; operationContext.InitializeAndCacheHeaders(dataService); DataServiceProviderSimulator providerSimulator = new DataServiceProviderSimulator(); providerSimulator.ContainerNamespace = "MyModel"; providerSimulator.ContainerName = "CustomersContainer"; ResourceType customerEntityType = new ResourceType( typeof(object), ResourceTypeKind.EntityType, null, "MyModel", "Customer", false) { CanReflectOnInstanceType = false }; ResourcePropertyKind idPropertyKind = ResourcePropertyKind.Primitive | ResourcePropertyKind.Key; ResourceProperty idProperty = new ResourceProperty( "Id", idPropertyKind, ResourceType.GetPrimitiveResourceType(typeof(int))) { CanReflectOnInstanceTypeProperty = false }; customerEntityType.AddProperty(idProperty); ResourcePropertyKind firstNamePropertyKind = ResourcePropertyKind.Primitive | ResourcePropertyKind.Key; ResourceProperty firstNameProperty = new ResourceProperty( "FirstName", firstNamePropertyKind, ResourceType.GetPrimitiveResourceType(typeof(string))) { CanReflectOnInstanceTypeProperty = false }; customerEntityType.AddProperty(firstNameProperty); customerEntityType.SetReadOnly(); providerSimulator.AddResourceType(customerEntityType); ResourceSet customerSet = new ResourceSet("Customers", customerEntityType); customerSet.SetReadOnly(); providerSimulator.AddResourceSet(customerSet); config = new DataServiceConfiguration(providerSimulator); config.SetEntitySetAccessRule("*", EntitySetRights.All); config.DataServiceBehavior.MaxProtocolVersion = ODataProtocolVersion.V4; IDataServiceProviderBehavior providerBehavior = DataServiceProviderBehavior.CustomDataServiceProviderBehavior; DataServiceStaticConfiguration staticConfig = new DataServiceStaticConfiguration(dataService.Instance.GetType(), providerSimulator); DataServiceProviderWrapper provider = new DataServiceProviderWrapper( new DataServiceCacheItem(config, staticConfig), providerSimulator, providerSimulator, dataService, false); dataService.ProcessingPipeline = new DataServiceProcessingPipeline(); dataService.Provider = provider; provider.ProviderBehavior = providerBehavior; dataService.ActionProvider = DataServiceActionProviderWrapper.Create(dataService); #if DEBUG dataService.ProcessingPipeline.SkipDebugAssert = true; #endif operationContext.RequestMessage.InitializeRequestVersionHeaders(VersionUtil.ToVersion(config.DataServiceBehavior.MaxProtocolVersion)); return(provider); }
/// <summary> /// Checks whether provider behaves like Reflection provider. /// </summary> /// <param name="providerBehavior">Provider behavior.</param> /// <returns>true if Reflection provider.</returns> internal static bool HasReflectionProviderQueryBehavior(IDataServiceProviderBehavior providerBehavior) { return GetBehavior(providerBehavior).ProviderQueryBehavior == ProviderQueryBehaviorKind.ReflectionProviderQueryBehavior; }
/// <summary> /// Checks whether provider behaves like EntityFramework provider. /// </summary> /// <param name="providerBehavior">Provider behavior.</param> /// <returns>true if EntityFramework provider.</returns> internal static bool HasEntityFrameworkProviderQueryBehavior(IDataServiceProviderBehavior providerBehavior) { return GetBehavior(providerBehavior).ProviderQueryBehavior == ProviderQueryBehaviorKind.EntityFrameworkProviderQueryBehavior; }
/// <summary> /// Gets the ProviderBehavior instance obtained from IDataServiceProviderBehavior interface. /// </summary> /// <param name="providerBehavior">IDataServiceProviderBehavior interface implementation.</param> /// <returns>ProviderBehavior instance.</returns> internal static ProviderBehavior GetBehavior(IDataServiceProviderBehavior providerBehavior) { ProviderBehavior behavior = providerBehavior.ProviderBehavior; if (behavior == null) { throw new InvalidOperationException(Strings.DataServiceProviderBehavior_ProviderBehaviorMustBeNonNull); } return behavior; }
public void GetTargetSetTestsSetBindingTypeShouldPerformCorrectValidation() { ResourceType actorEntityType = new ResourceType(typeof(object), ResourceTypeKind.EntityType, null, "foo", "Actor", false) { CanReflectOnInstanceType = false }; ResourceProperty idProperty = new ResourceProperty("ID", ResourcePropertyKind.Primitive | ResourcePropertyKind.Key, ResourceType.GetPrimitiveResourceType(typeof(int))) { CanReflectOnInstanceTypeProperty = false }; actorEntityType.AddProperty(idProperty); ResourceType addressComplexType = new ResourceType(typeof(object), ResourceTypeKind.ComplexType, null, "foo", "Address", false) { CanReflectOnInstanceType = false }; addressComplexType.AddProperty(new ResourceProperty("StreetAddress", ResourcePropertyKind.Primitive, ResourceType.GetPrimitiveResourceType(typeof(string))) { CanReflectOnInstanceTypeProperty = false }); addressComplexType.AddProperty(new ResourceProperty("ZipCode", ResourcePropertyKind.Primitive, ResourceType.GetPrimitiveResourceType(typeof(int))) { CanReflectOnInstanceTypeProperty = false }); actorEntityType.AddProperty(new ResourceProperty("PrimaryAddress", ResourcePropertyKind.ComplexType, addressComplexType) { CanReflectOnInstanceTypeProperty = false }); actorEntityType.AddProperty(new ResourceProperty("OtherAddresses", ResourcePropertyKind.Collection, ResourceType.GetCollectionResourceType(addressComplexType)) { CanReflectOnInstanceTypeProperty = false }); ResourceType movieEntityType = new ResourceType(typeof(object), ResourceTypeKind.EntityType, null, "foo", "Movie", false) { CanReflectOnInstanceType = false }; movieEntityType.AddProperty(idProperty); ResourceProperty moviesNavProp = new ResourceProperty("Movies", ResourcePropertyKind.ResourceSetReference, movieEntityType) { CanReflectOnInstanceTypeProperty = false }; actorEntityType.AddProperty(moviesNavProp); ResourceProperty actorsNavProp = new ResourceProperty("Actors", ResourcePropertyKind.ResourceSetReference, actorEntityType) { CanReflectOnInstanceTypeProperty = false }; movieEntityType.AddProperty(actorsNavProp); ResourceType derivedActorEntityType = new ResourceType(typeof(object), ResourceTypeKind.EntityType, actorEntityType, "foo", "DerivedActor", false) { CanReflectOnInstanceType = false }; ResourceType derivedMovieEntityType = new ResourceType(typeof(object), ResourceTypeKind.EntityType, movieEntityType, "foo", "DerivedMovie", false) { CanReflectOnInstanceType = false }; actorEntityType.SetReadOnly(); derivedActorEntityType.SetReadOnly(); movieEntityType.SetReadOnly(); derivedMovieEntityType.SetReadOnly(); addressComplexType.SetReadOnly(); DataServiceProviderSimulator providerSimulator = new DataServiceProviderSimulator(); providerSimulator.AddResourceType(actorEntityType); providerSimulator.AddResourceType(derivedActorEntityType); providerSimulator.AddResourceType(movieEntityType); providerSimulator.AddResourceType(derivedMovieEntityType); providerSimulator.AddResourceType(addressComplexType); ResourceSet actorSet = new ResourceSet("Actors", actorEntityType); ResourceSet movieSet = new ResourceSet("Movies", movieEntityType); actorSet.SetReadOnly(); movieSet.SetReadOnly(); providerSimulator.AddResourceSet(actorSet); providerSimulator.AddResourceSet(movieSet); providerSimulator.AddResourceAssociationSet(new ResourceAssociationSet("Actors_Movies", new ResourceAssociationSetEnd(actorSet, actorEntityType, moviesNavProp), new ResourceAssociationSetEnd(movieSet, movieEntityType, actorsNavProp))); DataServiceConfiguration config = new DataServiceConfiguration(providerSimulator); config.SetEntitySetAccessRule("*", EntitySetRights.All); config.DataServiceBehavior.MaxProtocolVersion = ODataProtocolVersion.V4; var dataService = new DataServiceSimulator() { OperationContext = new DataServiceOperationContext(new DataServiceHostSimulator()) }; dataService.ProcessingPipeline = new DataServiceProcessingPipeline(); DataServiceStaticConfiguration staticConfiguration = new DataServiceStaticConfiguration(dataService.Instance.GetType(), providerSimulator); IDataServiceProviderBehavior providerBehavior = DataServiceProviderBehavior.CustomDataServiceProviderBehavior; DataServiceProviderWrapper provider = new DataServiceProviderWrapper( new DataServiceCacheItem( config, staticConfiguration), providerSimulator, providerSimulator, dataService, false); dataService.Provider = provider; provider.ProviderBehavior = providerBehavior; var testCases = new[] { new { AppendParameterName = true, Path = "", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), ErrorMessage = default(string) }, new { AppendParameterName = true, Path = "/Movies", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = ResourceSetWrapper.CreateResourceSetWrapper(movieSet, provider, set => set), ErrorMessage = default(string) }, new { AppendParameterName = true, Path = "/Movies/Actors/Movies", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = ResourceSetWrapper.CreateResourceSetWrapper(movieSet, provider, set => set), ErrorMessage = default(string) }, new { AppendParameterName = true, Path = "/foo.DerivedActor/Movies/foo.DerivedMovie/Actors/foo.DerivedActor/Movies", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = ResourceSetWrapper.CreateResourceSetWrapper(movieSet, provider, set => set), ErrorMessage = default(string) }, new { AppendParameterName = true, Path = "/", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = default(ResourceSetWrapper), ErrorMessage = "The path expression '{0}/' is not a valid expression because it contains an empty segment or it ends with '/'." }, new { AppendParameterName = true, Path = "/Movies/", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = default(ResourceSetWrapper), ErrorMessage = "The path expression '{0}/Movies/' is not a valid expression because it contains an empty segment or it ends with '/'." }, new { AppendParameterName = true, Path = "/Movies//Actors", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = ResourceSetWrapper.CreateResourceSetWrapper(movieSet, provider, set => set), ErrorMessage = "The path expression '{0}/Movies//Actors' is not a valid expression because it contains an empty segment or it ends with '/'." }, new { AppendParameterName = true, Path = "/foo.DerivedActor", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = default(ResourceSetWrapper), ErrorMessage = "The path expression '{0}/foo.DerivedActor' is not a valid expression because it ends with the type identifier 'foo.DerivedActor'. A valid path expression must not end in a type identifier." }, new { AppendParameterName = true, Path = "/Movies/foo.DerivedMovie", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = default(ResourceSetWrapper), ErrorMessage = "The path expression '{0}/Movies/foo.DerivedMovie' is not a valid expression because it ends with the type identifier 'foo.DerivedMovie'. A valid path expression must not end in a type identifier." }, new { AppendParameterName = true, Path = "/Foo", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = default(ResourceSetWrapper), ErrorMessage = "The path expression '{0}/Foo' is not a valid expression because the segment 'Foo' is not a type identifier or a property on the resource type 'foo.Actor'." }, new { AppendParameterName = true, Path = "/ID", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = default(ResourceSetWrapper), ErrorMessage = "The path expression '{0}/ID' is not a valid expression because the segment 'ID' is a property of type 'Edm.Int32'. A valid path expression must only contain properties of entity type." }, new { AppendParameterName = true, Path = "/OtherAddresses", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = default(ResourceSetWrapper), ErrorMessage = "The path expression '{0}/OtherAddresses' is not a valid expression because the segment 'OtherAddresses' is a property of type 'Collection(foo.Address)'. A valid path expression must only contain properties of entity type." }, new { AppendParameterName = true, Path = "/Movies/Actors/PrimaryAddress", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = default(ResourceSetWrapper), ErrorMessage = "The path expression '{0}/Movies/Actors/PrimaryAddress' is not a valid expression because the segment 'PrimaryAddress' is a property of type 'foo.Address'. A valid path expression must only contain properties of entity type." }, new { AppendParameterName = false, Path = "foo", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = default(ResourceSetWrapper), ErrorMessage = "The path expression 'foo' is not a valid path expression. A valid path expression must start with the binding parameter name '{0}'." }, new { AppendParameterName = false, Path = "abc/pqr", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = default(ResourceSetWrapper), ErrorMessage = "The path expression 'abc/pqr' is not a valid path expression. A valid path expression must start with the binding parameter name '{0}'." }, new { AppendParameterName = false, Path = "actorParameter", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = default(ResourceSetWrapper), ErrorMessage = "The path expression 'actorParameter' is not a valid path expression. A valid path expression must start with the binding parameter name '{0}'." }, new { AppendParameterName = false, Path = "actorsParameter", BindingSet = ResourceSetWrapper.CreateResourceSetWrapper(actorSet, provider, set => set), TargetSet = default(ResourceSetWrapper), ErrorMessage = "The path expression 'actorsParameter' is not a valid path expression. A valid path expression must start with the binding parameter name '{0}'." }, }; ServiceActionParameter actorParameter = new ServiceActionParameter("actor", actorEntityType); ServiceActionParameter actorsParameter = new ServiceActionParameter("actors", ResourceType.GetEntityCollectionResourceType(actorEntityType)); var parameters = new ServiceActionParameter[] { actorParameter, actorsParameter }; foreach (var parameter in parameters) { foreach (var testCase in testCases) { string pathString = testCase.AppendParameterName ? parameter.Name + testCase.Path : testCase.Path; var path = new ResourceSetPathExpression(pathString); Assert.AreEqual(pathString, path.PathExpression); string expectedErrorMessage = testCase.ErrorMessage == null ? null : string.Format(testCase.ErrorMessage, parameter.Name); try { path.SetBindingParameter(parameter); path.InitializePathSegments(provider); var targetSet = path.GetTargetSet(provider, testCase.BindingSet); Assert.IsNull(expectedErrorMessage, "Expecting exception but received none."); Assert.AreEqual(targetSet.Name, testCase.TargetSet.Name); } catch (InvalidOperationException e) { Assert.AreEqual(expectedErrorMessage, e.Message); } } } }
private void InitWithQueryOptions(string selectQueryOption, string expandQueryOption) { string queryOption = string.Empty; if (selectQueryOption != null && expandQueryOption != null) { queryOption = "?$select=" + selectQueryOption + "&$expand=" + expandQueryOption; } else if (selectQueryOption != null) { queryOption = "?$select=" + selectQueryOption; } else { queryOption = "?$expand=" + expandQueryOption; } this.host = new DataServiceHostSimulator { AbsoluteRequestUri = new Uri("http://fake.org/FakeSet" + queryOption), AbsoluteServiceUri = new Uri("http://fake.org/"), RequestHttpMethod = "GET", RequestVersion = "2.0", }; if (selectQueryOption != null) { this.host.SetQueryStringItem("$select", selectQueryOption); } if (expandQueryOption != null) { this.host.SetQueryStringItem("$expand", expandQueryOption); } DataServiceProviderSimulator provider = new DataServiceProviderSimulator { ContainerName = "SelectTestContainer", ContainerNamespace = "SelectTestNamespace" }; var resourceType = new ResourceType(typeof(object), ResourceTypeKind.EntityType, null, "SelectTestNamespace", "Fake", false) { CanReflectOnInstanceType = false, IsOpenType = true }; resourceType.AddProperty(new ResourceProperty("Id", ResourcePropertyKind.Key | ResourcePropertyKind.Primitive, ResourceType.GetPrimitiveResourceType(typeof(int))) { CanReflectOnInstanceTypeProperty = false }); var resourceSet = new ResourceSet("FakeSet", resourceType); resourceSet.SetReadOnly(); provider.AddResourceSet(resourceSet); DataServiceConfiguration configuration = new DataServiceConfiguration(provider); configuration.SetEntitySetAccessRule("*", EntitySetRights.All); this.service = new DataServiceSimulator { OperationContext = new DataServiceOperationContext(this.host), Configuration = configuration, }; DataServiceStaticConfiguration staticConfiguration = new DataServiceStaticConfiguration(this.service.Instance.GetType(), provider); IDataServiceProviderBehavior providerBehavior = DataServiceProviderBehavior.CustomDataServiceProviderBehavior; this.service.Provider = new DataServiceProviderWrapper( new DataServiceCacheItem( configuration, staticConfiguration), provider, provider, this.service, false); this.service.ProcessingPipeline = new DataServiceProcessingPipeline(); this.service.Provider.ProviderBehavior = providerBehavior; this.service.ActionProvider = DataServiceActionProviderWrapper.Create(this.service); this.service.OperationContext.InitializeAndCacheHeaders(service); }
/// <summary> /// Checks whether provider behaves like EntityFramework provider. /// </summary> /// <param name="providerBehavior">Provider behavior.</param> /// <returns>true if EntityFramework provider.</returns> internal static bool HasEntityFrameworkProviderQueryBehavior(IDataServiceProviderBehavior providerBehavior) { return(GetBehavior(providerBehavior).ProviderQueryBehavior == ProviderQueryBehaviorKind.EntityFrameworkProviderQueryBehavior); }
/// <summary> /// TODO: Refactor this into a factory pattern, if needed /// </summary> /// <returns>IDataService</returns> public IDataService CreateService <T>() where T : DataServiceSimulator, new() { T dataService = new T(); // // Operation Context // DataServiceOperationContext operationContext = new DataServiceOperationContext(host); operationContext.InitializeAndCacheHeaders(dataService); // // Configuration // DataServiceConfiguration config = new DataServiceConfiguration(provider); config.SetEntitySetAccessRule("*", EntitySetRights.All); config.SetServiceOperationAccessRule("*", ServiceOperationRights.All); config.SetServiceActionAccessRule("*", ServiceActionRights.Invoke); config.DataServiceBehavior.AcceptAnyAllRequests = this.behavior.AcceptAnyAllRequests; config.DataServiceBehavior.AcceptCountRequests = this.behavior.AcceptCountRequests; config.DataServiceBehavior.AcceptProjectionRequests = this.behavior.AcceptProjectionRequests; config.DataServiceBehavior.AcceptSpatialLiteralsInQuery = this.behavior.AcceptSpatialLiteralsInQuery; config.DataServiceBehavior.IncludeAssociationLinksInResponse = this.behavior.IncludeAssociationLinksInResponse; config.DataServiceBehavior.InvokeInterceptorsOnLinkDelete = this.behavior.InvokeInterceptorsOnLinkDelete; config.DataServiceBehavior.MaxProtocolVersion = this.behavior.MaxProtocolVersion; config.DataServiceBehavior.UseMetadataKeyOrderForBuiltInProviders = this.behavior.UseMetadataKeyOrderForBuiltInProviders; DataServiceStaticConfiguration staticConfiguration = new DataServiceStaticConfiguration(dataService.Instance.GetType(), provider); IDataServiceProviderBehavior providerBehavior = DataServiceProviderBehavior.CustomDataServiceProviderBehavior; var providerWrapper = new DataServiceProviderWrapper( new DataServiceCacheItem( config, staticConfiguration), provider, provider, dataService, false); dataService.ProcessingPipeline = new DataServiceProcessingPipeline(); dataService.Provider = providerWrapper; providerWrapper.ProviderBehavior = providerBehavior; // // Service // operationContext.RequestMessage.InitializeRequestVersionHeaders(config.DataServiceBehavior.MaxProtocolVersion.ToVersion()); var pipeline = new DataServiceProcessingPipeline(); #if DEBUG pipeline.SkipDebugAssert = true; #endif dataService.OperationContext = operationContext; dataService.Provider = providerWrapper; dataService.ProcessingPipeline = pipeline; dataService.Configuration = config; dataService.StreamProvider = new DataServiceStreamProviderWrapper(dataService); dataService.ActionProvider = DataServiceActionProviderWrapper.Create(dataService); return(dataService); }