public static void VerifyLinq(Workspace workspace, ExpNode q, IQueryable results) { //verify if the results are ok before building the URI System.Collections.ArrayList list = new System.Collections.ArrayList(); foreach (object element in results) { list.Add(element); } //UriQueryBuilder ub = new UriQueryBuilder(workspace, ""); // string ruri = ub.Build(q); //System.Uri uri = new Uri(workspace.ServiceUri); // string uriRel = ruri.Substring(ruri.IndexOf("/") + 1); // AstoriaTestLog.WriteLineIgnore(uri.ToString() + uriRel); AstoriaRequest request = workspace.CreateRequest(q); request.Format = SerializationFormatKind.Atom; try { AstoriaResponse response = request.GetResponse(); //response.VerifyHttpStatusCodeOk(response.StatusCode); CommonPayload payload = response.CommonPayload; if (payload.Value != null) { payload.CompareValue(results, false, false); } else { payload.Compare(results); } //AstoriaTestLog.AreEqual(response.ContentType, SerializationFormatKinds.ContentTypeFromKind(response.OriginalRequest.SerializationKind), //"Content-Type does not match Accept header request"); } catch (Exception e) { AstoriaTestLog.FailAndContinue(e); } }
public static void VerifyGet(AstoriaResponse response) { AstoriaRequest request = response.Request; if (request.Query != null) { LinqQueryBuilder linqBuilder = new LinqQueryBuilder(request.Workspace); linqBuilder.Build(request.Query); if (request.URI.Contains("$value")) { CommonPayload payload; // $value queries will sometimes return unexpected 404s due to null values // if we get a 404 unexpectedly, the underlying result must be null if (response.ActualStatusCode == System.Net.HttpStatusCode.NotFound) { payload = request.CommonPayload; } IEnumerable enumerable = linqBuilder.QueryResult; object expectedResult = CommonPayload.GetSingleValueFromIQueryable(linqBuilder.QueryResult, false); ResourceProperty rp = request.GetPropertyFromQuery(); CommonPayload.ComparePrimitiveValuesObjectAndString(expectedResult, rp.Type.ClrType, response.Payload, true, request.Format, false); } else if (request.URI.Contains("$count") || request.URI.Contains("$inlinecount")) { if (request.URI.Contains("$count")) { // Versioning: make sure the server always returns 2.0. VerifySpecificResponseVersion(response, 2, 0); // PlainText payload. try { VerifyStatusCode(response); if (response.Request.ExpectedStatusCode == System.Net.HttpStatusCode.OK) { int countPayload = Int32.Parse(response.Payload); int countBaseline = CommonPayload.CreateList(linqBuilder.QueryResult).Count; AstoriaTestLog.AreEqual(countPayload, countBaseline, "Counts in payload (" + countPayload + ") and baseline (" + countBaseline + ") differ."); } } catch (TestFailedException tfe) { //When the underlying resource has zero elements, the server now throws a 404 error , causing false negatives ValidateCountException(response, request, tfe); } } else { VerifySpecificResponseVersion(response, 2, 0); try { // JSON, Atom or PlainXml ($ref) payload. VerifyStatusCode(response); if (response.Request.ExpectedStatusCode == System.Net.HttpStatusCode.OK) { CommonPayload payload = response.CommonPayload; LinqQueryBuilder baselineLinqBuilder = new LinqQueryBuilder(request.Workspace); baselineLinqBuilder.CountingMode = true; baselineLinqBuilder.Build(request.Query); object baselineElementsCount = CommonPayload.CreateList(baselineLinqBuilder.QueryResult).Count; payload.CompareCountInline(linqBuilder.QueryResult, baselineElementsCount); AstoriaTestLog.WriteLine(linqBuilder.QueryExpression); if (request.URI.Contains("$ref")) { VerifyLinksPayload(request.Workspace, payload, linqBuilder); } } } catch (TestFailedException tfe) { //When the underlying resource has zero elements, the server now throws a 404 error , causing false negatives ValidateCountException(response, request, tfe); } } } else { if (response.ActualStatusCode == System.Net.HttpStatusCode.NoContent && response.Payload == "") { response.Payload = null; // allow result from Linq query and payload to be compared (NoContent is a get to a null Nav prop) } if (response.ActualStatusCode == System.Net.HttpStatusCode.NotFound) { return; } CommonPayload payload = response.CommonPayload; if (request.URI.Contains("$ref")) { VerifyLinksPayload(request.Workspace, payload, linqBuilder); } else if (payload.Resources == null) { if (request.Format == SerializationFormatKind.JSON) { payload.CompareValue(linqBuilder.QueryResult, true, false); } else { payload.CompareValue(linqBuilder.QueryResult, false, false); } } else { payload.Compare(linqBuilder.QueryResult); } } } }