summaryrefslogtreecommitdiff
path: root/morphlib/remoteartifactcache_tests.py
diff options
context:
space:
mode:
authorJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-04-19 16:49:55 +0100
committerJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-04-19 16:51:15 +0100
commit9dcffcaa08dfc40fd49969719fa3b984802fafe5 (patch)
treefc266ceb7f7b3e853814da0ad35196ecf2df4da3 /morphlib/remoteartifactcache_tests.py
parentac0a1bb2491147951e000ce8d4d439b8a2fac7dd (diff)
downloadmorph-9dcffcaa08dfc40fd49969719fa3b984802fafe5.tar.gz
Add RemoteArtifactCache. Move metadata basename code into Artifact.
Diffstat (limited to 'morphlib/remoteartifactcache_tests.py')
-rw-r--r--morphlib/remoteartifactcache_tests.py156
1 files changed, 156 insertions, 0 deletions
diff --git a/morphlib/remoteartifactcache_tests.py b/morphlib/remoteartifactcache_tests.py
new file mode 100644
index 00000000..b7f10450
--- /dev/null
+++ b/morphlib/remoteartifactcache_tests.py
@@ -0,0 +1,156 @@
+# Copyright (C) 2012 Codethink Limited
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+import StringIO
+import unittest
+
+import morphlib
+
+
+class RemoteArtifactCacheTests(unittest.TestCase):
+
+ def setUp(self):
+ morph = morphlib.morph2.Morphology(
+ '''
+ {
+ "chunk": "chunk",
+ "kind": "chunk",
+ "artifacts": {
+ "chunk-runtime": [
+ "usr/bin",
+ "usr/sbin",
+ "usr/lib",
+ "usr/libexec"
+ ],
+ "chunk-devel": [
+ "usr/include"
+ ],
+ "chunk-doc": [
+ "usr/share/doc"
+ ]
+ }
+ }
+ ''')
+ self.source = morphlib.source.Source(
+ 'repo', 'ref', 'sha1', morph, 'chunk.morph')
+ self.runtime_artifact = morphlib.artifact.Artifact(
+ self.source, 'chunk-runtime')
+ self.runtime_artifact.cache_key = 'CHUNK-RUNTIME'
+ self.devel_artifact = morphlib.artifact.Artifact(
+ self.source, 'chunk-devel')
+ self.devel_artifact.cache_key = 'CHUNK-DEVEL'
+ self.doc_artifact = morphlib.artifact.Artifact(
+ self.source, 'chunk-doc')
+ self.doc_artifact.cache_key = 'CHUNK-DOC'
+
+ self.existing_files = set([
+ self.runtime_artifact.basename(),
+ self.devel_artifact.basename(),
+ self.runtime_artifact.metadata_basename('meta'),
+ '%s.%s' % (self.runtime_artifact.cache_key, 'meta'),
+ ])
+
+ self.server_url = 'http://foo.bar:8080'
+ self.cache = morphlib.remoteartifactcache.RemoteArtifactCache(
+ self.server_url)
+ self.cache._has_file = self._has_file
+ self.cache._get_file = self._get_file
+
+ def _has_file(self, filename):
+ return filename in self.existing_files
+
+ def _get_file(self, filename):
+ if filename in self.existing_files:
+ return StringIO.StringIO('%s' % filename)
+ else:
+ raise Exception('foo')
+
+ def test_sets_server_url(self):
+ self.assertEqual(self.cache.server_url, self.server_url)
+
+ def test_has_existing_artifact(self):
+ self.assertTrue(self.cache.has(self.runtime_artifact))
+
+ def test_has_a_different_existing_artifact(self):
+ self.assertTrue(self.cache.has(self.devel_artifact))
+
+ def test_does_not_have_a_non_existent_artifact(self):
+ self.assertFalse(self.cache.has(self.doc_artifact))
+
+ def test_has_existing_artifact_metadata(self):
+ self.assertTrue(self.cache.has_artifact_metadata(
+ self.runtime_artifact, 'meta'))
+
+ def test_does_not_have_non_existent_artifact_metadata(self):
+ self.assertFalse(self.cache.has_artifact_metadata(
+ self.runtime_artifact, 'non-existent-meta'))
+
+ def test_has_existing_source_metadata(self):
+ self.assertTrue(self.cache.has_source_metadata(
+ self.runtime_artifact.source,
+ self.runtime_artifact.cache_key,
+ 'meta'))
+
+ def test_does_not_have_non_existent_source_metadata(self):
+ self.assertFalse(self.cache.has_source_metadata(
+ self.runtime_artifact.source,
+ self.runtime_artifact.cache_key,
+ 'non-existent-meta'))
+
+ def test_get_existing_artifact(self):
+ handle = self.cache.get(self.runtime_artifact)
+ data = handle.read()
+ self.assertEqual(data, self.runtime_artifact.basename())
+
+ def test_get_a_different_existing_artifact(self):
+ handle = self.cache.get(self.devel_artifact)
+ data = handle.read()
+ self.assertEqual(data, self.devel_artifact.basename())
+
+ def test_fails_to_get_a_non_existent_artifact(self):
+ self.assertRaises(morphlib.remoteartifactcache.GetError,
+ self.cache.get, self.doc_artifact)
+
+ def test_get_existing_artifact_metadata(self):
+ handle = self.cache.get_artifact_metadata(
+ self.runtime_artifact, 'meta')
+ data = handle.read()
+ self.assertEqual(
+ data, '%s.%s' % (self.runtime_artifact.basename(), 'meta'))
+
+ def test_fails_to_get_non_existent_artifact_metadata(self):
+ self.assertRaises(
+ morphlib.remoteartifactcache.GetArtifactMetadataError,
+ self.cache.get_artifact_metadata,
+ self.runtime_artifact,
+ 'non-existent-meta')
+
+ def test_get_existing_source_metadata(self):
+ handle = self.cache.get_source_metadata(
+ self.runtime_artifact.source,
+ self.runtime_artifact.cache_key,
+ 'meta')
+ data = handle.read()
+ self.assertEqual(
+ data, '%s.%s' % (self.runtime_artifact.cache_key, 'meta'))
+
+ def test_fails_to_get_non_existent_source_metadata(self):
+ self.assertRaises(
+ morphlib.remoteartifactcache.GetSourceMetadataError,
+ self.cache.get_source_metadata,
+ self.runtime_artifact.source,
+ self.runtime_artifact.cache_key,
+ 'non-existent-meta')