public void RangesForRequestsReturnsExpectedLookup() { var result = PartialObjectRangeUtilities.RangesForRequests( _blobs.Select(p => new Blob(p, "bar")).Concat(_blobs.Select(p => new Blob(p, "foo"))), _parts1.Select(p => new Ds3PartialObject(p, "bar")).Concat(_parts2.Select(p => new Ds3PartialObject(p, "foo"))) ); CollectionAssert.AreEqual( ( from cr in _expectedResults1 let blob = new Blob(cr.Context, "bar") orderby blob, cr.Range select new { Blob = blob, cr.Range } ).Concat( from cr in _expectedResults2 let blob = new Blob(cr.Context, "foo") orderby blob, cr.Range select new { Blob = blob, cr.Range } ), ( from grp in result from r in grp orderby grp.Key, r select new { Blob = grp.Key, Range = r } ) ); }
public static IPartialReadJob Create( JobResponse jobResponse, IEnumerable <string> fullObjects, IEnumerable <Ds3PartialObject> partialObjects, ITransferItemSource transferItemSource) { var blobs = Blob.Convert(jobResponse).ToList(); var allItems = partialObjects .Concat(PartialObjectRangeUtilities.ObjectPartsForFullObjects(fullObjects, blobs)) .ToList(); return(new PartialReadJob( jobResponse.BucketName, jobResponse.JobId, transferItemSource, PartialObjectRangeUtilities.RangesForRequests(blobs, allItems), allItems, allItems.Select(po => ContextRange.Create(Range.ByLength(0L, po.Range.Length), po)) )); }