示例#1
0
def test_lifecycle(capture, machine, strokes):
    # Start machine.
    machine.start_capture()
    assert capture.mock_calls == [
        call.suppress_keyboard(()),
        call.start(),
    ]
    capture.reset_mock()
    machine.set_suppression(True)
    suppressed_keys = dict(machine.keymap.get_bindings())
    del suppressed_keys['space']
    assert strokes == []
    assert capture.mock_calls == [
        call.suppress_keyboard(suppressed_keys.keys()),
    ]
    # Trigger some strokes.
    capture.reset_mock()
    send_input(capture, '+a +h -a -h space w')
    assert strokes == [
        {'S-', '*'},
        {'T-'},
    ]
    assert capture.mock_calls == []
    # Stop machine.
    del strokes[:]
    machine.stop_capture()
    assert strokes == []
    assert capture.mock_calls == [
        call.suppress_keyboard(()),
        call.cancel(),
    ]
示例#2
0
    def test_101_run_pass_file(self):
        self.app.expected_calls[('dom0', 'admin.vm.List', None, None)] = (
            b'0\0dom0 class=AdminVM state=Running\n'
            b'fedora-25 class=TemplateVM state=Halted\n'
        )
        args = unittest.mock.Mock(backup_location='/backup/path',
            pass_file='/some/path',
            appvm=None)
        obj = RestoreInDisposableVM(self.app, args)
        methods = ['create_dispvm', 'clear_old_tags', 'register_backup_source',
                   'prepare_inner_args', 'extract_log', 'finalize_tags',
                   'transfer_pass_file']
        for m in methods:
            setattr(obj, m, unittest.mock.Mock())
        obj.extract_log.return_value = b'Some logs\nexit code: 0\n'
        obj.prepare_inner_args.return_value = ['args']
        obj.terminal_app = ('terminal',)
        obj.dispvm = unittest.mock.Mock()
        with tempfile.NamedTemporaryFile() as tmp:
            with unittest.mock.patch('qubesadmin.backup.dispvm.LOCKFILE',
                    tmp.name):
                obj.run()

        for m in methods:
            self.assertEqual(len(getattr(obj, m).mock_calls), 1)
        self.assertEqual(obj.dispvm.mock_calls, [
            call.start(),
            call.run_service_for_stdio('qubes.WaitForSession'),
            call.tags.add('backup-restore-mgmt'),
            call.run_with_args('terminal', 'qvm-backup-restore', 'args',
                stdout=subprocess.DEVNULL,
                stderr=subprocess.DEVNULL),
            call.tags.discard('backup-restore-mgmt'),
            call.kill()
        ])
示例#3
0
def test_lifecycle(capture, machine, strokes):
    # Start machine.
    machine.start_capture()
    assert capture.mock_calls == [
        call.suppress_keyboard(()),
        call.start(),
    ]
    capture.reset_mock()
    machine.set_suppression(True)
    suppressed_keys = dict(machine.keymap.get_bindings())
    del suppressed_keys['space']
    assert strokes == []
    assert capture.mock_calls == [
        call.suppress_keyboard(suppressed_keys.keys()),
    ]
    # Trigger some strokes.
    capture.reset_mock()
    send_input(capture, '+a +h -a -h space w')
    assert strokes == [
        {'S-', '*'},
        {'T-'},
    ]
    assert capture.mock_calls == []
    # Stop machine.
    del strokes[:]
    machine.stop_capture()
    assert strokes == []
    assert capture.mock_calls == [
        call.suppress_keyboard(()),
        call.cancel(),
    ]
