예제 #1
0
def test_service_manager():
    manager = ServiceManager("service-manager-1")
    d1 = manager.service_directory
    assert d1 is not None

    # direct mod to directory allowed
    d1["test-1"] = 1
    assert manager.get_service_count() == 1

    d1.pop("test-1")
    assert manager.get_service_count() == 0
예제 #2
0
def test_add_service():
    service_alias = "test-1"
    manager = ServiceManager("service-manager-1")
    service_meta = ServiceMetaData(service_alias)
    test_service = BaseService(service_meta.alias)

    # Add service

    assert manager.add_service(test_service, service_meta) == True

    # Add adding again should fail
    assert manager.add_service(test_service, service_meta) == False
def test_directory_service():
    """
    Start test by getting the directory service
    via a ServiceManager.
    :return:
    """
    service_manager = ServiceManager("test-service-manager-1")
    directory_service = service_manager.get_directory_service_proxy()
    assert directory_service is not None
    assert directory_service.alias == "directory-service"
    assert directory_service.unique_name == '%s/%s' % ("directory-service", directory_service.uuid)
    assert directory_service.get_service_count() == 0
예제 #4
0
def test_stop_service():
    service_alias = "test-1"
    manager = ServiceManager("service-manager-1")
    service_meta = ServiceMetaData(service_alias)
    test_service = BaseService(service_meta.alias)

    # Add service
    assert manager.add_service(test_service, service_meta) == True
    assert manager.get_service_count() is 1

    # Stop
    assert manager.stop_service(service_alias) == True
    assert manager.get_service_count() == 0

    # Stop Again will fail
    assert manager.stop_service(service_alias) == False
def test_output_service_write():
    # create ServiceManager and add services
    service_manager = ServiceManager("service-manager")

    # add worker
    worker_name = "test-worker-1"
    test_worker_1 = TestWorker(worker_name)
    service_meta = ServiceMetaData(worker_name, recovery_enabled=False)
    service_manager.add_service(test_worker_1, service_meta)

    # add output service
    scheduler = Scheduler("scheduler")
    service_alias = "mock-output-service"
    mock_output_service = MockQueuedService(quick_death=True)
    service_meta = ServiceMetaData(service_alias)
    timer = Timer(scheduler, mock_output_pid=mock_output_service)
    service_manager.add_service(mock_output_service, service_meta)

    assert test_worker_1.get_state() == BaseStates.Idle
    assert mock_output_service.get_state() == BaseStates.Idle

    # join and block, waiting for event loop to execute once
    # and then exits. Mock manually controls the event loop.
    # Manually starting services rather than using service_manager
    gevent.joinall(
        [test_worker_1.start(),
         mock_output_service.start(),
         timer.start()])

    # Assert that state is started. State will not be stopped
    # or idle because the services were manually called. Except
    # for the Mock service which will be idle. See the code.
    assert test_worker_1.get_state() == BaseStates.Started
    assert mock_output_service.get_state() == BaseStates.Idle

    # the services ran and I expect the test worker to have queried
    # the directory proxy and found the output service, writing to it.
    result = mock_output_service.get()
    assert result is not None
    assert result == "test-worker-work-result"
    assert mock_output_service.size() == 0