示例#1
0
 public DSPSelfmodifyingResource(provider.ResourceType resourceType) : base(resourceType) { }
 public MyDSPInvokableAction(DataServiceOperationContext operationContext, Provider.ServiceAction action, object[] parameters)
 {
     this.action = action;
     this.parameters = parameters;
 }
 public override Provider.IDataServiceInvokable CreateInvokable(DataServiceOperationContext operationContext, Provider.ServiceAction serviceAction, object[] parameterTokens)
 {
     return new MyDSPInvokableAction(operationContext, serviceAction, parameterTokens);
 }
        private static void SetUpActionWithLargeParameterPayload(MyDSPActionProvider actionProvider, Provider.IDataServiceMetadataProvider metadata, Provider.ResourceType bindingParameterType)
        {    
            List<Provider.ServiceActionParameter> parameters = new List<Provider.ServiceActionParameter>();
            if(bindingParameterType != null) 
            {
                parameters.Add(new Provider.ServiceActionParameter("bindingParam", bindingParameterType));
            }

            int j = 0;
            for (int i = 0; i < ActionTestsWithLargePayload.ParameterPayloadSize; ++i)
            {
                string pName = "p_int_" + j++;
                parameters.Add(new Provider.ServiceActionParameter(pName, Provider.ResourceType.GetPrimitiveResourceType(typeof(Int32))));

                pName = "p_string_" + j++;
                parameters.Add(new Provider.ServiceActionParameter(pName, Provider.ResourceType.GetPrimitiveResourceType(typeof(string))));

                pName = "p_double_" + j++;
                parameters.Add(new Provider.ServiceActionParameter(pName, Provider.ResourceType.GetPrimitiveResourceType(typeof(double))));

                pName = "p_datetimeoffset_" + j++;
                parameters.Add(new Provider.ServiceActionParameter(pName, Provider.ResourceType.GetPrimitiveResourceType(typeof(DateTimeOffset))));

                pName = "p_complex_" + j++;
                parameters.Add(new Provider.ServiceActionParameter(pName, ActionTestsWithLargePayload.ComplexType));
            }

            actionProvider.AddAction("ActionWithLargeParameterPayload", null, null, parameters, Provider.OperationParameterBindingKind.Sometimes, null, null);
        }
        private static void SetupLargeNumberOfActions(MyDSPActionProvider actionProvider, Provider.IDataServiceMetadataProvider metadata, Provider.ResourceType bindingParameterType)
        {
            List<Provider.ServiceActionParameter> parameters = new List<Provider.ServiceActionParameter>();

            if (bindingParameterType != null)
            {
                parameters.Add(new Provider.ServiceActionParameter("bindingParam", bindingParameterType));
            }

            for (int i = 0; i < NumberOfActions; ++i)
            {
                actionProvider.AddAction("Action_" + i, null, null, parameters, Provider.OperationParameterBindingKind.Sometimes, null, null);
            }
        }
        private static void SetUpActionWithLargeCollectionParameterPayload(MyDSPActionProvider actionProvider, Provider.IDataServiceMetadataProvider metadata, Provider.ResourceType bindingParameterType)
        {
            List<Provider.ServiceActionParameter> parameters = new List<Provider.ServiceActionParameter>();

            if (bindingParameterType != null)
            {
                parameters.Add(new Provider.ServiceActionParameter("bindingParam", bindingParameterType));
            }

            parameters.Add(new Provider.ServiceActionParameter("collectionParameter", Provider.ResourceType.GetCollectionResourceType(Provider.ResourceType.GetPrimitiveResourceType(typeof(string)))));
            actionProvider.AddAction("ActionWithLargeCollectionParameterPayload", null, null, parameters, Provider.OperationParameterBindingKind.Sometimes, null, null);
        }
        private static object GetRequestDescription(Prov.ResourceType resourceType, object resourceSet, string relativeUri)
        {
            // Create the segment info
            Type segmentInfoType = typeof(Prov.ResourceType).Assembly.GetType("Microsoft.OData.Service.SegmentInfo");
            var segmentInfo = Activator.CreateInstance(segmentInfoType, true /*nonPublic*/);
            segmentInfoType.GetProperty("TargetResourceType", BindingFlags.NonPublic | BindingFlags.Instance).GetSetMethod(true /*nonPublic*/).Invoke(segmentInfo, new object[] { resourceType });
            segmentInfoType.GetProperty("TargetResourceSet", BindingFlags.NonPublic | BindingFlags.Instance).GetSetMethod(true /*nonPublic*/).Invoke(segmentInfo, new object[] { resourceSet });

            // create segmentInfo array
            var segmentInfoArray = Array.CreateInstance(segmentInfoType, 1);
            segmentInfoArray.SetValue(segmentInfo, 0);

            // Create RequestDescription
            Type requestDescriptionType = typeof(Prov.ResourceType).Assembly.GetType("Microsoft.OData.Service.RequestDescription");
            return Activator.CreateInstance(
                requestDescriptionType,
                BindingFlags.NonPublic | BindingFlags.CreateInstance | BindingFlags.Instance,
                null,
                new object[] { segmentInfoArray, new Uri(new Uri("http://host", UriKind.Absolute), relativeUri) },
                System.Globalization.CultureInfo.InvariantCulture);
        }
        public static void VerifyExceptionForWhere(object service, object resourceSet, Prov.ResourceType resourceType, IQueryable source, params string[] predicates)
        {
            foreach (string predicate in predicates)
            {
                Trace.WriteLine("Verifying exception is thrown for predicate [" + predicate + "]");

                Exception exception = TestUtil.RunCatching(delegate() { InvokeWhere(service, GetRequestDescription(resourceType, resourceSet, predicate), source, predicate); });
                TestUtil.AssertExceptionExpected(exception, true);
                // TestUtil.AssertContainsFalse(exception.ToString(), "binary operator");
                TestUtil.AssertContainsFalse(exception.ToString(), "mplemented");
            }
        }