Ejemplo n.º 1
0
        //---------------------------------------------------------------------
        // Constructs AstoriaRequest and sets.
        //---------------------------------------------------------------------
        private BlobsRequest(Workspace w, SerializationFormatKind format, RequestVerb verb, string uri, HttpStatusCode expectedStatusCode) : base(w)
        {
            // Common settings for MLEs and MRs.
            base.IsBlobRequest = true;
            base.Verb = verb;
            base.ExpectedStatusCode = expectedStatusCode;

            // Construct request URI.
            if (uri.Contains("(*)"))
            {
                // Replace (*) with random key.
                string relativeURI = uri.Remove(0, w.ServiceUri.Length + 1);
                ResourceContainer container = w.ServiceContainer.ResourceContainers[relativeURI.Substring(0, relativeURI.IndexOf("(*)"))];
                KeyExpression key = null;
                try { key = w.GetRandomExistingKey(container, container.BaseType); } catch(Exception e) { AstoriaTestLog.Skip("Unable to get random key"); }
                base.Query = ContainmentUtil.BuildCanonicalQuery(key);
                base.URI += relativeURI.Substring(relativeURI.IndexOf("(*)") + 3);
            }
            else
            {
                // Deterministic URI.
                base.URI = uri;
            }

            LastURI = base.URI;
        }
Ejemplo n.º 2
0
 //Constructor
 public QueriesModel(Workspace workspace, SerializationFormatKind kind, string queryType)
     : base()
 {
     _workspace = workspace;
     _kind      = kind;
     _queryType = queryType;
 }
Ejemplo n.º 3
0
 //Constructor
 public QueryModel(Workspace workspace, SerializationFormatKind kind, QueryModel parent)
     : base( parent )
     {
     _workspace = workspace;
     _kind = kind;
     _parent = parent;
     }
Ejemplo n.º 4
0
        public static AstoriaRequest BuildInsert(Workspace workspace, ResourceContainer container, ResourceType type,
                                                 HttpStatusCode expectedStatusCode, SerializationFormatKind format)
        {
            KeyExpression createdKey;

            return(BuildInsert(workspace, container, type, expectedStatusCode, format, out createdKey));
        }
Ejemplo n.º 5
0
        //---------------------------------------------------------------------
        // Constructs AstoriaRequest and sets.
        //---------------------------------------------------------------------
        private BlobsRequest(Workspace w, SerializationFormatKind format, RequestVerb verb, string uri, HttpStatusCode expectedStatusCode) : base(w)
        {
            // Common settings for MLEs and MRs.
            base.IsBlobRequest      = true;
            base.Verb               = verb;
            base.ExpectedStatusCode = expectedStatusCode;

            // Construct request URI.
            if (uri.Contains("(*)"))
            {
                // Replace (*) with random key.
                string            relativeURI = uri.Remove(0, w.ServiceUri.Length + 1);
                ResourceContainer container   = w.ServiceContainer.ResourceContainers[relativeURI.Substring(0, relativeURI.IndexOf("(*)"))];
                KeyExpression     key         = null;
                try { key = w.GetRandomExistingKey(container, container.BaseType); } catch (Exception e) { AstoriaTestLog.Skip("Unable to get random key"); }
                base.Query = ContainmentUtil.BuildCanonicalQuery(key);
                base.URI  += relativeURI.Substring(relativeURI.IndexOf("(*)") + 3);
            }
            else
            {
                // Deterministic URI.
                base.URI = uri;
            }

            LastURI = base.URI;
        }
Ejemplo n.º 6
0
        //---------------------------------------------------------------------
        // Constructs request to MR.
        //---------------------------------------------------------------------
        public static BlobsRequest MRR(Workspace w, SerializationFormatKind format, RequestVerb verb, string payload, HttpStatusCode expectedStatusCode, params string[] URI)
        {
            string       uri = URI.Length == 0 ? LastURI : URI[0];
            BlobsRequest rq  = new BlobsRequest(w, format, verb, uri, expectedStatusCode);

            // Specific request properties.
            rq.Format      = SerializationFormatKind.PlainText;
            rq.ContentType = "audio/mp3";
            rq.Accept      = (verb == RequestVerb.Get ? "*/*" : SerializationFormatKinds.ContentTypeFromKind(format));
            rq.Payload     = payload;

            // Append $value, if needed.
            if (uri.StartsWith("$") || uri.EndsWith(")"))
            {
                rq.URI += "/$value";

                // Expect dummy ETags from stream provider.
                byte[] hash = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(System.Text.Encoding.ASCII.GetBytes(rq.URI));
                if ((hash[0] & 3) > 1)
                {
                    rq.ETagHeaderExpected = true;
                }
            }

            return(rq);
        }
Ejemplo n.º 7
0
 //Constructor
 public QueryModel(Workspace workspace, SerializationFormatKind kind, QueryModel parent)
     : base(parent)
 {
     _workspace = workspace;
     _kind      = kind;
     _parent    = parent;
 }
Ejemplo n.º 8
0
 //Constructor
 public QueriesModel(Workspace workspace, SerializationFormatKind kind, string queryType)
     : base()
 {
     _workspace = workspace;
     _kind = kind;
     _queryType = queryType;
 }
