def test_namespace_to_dict(): _namespaces = { 'head': Namespace( host='1.2.3.4', name='encoder', parallel=2, pea_id=-1, polling=PollingType.ANY, port_ctrl=39011, port_expose=8000, uses_after='_pass', uses_before=None, ), 'tail': Namespace( host='1.2.3.4', name='encoder', parallel=2, pea_id=-1, polling=PollingType.ANY, port_ctrl=46937, port_expose=8000, uses_after='_pass', uses_before=None, ), 'peas': [ Namespace( host='1.2.3.4', name='encoder', parallel=2, pea_id=-1, polling=PollingType.ANY, port_ctrl=44747, port_expose=8000, uses='helloworld.encoder.yml', uses_after='_pass', uses_before=None, ), Namespace( host='1.2.3.4', name='encoder', parallel=2, pea_id=-1, polling=PollingType.ANY, port_ctrl=48957, port_expose=8000, uses='helloworld.encoder.yml', uses_after='_pass', uses_before=None, ), ], } _dict_args = ArgNamespace.flatten_to_dict(args=_namespaces) assert 'head' in _dict_args assert 'tail' in _dict_args assert 'peas' in _dict_args assert len(_dict_args['peas']) == 2 assert _namespaces['head'].polling.value == _dict_args['head']['polling'] assert _namespaces['peas'][0].uses == _dict_args['peas'][0]['uses']
async def test_scale_remote_pod_async( deployment_params, async_jinad_client, slow_down_tests ): num_replicas, scale_to, shards = deployment_params args = set_deployment_parser().parse_args( ['--replicas', str(num_replicas), '--shards', str(shards)] ) payload = replace_enum_to_str(ArgNamespace.flatten_to_dict(args)) workspace_id = await async_jinad_client.workspaces.create( paths=[os.path.join(cur_dir, cur_dir)] ) success, pod_id = await async_jinad_client.deployments.create( workspace_id=workspace_id, payload=payload ) assert success resp = await async_jinad_client.deployments.get(pod_id) remote_pod_args = resp['arguments']['object']['arguments'] assert remote_pod_args['replicas'] == num_replicas assert remote_pod_args['shards'] == shards await async_jinad_client.deployments.scale(id=pod_id, replicas=scale_to) resp = await async_jinad_client.deployments.get(pod_id) remote_pod_args = resp['arguments']['object']['arguments'] assert remote_pod_args['replicas'] == scale_to assert remote_pod_args['shards'] == shards assert await async_jinad_client.deployments.delete(pod_id)
def test_scale_remote_pod(pod_params): num_replicas, scale_to, shards = pod_params pod_id = None args = set_pod_parser().parse_args( ['--replicas', str(num_replicas), '--shards', str(shards)] ) payload = replace_enum_to_str(ArgNamespace.flatten_to_dict(args)) try: workspace_id = jinad_client.workspaces.create( paths=[os.path.join(cur_dir, cur_dir)] ) success, pod_id = jinad_client.pods.create( workspace_id=workspace_id, payload=payload ) assert success remote_pod_args = jinad_client.pods.get(pod_id)['arguments']['object'][ 'arguments' ] assert remote_pod_args['identity'] == pod_id assert remote_pod_args['replicas'] == num_replicas assert remote_pod_args['shards'] == shards jinad_client.pods.scale(id=pod_id, replicas=scale_to) remote_pod_args = jinad_client.pods.get(pod_id)['arguments']['object'][ 'arguments' ] assert remote_pod_args['identity'] == pod_id assert remote_pod_args['replicas'] == scale_to assert remote_pod_args['shards'] == shards finally: if pod_id: assert jinad_client.pods.delete(pod_id), 'Pod termination failed' print(f'Remote Pod {pod_id} successfully terminated')
async def test_jinad_pod_create_async_given_unprocessable_entity( pod_args, async_jinad_client): payload = replace_enum_to_str(ArgNamespace.flatten_to_dict(pod_args)) payload['pod_role'] = 'RANDOM' # patch an invalid pod role type workspace_id = await async_jinad_client.workspaces.create( paths=[os.path.join(cur_dir, cur_dir)]) success, resp = await async_jinad_client.deployments.create( workspace_id=workspace_id, payload=payload) assert not success assert 'validation error in the payload' in resp
async def test_rolloing_update_remote_pod(async_jinad_client, pod_args): payload = replace_enum_to_str(ArgNamespace.flatten_to_dict(pod_args)) workspace_id = await async_jinad_client.workspaces.create( paths=[os.path.join(cur_dir, cur_dir)] ) success, pod_id = await async_jinad_client.deployments.create( workspace_id=workspace_id, payload=payload ) assert success await async_jinad_client.deployments.rolling_update( id=pod_id, uses_with={'foo': 'bar-new', 'dump_path': 'test'} ) # TODO: HOW TO CHECK PEA ARGS IN JINAD? ROLLING UPDATE WON'T CHANGE POD ARGS # TODO: PEA_STORE IS EMPTY _ = await async_jinad_client.deployments.get(pod_id) assert async_jinad_client.deployments.delete(pod_id) assert async_jinad_client.workspaces.delete(workspace_id)
async def test_remote_jinad_pod_async(pod_args, async_jinad_client): payload = replace_enum_to_str(ArgNamespace.flatten_to_dict(pod_args)) workspace_id = await async_jinad_client.workspaces.create( paths=[os.path.join(cur_dir, cur_dir)]) assert await async_jinad_client.deployments.alive() # create pod success, pod_id = await async_jinad_client.deployments.create( workspace_id=workspace_id, payload=payload) assert success # get pod status resp = await async_jinad_client.deployments.get(pod_id) remote_pod_args = resp['arguments']['object']['arguments'] # delete pod assert await async_jinad_client.deployments.delete(pod_id) resp = await async_jinad_client.deployments.get(pod_id) assert resp == pod_id + ' not found in store'