public ICompletes <IEntry <string> > ReadOne()
        {
            // Simulate failed read of one entry
            IEntry <string> entry         = null;
            var             gapIds        = _reader.DetectGaps(entry, _offset, 1);
            var             gappedEntries = new GappedEntries <string>(new List <IEntry <string> >(), gapIds, CompletesEventually());

            _reader.ReadGaps(gappedEntries, 3, TimeSpan.FromMilliseconds(10), ReadIds);
            _offset++;

            return((ICompletes <IEntry <string> >)Completes());
        }
        public ICompletes <List <IEntry <string> > > ReadNext(int count)
        {
            var entries = new List <IEntry <string> >();

            for (var i = 0; i < count; i++)
            {
                // every 3rd entry is loaded successfully
                if (i % 3 == 0)
                {
                    var entry = new TextEntry((_offset + i).ToString(), typeof(object), 1, $"Entry_{_offset}{i}");
                    entries.Add(entry);
                }
            }

            var gapIds        = _reader.DetectGaps(entries, _offset, count);
            var gappedEntries = new GappedEntries <string>(entries, gapIds, CompletesEventually());

            _offset += count;
            _reader.ReadGaps(gappedEntries, 3, TimeSpan.FromMilliseconds(10), ReadIds);

            return((ICompletes <List <IEntry <string> > >)Completes());
        }