コード例 #1
0
ファイル: fixture.py プロジェクト: lelou6666/epuharness
    def setup_harness(self, *args, **kwargs):

        self.epuharness = EPUHarness(*args, **kwargs)
        if os.path.exists(self.epuharness.pidantic_dir):
            raise Exception("EPUHarness running. Can't run this test")

        self.dashi = self.epuharness.dashi
コード例 #2
0
    def setup(self):

        self.amqp_uri = "memory://test-epuharness"
        self.pidantic_dir = tempfile.mkdtemp()
        self.epuharness = EPUHarness(amqp_uri=self.amqp_uri,
                                     pidantic_dir=self.pidantic_dir)
        self.epuharness._setup_factory()
コード例 #3
0
def setUpModule():
    epuh_persistence = os.environ.get('EPUHARNESS_PERSISTENCE_DIR', '/tmp/SupD/epuharness')
    if os.path.exists(epuh_persistence):
        raise SkipTest("EPUHarness running. Can't run this test")

    global g_epuharness
    exchange = "testexchange-%s" % str(uuid.uuid4())
    sysname = "testsysname-%s" % str(uuid.uuid4())
    g_epuharness = EPUHarness(exchange=exchange, sysname=sysname)
    g_epuharness.start(deployment_str=g_deployment)
コード例 #4
0
ファイル: fixture.py プロジェクト: lelou6666/epuharness
    def setup_harness(self, *args, **kwargs):

        self.epuharness = EPUHarness(*args, **kwargs)
        if os.path.exists(self.epuharness.pidantic_dir):
            raise Exception("EPUHarness running. Can't run this test")

        self.dashi = self.epuharness.dashi
コード例 #5
0
class TestEPUHarness(object):
    def setup(self):

        self.amqp_uri = "memory://test-epuharness"
        self.pidantic_dir = tempfile.mkdtemp()
        self.epuharness = EPUHarness(amqp_uri=self.amqp_uri,
                                     pidantic_dir=self.pidantic_dir)
        self.epuharness._setup_factory()

    def test_start_pd(self):

        pd_name = "testpd"
        engines = {}

        assert not self.epuharness.factory.reload_instances()

        self.epuharness._start_process_dispatcher(pd_name,
                                                  engines,
                                                  exe_name="echo")
        assert len(self.epuharness.factory.reload_instances()) == 1

    def test_start_eeagent(self):

        ee_name = "testeeagent"
        pd_name = "testpd"
        node_name = "somenode"
        launch_type = "fork"

        assert not self.epuharness.factory.reload_instances()

        self.epuharness._start_eeagent(ee_name,
                                       pd_name,
                                       node_name,
                                       launch_type,
                                       exe_name="echo")
        assert len(self.epuharness.factory.reload_instances()) == 1

    def test_announce_node(self):

        raise SkipTest("TODO")

        got_announce = False

        def dt_state(self):
            pass

        dashi = self.epuharness.dashi
        raise Exception("TODO")

    def teardown(self):
        instances = self.epuharness.factory.reload_instances()
        for instance in instances.values():
            instance.cleanup()
        self.epuharness.factory.terminate()
        shutil.rmtree(self.pidantic_dir)
