예제 #1
0
        public void GetAvailableChunksReturnsRetryAfterWhenNoNodes()
        {
            var queryParams = new Dictionary <string, string> {
                { "job", "1a85e743-ec8f-4789-afec-97e587a26936" }
            };
            var headers = new Dictionary <string, string> {
                { "Retry-After", "300" }
            };
            var responseContent = ReadResource(EmptyGetAvailableJobChunksResponseResourceName);
            var client          = MockNetwork
                                  .Expecting(HttpVerb.GET, "/_rest_/job_chunk", queryParams, "")
                                  .Returning(HttpStatusCode.OK, responseContent, headers)
                                  .AsClient;

            var      response   = client.GetAvailableJobChunks(new GetAvailableJobChunksRequest(Guid.Parse("1a85e743-ec8f-4789-afec-97e587a26936")));
            TimeSpan?retryValue = null;

            response.Match(
                (ts, jobResponse) => Assert.Fail(),
                () => Assert.Fail(),
                retryAfter => retryValue = retryAfter
                );
            Assert.NotNull(retryValue);
            Assert.AreEqual(TimeSpan.FromMinutes(5), retryValue.Value);
        }
예제 #2
0
        public void TestGetObject()
        {
            var stringResponse = "object contents";

            using (var memoryStream = new MemoryStream())
            {
                var jobId  = Guid.Parse("6f7a31c1-7ddc-46d3-975d-be26d9878493");
                var offset = 10L;
                var expectedQueryParams = new Dictionary <string, string>
                {
                    { "job", "6f7a31c1-7ddc-46d3-975d-be26d9878493" },
                    { "offset", "10" }
                };
                MockNetwork
                .Expecting(HttpVerb.GET, "/bucketName/object", expectedQueryParams, "")
                .Returning(HttpStatusCode.OK, stringResponse, _emptyHeaders)
                .AsClient
                .GetObject(new GetObjectRequest("bucketName", "object", jobId, offset, memoryStream));
                memoryStream.Position = 0L;
                using (var reader = new StreamReader(memoryStream))
                {
                    Assert.AreEqual(stringResponse, reader.ReadToEnd());
                }
            }
        }
예제 #3
0
        public void GetAvailableChunksReturnsJobWhenSuccess()
        {
            var queryParams = new Dictionary <string, string> {
                { "job", "1a85e743-ec8f-4789-afec-97e587a26936" }
            };
            var responseContent = ReadResource(GetAvailableJobChunksResponseResourceName);
            var client          = MockNetwork
                                  .Expecting(HttpVerb.GET, "/_rest_/job_chunk", queryParams, "")
                                  .Returning(HttpStatusCode.OK, responseContent, new Dictionary <string, string> {
                { "retry-after", "123" }
            })
                                  .AsClient;

            var         response  = client.GetAvailableJobChunks(new GetAvailableJobChunksRequest(Guid.Parse("1a85e743-ec8f-4789-afec-97e587a26936")));
            TimeSpan    timeSpan  = TimeSpan.MinValue;
            JobResponse jobChunks = null;

            response.Match(
                (ts, jobResponse) => { timeSpan = ts; jobChunks = jobResponse; },
                () => Assert.Fail(),
                retryAfter => Assert.Fail()
                );
            Assert.NotNull(jobChunks);
            var expectedNodeIds = new[]
            {
                Guid.Parse("a02053b9-0147-11e4-8d6a-002590c1177c"),
                Guid.Parse("95e97010-8e70-4733-926c-aeeb21796848")
            };

            CollectionAssert.AreEqual(expectedNodeIds, jobChunks.ObjectLists.Select(chunk => chunk.NodeId.Value));
            Assert.AreEqual(TimeSpan.FromSeconds(123), timeSpan);
        }
