Exemplo n.º 1
0
    def test_exception(self):
        """
        An exception is passed in the results.
        """
        sub, proc = fake_subprocess('', '', 0)
        proc.communicate.side_effect = Exception('Oh no!')
        self.addCleanup(setattr, lib, 'popen', lib.popen)
        lib.popen = sub.popen

        context, socket = fake_context()
        lib.ssh(1, context, 'foo', '9678', 'command', [])
        results = socket.send_pyobj.call_args_list[0][0][0]

        self.assertIn('traceback', results)
        self.assertIn('Oh no!', results['traceback'])
Exemplo n.º 2
0
    def test_exception(self):
        """
        An exception is passed in the results.
        """
        sub, proc = fake_subprocess('', '', 0)
        proc.communicate.side_effect = Exception('Oh no!')
        self.addCleanup(setattr, lib, 'popen', lib.popen)
        lib.popen = sub.popen

        context, socket = fake_context()
        lib.ssh(1, context, 'foo', '9678', 'command', [])
        results = socket.send_pyobj.call_args_list[0][0][0]

        self.assertIn('traceback', results)
        self.assertIn('Oh no!', results['traceback'])
Exemplo n.º 3
0
    def test_port(self):
        """
        The ssh command arguments change when a port is specified.
        """
        sub, proc = fake_subprocess('', '', 0)
        self.addCleanup(setattr, lib, 'popen', lib.popen)
        lib.popen = sub.popen

        context, socket = fake_context()
        lib.ssh(1, context, 'foo:9678', 'command', [])

        # Get the result that was sent in the socket
        self.assertEqual(socket.send_pyobj.call_count, 1)
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(cmd, ['ssh', 'foo', '-p', '9678', 'command'])
Exemplo n.º 4
0
    def test_port(self):
        """
        The ssh command arguments change when a port is specified.
        """
        sub, proc = fake_subprocess('', '', 0)
        self.addCleanup(setattr, lib, 'popen', lib.popen)
        lib.popen = sub.popen

        context, socket = fake_context()
        lib.ssh(1, context, 'foo:9678', 'command', [])

        # Get the result that was sent in the socket
        self.assertEqual(socket.send_pyobj.call_count, 1)
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(cmd,
                ['ssh', 'foo', '-p', '9678', 'command'])
Exemplo n.º 5
0
    def test_formatting(self):
        """
        A dictionary of unique strings are provided to use when formatting
        the command string.
        """
        sub, proc = fake_subprocess('', '', 0)
        self.addCleanup(setattr, lib, 'popen', lib.popen)
        lib.popen = sub.popen
        context, socket = fake_context()

        # No formatting in the command string
        lib.ssh(1, context, 'foo', 'command', [])
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(cmd,
                ['ssh', 'foo', 'command'])
        socket.reset_mock()

        # URI in formatting
        lib.ssh(1, context, 'foo', 'command{uri}', [])
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(cmd,
                ['ssh', 'foo', 'commandfoo'])
        socket.reset_mock()

        # FQDN in formatting
        lib.ssh(1, context, 'www.foo.com:22', 'command{fqdn}', [])
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(cmd,
                ['ssh', 'www.foo.com', '-p', '22', 'commandwww.foo.com'])
        socket.reset_mock()

        # Subdomain in formatting
        lib.ssh(1, context, 'foo.example.com', 'command{subdomain}', [])
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(cmd,
                ['ssh', 'foo.example.com', 'commandfoo'])
        socket.reset_mock()

        # Multiple formatting
        lib.ssh(1, context, 'foo.example.com:8888', 'command {subdomain} {fqdn} {uri}', [])
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(cmd,
                ['ssh', 'foo.example.com', '-p', '8888',
                    'command foo foo.example.com foo.example.com:8888'])
        socket.reset_mock()

        # Bad formatting
        lib.ssh(1, context, 'foo', 'command{bad}', [])
        self.assertIn('traceback', socket.send_pyobj.call_args_list[0][0][0])
        socket.reset_mock()

        # Disable formatting
        self.addCleanup(setattr, lib, 'disable_formatting', lib.disable_formatting)
        lib.disable_formatting = True
        lib.ssh(1, context, 'foo', 'command{bad}', [])
        self.assertNotIn('traceback', socket.send_pyobj.call_args_list[0][0][0])
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(cmd,
                ['ssh', 'foo', 'command{bad}'])
        socket.reset_mock()
Exemplo n.º 6
0
    def test_formatting(self):
        """
        A dictionary of unique strings are provided to use when formatting
        the command string.
        """
        sub, proc = fake_subprocess('', '', 0)
        self.addCleanup(setattr, lib, 'popen', lib.popen)
        lib.popen = sub.popen
        context, socket = fake_context()

        # No formatting in the command string
        lib.ssh(1, context, 'foo', 'command', [])
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(cmd, ['ssh', 'foo', 'command'])
        socket.reset_mock()

        # URI in formatting
        lib.ssh(1, context, 'foo', 'command{uri}', [])
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(cmd, ['ssh', 'foo', 'commandfoo'])
        socket.reset_mock()

        # FQDN in formatting
        lib.ssh(1, context, 'www.foo.com:22', 'command{fqdn}', [])
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(
            cmd, ['ssh', 'www.foo.com', '-p', '22', 'commandwww.foo.com'])
        socket.reset_mock()

        # Subdomain in formatting
        lib.ssh(1, context, 'foo.example.com', 'command{subdomain}', [])
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(cmd, ['ssh', 'foo.example.com', 'commandfoo'])
        socket.reset_mock()

        # Multiple formatting
        lib.ssh(1, context, 'foo.example.com:8888',
                'command {subdomain} {fqdn} {uri}', [])
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(cmd, [
            'ssh', 'foo.example.com', '-p', '8888',
            'command foo foo.example.com foo.example.com:8888'
        ])
        socket.reset_mock()

        # Bad formatting
        lib.ssh(1, context, 'foo', 'command{bad}', [])
        self.assertIn('traceback', socket.send_pyobj.call_args_list[0][0][0])
        socket.reset_mock()

        # Disable formatting
        self.addCleanup(setattr, lib, 'disable_formatting',
                        lib.disable_formatting)
        lib.disable_formatting = True
        lib.ssh(1, context, 'foo', 'command{bad}', [])
        self.assertNotIn('traceback',
                         socket.send_pyobj.call_args_list[0][0][0])
        cmd = socket.send_pyobj.call_args_list[0][0][0]['cmd']
        self.assertEqual(cmd, ['ssh', 'foo', 'command{bad}'])
        socket.reset_mock()