コード例 #6
0
class TestEPUHarness(object):

    def setup(self):

        self.amqp_uri = "memory://test-epuharness"
        self.pidantic_dir = tempfile.mkdtemp()
        self.epuharness = EPUHarness(amqp_uri=self.amqp_uri, pidantic_dir=self.pidantic_dir)
        self.epuharness._setup_factory()

    def test_start_pd(self):

        pd_name = "testpd"
        engines = {}

        assert not self.epuharness.factory.reload_instances()

        self.epuharness._start_process_dispatcher(pd_name, engines, exe_name="echo")
        assert len(self.epuharness.factory.reload_instances()) == 1

    def test_start_eeagent(self):

        ee_name = "testeeagent"
        pd_name = "testpd"
        node_name = "somenode"
        launch_type = "fork"

        assert not self.epuharness.factory.reload_instances()

        self.epuharness._start_eeagent(ee_name, pd_name, node_name,
                launch_type, exe_name="echo")
        assert len(self.epuharness.factory.reload_instances()) == 1

    def test_announce_node(self):

        raise SkipTest("TODO")

        got_announce = False
        def dt_state(self):
            pass
        dashi = self.epuharness.dashi
        raise Exception("TODO")

    def teardown(self):
        instances = self.epuharness.factory.reload_instances()
        for instance in instances.values():
            instance.cleanup()
        self.epuharness.factory.terminate()
        shutil.rmtree(self.pidantic_dir)
コード例 #7
0
ファイル: fixture.py プロジェクト: lelou6666/epuharness
class TestFixture(object):
    """A mixin to provide some helper methods to test classes
    """
    epuharness = None
    libcloud_drivers = None
    dashi = None

    def setup_harness(self, *args, **kwargs):

        self.epuharness = EPUHarness(*args, **kwargs)
        if os.path.exists(self.epuharness.pidantic_dir):
            raise Exception("EPUHarness running. Can't run this test")

        self.dashi = self.epuharness.dashi

    def teardown_harness(self, remove_dir=True):
        if self.epuharness:
            try:
                self.epuharness.stop(remove_dir=remove_dir)
            except Exception:
                log.exception("Error shutting down epuharness!")

        if self.libcloud_drivers:
            for site_name, driver in self.libcloud_drivers.iteritems():
                try:
                    driver.shutdown()
                except Exception:
                    log.exception(
                        "Error shutting down libcloud driver for site %s",
                        site_name)

                try:
                    if driver.sqlite_db:
                        os.remove(driver.sqlite_db)
                except Exception:
                    log.exception("Error removing fake libcloud db: %s",
                                  driver.sqlite_db)

    cleanup_harness = teardown_harness

    def get_clients(self, deployment_str, dashi):
        """returns a dictionary of epu clients, indexed by their topic name
        """

        deployment = parse_deployment(yaml_str=deployment_str)

        clients = {}

        for provisioner_name in deployment.get('provisioners', {}).iterkeys():
            client = ProvisionerClient(dashi, topic=provisioner_name)
            clients[provisioner_name] = client

        for epum_name in deployment.get('epums', {}).iterkeys():
            client = EPUManagementClient(dashi, epum_name)
            clients[epum_name] = client

        for node in deployment.get('nodes', {}).itervalues():
            for eeagent_name in node.get('eeagents', {}).iterkeys():
                client = EEAgentClient(dashi=dashi,
                                       ee_name=eeagent_name,
                                       handle_heartbeat=False)
                clients[eeagent_name] = client

        for pd_name in deployment.get('process-dispatchers', {}).iterkeys():
            client = ProcessDispatcherClient(dashi, pd_name)
            clients[pd_name] = client

        for dt_name in deployment.get('dt_registries', {}).iterkeys():
            client = DTRSClient(dashi, topic=dt_name)
            clients[dt_name] = client

        return clients

    def block_until_ready(self, deployment_str, dashi):
        """Blocks until all of the services in a deployment are contacted
        """

        deployment = parse_deployment(yaml_str=deployment_str)

        for provisioner_name in deployment.get('provisioners', {}).iterkeys():
            provisioner = ProvisionerClient(dashi, topic=provisioner_name)
            self._block_on_call(provisioner.describe_nodes)

        for epum_name in deployment.get('epums', {}).iterkeys():
            epum = EPUManagementClient(dashi, epum_name)
            self._block_on_call(epum.list_domains)

        for node in deployment.get('nodes', {}).itervalues():
            for eeagent_name in node.get('eeagents', {}).iterkeys():
                eeagent = EEAgentClient(dashi=dashi,
                                        ee_name=eeagent_name,
                                        handle_heartbeat=False)
                self._block_on_call(eeagent.dump, kwargs={'rpc': True})

        for pd_name in deployment.get('process-dispatchers', {}).iterkeys():
            pd = ProcessDispatcherClient(dashi, pd_name)
            self._block_on_call(pd.describe_processes)

        for dt_name in deployment.get('dt_registries', {}).iterkeys():
            dtrs = DTRSClient(dashi, topic=dt_name)
            self._block_on_call(dtrs.list_sites)

    def _block_on_call(self, fn_to_block_on, attempts=None, kwargs={}):
        if not attempts:
            attempts = 10

        print "Block on %s" % fn_to_block_on.__name__
        for i in range(0, attempts):
            try:
                fn_to_block_on(**kwargs)
                break
            except timeout:
                continue
            except:
                #call worked, but got some mystery error
                raise
        else:
            try:
                msg = "Wasn't able to call %s.%s" % (
                    fn_to_block_on.im_class.__name__, fn_to_block_on.__name__)
            except AttributeError:  # Not a member of a class
                msg = "Wasn't able to call %s.%s" % fn_to_block_on.__name__
            assert False, msg

    def make_fake_libcloud_site(self,
                                site_name="ec2-fake",
                                needs_elastic_ip=None):
        """makes a fake libcloud site and driver.

        Returns tuple of the site definition, and a libcloud driver instance
        """
        if self.libcloud_drivers is None:
            self.libcloud_drivers = {}

        if needs_elastic_ip is None:
            needs_elastic_ip = False

        if site_name in self.libcloud_drivers:
            driver = self.libcloud_drivers[site_name]

        else:
            fh, fake_libcloud_db = tempfile.mkstemp(prefix="fakelibcloud_db")
            os.close(fh)

            from epu.mocklibcloud import MockEC2NodeDriver
            driver = MockEC2NodeDriver(sqlite_db=fake_libcloud_db)
            self.libcloud_drivers[site_name] = driver

        fake_site = {
            'type': 'mock-ec2',
            'sqlite_db': driver.sqlite_db,
            'needs_elastic_ip': needs_elastic_ip
        }

        return fake_site, driver
