コード例 #1
0
    def test_does_not_cache_when_no_revision(self, es, copy, ensure_dir):
        def add_es_artifact(binaries):
            binaries["elasticsearch"] = "/path/to/artifact.tar.gz"

        es.fetch.return_value = None
        es.add.side_effect = add_es_artifact

        # no version / revision provided
        renderer = supplier.TemplateRenderer(version=None,
                                             os_name="linux",
                                             arch="x86_64")

        dist_cfg = {
            "runtime.jdk.bundled":
            "true",
            "jdk.bundled.release_url":
            "https://elstc.co/elasticsearch-{{VERSION}}-{{OSNAME}}-{{ARCH}}.tar.gz",
        }
        file_resolver = supplier.ElasticsearchFileNameResolver(
            distribution_config=dist_cfg, template_renderer=renderer)
        cached_supplier = supplier.CachedSourceSupplier(
            distributions_root="/tmp",
            source_supplier=es,
            file_resolver=file_resolver)

        cached_supplier.fetch()
        cached_supplier.prepare()

        binaries = {}

        cached_supplier.add(binaries)

        assert copy.call_count == 0
        assert not cached_supplier.cached
        assert binaries["elasticsearch"] == "/path/to/artifact.tar.gz"
コード例 #2
0
ファイル: supplier_test.py プロジェクト: oobeya-space/rally
    def test_uses_already_cached_artifact(self, es, path_exists):
        # assume that the artifact is already cached
        path_exists.return_value = True
        renderer = supplier.TemplateRenderer(version="abc123",
                                             os_name="linux",
                                             arch="x86_64")

        dist_cfg = {
            "runtime.jdk.bundled":
            "true",
            "jdk.bundled.release_url":
            "https://elstc.co/elasticsearch-{{VERSION}}-{{OSNAME}}-{{ARCH}}.tar.gz"
        }
        file_resolver = supplier.ElasticsearchFileNameResolver(
            distribution_config=dist_cfg, template_renderer=renderer)
        cached_supplier = supplier.CachedSourceSupplier(
            distributions_root="/tmp",
            source_supplier=es,
            file_resolver=file_resolver)

        cached_supplier.fetch()
        cached_supplier.prepare()

        binaries = {}

        cached_supplier.add(binaries)

        self.assertEqual(0, es.fetch.call_count)
        self.assertEqual(0, es.prepare.call_count)
        self.assertEqual(0, es.add.call_count)
        self.assertTrue(cached_supplier.cached)
        self.assertIn("elasticsearch", binaries)
        self.assertEqual("/tmp/elasticsearch-abc123-linux-x86_64.tar.gz",
                         binaries["elasticsearch"])
コード例 #3
0
    def test_does_not_cache_when_no_revision(self, es, copy, ensure_dir):
        def add_es_artifact(binaries):
            binaries["elasticsearch"] = "/path/to/artifact.tar.gz"

        es.fetch.return_value = None
        es.add.side_effect = add_es_artifact

        renderer = supplier.TemplateRenderer(version=None,
                                             os_name="linux",
                                             arch="x86_64")

        cached_supplier = supplier.CachedSourceSupplier(
            distributions_root="/tmp",
            source_supplier=es,
            file_resolver=supplier.ElasticsearchFileNameResolver(
                distribution_config={}, template_renderer=renderer))

        cached_supplier.fetch()
        cached_supplier.prepare()

        binaries = {}

        cached_supplier.add(binaries)

        self.assertEqual(0, copy.call_count)
        self.assertFalse(cached_supplier.cached)
        self.assertIn("elasticsearch", binaries)
コード例 #4
0
ファイル: supplier_test.py プロジェクト: oobeya-space/rally
    def test_caches_artifact(self, es, copy, path_exists, ensure_dir):
        def add_es_artifact(binaries):
            binaries["elasticsearch"] = "/path/to/artifact.tar.gz"

        path_exists.return_value = False

        es.fetch.return_value = "abc123"
        es.add.side_effect = add_es_artifact

        renderer = supplier.TemplateRenderer(version="abc123",
                                             os_name="linux",
                                             arch="x86_64")

        dist_cfg = {
            "runtime.jdk.bundled":
            "true",
            "jdk.bundled.release_url":
            "https://elstc.co/elasticsearch-{{VERSION}}-{{OSNAME}}-{{ARCH}}.tar.gz"
        }

        cached_supplier = supplier.CachedSourceSupplier(
            distributions_root="/tmp",
            source_supplier=es,
            file_resolver=supplier.ElasticsearchFileNameResolver(
                distribution_config=dist_cfg, template_renderer=renderer))
        cached_supplier.fetch()
        cached_supplier.prepare()

        binaries = {}

        cached_supplier.add(binaries)
        # path is cached now
        path_exists.return_value = True

        self.assertEqual(1, copy.call_count, "artifact has been copied")
        self.assertEqual(1, es.add.call_count,
                         "artifact has been added by internal supplier")
        self.assertTrue(cached_supplier.cached)
        self.assertIn("elasticsearch", binaries)

        # simulate a second attempt
        cached_supplier.fetch()
        cached_supplier.prepare()

        binaries = {}
        cached_supplier.add(binaries)

        self.assertEqual(1, copy.call_count,
                         "artifact has not been copied twice")
        # the internal supplier did not get called again as we reuse the cached artifact
        self.assertEqual(1, es.add.call_count,
                         "internal supplier is not called again")
        self.assertTrue(cached_supplier.cached)
コード例 #5
0
ファイル: supplier_test.py プロジェクト: oobeya-space/rally
    def test_does_not_cache_on_copy_error(self, es, copy, path_exists,
                                          ensure_dir):
        def add_es_artifact(binaries):
            binaries["elasticsearch"] = "/path/to/artifact.tar.gz"

        path_exists.return_value = False

        es.fetch.return_value = "abc123"
        es.add.side_effect = add_es_artifact
        copy.side_effect = OSError("no space left on device")

        renderer = supplier.TemplateRenderer(version="abc123",
                                             os_name="linux",
                                             arch="x86_64")

        dist_cfg = {
            "runtime.jdk.bundled":
            "true",
            "jdk.bundled.release_url":
            "https://elstc.co/elasticsearch-{{VERSION}}-{{OSNAME}}-{{ARCH}}.tar.gz"
        }

        cached_supplier = supplier.CachedSourceSupplier(
            distributions_root="/tmp",
            source_supplier=es,
            file_resolver=supplier.ElasticsearchFileNameResolver(
                distribution_config=dist_cfg, template_renderer=renderer))
        cached_supplier.fetch()
        cached_supplier.prepare()

        binaries = {}

        cached_supplier.add(binaries)

        self.assertEqual(1, copy.call_count, "artifact has been copied")
        self.assertEqual(1, es.add.call_count,
                         "artifact has been added by internal supplier")
        self.assertFalse(cached_supplier.cached)
        self.assertIn("elasticsearch", binaries)
        # still the uncached artifact
        self.assertEqual("/path/to/artifact.tar.gz", binaries["elasticsearch"])