예제 #4
0
        public void TestGetService()
        {
            var responseContent = "<ListAllMyBucketsResult><Owner><ID>ryan</ID><DisplayName>ryan</DisplayName></Owner><Buckets><Bucket><Name>testBucket2</Name><CreationDate>2013-12-11T23:20:09</CreationDate></Bucket><Bucket><Name>bulkTest</Name><CreationDate>2013-12-11T23:20:09</CreationDate></Bucket><Bucket><Name>bulkTest1</Name><CreationDate>2013-12-11T23:20:09</CreationDate></Bucket><Bucket><Name>bulkTest2</Name><CreationDate>2013-12-11T23:20:09</CreationDate></Bucket><Bucket><Name>bulkTest3</Name><CreationDate>2013-12-11T23:20:09</CreationDate></Bucket><Bucket><Name>bulkTest4</Name><CreationDate>2013-12-11T23:20:09</CreationDate></Bucket><Bucket><Name>bulkTest5</Name><CreationDate>2013-12-11T23:20:09</CreationDate></Bucket><Bucket><Name>bulkTest6</Name><CreationDate>2013-12-11T23:20:09</CreationDate></Bucket><Bucket><Name>testBucket3</Name><CreationDate>2013-12-11T23:20:09</CreationDate></Bucket><Bucket><Name>testBucket1</Name><CreationDate>2013-12-11T23:20:09</CreationDate></Bucket><Bucket><Name>testbucket</Name><CreationDate>2013-12-11T23:20:09</CreationDate></Bucket></Buckets></ListAllMyBucketsResult>";
            var expectedBuckets = new[] {
                new { Key = "testBucket2", CreationDate = "2013-12-11T23:20:09" },
                new { Key = "bulkTest", CreationDate = "2013-12-11T23:20:09" },
                new { Key = "bulkTest1", CreationDate = "2013-12-11T23:20:09" },
                new { Key = "bulkTest2", CreationDate = "2013-12-11T23:20:09" },
                new { Key = "bulkTest3", CreationDate = "2013-12-11T23:20:09" },
                new { Key = "bulkTest4", CreationDate = "2013-12-11T23:20:09" },
                new { Key = "bulkTest5", CreationDate = "2013-12-11T23:20:09" },
                new { Key = "bulkTest6", CreationDate = "2013-12-11T23:20:09" },
                new { Key = "testBucket3", CreationDate = "2013-12-11T23:20:09" },
                new { Key = "testBucket1", CreationDate = "2013-12-11T23:20:09" },
                new { Key = "testbucket", CreationDate = "2013-12-11T23:20:09" }
            };

            var response = MockNetwork
                           .Expecting(HttpVerb.GET, "/", _emptyQueryParams, "")
                           .Returning(HttpStatusCode.OK, responseContent, _emptyHeaders)
                           .AsClient
                           .GetService(new GetServiceRequest());

            Assert.AreEqual("ryan", response.Owner.DisplayName);
            Assert.AreEqual("ryan", response.Owner.Id);

            Assert.AreEqual(expectedBuckets.Length, response.Buckets.Count);
            for (var i = 0; i < expectedBuckets.Length; i++)
            {
                Assert.AreEqual(expectedBuckets[i].Key, response.Buckets[i].Name);
                Assert.AreEqual(expectedBuckets[i].CreationDate, response.Buckets[i].CreationDate);
            }
        }
예제 #5
0
 public void TestGetWorseService()
 {
     MockNetwork
     .Expecting(HttpVerb.GET, "/", _emptyQueryParams, "")
     .Returning(HttpStatusCode.OK, "", _emptyHeaders)
     .AsClient
     .GetService(new GetServiceRequest());
 }
예제 #6
0
 public void TestGetBadBucket()
 {
     MockNetwork
     .Expecting(HttpVerb.GET, "/bucketName", _emptyQueryParams, "")
     .Returning(HttpStatusCode.BadRequest, "", _emptyHeaders)
     .AsClient
     .GetBucket(new GetBucketRequest("bucketName"));
 }
예제 #7
0
 public void TestDeleteObject()
 {
     MockNetwork
     .Expecting(HttpVerb.DELETE, "/bucketName/my/file.txt", _emptyQueryParams, "")
     .Returning(HttpStatusCode.NoContent, "", _emptyHeaders)
     .AsClient
     .DeleteObject(new DeleteObjectRequest("bucketName", "my/file.txt"));
 }
예제 #8
0
 public void TestPutBucket()
 {
     MockNetwork
     .Expecting(HttpVerb.PUT, "/bucketName", _emptyQueryParams, "")
     .Returning(HttpStatusCode.OK, "", _emptyHeaders)
     .AsClient
     .PutBucket(new PutBucketRequest("bucketName"));
 }
