private bool containsId(List<ObjectResult> objects, ObjectId id)
 {
     foreach (ObjectResult res in objects)
     {
         if (res.Id.Equals(id))
         {
             return true;
         }
     }
     return false;
 }
        public void testWriteAccessToken()
        {
            string dir = rand8char();
            string file = rand8char();
            ObjectPath op = new ObjectPath("/" + dir + "/" + file);
            esu.CreateObjectOnPath(new ObjectPath("/" + dir + "/"), null, null, null, null);

            DateTime expiration = DateTime.UtcNow;
            expiration += TimeSpan.FromMinutes(5);

            SourceType source = new SourceType();
            source.Allow = new string[] { "10.0.0.0/8", "128.0.0.0/8" };
            source.Disallow = new string[] { "1.1.1.1" };

            ContentLengthRangeType range = new ContentLengthRangeType();
            range.From = 0;
            range.To = 1024; // 1KB

            FormFieldType formField1 = new FormFieldType();
            formField1.Name = "x-emc-meta";
            formField1.Optional = true;
            FormFieldType formField2 = new FormFieldType();
            formField2.Name = "x-emc-listable-meta";
            formField2.Optional = true;

            PolicyType policy = new PolicyType();
            policy.Expiration = expiration;
            policy.Source = source;
            policy.MaxDownloads = 2;
            policy.MaxUploads = 1;
            policy.ContentLengthRange = range;
            policy.FormField = new FormFieldType[] { formField1, formField2 };

            Uri tokenUri = esu.CreateAccessToken(op, policy, null);

            // create upload form manually (easiest since we're using HttpWebRequest)
            string content = "Form Upload Test";
            string boundary = "BOUNDARY_1234567890";
            string EOL = "\r\n";
            string payload = "--" + boundary + EOL;
            payload += "Content-Type: text/plain" + EOL;
            payload += "Content-Disposition: form-data; name=\"x-emc-meta\"" + EOL + EOL;
            payload += "color=gray,size=3,foo=bar";
            payload += EOL + "--" + boundary + EOL;
            payload += "Content-Type: text/plain" + EOL;
            payload += "Content-Disposition: form-data; name=\"x-emc-listable-meta\"" + EOL + EOL;
            payload += "listable=";
            payload += EOL + "--" + boundary + EOL;
            payload += "Content-Type: text/plain" + EOL;
            payload += "Content-Disposition: form-data; name=\"data\"; filename=\"foo.txt\"" + EOL + EOL;
            payload += content;
            payload += EOL + "--" + boundary + "--" + EOL;

            WebRequest request = WebRequest.Create(tokenUri);
            request.Method = "POST";
            request.ContentType = "multipart/form-data; boundary=" + boundary;
            new MemoryStream(Encoding.UTF8.GetBytes(payload)).CopyTo(request.GetRequestStream());
            WebResponse response = request.GetResponse();
            Assert.AreEqual(201, (int) (response as HttpWebResponse).StatusCode, "Wrong status code");
            string path = response.Headers["Location"];
            ObjectId oid = new ObjectId(path.Split('/').Last());
            cleanup.Add(oid);
            response.Close();

            // read back object via token
            response = WebRequest.Create(tokenUri).GetResponse();
            Assert.AreEqual(content, new StreamReader(response.GetResponseStream()).ReadToEnd(), "content from token not equal");
            response.Close();

            // read back object via namespace
            Assert.AreEqual(content, Encoding.UTF8.GetString(esu.ReadObject(op, null, null)), "content from namespace not equal");

            esu.DeleteAccessToken(tokenUri);
        }