Exemple #1
0
        public void MoveNext_WithTree1_FirstMoveNextIsTrue()
        {
            AddEntries1();
            var ee = new EntryEnumerator(EStore);

            Assert.That(ee.MoveNext(), Is.True);
        }
Exemple #2
0
        public void MoveNext_WithTree1_AfterSecondMoveNextReturnsFalse()
        {
            AddEntries1();
            var ee = new EntryEnumerator(EStore);

            ee.MoveNext();

            Assert.That(ee.MoveNext(), Is.False);
        }
Exemple #3
0
        public void MoveNext_WithTree1_AfterMoveNextCurrentHasFirstEntry()
        {
            AddEntries1();
            var ee = new EntryEnumerator(EStore);

            ee.MoveNext();

            Assert.That(ee.Current.Index, Is.EqualTo(File1Index), "Did not get File1Index entry.");
        }
Exemple #4
0
        public void MoveNext_WithTree1_AfterSecondMoveNextCurrentNull()
        {
            AddEntries1();
            var ee = new EntryEnumerator(EStore);

            ee.MoveNext();
            ee.MoveNext();

            Assert.That(ee.Current, Is.Null);
        }
        private int _OnReadDirectory(string path, IntPtr buf, IntPtr filler,
                                     long offset, IntPtr fi, IntPtr stbuf)
        {
            Trace.WriteLine($"_OnReadDirectory {path}");

            Errno errno = 0;

            try
            {
                if (offset == 0)
                {
                    GetDirectoryEnumerator(path, fi, out offset, out errno);
                }
                if (errno != 0)
                {
                    return(Interop.ConvertErrno(errno));
                }

                EntryEnumerator entries = null;
                lock (directoryLock)
                {
                    string key = offset.ToString();
                    if (directoryReaders.ContainsKey(key))
                    {
                        entries = directoryReaders[key];
                    }
                }

                // FUSE will invoke _OnReadDirectory at least twice, but if
                // there were very few entries then the enumerator will get
                // cleaned up during the first call, so this is (1) expected,
                // and (2) ignorable.
                if (entries == null)
                {
                    return(0);
                }

                bool cleanup = FillEntries(filler, buf, stbuf, offset, entries);

                if (cleanup)
                {
                    entries.Dispose();
                    lock (directoryLock)
                    {
                        directoryReaders.Remove(offset.ToString());
                    }
                }
            }
            catch (Exception e)
            {
                Trace.WriteLine(e.ToString());
                errno = Errno.EIO;
            }
            return(Interop.ConvertErrno(errno));
        }
Exemple #6
0
        public void MoveNext_WithTree2_FourthMoveNextReturnsFalse()
        {
            AddEntries1();
            AddEntries2();
            var ee = new EntryEnumerator(EStore);

            ee.MoveNext();
            ee.MoveNext();
            ee.MoveNext();

            Assert.That(ee.MoveNext(), Is.False, "Fouth MoveNext() true.");
        }
Exemple #7
0
        public void MoveNext_WithTree3_AfterFourMoveNextReturnsFourthEntry()
        {
            AddEntries1();
            AddEntries2();
            AddEntries3();
            var ee = new EntryEnumerator(EStore);

            ee.MoveNext();
            ee.MoveNext();
            ee.MoveNext();
            ee.MoveNext();

            Assert.That(ee.Current.Index, Is.EqualTo(File3Index), "Did not get File3Index entry.");
        }
Exemple #8
0
        public void MoveNext_WithTree3_FifthMoveNextReturnsFalse()
        {
            AddEntries1();
            AddEntries2();
            AddEntries3();
            var ee = new EntryEnumerator(EStore);

            ee.MoveNext();
            ee.MoveNext();
            ee.MoveNext();
            ee.MoveNext();

            Assert.That(ee.MoveNext(), Is.False, "Fifth MoveNext() True,");
        }
Exemple #9
0
        public void PrintPathsHaveHash2_WithTree4_A()
        {
            AddEntriesX4();

            var ee = new EntryEnumerator(EStore);

            Assert.That(ee.MoveNext(), Is.True, "t1");
            Assert.That(ee.Current.Index, Is.EqualTo(File1Index), "Did not get Dir2Index entry.");
            Assert.That(ee.MoveNext(), Is.True, "t2");
            Assert.That(ee.Current.Index, Is.EqualTo(Dir2Index), "Did not get File1Index entry.");
            Assert.That(ee.MoveNext(), Is.True, "t3");
            Assert.That(ee.Current.Index, Is.EqualTo(Dir5Index), "Did not get File4Dir5IndexIndex entry.");
            Assert.That(ee.MoveNext(), Is.False, "t6");

            EStore.PrintPathsHaveHash2();
        }
Exemple #10
0
 private bool FillEntries(
     IntPtr filler,
     IntPtr buf,
     IntPtr stbuf,
     long offset,
     EntryEnumerator entries)
 {
     while (entries.MoveNext())
     {
         DirectoryEntry entry  = entries.Current;
         IntPtr         _stbuf = IntPtr.Zero;
         int            r      = Interop.adaptor_invoke_filler(filler, buf, entry.Name, _stbuf, offset);
         if (r != 0)
         {
             entries.Repeat = true;
             return(false);
         }
     }
     return(true);
 }
Exemple #11
0
        public void MoveNext_WithTree_CurrentIsNullBeforeMoveNext()
        {
            var ee = new EntryEnumerator(EStore);

            Assert.That(ee.Current, Is.Null);
        }
Exemple #12
0
        public void MoveNext_NoRootEntries_FirstMoveNextFalse()
        {
            var ee = new EntryEnumerator(EStore);

            Assert.That(ee.MoveNext(), Is.False);
        }