Ejemplo n.º 9
0
 //---------------------------------------------------------------------
 public static BlobsPayload Parse(SerializationFormatKind format, AstoriaResponse response)
 {
     switch (format)
     {
         case SerializationFormatKind.Atom: return new BlobsPayload.Atom(response.Payload);
         case SerializationFormatKind.JSON: return new BlobsPayload.JSON(response.Payload);
         default:
             AstoriaTestLog.FailAndThrow("Unknown serialization format kind: " + format.ToString());
             return null;
     }
 }
Ejemplo n.º 10
0
        //---------------------------------------------------------------------
        // Constructs request to MLE.
        //---------------------------------------------------------------------
        public static BlobsRequest MLE(Workspace w, SerializationFormatKind format, RequestVerb verb, BlobsPayload payload, HttpStatusCode expectedStatusCode, params string[] URI)
        {
            string uri = URI.Length == 0 ? LastURI : URI[0];
            BlobsRequest rq = new BlobsRequest(w, format, verb, uri, expectedStatusCode);

            // Specific request properties.
            rq.Format = format;
            rq.ContentType = SerializationFormatKinds.ContentTypeFromKind(format);
            rq.Accept = rq.ContentType;
            rq.Payload = (payload != null ? payload.ToString() : null);

            return rq;
        }
Ejemplo n.º 11
0
        //---------------------------------------------------------------------
        public static BlobsPayload Parse(SerializationFormatKind format, AstoriaResponse response)
        {
            switch (format)
            {
            case SerializationFormatKind.Atom: return(new BlobsPayload.Atom(response.Payload));

            case SerializationFormatKind.JSON: return(new BlobsPayload.JSON(response.Payload));

            default:
                AstoriaTestLog.FailAndThrow("Unknown serialization format kind: " + format.ToString());
                return(null);
            }
        }
Ejemplo n.º 12
0
        //---------------------------------------------------------------------
        // Constructs request to MLE.
        //---------------------------------------------------------------------
        public static BlobsRequest MLE(Workspace w, SerializationFormatKind format, RequestVerb verb, BlobsPayload payload, HttpStatusCode expectedStatusCode, params string[] URI)
        {
            string       uri = URI.Length == 0 ? LastURI : URI[0];
            BlobsRequest rq  = new BlobsRequest(w, format, verb, uri, expectedStatusCode);

            // Specific request properties.
            rq.Format      = format;
            rq.ContentType = SerializationFormatKinds.ContentTypeFromKind(format);
            rq.Accept      = rq.ContentType;
            rq.Payload     = (payload != null ? payload.ToString() : null);

            return(rq);
        }
Ejemplo n.º 13
0
 public static UpdatePayloadBuilder CreateUpdatePayloadBuilder(Workspace w, SerializationFormatKind format, RequestVerb requestVerb)
 {
     switch (format)
     {
         case SerializationFormatKind.Atom:
         case SerializationFormatKind.Default:
         case SerializationFormatKind.PlainXml:
             return new AtomUpdatePayloadBuilder(w, requestVerb);
         case SerializationFormatKind.JSON:
             return new JsonUpdatePayloadBuilder(w, requestVerb);
         default:
             throw new ArgumentException("Could not create a payload builder for format: " + format.ToString());
     }
 }
Ejemplo n.º 14
0
        public static UpdatePayloadBuilder CreateUpdatePayloadBuilder(Workspace w, SerializationFormatKind format, RequestVerb requestVerb)
        {
            switch (format)
            {
            case SerializationFormatKind.Atom:
            case SerializationFormatKind.Default:
            case SerializationFormatKind.PlainXml:
                return(new AtomUpdatePayloadBuilder(w, requestVerb));

            case SerializationFormatKind.JSON:
                return(new JsonUpdatePayloadBuilder(w, requestVerb));

            default:
                throw new ArgumentException("Could not create a payload builder for format: " + format.ToString());
            }
        }
Ejemplo n.º 15
0
        public static AstoriaRequest BuildInsert(Workspace workspace, ResourceContainer container, ResourceType type,
                                                 HttpStatusCode expectedStatusCode, SerializationFormatKind format, out KeyExpression createdKey)
        {
            KeyedResourceInstance newResource = type.CreateRandomResource(container);

            if (newResource == null)
            {
                newResource = ResourceInstanceUtil.CreateKeyedResourceInstanceByClone(container, type);

                if (newResource == null)
                {
                    createdKey = null;
                    return(null);
                }
            }

            QueryNode query;

            if (!type.Key.Properties.Any(p => p.Facets.ServerGenerated) && newResource.ResourceInstanceKey != null)
            {
                createdKey = newResource.ResourceInstanceKey.CreateKeyExpression(container, type);
                query      = ContainmentUtil.BuildCanonicalQuery(createdKey, true);
            }
            else
            {
                createdKey = null;
                // the key is unknown, must be server generated
                // in this case, lets hope that containment is a non-issue
                query =
                    Query.From(Exp.Variable(container))
                    .Select();
                if (!container.Facets.TopLevelAccess && expectedStatusCode == HttpStatusCode.Created)
                {
                    expectedStatusCode = HttpStatusCode.BadRequest;
                }
            }

            AstoriaRequest request = workspace.CreateRequest();

            request.Verb               = RequestVerb.Post;
            request.Query              = query;
            request.UpdateTree         = newResource;
            request.ExpectedStatusCode = expectedStatusCode;
            request.Format             = format;

            return(request);
        }