예제 #9
0
        public void TestGetJob()
        {
            var stringResponse = ReadResource(JobResponseResourceName);
            var client         = MockNetwork
                                 .Expecting(HttpVerb.GET, "/_rest_/job/1a85e743-ec8f-4789-afec-97e587a26936", _emptyQueryParams, "")
                                 .Returning(HttpStatusCode.OK, stringResponse, _emptyHeaders)
                                 .AsClient;

            CheckJobResponse(client.GetJob(new GetJobRequest(Guid.Parse("1a85e743-ec8f-4789-afec-97e587a26936"))));
        }
예제 #10
0
        public void TestGetJobList()
        {
            var responseContent = "<Jobs><Job BucketName=\"bucketName\" JobId=\"a4a586a1-cb80-4441-84e2-48974e982d51\" Priority=\"NORMAL\" RequestType=\"PUT\" StartDate=\"2014-05-22T18:24:00.000Z\" Status=\"IN_PROGRESS\"/></Jobs>";
            var client          = MockNetwork
                                  .Expecting(HttpVerb.GET, "/_rest_/job", new Dictionary <string, string>(), "")
                                  .Returning(HttpStatusCode.OK, responseContent, _emptyHeaders)
                                  .AsClient;

            var jobs = client.GetJobList(new GetJobListRequest()).Jobs.ToList();

            Assert.AreEqual(1, jobs.Count);
            CheckJobInfo(jobs[0]);
        }
예제 #11
0
 public static IMockNetworkWithExpectation Expecting(
     HttpVerb verb,
     string path,
     IDictionary<string, string> queryParams,
     string requestContent)
 {
     var mock = new MockNetwork();
     mock._verb = verb;
     mock._path = path;
     mock._queryParams = queryParams;
     mock._requestContent = requestContent;
     return mock;
 }
예제 #12
0
        public static IMockNetworkWithExpectation Expecting(
            HttpVerb verb,
            string path,
            IDictionary <string, string> queryParams,
            string requestContent)
        {
            var mock = new MockNetwork();

            mock._verb           = verb;
            mock._path           = path;
            mock._queryParams    = queryParams;
            mock._requestContent = requestContent;
            return(mock);
        }
예제 #13
0
        public void GetPhysicalPlacementReturnsPartialDetails()
        {
            var requestString = "<Objects><Object Name=\"o1\" /><Object Name=\"o2\" /><Object Name=\"o3\" /><Object Name=\"o4\" /></Objects>";
            var queryParams   = new Dictionary <string, string>
            {
                { "operation", "get_physical_placement" },
            };
            var responseContent = ReadResource(GetPhysicalPlacementResponseResourceName);
            var client          = MockNetwork
                                  .Expecting(HttpVerb.PUT, "/_rest_/bucket/test_bucket", queryParams, requestString)
                                  .Returning(HttpStatusCode.OK, responseContent, _emptyHeaders)
                                  .AsClient;

            var result = client.GetAggregatePhysicalPlacement(new GetAggregatePhysicalPlacementRequest("test_bucket", new[] { "o1", "o2", "o3", "o4" }));

            CollectionAssert.AreEqual(new[] { _testTape }, result.Tapes.ToArray(), new TapeComparer());
        }
예제 #14
0
        public void TestPutObject()
        {
            var stringRequest       = "object content";
            var jobId               = Guid.Parse("e5d4adce-e170-4915-ba04-595fab30df81");
            var offset              = 10L;
            var expectedQueryParams = new Dictionary <string, string>
            {
                { "job", "e5d4adce-e170-4915-ba04-595fab30df81" },
                { "offset", "10" }
            };

            MockNetwork
            .Expecting(HttpVerb.PUT, "/bucketName/object", expectedQueryParams, stringRequest)
            .Returning(HttpStatusCode.OK, stringRequest, _emptyHeaders)
            .AsClient
            .PutObject(new PutObjectRequest("bucketName", "object", jobId, offset, HelpersForTest.StringToStream(stringRequest)));
        }
예제 #15
0
        public void AllocateChunkReturnsChunkGoneWhen404()
        {
            var queryParams = new Dictionary <string, string> {
                { "operation", "allocate" }
            };
            var client = MockNetwork
                         .Expecting(HttpVerb.PUT, "/_rest_/job_chunk/f58370c2-2538-4e78-a9f8-e4d2676bdf44", queryParams, "")
                         .Returning(HttpStatusCode.NotFound, "", _emptyHeaders)
                         .AsClient;
            var response    = client.AllocateJobChunk(new AllocateJobChunkRequest(Guid.Parse("f58370c2-2538-4e78-a9f8-e4d2676bdf44")));
            var chunkIsGone = false;

            response.Match(
                chunk => Assert.Fail(),
                retryAfter => Assert.Fail(),
                () => chunkIsGone = true
                );
            Assert.IsTrue(chunkIsGone);
        }
