Exemple #1
0
    def test__finish_aborted(self):
        """Tests docker runtime finish when aborted."""
        # Access to a protected member
        # pylint: disable=W0212
        if os.name == 'nt':
            treadmill.ad.credential_spec.cleanup = mock.Mock()

        treadmill.runtime.save_app(self.manifest, self.data_dir)

        client = mock.MagicMock()
        docker.from_env.return_value = client

        container = mock.MagicMock()
        client.containers.get.return_value = container

        with io.open(os.path.join(self.data_dir, 'aborted'), 'w') as aborted:
            aborted.write('{"why": "reason", "payload": "test"}')

        docker_runtime = runtime.DockerRuntime(self.tm_env, self.container_dir,
                                               {'version': '1.24'})

        docker_runtime._finish()

        app_abort.report_aborted.assert_called_with(self.tm_env,
                                                    'proid.app#001',
                                                    why='reason',
                                                    payload='test')

        treadmill.runtime.archive_logs.assert_called()
Exemple #2
0
    def test__run_aborted(self):
        """Tests docker runtime run when app has been aborted."""
        # Access to a protected member
        # pylint: disable=W0212
        docker_runtime = runtime.DockerRuntime(self.tm_env, self.container_dir)

        treadmill.runtime.docker.runtime._create_container.side_effect = \
            docker.errors.ImageNotFound('test')

        with self.assertRaises(treadmill.exc.ContainerSetupError) as context:
            docker_runtime._run(self.manifest)

            self.assertEqual(app_abort.AbortedReason.IMAGE,
                             context.exception.why)

        app_abort.report_aborted.reset_mock()

        app_presence = mock.Mock()
        treadmill.presence.EndpointPresence.return_value = app_presence
        app_presence.register.side_effect = exc.ContainerSetupError('test')

        with self.assertRaises(treadmill.exc.ContainerSetupError) as context:
            docker_runtime._run(self.manifest)

            self.assertEqual(app_abort.AbortedReason.PRESENCE,
                             context.exception.why)
    def test__finish_no_info(self):
        """Tests docker runtime finish when not aborted or exited."""
        # Access to a protected member
        # pylint: disable=W0212
        if os.name == 'nt':
            treadmill.ad.credential_spec.cleanup = mock.Mock()

        treadmill.runtime.save_app(self.manifest, self.data_dir)

        client = mock.MagicMock()
        docker.from_env.return_value = client

        container = mock.MagicMock()
        client.containers.get.return_value = container

        type(container).attrs = mock.PropertyMock(return_value={
            'State': None
        })

        docker_runtime = runtime.DockerRuntime(
            self.tm_env, self.container_dir, {'version': '1.24'}
        )

        # Should not throw any exception
        docker_runtime._finish()

        treadmill.runtime.archive_logs.assert_called()
Exemple #4
0
    def test__run(self):
        """Tests docker runtime run."""
        # Access to a protected member
        # pylint: disable=W0212
        docker_runtime = runtime.DockerRuntime(self.tm_env, self.container_dir,
                                               {'version': '1.24'})

        container = mock.Mock()
        treadmill.runtime.docker.runtime._create_container.return_value = \
            container

        type(container).status = mock.PropertyMock(
            side_effect=['running', 'running', 'exited'])

        docker_runtime._run(self.manifest)

        runtime._create_container.assert_called_once()
        container.start.assert_called_once()
        treadmill.trace.post.assert_called_with(
            self.tm_env.app_events_dir,
            events.ServiceRunningTraceEvent(instanceid='proid.app#001',
                                            uniqueid='abcdefghijklm',
                                            service='docker'))

        self.assertEqual(container.reload.call_count, 1)
    def test__finish(self):
        """Tests docker runtime finish."""
        # Access to a protected member
        # pylint: disable=W0212
        if os.name == 'nt':
            treadmill.ad.credential_spec.cleanup = mock.Mock()

        treadmill.runtime.save_app(self.manifest, self.data_dir)

        client = mock.MagicMock()
        docker.from_env.return_value = client

        container = mock.MagicMock()
        client.containers.get.return_value = container

        type(container).attrs = mock.PropertyMock(return_value={
            'State': {
                'OOMKilled': False,
                'ExitCode': 5
            }
        })

        docker_runtime = runtime.DockerRuntime(
            self.tm_env, self.container_dir, {'version': '1.24'}
        )

        docker_runtime._finish()

        container.remove.assert_called_with(force=True)
        treadmill.appevents.post.assert_called_with(
            self.tm_env.app_events_dir,
            events.FinishedTraceEvent(
                instanceid='proid.app#001',
                rc=5,
                signal=0,
                payload=mock.ANY
            )
        )

        treadmill.appevents.post.reset_mock()
        type(container).attrs = mock.PropertyMock(return_value={
            'State': {
                'OOMKilled': True
            }
        })

        docker_runtime._finish()

        treadmill.appevents.post.assert_called_with(
            self.tm_env.app_events_dir,
            events.KilledTraceEvent(
                instanceid='proid.app#001',
                is_oom=True,
            )
        )

        treadmill.runtime.archive_logs.assert_called()