Exemple #1
0
 def test_setup_teardown_ssh(self):
     hosts = [HostInfo('localhost:%s' % self.dest)]
     setup_events = []
     teardown_events = []
     tmpdir = self.source
     config = py.test.config._reparse([tmpdir])
     hm = HostManager(config, hosts)
     nodes = hm.setup_hosts(setup_events.append)
     hm.teardown_hosts(teardown_events.append, 
                    [node.channel for node in nodes], nodes)
     
     count_rsyn_calls = [i for i in setup_events 
             if isinstance(i, repevent.HostRSyncing)]
     assert len(count_rsyn_calls) == len([i for i in hosts])
     count_ready_calls = [i for i in setup_events 
             if isinstance(i, repevent.HostRSyncRootReady)]
     assert len(count_ready_calls) == len([i for i in hosts])
     
     # same for teardown events
     teardown_wait_starts = [i for i in teardown_events 
                                 if isinstance(i, repevent.CallStart)]
     teardown_wait_ends = [i for i in teardown_events 
                                 if isinstance(i, repevent.CallFinish)]
     assert len(teardown_wait_starts) == len(hosts)
     assert len(teardown_wait_ends) == len(hosts)
Exemple #2
0
 def test_hostmanage_optimise_localhost(self):
     hosts = [HostInfo("localhost") for i in range(3)]
     config = py.test.config._reparse([self.source])
     hm = HostManager(config, hosts=hosts)
     events = []
     hm.init_rsync(events.append)
     for host in hosts:
         assert host.inplacelocal
         assert host.gw_remotepath is None
         assert not host.relpath 
     assert events
Exemple #3
0
 def XXXtest_ssh_rsync_samehost_twice(self):
     #XXX we have no easy way to have a temp directory remotely!
     option = py.test.config.option
     if option.sshtarget is None: 
         py.test.skip("no known ssh target, use -S to set one")
     host1 = HostInfo("%s" % (option.sshtarget, ))
     host2 = HostInfo("%s" % (option.sshtarget, ))
     hm = HostManager(config, hosts=[host1, host2])
     events = []
     hm.init_rsync(events.append)
     print events
     assert 0
Exemple #4
0
 def test_hostmanager_init_rsync_roots(self):
     dir2 = self.source.ensure("dir1", "dir2", dir=1)
     self.source.ensure("dir1", "somefile", dir=1)
     dir2.ensure("hello")
     self.source.ensure("bogusdir", "file")
     self.source.join("conftest.py").write(py.code.Source("""
         dist_rsync_roots = ['dir1/dir2']
     """))
     config = py.test.config._reparse([self.source])
     hm = HostManager(config, 
                      hosts=[HostInfo("localhost:" + str(self.dest))])
     events = []
     hm.init_rsync(reporter=events.append)
     assert self.dest.join("dir2").check()
     assert not self.dest.join("dir1").check()
     assert not self.dest.join("bogus").check()
Exemple #5
0
    def test_setup_teardown_run_ssh(self):
        hosts = [HostInfo('localhost:%s' % self.dest)]
        allevents = []
        
        hm = HostManager(self.config, hosts=hosts)
        nodes = hm.setup_hosts(allevents.append)
        
        from py.__.test.rsession.testing.test_executor \
            import ItemTestPassing, ItemTestFailing, ItemTestSkipping
        
        itempass = self.getexample("pass")
        itemfail = self.getexample("fail")
        itemskip = self.getexample("skip")
        itemprint = self.getexample("print")

        # actually run some tests
        for node in nodes:
            node.send(itempass)
            node.send(itemfail)
            node.send(itemskip)
            node.send(itemprint)

        hm.teardown_hosts(allevents.append, [node.channel for node in nodes], nodes)

        events = [i for i in allevents 
                        if isinstance(i, repevent.ReceivedItemOutcome)]
        passed = [i for i in events 
                        if i.outcome.passed]
        skipped = [i for i in events 
                        if i.outcome.skipped]
        assert len(passed) == 2 * len(nodes)
        assert len(skipped) == len(nodes)
        assert len(events) == 4 * len(nodes)
        # one of passed for each node has non-empty stdout
        passed_stdout = [i for i in passed if i.outcome.stdout.find('samfing') != -1]
        assert len(passed_stdout) == len(nodes), passed
Exemple #6
0
    def main(self, reporter=None):
        """ main loop for running tests. """
        args = self.config.args

        hm = HostManager(self.config)
        reporter, startserverflag = self.init_reporter(reporter,
            hm.hosts, RemoteReporter)
        reporter, checkfun = self.wrap_reporter(reporter)

        reporter(repevent.TestStarted(hm.hosts, self.config.topdir,
                                      hm.roots))

        try:
            nodes = hm.setup_hosts(reporter)
            reporter(repevent.RsyncFinished())
            try:
                self.dispatch_tests(nodes, reporter, checkfun)
            except (KeyboardInterrupt, SystemExit):
                print >>sys.stderr, "C-c pressed waiting for gateways to teardown..."
                channels = [node.channel for node in nodes]
                hm.kill_channels(channels)
                hm.teardown_gateways(reporter, channels)
                print >>sys.stderr, "... Done"
                raise

            channels = [node.channel for node in nodes]
            hm.teardown_hosts(reporter, channels, nodes, 
                              exitfirst=self.config.option.exitfirst)
            reporter(repevent.Nodes(nodes))
            retval = reporter(repevent.TestFinished())
            self.kill_server(startserverflag)
            return retval
        except (KeyboardInterrupt, SystemExit):
            reporter(repevent.InterruptedExecution())
            self.kill_server(startserverflag)
            raise
        except:
            reporter(repevent.CrashedExecution())
            self.kill_server(startserverflag)
            raise