예제 #16
0
        public void TestGetCompletedJob()
        {
            var stringResponse = ReadResource(CompletedJobResponseResourceName);
            var client         = MockNetwork
                                 .Expecting(HttpVerb.GET, "/_rest_/job/350225fb-ec92-4456-a09d-5ffb7c7830bb", _emptyQueryParams, "")
                                 .Returning(HttpStatusCode.OK, stringResponse, _emptyHeaders)
                                 .AsClient;
            var jobId = Guid.Parse("350225fb-ec92-4456-a09d-5ffb7c7830bb");
            var job   = client.GetJob(new GetJobRequest(jobId));

            Assert.AreEqual("avid-bucket", job.BucketName);
            Assert.AreEqual(ChunkOrdering.InOrder, job.ChunkOrder);
            Assert.AreEqual(jobId, job.JobId);
            CollectionAssert.AreEqual(Enumerable.Empty <Node>(), job.Nodes);
            CollectionAssert.AreEqual(Enumerable.Empty <JobObjectList>(), job.ObjectLists);
            Assert.AreEqual("NORMAL", job.Priority);
            Assert.AreEqual("PUT", job.RequestType);
            Assert.AreEqual(new DateTime(2015, 5, 5, 17, 9, 30, 0, DateTimeKind.Utc), job.StartDate.ToUniversalTime());
            Assert.AreEqual(JobStatus.COMPLETED, job.Status);
        }
예제 #17
0
        public void GetAvailableChunksReturnsJobGoneWhen404()
        {
            var queryParams = new Dictionary <string, string> {
                { "job", "1a85e743-ec8f-4789-afec-97e587a26936" }
            };
            var client = MockNetwork
                         .Expecting(HttpVerb.GET, "/_rest_/job_chunk", queryParams, "")
                         .Returning(HttpStatusCode.NotFound, "", _emptyHeaders)
                         .AsClient;

            var response   = client.GetAvailableJobChunks(new GetAvailableJobChunksRequest(Guid.Parse("1a85e743-ec8f-4789-afec-97e587a26936")));
            var wasJobGone = false;

            response.Match(
                (ts, jobResponse) => Assert.Fail(),
                () => wasJobGone = true,
                retryAfter => Assert.Fail()
                );
            Assert.IsTrue(wasJobGone);
        }
예제 #18
0
        private void RunBulkTest(
            string operation,
            Func <IDs3Client, List <Ds3Object>, JobResponse> makeCall,
            IDictionary <string, string> additionalQueryParams)
        {
            var files = new[] {
                new { Key = "client00obj000000-8000000", Size = 8192000000L },
                new { Key = "client00obj000001-8000000", Size = 8192000000L },
                new { Key = "client00obj000002-8000000", Size = 8192000000L },
                new { Key = "client00obj000003-8000000", Size = 8192000000L },
                new { Key = "client00obj000004-8000000", Size = 8192000000L },
                new { Key = "client00obj000005-8000000", Size = 8192000000L },
                new { Key = "client00obj000006-8000000", Size = 8192000000L },
                new { Key = "client00obj000007-8000000", Size = 8192000000L },
                new { Key = "client00obj000008-8000000", Size = 8192000000L },
                new { Key = "client00obj000009-8000000", Size = 8192000000L }
            };

            var stringRequest = operation == "start_bulk_get"
                ? "<Objects><Object Name=\"client00obj000000-8000000\" /><Object Name=\"client00obj000001-8000000\" /><Object Name=\"client00obj000002-8000000\" /><Object Name=\"client00obj000003-8000000\" /><Object Name=\"client00obj000004-8000000\" /><Object Name=\"client00obj000005-8000000\" /><Object Name=\"client00obj000006-8000000\" /><Object Name=\"client00obj000007-8000000\" /><Object Name=\"client00obj000008-8000000\" /><Object Name=\"client00obj000009-8000000\" /></Objects>"
                : "<Objects><Object Name=\"client00obj000000-8000000\" Size=\"8192000000\" /><Object Name=\"client00obj000001-8000000\" Size=\"8192000000\" /><Object Name=\"client00obj000002-8000000\" Size=\"8192000000\" /><Object Name=\"client00obj000003-8000000\" Size=\"8192000000\" /><Object Name=\"client00obj000004-8000000\" Size=\"8192000000\" /><Object Name=\"client00obj000005-8000000\" Size=\"8192000000\" /><Object Name=\"client00obj000006-8000000\" Size=\"8192000000\" /><Object Name=\"client00obj000007-8000000\" Size=\"8192000000\" /><Object Name=\"client00obj000008-8000000\" Size=\"8192000000\" /><Object Name=\"client00obj000009-8000000\" Size=\"8192000000\" /></Objects>";
            var stringResponse = ReadResource(JobResponseResourceName);

            var inputObjects = files.Select(f => new Ds3Object(f.Key, f.Size)).ToList();

            var queryParams = new Dictionary <string, string>()
            {
                { "operation", operation }
            };

            foreach (var kvp in additionalQueryParams)
            {
                queryParams.Add(kvp.Key, kvp.Value);
            }
            var client = MockNetwork
                         .Expecting(HttpVerb.PUT, "/_rest_/bucket/bucket8192000000", queryParams, stringRequest)
                         .Returning(HttpStatusCode.OK, stringResponse, _emptyHeaders)
                         .AsClient;

            CheckJobResponse(makeCall(client, inputObjects));
        }
