/// <summary> /// Verify the passed query tree. /// </summary> /// <param name="expression">The query tree which will be verified</param> public virtual void Verify(QueryExpression expression) { ExceptionUtilities.CheckAllRequiredDependencies(this); ExceptionUtilities.Assert(this.IsAsync, "this verifier can only run async"); this.ThrowSkippedExceptionIfQueryExpressionNotSupported(expression); var resolvedQuery = this.LinqQueryResolver.Resolve(expression); var dataServiceContext = this.DataServiceContextCreator.CreateContext(this.DataServiceContextScope, this.workspace.ContextType, this.workspace.ServiceUri); if (this.IsExecuteURI) { // TODO: update this verifier to call ExecuteUriAndCompare if ExecuteURI test parameter is set to true } else { ClientQueryGenerator queryGenerator = new ClientQueryGenerator(new CSharpGenericTypeBuilder()); DataServiceContext clientContext = dataServiceContext.Product as DataServiceContext; CoreLinq.Expression queryLinqExpression = queryGenerator.Generate(resolvedQuery, clientContext); IQueryProvider queryProvider = clientContext.CreateQuery <int>("Set").Provider as IQueryProvider; DataServiceQuery dataServiceQuery = queryProvider.CreateQuery(queryLinqExpression) as DataServiceQuery; this.ResultComparer.EnqueueNextQuery(resolvedQuery); AsyncExecutionContext.EnqueueAsynchronousAction((queryContinuation) => { this.Log.WriteLine(LogLevel.Info, dataServiceQuery.ToString()); QueryValue baselineValue = this.GetBaselineValue(resolvedQuery); DataServiceProtocolVersion maxProtocolVersion = this.workspace.ConceptualModel.GetMaxProtocolVersion(); #if WINDOWS_PHONE DataServiceProtocolVersion maxClientProtocolVersion = DataServiceProtocolVersion.V4; #else DataServiceProtocolVersion maxClientProtocolVersion = ((DSC.DataServiceProtocolVersion)dataServiceContext.MaxProtocolVersion.Product).ToTestEnum(); #endif // Calculate version errors ExpectedClientErrorBaseline clientError = this.LinqToAstoriaErrorCalculator.CalculateExpectedClientVersionError(resolvedQuery, true, maxClientProtocolVersion, maxProtocolVersion); if (clientError != null) { this.Log.WriteLine(LogLevel.Info, "Expected client exception: " + clientError.ExpectedExceptionType.ToString()); } Type queryType = dataServiceQuery.ElementType; MethodInfo genericExecuteMethod = this.ResultComparer.GetType().GetMethod("ExecuteAndCompare").MakeGenericMethod(queryType); genericExecuteMethod.Invoke(this.ResultComparer, new object[] { queryContinuation, this.IsAsync, dataServiceQuery, baselineValue, clientContext, clientError }); }); } }
/// <summary> /// Verify the passed query tree. /// </summary> /// <param name="expression">The query tree which will be verified</param> public virtual void Verify(QueryExpression expression) { ExceptionUtilities.CheckAllRequiredDependencies(this); ExceptionUtilities.Assert(this.IsAsync, "this verifier can only run async"); this.ThrowSkippedExceptionIfQueryExpressionNotSupported(expression); var resolvedQuery = this.LinqQueryResolver.Resolve(expression); var dataServiceContext = this.DataServiceContextCreator.CreateContext(this.DataServiceContextScope, this.workspace.ContextType, this.workspace.ServiceUri); if (this.IsExecuteURI) { // TODO: update this verifier to call ExecuteUriAndCompare if ExecuteURI test parameter is set to true } else { ClientQueryGenerator queryGenerator = new ClientQueryGenerator(new CSharpGenericTypeBuilder()); DataServiceContext clientContext = dataServiceContext.Product as DataServiceContext; CoreLinq.Expression queryLinqExpression = queryGenerator.Generate(resolvedQuery, clientContext); IQueryProvider queryProvider = clientContext.CreateQuery<int>("Set").Provider as IQueryProvider; DataServiceQuery dataServiceQuery = queryProvider.CreateQuery(queryLinqExpression) as DataServiceQuery; this.ResultComparer.EnqueueNextQuery(resolvedQuery); AsyncExecutionContext.EnqueueAsynchronousAction((queryContinuation) => { this.Log.WriteLine(LogLevel.Info, dataServiceQuery.ToString()); QueryValue baselineValue = this.GetBaselineValue(resolvedQuery); DataServiceProtocolVersion maxProtocolVersion = this.workspace.ConceptualModel.GetMaxProtocolVersion(); #if WINDOWS_PHONE DataServiceProtocolVersion maxClientProtocolVersion = DataServiceProtocolVersion.V4; #else DataServiceProtocolVersion maxClientProtocolVersion = ((DSC.DataServiceProtocolVersion)dataServiceContext.MaxProtocolVersion.Product).ToTestEnum(); #endif // Calculate version errors ExpectedClientErrorBaseline clientError = this.LinqToAstoriaErrorCalculator.CalculateExpectedClientVersionError(resolvedQuery, true, maxClientProtocolVersion, maxProtocolVersion); if (clientError != null) { this.Log.WriteLine(LogLevel.Info, "Expected client exception: " + clientError.ExpectedExceptionType.ToString()); } Type queryType = dataServiceQuery.ElementType; MethodInfo genericExecuteMethod = this.ResultComparer.GetType().GetMethod("ExecuteAndCompare").MakeGenericMethod(queryType); genericExecuteMethod.Invoke(this.ResultComparer, new object[] { queryContinuation, this.IsAsync, dataServiceQuery, baselineValue, clientContext, clientError }); }); } }