コード例 #8
0
    def setup(self):

        self.amqp_uri = "memory://test-epuharness"
        self.pidantic_dir = tempfile.mkdtemp()
        self.epuharness = EPUHarness(amqp_uri=self.amqp_uri, pidantic_dir=self.pidantic_dir)
        self.epuharness._setup_factory()
コード例 #9
0
ファイル: fixture.py プロジェクト: lelou6666/epuharness
class TestFixture(object):
    """A mixin to provide some helper methods to test classes
    """
    epuharness = None
    libcloud_drivers = None
    dashi = None

    def setup_harness(self, *args, **kwargs):

        self.epuharness = EPUHarness(*args, **kwargs)
        if os.path.exists(self.epuharness.pidantic_dir):
            raise Exception("EPUHarness running. Can't run this test")

        self.dashi = self.epuharness.dashi

    def teardown_harness(self, remove_dir=True):
        if self.epuharness:
            try:
                self.epuharness.stop(remove_dir=remove_dir)
            except Exception:
                log.exception("Error shutting down epuharness!")

        if self.libcloud_drivers:
            for site_name, driver in self.libcloud_drivers.iteritems():
                try:
                    driver.shutdown()
                except Exception:
                    log.exception("Error shutting down libcloud driver for site %s", site_name)

                try:
                    if driver.sqlite_db:
                        os.remove(driver.sqlite_db)
                except Exception:
                    log.exception("Error removing fake libcloud db: %s", driver.sqlite_db)

    cleanup_harness = teardown_harness

    def get_clients(self, deployment_str, dashi):
        """returns a dictionary of epu clients, indexed by their topic name
        """

        deployment = parse_deployment(yaml_str=deployment_str)

        clients = {}

        for provisioner_name in deployment.get('provisioners', {}).iterkeys():
            client = ProvisionerClient(dashi, topic=provisioner_name)
            clients[provisioner_name] = client

        for epum_name in deployment.get('epums', {}).iterkeys():
            client = EPUManagementClient(dashi, epum_name)
            clients[epum_name] = client

        for node in deployment.get('nodes', {}).itervalues():
            for eeagent_name in node.get('eeagents', {}).iterkeys():
                client = EEAgentClient(dashi=dashi, ee_name=eeagent_name,
                        handle_heartbeat=False)
                clients[eeagent_name] = client

        for pd_name in deployment.get('process-dispatchers', {}).iterkeys():
            client = ProcessDispatcherClient(dashi, pd_name)
            clients[pd_name] = client

        for dt_name in deployment.get('dt_registries', {}).iterkeys():
            client = DTRSClient(dashi, topic=dt_name)
            clients[dt_name] = client

        return clients

    def block_until_ready(self, deployment_str, dashi):
        """Blocks until all of the services in a deployment are contacted
        """

        deployment = parse_deployment(yaml_str=deployment_str)

        for provisioner_name in deployment.get('provisioners', {}).iterkeys():
            provisioner = ProvisionerClient(dashi, topic=provisioner_name)
            self._block_on_call(provisioner.describe_nodes)

        for epum_name in deployment.get('epums', {}).iterkeys():
            epum = EPUManagementClient(dashi, epum_name)
            self._block_on_call(epum.list_domains)

        for node in deployment.get('nodes', {}).itervalues():
            for eeagent_name in node.get('eeagents', {}).iterkeys():
                eeagent = EEAgentClient(dashi=dashi, ee_name=eeagent_name,
                        handle_heartbeat=False)
                self._block_on_call(eeagent.dump, kwargs={'rpc': True})

        for pd_name in deployment.get('process-dispatchers', {}).iterkeys():
            pd = ProcessDispatcherClient(dashi, pd_name)
            self._block_on_call(pd.describe_processes)

        for dt_name in deployment.get('dt_registries', {}).iterkeys():
            dtrs = DTRSClient(dashi, topic=dt_name)
            self._block_on_call(dtrs.list_sites)

    def _block_on_call(self, fn_to_block_on, attempts=None, kwargs={}):
        if not attempts:
            attempts = 10

        print "Block on %s" % fn_to_block_on.__name__
        for i in range(0, attempts):
            try:
                fn_to_block_on(**kwargs)
                break
            except timeout:
                continue
            except:
                #call worked, but got some mystery error
                raise
        else:
            try:
                msg = "Wasn't able to call %s.%s" % (
                    fn_to_block_on.im_class.__name__,
                    fn_to_block_on.__name__)
            except AttributeError:  # Not a member of a class
                msg = "Wasn't able to call %s.%s" % fn_to_block_on.__name__
            assert False, msg

    def make_fake_libcloud_site(self, site_name="ec2-fake", needs_elastic_ip=None):
        """makes a fake libcloud site and driver.

        Returns tuple of the site definition, and a libcloud driver instance
        """
        if self.libcloud_drivers is None:
            self.libcloud_drivers = {}

        if needs_elastic_ip is None:
            needs_elastic_ip = False

        if site_name in self.libcloud_drivers:
            driver = self.libcloud_drivers[site_name]

        else:
            fh, fake_libcloud_db = tempfile.mkstemp(prefix="fakelibcloud_db")
            os.close(fh)

            from epu.mocklibcloud import MockEC2NodeDriver
            driver = MockEC2NodeDriver(sqlite_db=fake_libcloud_db)
            self.libcloud_drivers[site_name] = driver

        fake_site = {
            'type': 'mock-ec2',
            'sqlite_db': driver.sqlite_db,
            'needs_elastic_ip': needs_elastic_ip
        }

        return fake_site, driver