예제 #19
0
        public void AllocateChunkReturnsRetryWhen503AndHeader()
        {
            var queryParams = new Dictionary <string, string> {
                { "operation", "allocate" }
            };
            var headers = new Dictionary <string, string> {
                { "Retry-After", "300" }
            };
            var client = MockNetwork
                         .Expecting(HttpVerb.PUT, "/_rest_/job_chunk/f58370c2-2538-4e78-a9f8-e4d2676bdf44", queryParams, "")
                         .Returning(HttpStatusCode.ServiceUnavailable, "", headers)
                         .AsClient;
            var      response    = client.AllocateJobChunk(new AllocateJobChunkRequest(Guid.Parse("f58370c2-2538-4e78-a9f8-e4d2676bdf44")));
            TimeSpan?retryResult = null;

            response.Match(
                chunk => Assert.Fail(),
                retryAfter => retryResult = retryAfter,
                Assert.Fail
                );
            Assert.NotNull(retryResult);
            Assert.AreEqual(TimeSpan.FromMinutes(5), retryResult.Value);
        }
예제 #20
0
        public void AllocateChunkReturnsChunkWithNodeWhenAllocated()
        {
            var responseContent = ReadResource(AllocateJobChunkResponseResourceName);
            var queryParams     = new Dictionary <string, string> {
                { "operation", "allocate" }
            };
            var client = MockNetwork
                         .Expecting(HttpVerb.PUT, "/_rest_/job_chunk/f58370c2-2538-4e78-a9f8-e4d2676bdf44", queryParams, "")
                         .Returning(HttpStatusCode.OK, responseContent, _emptyHeaders)
                         .AsClient;
            var           response    = client.AllocateJobChunk(new AllocateJobChunkRequest(Guid.Parse("f58370c2-2538-4e78-a9f8-e4d2676bdf44")));
            JobObjectList chunkResult = null;

            response.Match(
                chunk => chunkResult = chunk,
                retryAfter => Assert.Fail(),
                Assert.Fail
                );
            Assert.NotNull(chunkResult);
            Assert.AreEqual(Guid.Parse("a02053b9-0147-11e4-8d6a-002590c1177c"), chunkResult.NodeId);
            Assert.AreEqual(Guid.Parse("f58370c2-2538-4e78-a9f8-e4d2676bdf44"), chunkResult.ChunkId);
            Assert.AreEqual(0, chunkResult.ChunkNumber);
            Assert.AreEqual(14, chunkResult.Objects.Count());
        }
예제 #21
0
 public static IMockNetworkWithExpectation Expecting(
     HttpVerb verb,
     string path,
     IDictionary<string, string> queryParams,
     IDictionary<string, string> requestHeaders,
     string requestContent)
 {
     var mock = new MockNetwork
     {
         _verb = verb,
         _path = path,
         _queryParams = queryParams,
         _requestHeaders = requestHeaders,
         _requestContent = requestContent
     };
     return mock;
 }
