blob: d06076ee7d5ccc7e8e3607b9c407108c5a8d6828 [file] [log] [blame]
import json
import os
import posixpath
import socket
from mysos.common import zookeeper
from mysos.common.testing import Fake
from mysos.executor.executor import MysosExecutor
from mysos.executor.mysos_task_runner import MysosTaskRunner, TaskRunnerProvider
from mysos.executor.noop_installer import NoopPackageInstaller
from mysos.executor.sandbox import Sandbox
from .fake import FakeTaskControlProvider
import mesos.native
from twitter.common import app, log
from twitter.common.log.options import LogOptions
from twitter.common.zookeeper.serverset.endpoint import Endpoint, ServiceInstance
from zake.fake_client import FakeClient
SANDBOX_ROOT = os.path.join(os.path.realpath('.'), "sandbox")
class FakeTaskRunnerProvider(TaskRunnerProvider):
"""
Creates a MysosTaskRunner with FakeTaskControl for testing purposes.
NOTE: zake is used so a running ZK server is not required.
"""
def __init__(self, task_control_provider):
self._task_control_provider = task_control_provider
def from_task(self, task, sandbox):
data = json.loads(task.data)
cluster_name, port, zk_url = data['cluster'], data['port'], data['zk_url']
_, servers, path = zookeeper.parse(zk_url)
zk_client = FakeClient()
zk_client.start()
self_instance = ServiceInstance(Endpoint(socket.gethostbyname(socket.gethostname()), port))
task_control = self._task_control_provider.from_task(task, sandbox)
return MysosTaskRunner(
self_instance,
zk_client,
posixpath.join(path, cluster_name),
NoopPackageInstaller(),
task_control,
Fake())
# This is a testing executor. We log more verbosely.
LogOptions.disable_disk_logging()
LogOptions.set_stderr_log_level('google:DEBUG')
def proxy_main():
def main(args, options):
log.info('Starting testing mysos executor')
executor = MysosExecutor(
FakeTaskRunnerProvider(FakeTaskControlProvider()), Sandbox(SANDBOX_ROOT))
driver = mesos.native.MesosExecutorDriver(executor)
driver.run()
log.info('Exiting executor main')
app.main()