示例#4
0
    def test_setup_auto_start_disabled(self, mock_homekit):
        """Test async_setup with auto start disabled and test service calls."""
        mock_homekit.return_value = homekit = Mock()

        config = {
            DOMAIN: {
                CONF_AUTO_START: False,
                CONF_PORT: 11111,
                CONF_IP_ADDRESS: '172.0.0.0'
            }
        }
        self.assertTrue(setup.setup_component(self.hass, DOMAIN, config))

        self.hass.bus.fire(EVENT_HOMEASSISTANT_START)
        self.hass.block_till_done()

        self.assertEqual(
            mock_homekit.mock_calls,
            [call(self.hass, 11111, '172.0.0.0', ANY, {}),
             call().setup()])

        # Test start call with driver stopped.
        homekit.reset_mock()
        homekit.configure_mock(**{'started': False})

        self.hass.services.call('homekit', 'start')
        self.assertEqual(homekit.mock_calls, [call.start()])

        # Test start call with driver started.
        homekit.reset_mock()
        homekit.configure_mock(**{'started': True})

        self.hass.services.call(DOMAIN, SERVICE_HOMEKIT_START)
        self.assertEqual(homekit.mock_calls, [])
示例#5
0
    def test_setup_auto_start_disabled(self, mock_homekit):
        """Test async_setup with auto start disabled and test service calls."""
        mock_homekit.return_value = homekit = Mock()

        config = {DOMAIN: {CONF_AUTO_START: False, CONF_PORT: 11111}}
        self.assertTrue(setup.setup_component(
            self.hass, DOMAIN, config))

        self.hass.bus.fire(EVENT_HOMEASSISTANT_START)
        self.hass.block_till_done()

        self.assertEqual(mock_homekit.mock_calls, [
            call(self.hass, 11111, ANY, {}),
            call().setup()])

        # Test start call with driver stopped.
        homekit.reset_mock()
        homekit.configure_mock(**{'started': False})

        self.hass.services.call('homekit', 'start')
        self.assertEqual(homekit.mock_calls, [call.start()])

        # Test start call with driver started.
        homekit.reset_mock()
        homekit.configure_mock(**{'started': True})

        self.hass.services.call(DOMAIN, SERVICE_HOMEKIT_START)
        self.assertEqual(homekit.mock_calls, [])
示例#6
0
def test_monitor_multiple_start():
    """
    Calling ``Monitor.start`` multiple times has no effects beyond those of
    calling it once.
    """
    monitor = Monitor(MagicMock())
    monitor.timer = MagicMock()
    monitor.start()
    monitor.start()
    assert monitor.timer.mock_calls == [call.start(2, now=True)]
示例#7
0
def test_add_player_start_game_calls_methods_on_turns():
    """ Tests add_player, start_game and Player """
    board = Board()
    turns = Mock()
    game = Game(identifier=0, board=board, turns=turns)
    for _ in range(4):
        player_id = game.unused_player_id()
        game.add_player(Player(player_id))
    game.start_game()
    expected_turn_calls = [call.init(game.players)] + [call.start()]
    assert turns.mock_calls[-2:] == expected_turn_calls
示例#8
0
async def test_observer_discovery(hass, hass_ws_client, venv):
    """Test that observer can discover a device without raising an exception."""
    new_usb = [{"domain": "test1", "vid": "3039"}]

    mock_comports = [
        MagicMock(
            device=slae_sh_device.device,
            vid=12345,
            pid=12345,
            serial_number=slae_sh_device.serial_number,
            manufacturer=slae_sh_device.manufacturer,
            description=slae_sh_device.description,
        )
    ]
    mock_observer = None

    async def _mock_monitor_observer_callback(callback):
        await hass.async_add_executor_job(
            callback, MagicMock(action="create", device_path="/dev/new")
        )

    def _create_mock_monitor_observer(monitor, callback, name):
        nonlocal mock_observer
        hass.async_create_task(_mock_monitor_observer_callback(callback))
        mock_observer = MagicMock()
        return mock_observer

    with patch("pyudev.Context"), patch(
        "pyudev.MonitorObserver", new=_create_mock_monitor_observer
    ), patch("pyudev.Monitor.filter_by"), patch(
        "homeassistant.components.usb.async_get_usb", return_value=new_usb
    ), patch(
        "homeassistant.components.usb.comports", return_value=mock_comports
    ), patch.object(
        hass.config_entries.flow, "async_init"
    ) as mock_config_flow:
        assert await async_setup_component(hass, "usb", {"usb": {}})
        await hass.async_block_till_done()
        hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED)
        await hass.async_block_till_done()

    assert len(mock_config_flow.mock_calls) == 1
    assert mock_config_flow.mock_calls[0][1][0] == "test1"

    hass.bus.async_fire(EVENT_HOMEASSISTANT_STOP)
    await hass.async_block_till_done()

    assert mock_observer.mock_calls == [call.start(), call.stop()]