예제 #22
0
        public void TestGetBucket()
        {
            var xmlResponse = "<ListBucketResult><Name>remoteTest16</Name><Prefix/><Marker/><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated><Contents><Key>user/hduser/gutenberg/20417.txt.utf-8</Key><LastModified>2014-01-03T13:26:47.000Z</LastModified><ETag>NOTRETURNED</ETag><Size>674570</Size><StorageClass>STANDARD</StorageClass><Owner><ID>ryan</ID><DisplayName>ryan</DisplayName></Owner></Contents><Contents><Key>user/hduser/gutenberg/5000.txt.utf-8</Key><LastModified>2014-01-03T13:26:47.000Z</LastModified><ETag>NOTRETURNED</ETag><Size>1423803</Size><StorageClass>STANDARD</StorageClass><Owner><ID>ryan</ID><DisplayName>ryan</DisplayName></Owner></Contents><Contents><Key>user/hduser/gutenberg/4300.txt.utf-8</Key><LastModified>2014-01-03T13:26:47.000Z</LastModified><ETag>NOTRETURNED</ETag><Size>1573150</Size><StorageClass>STANDARD</StorageClass><Owner><ID>ryan</ID><DisplayName>ryan</DisplayName></Owner></Contents></ListBucketResult>";
            var expected    = new {
                Name        = "remoteTest16",
                Prefix      = "",
                Marker      = "",
                MaxKeys     = 1000,
                IsTruncated = false,
                Objects     = new[] {
                    new {
                        Key          = "user/hduser/gutenberg/20417.txt.utf-8",
                        LastModified = DateTime.Parse("2014-01-03T13:26:47.000Z"),
                        ETag         = "NOTRETURNED",
                        Size         = 674570,
                        StorageClass = "STANDARD",
                        Owner        = new { ID = "ryan", DisplayName = "ryan" }
                    },
                    new {
                        Key          = "user/hduser/gutenberg/5000.txt.utf-8",
                        LastModified = DateTime.Parse("2014-01-03T13:26:47.000Z"),
                        ETag         = "NOTRETURNED",
                        Size         = 1423803,
                        StorageClass = "STANDARD",
                        Owner        = new { ID = "ryan", DisplayName = "ryan" }
                    },
                    new {
                        Key          = "user/hduser/gutenberg/4300.txt.utf-8",
                        LastModified = DateTime.Parse("2014-01-03T13:26:47.000Z"),
                        ETag         = "NOTRETURNED",
                        Size         = 1573150,
                        StorageClass = "STANDARD",
                        Owner        = new { ID = "ryan", DisplayName = "ryan" }
                    }
                }
            };

            var response = MockNetwork
                           .Expecting(HttpVerb.GET, "/remoteTest16", _emptyQueryParams, "")
                           .Returning(HttpStatusCode.OK, xmlResponse, _emptyHeaders)
                           .AsClient
                           .GetBucket(new GetBucketRequest("remoteTest16"));

            Assert.AreEqual(expected.Name, response.Name);
            Assert.AreEqual(expected.Prefix, response.Prefix);
            Assert.AreEqual(expected.Marker, response.Marker);
            Assert.AreEqual(expected.MaxKeys, response.MaxKeys);
            Assert.AreEqual(expected.IsTruncated, response.IsTruncated);

            var responseObjects = response.Objects.ToList();

            Assert.AreEqual(expected.Objects.Length, responseObjects.Count);
            for (var i = 0; i < expected.Objects.Length; i++)
            {
                Assert.AreEqual(expected.Objects[i].Key, responseObjects[i].Name);
                Assert.AreEqual(expected.Objects[i].LastModified, responseObjects[i].LastModified);
                Assert.AreEqual(expected.Objects[i].ETag, responseObjects[i].Etag);
                Assert.AreEqual(expected.Objects[i].Size, responseObjects[i].Size);
                Assert.AreEqual(expected.Objects[i].StorageClass, responseObjects[i].StorageClass);
                Assert.AreEqual(expected.Objects[i].Owner.ID, responseObjects[i].Owner.Id);
                Assert.AreEqual(expected.Objects[i].Owner.DisplayName, responseObjects[i].Owner.DisplayName);
            }
        }