Ejemplo n.º 16
0
 /// <summary>Gets a valid MIME type for the specified <paramref name="kind"/>.</summary>
 /// <param name="kind"><see cref="SerializationFormatKind"/> to get MIME type for.</param>
 /// <returns>A valid MIME type for the specified <paramref name="kind"/>.</returns>
 public static string ContentTypeFromKind(SerializationFormatKind kind)
 {
     switch (kind)
     {
         case SerializationFormatKind.JSON: 
             return JsonMimeType;
         case SerializationFormatKind.Atom: 
             return AtomMimeType;
         case SerializationFormatKind.PlainXml:
             return XmlMimeType;
         case SerializationFormatKind.PlainText:
             return MimeTextPlain;
         default:
             Debug.Assert(kind == SerializationFormatKind.Default);
             return AtomMimeType;
     }
 }
Ejemplo n.º 17
0
        //---------------------------------------------------------------------
        // Constructs request with $ref. Assumes parent(*)/child URI format.
        //---------------------------------------------------------------------
        public static BlobsRequest LNK(Workspace w, SerializationFormatKind format, RequestVerb verb, string payload, HttpStatusCode expectedStatusCode, params string[] URI)
        {
            string       uri = (URI.Length == 0 ? LastURI : URI[0]);
            BlobsRequest rq  = new BlobsRequest(w, format, verb, uri, expectedStatusCode);

            // Specific request properties.
            rq.Format      = format;
            rq.ContentType = SerializationFormatKinds.ContentTypeFromKind(format == SerializationFormatKind.JSON ? SerializationFormatKind.JSON : SerializationFormatKind.PlainXml);
            rq.Accept      = rq.ContentType;

            // Adjust link in payload, if needed.
            if (!string.IsNullOrEmpty(payload))
            {
                rq.Payload = string.Format(format == SerializationFormatKind.JSON ?
                                           @"{{""odata.id"": ""{0}"" }}" :
                                           @"<ref xmlns='http://docs.oasis-open.org/odata/ns/metadata' id=""{0}"" />",
                                           payload);
            }

            return(rq);
        }
Ejemplo n.º 18
0
        /// <summary>Gets a valid MIME type for the specified <paramref name="kind"/>.</summary>
        /// <param name="kind"><see cref="SerializationFormatKind"/> to get MIME type for.</param>
        /// <returns>A valid MIME type for the specified <paramref name="kind"/>.</returns>
        public static string ContentTypeFromKind(SerializationFormatKind kind)
        {
            switch (kind)
            {
            case SerializationFormatKind.JSON:
                return(JsonMimeType);

            case SerializationFormatKind.Atom:
                return(AtomMimeType);

            case SerializationFormatKind.PlainXml:
                return(XmlMimeType);

            case SerializationFormatKind.PlainText:
                return(MimeTextPlain);

            default:
                Debug.Assert(kind == SerializationFormatKind.Default);
                return(AtomMimeType);
            }
        }
Ejemplo n.º 19
0
        //---------------------------------------------------------------------
        // Constructs request to MR.
        //---------------------------------------------------------------------
        public static BlobsRequest MRR(Workspace w, SerializationFormatKind format, RequestVerb verb, string payload, HttpStatusCode expectedStatusCode, params string[] URI)
        {
            string uri = URI.Length == 0 ? LastURI : URI[0];
            BlobsRequest rq = new BlobsRequest(w, format, verb, uri, expectedStatusCode);

            // Specific request properties.
            rq.Format = SerializationFormatKind.PlainText;
            rq.ContentType = "audio/mp3";
            rq.Accept = (verb == RequestVerb.Get ? "*/*" : SerializationFormatKinds.ContentTypeFromKind(format));
            rq.Payload = payload;

            // Append $value, if needed.
            if (uri.StartsWith("$") || uri.EndsWith(")"))
            {
                rq.URI += "/$value";

                // Expect dummy ETags from stream provider.
                byte[] hash = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(System.Text.Encoding.ASCII.GetBytes(rq.URI));
                if ((hash[0] & 3) > 1)
                    rq.ETagHeaderExpected = true;
            }

            return rq;
        }
Ejemplo n.º 20
0
 public static AstoriaRequest BuildInsert(Workspace workspace, ResourceContainer container, ResourceType type,
     HttpStatusCode expectedStatusCode, SerializationFormatKind format)
 {
     KeyExpression createdKey;
     return BuildInsert(workspace, container, type, expectedStatusCode, format, out createdKey);
 }