示例#9
0
    def test_homekit_start(self, mock_add_bridge_acc, mock_show_setup_msg):
        """Test HomeKit start method."""
        homekit = HomeKit(self.hass, None, None, {}, {'cover.demo': {}})
        homekit.bridge = HomeBridge(self.hass)
        homekit.driver = Mock()

        self.hass.states.set('light.demo', 'on')
        state = self.hass.states.all()[0]

        homekit.start()

        self.assertEqual(mock_add_bridge_acc.mock_calls, [call(state)])
        self.assertEqual(mock_show_setup_msg.mock_calls,
                         [call(self.hass, homekit.bridge)])
        self.assertEqual(homekit.driver.mock_calls, [call.start()])
        self.assertTrue(homekit.started)

        # Test start() if already started
        homekit.driver.reset_mock()
        homekit.start()
        self.assertEqual(homekit.driver.mock_calls, [])
示例#10
0
    def test_homekit_start(self, mock_add_bridge_acc, mock_show_setup_msg):
        """Test HomeKit start method."""
        homekit = HomeKit(self.hass, None, {}, {'cover.demo': {}})
        homekit.bridge = HomeBridge(self.hass)
        homekit.driver = Mock()

        self.hass.states.set('light.demo', 'on')
        state = self.hass.states.all()[0]

        homekit.start()

        self.assertEqual(mock_add_bridge_acc.mock_calls, [call(state)])
        self.assertEqual(mock_show_setup_msg.mock_calls, [
            call(self.hass, homekit.bridge)])
        self.assertEqual(homekit.driver.mock_calls, [call.start()])
        self.assertTrue(homekit.started)

        # Test start() if already started
        homekit.driver.reset_mock()
        homekit.start()
        self.assertEqual(homekit.driver.mock_calls, [])
示例#11
0
 def _check_timer_called(self):
     self.assertListEqual([call.start()],
                          self.timer_mock.return_value.method_calls)
示例#12
0
def test_monitor_start():
    monitor = Monitor(MagicMock())
    monitor.timer = MagicMock()
    monitor.start()
    assert monitor.timer.mock_calls == [call.start(2, now=True)]
