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()
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()
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()