Ejemplo n.º 21
0
 public static AstoriaRequest BuildUpdate(Workspace workspace, ResourceContainer container, ResourceType resourceType,
     bool replace, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
 {
     KeyExpression modifiedKey;
     return BuildUpdate(workspace, container, resourceType, replace, expectedStatusCode, format, out modifiedKey);
 }
Ejemplo n.º 22
0
        public static AstoriaRequest BuildGet(Workspace workspace, ResourceContainer container, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
        {
            if (!container.Facets.TopLevelAccess && expectedStatusCode == HttpStatusCode.OK)
                expectedStatusCode = HttpStatusCode.BadRequest;

            QueryNode query = Query.From(Exp.Variable(container)).Select();

            return BuildGet(workspace, query, expectedStatusCode, format);
        }
Ejemplo n.º 23
0
        public static AstoriaRequest BuildGet(Workspace workspace, QueryNode query, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
        {
            AstoriaRequest request = workspace.CreateRequest();

            request.Verb = RequestVerb.Get;
            request.Query = query;
            request.ExpectedStatusCode = expectedStatusCode;
            request.Format = format;

            return request;
        }
Ejemplo n.º 24
0
        public static AstoriaRequest BuildRandomRequest(Workspace workspace, RequestVerb verb, SerializationFormatKind format)
        {
            IEnumerable <ResourceContainer> safeContainers =
                workspace.ServiceContainer.ResourceContainers
                .Where(c => IsSafeOperation(verb, c));

            if (verb != RequestVerb.Get)
            {
                safeContainers = safeContainers.Where(c => c.ResourceTypes.Any(t => IsSafeOperation(verb, c, t)));
            }

            fxList <ResourceContainer> containers = new fxList <ResourceContainer>(safeContainers);

            if (!containers.Any())
            {
                return(null);
            }

            AstoriaRequest request = null;

            while (request == null && containers.Any())
            {
                ResourceContainer container = null;
                ResourceType      type      = null;
                KeyExpression     key       = null;

                while (container == null && containers.Any())
                {
                    container = containers.Choose();

                    if (verb == RequestVerb.Get)
                    {
                        key = workspace.GetRandomExistingKey(container);
                        if (key == null)
                        {
                            containers.Remove(container);
                            container = null;
                        }
                    }
                    else
                    {
                        fxList <ResourceType> types = new fxList <ResourceType>(container.ResourceTypes.Where(t => IsSafeOperation(verb, container, t)));

                        if (!types.Any())
                        {
                            containers.Remove(container);
                            container = null;
                        }

                        if (verb != RequestVerb.Delete)
                        {
                            type = types.Choose();
                        }
                        else
                        {
                            while (key == null && types.Any())
                            {
                                type = types.Choose();
                                key  = workspace.GetRandomExistingKey(container, type);
                                if (key == null)
                                {
                                    types.Remove(type);
                                }
                            }

                            if (key == null)
                            {
                                containers.Remove(container);
                                container = null;
                            }
                        }
                    }
                }

                // if we ran out of containers before finding one that would work
                //
                if (container == null)
                {
                    return(null);
                }

                // if the Build___ method returns null, we'll come back around with a different container/key
                //
                switch (verb)
                {
                case RequestVerb.Get:
                    request = BuildGet(workspace, key, HttpStatusCode.OK, format);
                    break;

                case RequestVerb.Post:
                    request = BuildInsert(workspace, container, type, HttpStatusCode.Created, format);
                    break;

                case RequestVerb.Put:
                case RequestVerb.Patch:
                    request = BuildUpdate(workspace, container, type, (verb == RequestVerb.Put), HttpStatusCode.NoContent, format);
                    break;

                case RequestVerb.Delete:
                    request = BuildDelete(workspace, key, HttpStatusCode.NoContent, format);
                    break;

                default:
                    throw new ArgumentException("Unsupported verb: " + verb.ToString());
                }
            }

            // might be null, but we did our best
            //
            return(request);
        }
Ejemplo n.º 25
0
 public static AstoriaRequest BuildUpdate(Workspace workspace, ResourceContainer container, ResourceType resourceType,
                                          bool replace, HttpStatusCode expectedStatusCode, SerializationFormatKind format, out KeyExpression modifiedKey)
 {
     modifiedKey = workspace.GetRandomExistingKey(container, resourceType);
     return(BuildUpdate(workspace, modifiedKey, replace, expectedStatusCode, format));
 }
Ejemplo n.º 26
0
        public static AstoriaRequest BuildDelete(Workspace workspace, KeyExpressions existingKeys, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
        {
            KeyExpression deletedKey;

            return(BuildDelete(workspace, existingKeys, expectedStatusCode, format, out deletedKey));
        }
Ejemplo n.º 27
0
        public static void ComparePrimitiveValuesObjectAndString(object expected, Type expectedType, string actual, bool valueUri, SerializationFormatKind serializationKind, bool throwOnError)
        {
            object actualObject = DeserializeStringToObject(actual, expectedType, valueUri, serializationKind);
            string expectedStr  = "null";

            if (expected != null)
            {
                expectedStr = AstoriaUnitTests.Data.TypeData.XmlValueFromObject(expected);
            }

            string errorMessage = String.Format("Error Primitive Value of type:{0} not equal: \r\n\tExpected:\t{1} \r\n\tActual:\t{2}", expectedType.Name, expectedStr, actual);

            //Fixups
            if (expected != null && expectedType.Equals(typeof(string)))
            {
                if (actualObject != null)
                {
                    actualObject = (actualObject as string).Trim();
                }
                expected = (expected as string).Trim();
            }

            if (expectedType == typeof(System.Xml.Linq.XElement))
            {
                expectedStr = null;
                if (expected != null)
                {
                    System.Xml.Linq.XElement xElement = expected as System.Xml.Linq.XElement;
                    expectedStr = xElement.ToString();
                }
                AstoriaTestLog.AreEqual(expectedStr, actual, errorMessage);
            }
            else if (expectedType == typeof(Single) || expectedType == typeof(Double))
            {
                if (serializationKind == SerializationFormatKind.JSON)
                {
                    if (expectedType == typeof(Double))
                    {
                        Double d;
                        if (expected != null)
                        {
                            d           = Convert.ToDouble(expected);
                            expectedStr = d.ToString("r", System.Globalization.CultureInfo.InvariantCulture);
                        }
                        if (actual != null)
                        {
                            if (double.TryParse(actual, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out d))
                            {
                                actual = d.ToString("r", CultureInfo.InvariantCulture.NumberFormat);
                            }
                        }
                    }
                    else if (expectedType == typeof(Single))
                    {
                        Single s;
                        if (expected != null)
                        {
                            s           = Convert.ToSingle(expected);
                            expectedStr = s.ToString("r", System.Globalization.CultureInfo.InvariantCulture);
                        }
                        if (actual != null)
                        {
                            if (Single.TryParse(actual, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out s))
                            {
                                actual = s.ToString("r", CultureInfo.InvariantCulture.NumberFormat);
                            }
                        }
                    }
                }
                //Fixup
                if (expectedStr == "null")
                {
                    expectedStr = null;
                }
                if (expectedStr != null && actual != null)
                {
                    expectedStr = expectedStr.Trim();
                    actual      = actual.Trim();
                }
                if (throwOnError)
                {
                    if (expectedStr != null)
                    {
                        AstoriaTestLog.Compare(expectedStr.Equals(actual), errorMessage);
                    }
                    else
                    {
                        AstoriaTestLog.Compare(actual == null, errorMessage);
                    }
                }
                else
                {
                    AstoriaTestLog.AreEqual(expectedStr, actual, errorMessage);
                }
            }
#if !ClientSKUFramework
            //For some reason byte[] comparision is not working correctly
            else if ((expectedType == typeof(byte[]) || expectedType == typeof(System.Data.Linq.Binary)) && valueUri)
            {
                string expectedBytesStr = null;
                if (expected == null)
                {
                    expectedBytesStr = null;
                }
                else if (expectedType == typeof(byte[]))
                {
                    expectedBytesStr = (new System.Text.UTF8Encoding()).GetString((byte[])expected);
                }


                else if (expectedType == typeof(System.Data.Linq.Binary))
                {
                    System.Data.Linq.Binary binary = expected as System.Data.Linq.Binary;
                    expectedBytesStr = (new System.Text.UTF8Encoding()).GetString((byte[])binary.ToArray());
                }

                if (throwOnError)
                {
                    if (expected == null)
                    {
                        AstoriaTestLog.Compare(null == actual, errorMessage);
                    }
                    else
                    {
                        AstoriaTestLog.Compare(expectedBytesStr.Equals(actual), errorMessage);
                    }
                }
                else
                {
                    AstoriaTestLog.AreEqual(expectedBytesStr, actual, errorMessage);
                }
            }
#endif

            else if (expectedType == typeof(byte[]) && valueUri == false)
            {
                AreBytesEqual((byte[])expected, (byte[])actualObject, throwOnError);
            }
            else
            {
                if (throwOnError)
                {
                    bool objectsEqual = true;
                    if (expected == null)
                    {
                        if (actualObject != null)
                        {
                            objectsEqual = false;
                        }
                    }
                    else
                    {
                        objectsEqual = expected.Equals(actualObject);
                    }
                    AstoriaTestLog.Compare(objectsEqual, errorMessage);
                }
                else
                {
                    AstoriaTestLog.AreEqual(expected, actualObject, errorMessage);
                }
            }
        }
Ejemplo n.º 28
0
        public static void ComparePrimitiveValuesStringAndString(string expected, Type expectedType, string actual, bool valueUri, SerializationFormatKind serializationKind, bool throwOnError)
        {
            object expectedObject = DeserializeStringToObject(expected, expectedType, valueUri, serializationKind);

            ComparePrimitiveValuesObjectAndString(expectedObject, expectedType, actual, valueUri, serializationKind, throwOnError);
        }
Ejemplo n.º 29
0
        internal static object DeserializeStringToObject(string val, Type valType, bool valueUri, SerializationFormatKind serializationKind)
        {
            object rehydratedObject = null;

            if (val == null)
            {
                rehydratedObject = null;
            }
            else
            {
                if (valueUri)
                {
                    if (valType == typeof(byte[]))
                    {
                        if (val != null)
                        {
                            return(new UTF8Encoding().GetBytes(val));
                        }
                        return(null);
                    }
#if !ClientSKUFramework
                    else if (valType == typeof(System.Data.Linq.Binary))
                    {
                        byte[] bytes = new UTF8Encoding().GetBytes(val);
                        System.Data.Linq.Binary binary = new System.Data.Linq.Binary(bytes);
                        return(binary);
                    }
#endif

                    else
                    {
                        rehydratedObject = AstoriaUnitTests.Data.TypeData.ObjectFromXmlValue(val, valType);
                    }
                }
                else if (serializationKind == SerializationFormatKind.JSON)
                {
                    //Special case that seems to be failing
                    if (valType == typeof(DateTime) && val.Equals("null", StringComparison.InvariantCulture))
                    {
                        rehydratedObject = null;
                    }
                    else
                    {
                        rehydratedObject = System.Data.Test.Astoria.Util.JsonPrimitiveTypesUtil.StringToPrimitive(val, valType);
                    }
                }
                else //xml
                {
                    rehydratedObject = AstoriaUnitTests.Data.TypeData.ObjectFromXmlValue(val, valType);
                }
            }
            return(rehydratedObject);
        }
Ejemplo n.º 30
0
 public static AstoriaRequest BuildDelete(Workspace workspace, KeyExpressions existingKeys, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
 {
     KeyExpression deletedKey;
     return BuildDelete(workspace, existingKeys, expectedStatusCode, format, out deletedKey);
 }
Ejemplo n.º 31
0
        public static AstoriaRequest BuildUpdate(Workspace workspace, KeyExpression modifiedKey, bool replace, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
        {
            if (modifiedKey == null)
                return null;

            ResourceContainer container = modifiedKey.ResourceContainer;
            ResourceType resourceType = modifiedKey.ResourceType;

            if (replace && resourceType.Properties.Any(p => p.Facets.IsIdentity))
                return null;

            string keyString = UriQueryBuilder.CreateKeyString(modifiedKey, false);
            if (expectedStatusCode == HttpStatusCode.NoContent && (keyString.Contains("/") || keyString.Contains(Uri.EscapeDataString("/"))))
                expectedStatusCode = HttpStatusCode.BadRequest;

            QueryNode query = ContainmentUtil.BuildCanonicalQuery(modifiedKey);

            List<ResourceInstanceProperty> properties = new List<ResourceInstanceProperty>();

            string[] propertiesToSkip;
            //Skip because setting the birthdate to a random Datetime won't work due to contraints
            //if (resourceType.Name == "Employees")
            //    propertiesToSkip = new string[] { "BirthDate" };
            ////Skipping because it has some weird constraint on it
            //else if (resourceType.Name == "Order_Details")
            //    propertiesToSkip = new string[] { "Discount" };
            //else
            //    propertiesToSkip = new string[] { };

            foreach (ResourceProperty resourceProperty in resourceType.Properties.OfType<ResourceProperty>()
                .Where(p => !p.IsNavigation
                    && p.PrimaryKey == null
                    && !p.Facets.IsIdentity))
                    //&& !p.IsComplexType
                    //&& !propertiesToSkip.Contains(p.Name)))
            {
                properties.Add(resourceProperty.CreateRandomResourceInstanceProperty());
            }

            if (!properties.Any())
                return null;

            KeyedResourceInstance resourceInstance = new KeyedResourceInstance(
                ResourceInstanceKey.ConstructResourceInstanceKey(modifiedKey),
                properties.ToArray());

            AstoriaRequest request = workspace.CreateRequest();

            request.Verb = replace ? RequestVerb.Put : RequestVerb.Patch;
            request.Query = query;
            request.UpdateTree = resourceInstance;
            request.ExpectedStatusCode = expectedStatusCode;
            request.Format = format;

            if (modifiedKey.ResourceType.Properties.Any(p => p.Facets.ConcurrencyModeFixed))
            {
                request.Headers[ConcurrencyUtil.IfMatchHeader] = modifiedKey.ETag;
                request.ETagHeaderExpected = true;
            }

            return request;
        }
Ejemplo n.º 32
0
 public static AstoriaRequest BuildUpdate(Workspace workspace, ResourceContainer container, ResourceType resourceType,
     bool replace, HttpStatusCode expectedStatusCode, SerializationFormatKind format, out KeyExpression modifiedKey)
 {
     modifiedKey = workspace.GetRandomExistingKey(container, resourceType);
     return BuildUpdate(workspace, modifiedKey, replace, expectedStatusCode, format);
 }
Ejemplo n.º 33
0
        public static AstoriaRequest BuildDelete(Workspace workspace, KeyExpression toDelete, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
        {
            QueryNode query = ContainmentUtil.BuildCanonicalQuery(toDelete);

            AstoriaRequest request = workspace.CreateRequest();

            request.Verb               = RequestVerb.Delete;
            request.Query              = query;
            request.Format             = format;
            request.ExpectedStatusCode = expectedStatusCode;

            if (toDelete.ResourceType.Properties.Any(p => p.Facets.ConcurrencyModeFixed))
            {
                request.Headers[ConcurrencyUtil.IfMatchHeader] = toDelete.ETag;
            }

            return(request);
        }
Ejemplo n.º 34
0
        public static AstoriaRequest BuildDelete(Workspace workspace, KeyExpressions existingKeys, HttpStatusCode expectedStatusCode, SerializationFormatKind format, out KeyExpression deletedKey)
        {
            deletedKey = existingKeys.Choose();
            if (deletedKey == null)
            {
                AstoriaTestLog.WriteLine("Cannot build DELETE request, no existing keys");
                return(null);
            }
            existingKeys.Remove(deletedKey);

            return(BuildDelete(workspace, deletedKey, expectedStatusCode, format));
        }
Ejemplo n.º 35
0
        public static AstoriaRequest BuildDelete(Workspace workspace, KeyExpressions existingKeys, HttpStatusCode expectedStatusCode, SerializationFormatKind format, out KeyExpression deletedKey)
        {
            deletedKey = existingKeys.Choose();
            if (deletedKey == null)
            {
                AstoriaTestLog.WriteLine("Cannot build DELETE request, no existing keys");
                return null;
            }
            existingKeys.Remove(deletedKey);

            return BuildDelete(workspace, deletedKey, expectedStatusCode, format);
        }
Ejemplo n.º 36
0
        public static AstoriaRequest BuildUpdate(Workspace workspace, KeyExpression modifiedKey, bool replace, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
        {
            if (modifiedKey == null)
            {
                return(null);
            }

            ResourceContainer container    = modifiedKey.ResourceContainer;
            ResourceType      resourceType = modifiedKey.ResourceType;

            if (replace && resourceType.Properties.Any(p => p.Facets.IsIdentity))
            {
                return(null);
            }

            string keyString = UriQueryBuilder.CreateKeyString(modifiedKey, false);

            if (expectedStatusCode == HttpStatusCode.NoContent && (keyString.Contains("/") || keyString.Contains(Uri.EscapeDataString("/"))))
            {
                expectedStatusCode = HttpStatusCode.BadRequest;
            }

            QueryNode query = ContainmentUtil.BuildCanonicalQuery(modifiedKey);

            List <ResourceInstanceProperty> properties = new List <ResourceInstanceProperty>();

            string[] propertiesToSkip;
            //Skip because setting the birthdate to a random Datetime won't work due to contraints
            //if (resourceType.Name == "Employees")
            //    propertiesToSkip = new string[] { "BirthDate" };
            ////Skipping because it has some weird constraint on it
            //else if (resourceType.Name == "Order_Details")
            //    propertiesToSkip = new string[] { "Discount" };
            //else
            //    propertiesToSkip = new string[] { };

            foreach (ResourceProperty resourceProperty in resourceType.Properties.OfType <ResourceProperty>()
                     .Where(p => !p.IsNavigation &&
                            p.PrimaryKey == null &&
                            !p.Facets.IsIdentity))
            //&& !p.IsComplexType
            //&& !propertiesToSkip.Contains(p.Name)))
            {
                properties.Add(resourceProperty.CreateRandomResourceInstanceProperty());
            }

            if (!properties.Any())
            {
                return(null);
            }

            KeyedResourceInstance resourceInstance = new KeyedResourceInstance(
                ResourceInstanceKey.ConstructResourceInstanceKey(modifiedKey),
                properties.ToArray());

            AstoriaRequest request = workspace.CreateRequest();

            request.Verb               = replace ? RequestVerb.Put : RequestVerb.Patch;
            request.Query              = query;
            request.UpdateTree         = resourceInstance;
            request.ExpectedStatusCode = expectedStatusCode;
            request.Format             = format;

            if (modifiedKey.ResourceType.Properties.Any(p => p.Facets.ConcurrencyModeFixed))
            {
                request.Headers[ConcurrencyUtil.IfMatchHeader] = modifiedKey.ETag;
                request.ETagHeaderExpected = true;
            }

            return(request);
        }
Ejemplo n.º 37
0
        public static AstoriaRequest BuildDelete(Workspace workspace, KeyExpression toDelete, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
        {
            QueryNode query = ContainmentUtil.BuildCanonicalQuery(toDelete);

            AstoriaRequest request = workspace.CreateRequest();

            request.Verb = RequestVerb.Delete;
            request.Query = query;
            request.Format = format;
            request.ExpectedStatusCode = expectedStatusCode;

            if (toDelete.ResourceType.Properties.Any(p => p.Facets.ConcurrencyModeFixed))
                request.Headers[ConcurrencyUtil.IfMatchHeader] = toDelete.ETag;

            return request;
        }
Ejemplo n.º 38
0
        public static AstoriaRequest BuildUpdate(Workspace workspace, ResourceContainer container, ResourceType resourceType,
                                                 bool replace, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
        {
            KeyExpression modifiedKey;

            return(BuildUpdate(workspace, container, resourceType, replace, expectedStatusCode, format, out modifiedKey));
        }
Ejemplo n.º 39
0
        public static AstoriaRequest BuildGet(Workspace workspace, ResourceContainer container, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
        {
            if (!container.Facets.TopLevelAccess && expectedStatusCode == HttpStatusCode.OK)
            {
                expectedStatusCode = HttpStatusCode.BadRequest;
            }

            QueryNode query = Query.From(Exp.Variable(container)).Select();

            return(BuildGet(workspace, query, expectedStatusCode, format));
        }
Ejemplo n.º 40
0
        public static AstoriaRequest BuildGet(Workspace workspace, KeyExpression key, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
        {
            QueryNode query = ContainmentUtil.BuildCanonicalQuery(key);

            string keyString = UriQueryBuilder.CreateKeyString(key, false);

            if ((expectedStatusCode == System.Net.HttpStatusCode.OK) && (keyString.Contains("/") || keyString.Contains(Uri.EscapeDataString("/"))))
            {
                expectedStatusCode = System.Net.HttpStatusCode.BadRequest;
            }

            return(BuildGet(workspace, query, expectedStatusCode, format));
        }
Ejemplo n.º 41
0
        public static AstoriaRequest BuildGet(Workspace workspace, QueryNode query, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
        {
            AstoriaRequest request = workspace.CreateRequest();

            request.Verb  = RequestVerb.Get;
            request.Query = query;
            request.ExpectedStatusCode = expectedStatusCode;
            request.Format             = format;

            return(request);
        }
Ejemplo n.º 42
0
        public static AstoriaRequest BuildGet(Workspace workspace, KeyExpression key, HttpStatusCode expectedStatusCode, SerializationFormatKind format)
        {
            QueryNode query = ContainmentUtil.BuildCanonicalQuery(key);

            string keyString = UriQueryBuilder.CreateKeyString(key, false);
            if ((expectedStatusCode == System.Net.HttpStatusCode.OK) && (keyString.Contains("/") || keyString.Contains(Uri.EscapeDataString("/"))))
                expectedStatusCode = System.Net.HttpStatusCode.BadRequest;

            return BuildGet(workspace, query, expectedStatusCode, format);
        }
Ejemplo n.º 43
0
        public static AstoriaRequest BuildInsert(Workspace workspace, ResourceContainer container, ResourceType type,
            HttpStatusCode expectedStatusCode, SerializationFormatKind format, out KeyExpression createdKey)
        {
            KeyedResourceInstance newResource = type.CreateRandomResource(container);
            if (newResource == null)
            {
                newResource = ResourceInstanceUtil.CreateKeyedResourceInstanceByClone(container, type);

                if(newResource == null)
                {
                    createdKey = null;
                    return null;
                }
            }

            QueryNode query;
            if (!type.Key.Properties.Any(p => p.Facets.ServerGenerated) && newResource.ResourceInstanceKey != null)
            {
                createdKey = newResource.ResourceInstanceKey.CreateKeyExpression(container, type);
                query = ContainmentUtil.BuildCanonicalQuery(createdKey, true);
            }
            else
            {
                createdKey = null;
                // the key is unknown, must be server generated
                // in this case, lets hope that containment is a non-issue
                query =
                    Query.From(Exp.Variable(container))
                    .Select();
                if (!container.Facets.TopLevelAccess && expectedStatusCode == HttpStatusCode.Created)
                    expectedStatusCode = HttpStatusCode.BadRequest;
            }

            AstoriaRequest request = workspace.CreateRequest();

            request.Verb = RequestVerb.Post;
            request.Query = query;
            request.UpdateTree = newResource;
            request.ExpectedStatusCode = expectedStatusCode;
            request.Format = format;

            return request;
        }
Ejemplo n.º 44
0
        //---------------------------------------------------------------------
        // Constructs request with $ref. Assumes parent(*)/child URI format.
        //---------------------------------------------------------------------
        public static BlobsRequest LNK(Workspace w, SerializationFormatKind format, RequestVerb verb, string payload, HttpStatusCode expectedStatusCode, params string[] URI)
        {
            string uri = (URI.Length == 0 ? LastURI : URI[0]);
            BlobsRequest rq = new BlobsRequest(w, format, verb, uri, expectedStatusCode);

            // Specific request properties.
            rq.Format = format;
            rq.ContentType = SerializationFormatKinds.ContentTypeFromKind(format == SerializationFormatKind.JSON ? SerializationFormatKind.JSON : SerializationFormatKind.PlainXml);
            rq.Accept = rq.ContentType;
            
            // Adjust link in payload, if needed.
            if (!string.IsNullOrEmpty(payload))
            {
                rq.Payload = string.Format(format == SerializationFormatKind.JSON ?
                    @"{{""odata.id"": ""{0}"" }}" :
                    @"<ref xmlns='http://docs.oasis-open.org/odata/ns/metadata' id=""{0}"" />",
                    payload);
            }

            return rq;
        }
Ejemplo n.º 45
0
        public static AstoriaRequest BuildRandomRequest(Workspace workspace, RequestVerb verb, SerializationFormatKind format)
        {
            IEnumerable<ResourceContainer> safeContainers =
                workspace.ServiceContainer.ResourceContainers
                    .Where(c => IsSafeOperation(verb, c));

            if (verb != RequestVerb.Get)
                safeContainers = safeContainers.Where(c => c.ResourceTypes.Any(t => IsSafeOperation(verb, c, t)));

            fxList<ResourceContainer> containers = new fxList<ResourceContainer>(safeContainers);
            if (!containers.Any())
                return null;

            AstoriaRequest request = null;

            while (request == null && containers.Any())
            {
                ResourceContainer container = null;
                ResourceType type = null;
                KeyExpression key = null;

                while (container == null && containers.Any())
                {
                    container = containers.Choose();

                    if (verb == RequestVerb.Get)
                    {
                        key = workspace.GetRandomExistingKey(container);
                        if (key == null)
                        {
                            containers.Remove(container);
                            container = null;
                        }
                    }
                    else
                    {
                        fxList<ResourceType> types = new fxList<ResourceType>(container.ResourceTypes.Where(t => IsSafeOperation(verb, container, t)));

                        if (!types.Any())
                        {
                            containers.Remove(container);
                            container = null;
                        }

                        if (verb != RequestVerb.Delete)
                            type = types.Choose();
                        else
                        {
                            while (key == null && types.Any())
                            {
                                type = types.Choose();
                                key = workspace.GetRandomExistingKey(container, type);
                                if (key == null)
                                    types.Remove(type);
                            }

                            if (key == null)
                            {
                                containers.Remove(container);
                                container = null;
                            }
                        }
                    }
                }

                // if we ran out of containers before finding one that would work
                //
                if (container == null)
                    return null;

                // if the Build___ method returns null, we'll come back around with a different container/key
                //
                switch (verb)
                {
                    case RequestVerb.Get:
                        request = BuildGet(workspace, key, HttpStatusCode.OK, format);
                        break;

                    case RequestVerb.Post:
                        request = BuildInsert(workspace, container, type, HttpStatusCode.Created, format);
                        break;

                    case RequestVerb.Put:
                    case RequestVerb.Patch:
                        request = BuildUpdate(workspace, container, type, (verb == RequestVerb.Put), HttpStatusCode.NoContent, format);
                        break;

                    case RequestVerb.Delete:
                        request = BuildDelete(workspace, key, HttpStatusCode.NoContent, format);
                        break;

                    default:
                        throw new ArgumentException("Unsupported verb: " + verb.ToString());
                }
            }

            // might be null, but we did our best
            //
            return request;
        }