示例#1
0
    def test_multi_chdir_popen(self, testdir):
        import os
        hm = GatewayManager(["popen"] * 2)
        testdir.tmpdir.chdir()
        hellopath = testdir.tmpdir.mkdir("hello")
        hm.makegateways()
        hm.multi_chdir("hello", inplacelocal=False)
        l = hm.multi_exec("import os ; channel.send(os.getcwd())").receive_each()
        assert len(l) == 2
        curwd = os.path.realpath(os.getcwd())
        assert l == [curwd] * 2

        hm.multi_chdir("hello")
        l = hm.multi_exec("import os ; channel.send(os.getcwd())").receive_each()
        assert len(l) == 2
        assert l[0] == l[1]
        assert l[0].startswith(curwd)
        assert l[0].endswith("hello")
示例#2
0
 def test_multi_chdir_popen_with_path(self, testdir):
     import os
     hm = GatewayManager(["popen//chdir=hello"] * 2)
     testdir.tmpdir.chdir()
     hellopath = testdir.tmpdir.mkdir("hello").realpath()
     hm.makegateways()
     l = hm.multi_exec("import os ; channel.send(os.getcwd())").receive_each()
     paths = [x[1] for x in l]
     assert l == [str(hellopath)] * 2
     py.test.raises(hm.RemoteError, 'hm.multi_chdir("world", inplacelocal=False)')
     worldpath = hellopath.mkdir("world")
     hm.multi_chdir("world", inplacelocal=False)
     l = hm.multi_exec("import os ; channel.send(os.getcwd())").receive_each()
     assert len(l) == 2
     assert l[0] == l[1]
     curwd = os.getcwd()
     assert l[0].startswith(curwd)
     assert l[0].endswith("world")
示例#3
0
    def test_multi_chdir_popen(self, testdir):
        import os
        hm = GatewayManager(["popen"] * 2)
        testdir.tmpdir.chdir()
        hellopath = testdir.tmpdir.mkdir("hello")
        hm.makegateways()
        hm.multi_chdir("hello", inplacelocal=False)
        l = hm.multi_exec(
            "import os ; channel.send(os.getcwd())").receive_each()
        assert len(l) == 2
        curwd = os.path.realpath(os.getcwd())
        assert l == [curwd] * 2

        hm.multi_chdir("hello")
        l = hm.multi_exec(
            "import os ; channel.send(os.getcwd())").receive_each()
        assert len(l) == 2
        assert l[0] == l[1]
        assert l[0].startswith(curwd)
        assert l[0].endswith("hello")
示例#4
0
 def test_multi_chdir_popen_with_path(self, testdir):
     import os
     hm = GatewayManager(["popen//chdir=hello"] * 2)
     testdir.tmpdir.chdir()
     hellopath = testdir.tmpdir.mkdir("hello").realpath()
     hm.makegateways()
     l = hm.multi_exec(
         "import os ; channel.send(os.getcwd())").receive_each()
     paths = [x[1] for x in l]
     assert l == [str(hellopath)] * 2
     py.test.raises(hm.RemoteError,
                    'hm.multi_chdir("world", inplacelocal=False)')
     worldpath = hellopath.mkdir("world")
     hm.multi_chdir("world", inplacelocal=False)
     l = hm.multi_exec(
         "import os ; channel.send(os.getcwd())").receive_each()
     assert len(l) == 2
     assert l[0] == l[1]
     curwd = os.getcwd()
     assert l[0].startswith(curwd)
     assert l[0].endswith("world")
