示例#1
0
        public static void ExecuteLinq(Workspace workspace, ExpNode q, ResourceContainer container, bool bSingle, ExpNode altq)
        {

            System.Uri uri = new Uri(workspace.ServiceUri);

            WebDataCtxWrapper ctx = new WebDataCtxWrapper(uri);
            ctx.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
            ctx.MergeOption = MergeOption.NoTracking;

            Type resType = container.BaseType.ClientClrType;
            ResolveClientType(workspace, ctx, resType);

            Type cType = typeof(WebDataCtxWrapper);
            MethodInfo mi = cType.GetMethod("CreateQuery", new Type[] { typeof(string) });

            Type pType = container.BaseType.ClientClrType;
            MethodInfo miConstructed = mi.MakeGenericMethod(pType);

            string uri2 = container.Name;
            AstoriaTestLog.WriteLineIgnore(workspace.ServiceUri + "/" + uri2);

            object[] args = { uri2 };
            object query = miConstructed.Invoke(ctx, args);

            LinqQueryBuilder lb = new LinqQueryBuilder(workspace, (IQueryable)query);
            string uri3 = lb.Build(q);
            AstoriaTestLog.WriteLineIgnore("Linq expression: " + lb.QueryExpression);

            //if (bSingle)
            //{
            //    var single = lb.QueryResultSingle;
            //    VerifyLinqSingle(workspace, altq, single, container);
            //}
            //else
            //{
            var queryable = lb.QueryResult;
            VerifyLinq(workspace, q, (IQueryable)queryable);
            //}

        }
示例#2
0
        public static IEnumerable ExecuteQuery(WebDataCtxWrapper ctx, Type pType, string sUri, string execType)
        {
            MethodInfo mi = null;
            MethodInfo miConstructed = null;
            object enumerable = null;
            object[] args = { new Uri(sUri, UriKind.Relative) };

            Type cType = typeof(WebDataCtxWrapper);

            switch (execType)
            {
                case "sync":
                    mi = cType.GetMethod("Execute", new Type[] { typeof(System.Uri) });
                    miConstructed = mi.MakeGenericMethod(pType);
                    enumerable = miConstructed.Invoke(ctx, args);
                    break;
                case "async":
                    mi = cType.GetMethod("BeginExecute", BindingFlags.Public | BindingFlags.Instance, null, new Type[] { typeof(System.Uri), typeof(System.AsyncCallback), typeof(object) }, null);
                    miConstructed = mi.MakeGenericMethod(pType);

                    object asyncResult = miConstructed.Invoke(ctx, new object[] { new Uri(sUri, UriKind.Relative), null, null });

                    MethodInfo endexecute = cType.GetMethod("EndExecute", BindingFlags.Public | BindingFlags.Instance, null, new Type[] { typeof(IAsyncResult) }, null);
                    MethodInfo miConstructed2 = endexecute.MakeGenericMethod(pType);
                    enumerable = miConstructed2.Invoke(ctx, new object[] { asyncResult });
                    break;
            }
            return (IEnumerable)enumerable;
        }
示例#3
0
        public static void ResolveClientType(Workspace workspace, WebDataCtxWrapper ctx, Type resType)
        {
            if (workspace.Name == "Aruba")
            {
                switch (AstoriaTestProperties.DataLayerProviderKinds[0])
                {
                    case DataLayerProviderKind.Edm:
                        ctx.ResolveType = delegate(string typeName)
                        {
                            return resType.Assembly.GetType("ArubaClient." + typeName.Substring("Aruba.".Length), true, false);
                        };

                        ctx.ResolveName = delegate(Type type)
                        {
                            return "Aruba." + type.Name;

                        };
                        break;
                    case DataLayerProviderKind.LinqToSql:
                        ctx.ResolveType = delegate(string typeName)
                        {
                            return resType.Assembly.GetType("ArubaClientLTS." + typeName.Substring("Aruba.".Length), true, false);
                        };

                        ctx.ResolveName = delegate(Type type)
                        {
                            return "Aruba." + type.Name;

                        };
                        break;
                }
            }
        }
示例#4
0
        public void VerifyClient(QueryModel qm)
        {
            WebDataCtxWrapper ctx = new WebDataCtxWrapper(new Uri(qm.Workspace.ServiceUri));
            ctx.Credentials = CredentialCache.DefaultNetworkCredentials;

            try
            {
                UriQueryBuilder ub = new UriQueryBuilder(qm.Workspace, "");
                string ruri = ub.Build(qm.QueryResult);

                string uriRel = ruri.Substring(ruri.LastIndexOf(".svc/") + 5);

                if ((ctx.BaseUri + "/" + uriRel).Length > 260) { return; }
                AstoriaTestLog.WriteLineIgnore(ctx.BaseUri + "/" + uriRel);

                ResolveClientType(qm.Workspace, ctx, qm.ResultType);

                object enumerable = ExecuteQuery(ctx, qm.ResultType, uriRel, "sync");
                Verify(qm.Workspace, qm.QueryResult, (IEnumerable)enumerable, qm.ResType, null, qm.IsCount);
            }
            catch (Exception e)
            {
                AstoriaTestLog.FailAndContinue(e);
            }

        }
示例#5
0
        public UpdateModel(Workspace workspace, WebDataCtxWrapper context, object entity, ResourceContainer resContainer,
            UpdateModel parent)
            : base(workspace)
        {
            _workspace = workspace;
            this.ResContainer = resContainer;
            this.CurrentResource = entity;
            CurrentResourceSet = resContainer.Name;

            _ctx = context;
            RunningUnderLinkModel = true;
        }
示例#6
0
        public void CreateContext()
        {

            _context = new WebDataCtxWrapper(this.workSpace.ServiceRoot);
            _context.Credentials = CredentialCache.DefaultNetworkCredentials;
            AstoriaTestLog.WriteLineIgnore(this.workSpace.ServiceRoot.ToString());
            //Source = SourceResourceType.CreateInstance( false );
            //Target = TargetResourceType.CreateInstance( false );

        }
示例#7
0
 public void CreateContext()
 {
     Context = new WebDataCtxWrapper(this.workSpace.ServiceRoot);
     Context.Credentials = CredentialCache.DefaultNetworkCredentials;
     AstoriaTestLog.WriteLineIgnore(this.workSpace.ServiceRoot.ToString());
 }
示例#8
0
        public static void Verify(object entity, string uri, EntityStates state, Workspace w)
        {
            WebDataCtxWrapper ctx = new WebDataCtxWrapper(w.ServiceRoot);
            ctx.Credentials = CredentialCache.DefaultNetworkCredentials;

            MethodInfo mi = ctx.GetType().GetMethod("Execute", new Type[] { typeof(System.Uri) });
            MethodInfo execMethod = mi.MakeGenericMethod(entity.GetType());
            object results = execMethod.Invoke(ctx, new object[] { new Uri(uri, UriKind.RelativeOrAbsolute) });

            switch (state)
            {
                case EntityStates.Unchanged:
                case EntityStates.Modified:
                case EntityStates.Added:
                    //entity was updated

                    IEnumerator r = ((IEnumerable)results).GetEnumerator();

                    while (r.MoveNext())
                    {
                        VerifyResult(r.Current, entity);
                        break;
                    }
                    break;
                case EntityStates.Deleted:
                    AstoriaTestLog.WriteLineIgnore("deleted!");
                    break;
            }
        }