示例#13
0
def test_awsec2_class(resman):

    with patch('boto3.resource') as client, \
            patch.object(SSH, 'get_session', return_value='started_session'), \
            swallow_logs(new_level=logging.DEBUG) as log:

        # Test connecting when a resource doesn't exist.
        client.return_value = MagicMock(instances=MagicMock(
            filter=lambda Filters: []))
        config = {
            'name': 'non-existent-instance',
            'type': 'aws-ec2',
            'access_key_id': 'my-aws-access-key-id',
            'secret_access_key': 'my-aws-secret-access-key-id'
        }
        resource = resman.factory(config)
        resource.connect()
        assert resource.id is None
        assert resource.status is None

        # Test catching exception when multiple resources are found at connection.
        client.return_value = MagicMock(instances=MagicMock(
            filter=lambda Filters: [
                MagicMock(instance_id='i-22221ddf096c22bb0',
                          state={'Name': 'running'}),
                MagicMock(instance_id='i-3333f40de2b9b8967',
                          state={'Name': 'running'})
            ]))
        config = {
            'name': 'duplicate-instance-name',
            'type': 'aws-ec2',
            'access_key_id': 'my-aws-access-key-id',
            'secret_access_key': 'my-aws-secret-access-key-id'
        }
        resource = resman.factory(config)
        try:
            resource.connect()
        except Exception as e:
            assert e.args[0] == "Multiple container matches found"

        # Test connecting to an existing resource.
        client.return_value = MagicMock(Instance=lambda id: MagicMock(
            instance_id='i-00002777d52482d9c', state={'Name': 'running'}))
        config = {
            'name': 'my-instance-name',
            'id': 'i-00002777d52482d9c',
            'type': 'aws-ec2',
            'access_key_id': 'my-aws-access-key-id',
            'secret_access_key': 'my-aws-secret-access-key-id',
            'key_name': 'my-ssh-key',
            'key_filename': '/home/me/.ssh/id_rsa'
        }
        resource = resman.factory(config)
        resource.connect()
        assert resource.image == 'ami-c8580bdf'
        assert resource.id == 'i-00002777d52482d9c'
        assert resource.instance_type == 't2.micro'
        assert resource.key_filename == '/home/me/.ssh/id_rsa'
        assert resource.key_name == 'my-ssh-key'
        assert resource.name == 'my-instance-name'
        assert resource.region_name == 'us-east-1'
        assert resource.access_key_id == 'my-aws-access-key-id'
        assert resource.secret_access_key == 'my-aws-secret-access-key-id'
        assert resource.security_group == 'default'
        assert resource.status == 'running'
        assert resource.type == 'aws-ec2'

        # Test creating an existing resource and catch the exception.
        try:
            list(resource.create())
        except Exception as e:
            assert e.args[
                0] == "Instance 'i-00002777d52482d9c' already exists in AWS subscription"

        # Test creating resource.
        client.return_value = MagicMock(
            instances=MagicMock(filter=lambda Filters: []),
            Instance=lambda id: MagicMock(instance_id='i-11112777d52482d9c',
                                          state={'Name': 'pending'}))
        config = {
            'name': 'my-instance-name',
            'type': 'aws-ec2',
            'access_key_id': 'my-aws-access-key-id',
            'secret_access_key': 'my-aws-secret-access-key-id',
            'key_name': 'my-ssh-key',
            'key_filename': '/home/me/.ssh/id_rsa'
        }
        resource = resman.factory(config)
        resource.connect()
        # Test retrieving more than one yield from the create method
        create_generator = resource.create()
        result_1 = next(create_generator)
        assert result_1['id'] == 'i-11112777d52482d9c'
        assert result_1['status'] == 'pending'
        resource._ec2_instance.state['Name'] = 'running'
        result_2 = next(create_generator)
        assert result_2['status'] == 'running'
        assert_in('EC2 instance i-11112777d52482d9c initialized!', log.lines)
        assert_in('EC2 instance i-11112777d52482d9c is running!', log.lines)
        assert_in(
            'Waiting for EC2 instance i-11112777d52482d9c to complete initialization...',
            log.lines)
        assert_in('EC2 instance i-11112777d52482d9c initialized!', log.lines)

        # Test stopping resource.
        resource.stop()
        calls = [call.stop()]
        resource._ec2_instance.assert_has_calls(calls, any_order=True)

        # Test starting resource.
        resource.start()
        calls = [call.start()]
        resource._ec2_instance.assert_has_calls(calls, any_order=True)

        # Test deleting resource.
        resource.delete()
        calls = [call.terminate()]
        resource._ec2_instance.assert_has_calls(calls, any_order=True)

        session = resource.get_session()
        assert session == 'started_session'
示例#14
0
 def test_watch_directory_schedules_then_starts_observer(self, Observer):
     handler = MagicMock()
     tasks.watch_directory(handler, PATH)
     expected_calls = [call.schedule(handler, PATH), call.start()]
     self.assertEqual(Observer().mock_calls, expected_calls)