summaryrefslogtreecommitdiff
path: root/tests/t3_inode_cache.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/t3_inode_cache.py')
-rw-r--r--tests/t3_inode_cache.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/tests/t3_inode_cache.py b/tests/t3_inode_cache.py
new file mode 100644
index 0000000..b1d8814
--- /dev/null
+++ b/tests/t3_inode_cache.py
@@ -0,0 +1,99 @@
+'''
+t2_inode_cache.py - this file is part of S3QL (http://s3ql.googlecode.com)
+
+Copyright (C) 2008-2010 Nikolaus Rath <Nikolaus@rath.org>
+
+This program can be distributed under the terms of the GNU LGPL.
+'''
+
+from __future__ import division, print_function
+
+
+from s3ql import inode_cache
+from s3ql.common import create_tables, init_tables
+from s3ql.database import Connection
+from _common import TestCase
+import unittest2 as unittest
+import time
+import tempfile
+
+class cache_tests(TestCase):
+
+ def setUp(self):
+ self.dbfile = tempfile.NamedTemporaryFile()
+ self.db = Connection(self.dbfile.name)
+ create_tables(self.db)
+ init_tables(self.db)
+ self.cache = inode_cache.InodeCache(self.db)
+
+ def tearDown(self):
+ self.cache.destroy()
+
+ def test_create(self):
+ attrs = {'mode': 784,
+ 'refcount': 3,
+ 'uid': 7,
+ 'gid': 2,
+ 'size': 34674,
+ 'target': 'foobar',
+ 'rdev': 11,
+ 'atime': time.time(),
+ 'ctime': time.time(),
+ 'mtime': time.time() }
+
+ inode = self.cache.create_inode(**attrs)
+
+ for key in attrs.keys():
+ self.assertEqual(attrs[key], getattr(inode, key))
+
+ self.assertTrue(self.db.has_val('SELECT 1 FROM inodes WHERE id=?',
+ (inode.id,)))
+
+
+ def test_del(self):
+ attrs = {'mode': 784,
+ 'refcount': 3,
+ 'uid': 7,
+ 'target': 'foobar',
+ 'gid': 2,
+ 'size': 34674,
+ 'rdev': 11,
+ 'atime': time.time(),
+ 'ctime': time.time(),
+ 'mtime': time.time() }
+ inode = self.cache.create_inode(**attrs)
+ del self.cache[inode.id]
+ self.assertFalse(self.db.has_val('SELECT 1 FROM inodes WHERE id=?', (inode.id,)))
+ self.assertRaises(KeyError, self.cache.__delitem__, inode.id)
+
+ def test_get(self):
+ attrs = {'mode': 784,
+ 'refcount': 3,
+ 'uid': 7,
+ 'gid': 2,
+ 'target': 'foobar',
+ 'size': 34674,
+ 'rdev': 11,
+ 'atime': time.time(),
+ 'ctime': time.time(),
+ 'mtime': time.time() }
+ inode = self.cache.create_inode(**attrs)
+ self.assertEqual(inode, self.cache[inode.id])
+
+ self.db.execute('DELETE FROM inodes WHERE id=?', (inode.id,))
+ # Entry should still be in cache
+ self.assertEqual(inode, self.cache[inode.id])
+
+ # Now it should be out of the cache
+ for _ in xrange(inode_cache.CACHE_SIZE + 1):
+ dummy = self.cache[self.cache.create_inode(**attrs).id]
+
+ self.assertRaises(KeyError, self.cache.__getitem__, inode.id)
+
+
+
+def suite():
+ return unittest.makeSuite(cache_tests)
+
+if __name__ == "__main__":
+ unittest.main()