示例#5
0
class NodeManager(object):
    def __init__(self, config, specs=None):
        self.config = config
        if specs is None:
            specs = self.config.getxspecs()
        self.roots = self.config.getrsyncdirs()
        self.gwmanager = GatewayManager(specs)
        self.nodes = []
        self._nodesready = py.std.threading.Event()

    def trace(self, msg):
        self.config.hook.pytest_trace(category="nodemanage", msg=msg)

    def config_getignores(self):
        return self.config.getconftest_pathlist("rsyncignore")

    def rsync_roots(self):
        """ make sure that all remote gateways
            have the same set of roots in their
            current directory. 
        """
        self.makegateways()
        options = {"ignores": self.config_getignores(), "verbose": self.config.option.verbose}
        if self.roots:
            # send each rsync root
            for root in self.roots:
                self.gwmanager.rsync(root, **options)
        else:
            XXX  # do we want to care for situations without explicit rsyncdirs?
            # we transfer our topdir as the root
            self.gwmanager.rsync(self.config.topdir, **options)
            # and cd into it
            self.gwmanager.multi_chdir(self.config.topdir.basename, inplacelocal=False)

    def makegateways(self):
        # we change to the topdir sot that
        # PopenGateways will have their cwd
        # such that unpickling configs will
        # pick it up as the right topdir
        # (for other gateways this chdir is irrelevant)
        self.trace("making gateways")
        old = self.config.topdir.chdir()
        try:
            self.gwmanager.makegateways()
        finally:
            old.chdir()

    def setup_nodes(self, putevent):
        self.rsync_roots()
        self.trace("setting up nodes")
        for gateway in self.gwmanager.gateways:
            node = TXNode(gateway, self.config, putevent, slaveready=self._slaveready)
            gateway.node = node  # to keep node alive
            self.trace("started node %r" % node)

    def _slaveready(self, node):
        # assert node.gateway == node.gateway
        # assert node.gateway.node == node
        self.nodes.append(node)
        self.trace("%s slave node ready %r" % (node.gateway.id, node))
        if len(self.nodes) == len(self.gwmanager.gateways):
            self._nodesready.set()

    def wait_nodesready(self, timeout=None):
        self._nodesready.wait(timeout)
        if not self._nodesready.isSet():
            raise IOError("nodes did not get ready for %r secs" % timeout)

    def teardown_nodes(self):
        # XXX do teardown nodes?
        self.gwmanager.exit()
示例#6
0
class NodeManager(object):
    def __init__(self, config, specs=None):
        self.config = config
        if specs is None:
            specs = self.config.getxspecs()
        self.roots = self.config.getrsyncdirs()
        self.gwmanager = GatewayManager(specs)
        self.nodes = []
        self._nodesready = py.std.threading.Event()

    def trace(self, msg):
        self.config.hook.pytest_trace(category="nodemanage", msg=msg)

    def config_getignores(self):
        return self.config.getconftest_pathlist("rsyncignore")

    def rsync_roots(self):
        """ make sure that all remote gateways
            have the same set of roots in their
            current directory. 
        """
        self.makegateways()
        options = {
            'ignores': self.config_getignores(),
            'verbose': self.config.option.verbose,
        }
        if self.roots:
            # send each rsync root
            for root in self.roots:
                self.gwmanager.rsync(root, **options)
        else:
            XXX  # do we want to care for situations without explicit rsyncdirs?
            # we transfer our topdir as the root
            self.gwmanager.rsync(self.config.topdir, **options)
            # and cd into it
            self.gwmanager.multi_chdir(self.config.topdir.basename,
                                       inplacelocal=False)

    def makegateways(self):
        # we change to the topdir sot that
        # PopenGateways will have their cwd
        # such that unpickling configs will
        # pick it up as the right topdir
        # (for other gateways this chdir is irrelevant)
        self.trace("making gateways")
        old = self.config.topdir.chdir()
        try:
            self.gwmanager.makegateways()
        finally:
            old.chdir()

    def setup_nodes(self, putevent):
        self.rsync_roots()
        self.trace("setting up nodes")
        for gateway in self.gwmanager.gateways:
            node = TXNode(gateway,
                          self.config,
                          putevent,
                          slaveready=self._slaveready)
            gateway.node = node  # to keep node alive
            self.trace("started node %r" % node)

    def _slaveready(self, node):
        #assert node.gateway == node.gateway
        #assert node.gateway.node == node
        self.nodes.append(node)
        self.trace("%s slave node ready %r" % (node.gateway.id, node))
        if len(self.nodes) == len(self.gwmanager.gateways):
            self._nodesready.set()

    def wait_nodesready(self, timeout=None):
        self._nodesready.wait(timeout)
        if not self._nodesready.isSet():
            raise IOError("nodes did not get ready for %r secs" % timeout)

    def teardown_nodes(self):
        # XXX do teardown nodes?
        self.gwmanager.exit()