grpc create session can now specify id, updated all session proto to use SessionState for state, added suite for session testing for grpc
This commit is contained in:
parent
3498a59ed5
commit
1f3e72e014
5 changed files with 130 additions and 11 deletions
|
@ -44,8 +44,9 @@ class CoreGrpcClient(object):
|
||||||
self.stub = None
|
self.stub = None
|
||||||
self.channel = None
|
self.channel = None
|
||||||
|
|
||||||
def create_session(self):
|
def create_session(self, _id=None):
|
||||||
return self.stub.CreateSession(core_pb2.CreateSessionRequest())
|
request = core_pb2.CreateSessionRequest(id=_id)
|
||||||
|
return self.stub.CreateSession(request)
|
||||||
|
|
||||||
def delete_session(self, _id):
|
def delete_session(self, _id):
|
||||||
request = core_pb2.DeleteSessionRequest()
|
request = core_pb2.DeleteSessionRequest()
|
||||||
|
|
|
@ -256,7 +256,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
||||||
|
|
||||||
def CreateSession(self, request, context):
|
def CreateSession(self, request, context):
|
||||||
logging.debug("create session: %s", request)
|
logging.debug("create session: %s", request)
|
||||||
session = self.coreemu.create_session()
|
session = self.coreemu.create_session(request.id)
|
||||||
session.set_state(EventTypes.DEFINITION_STATE)
|
session.set_state(EventTypes.DEFINITION_STATE)
|
||||||
|
|
||||||
# default set session location
|
# default set session location
|
||||||
|
|
|
@ -121,12 +121,12 @@ service CoreApi {
|
||||||
|
|
||||||
// rpc request/response messages
|
// rpc request/response messages
|
||||||
message CreateSessionRequest {
|
message CreateSessionRequest {
|
||||||
|
int32 id = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message CreateSessionResponse {
|
message CreateSessionResponse {
|
||||||
int32 id = 1;
|
int32 id = 1;
|
||||||
int32 state = 2;
|
SessionState state = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message DeleteSessionRequest {
|
message DeleteSessionRequest {
|
||||||
|
@ -149,7 +149,7 @@ message GetSessionRequest {
|
||||||
}
|
}
|
||||||
|
|
||||||
message GetSessionResponse {
|
message GetSessionResponse {
|
||||||
int32 state = 1;
|
SessionState state = 1;
|
||||||
repeated Node nodes = 2;
|
repeated Node nodes = 2;
|
||||||
repeated Link links = 3;
|
repeated Link links = 3;
|
||||||
}
|
}
|
||||||
|
@ -713,7 +713,7 @@ message ConfigOption {
|
||||||
|
|
||||||
message Session {
|
message Session {
|
||||||
int32 id = 1;
|
int32 id = 1;
|
||||||
int32 state = 2;
|
SessionState state = 2;
|
||||||
int32 nodes = 3;
|
int32 nodes = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ Unit test fixture module.
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import threading
|
import threading
|
||||||
|
import time
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from mock.mock import MagicMock
|
from mock.mock import MagicMock
|
||||||
|
@ -27,7 +28,6 @@ from core.enumerations import LinkTypes
|
||||||
from core.enumerations import MessageFlags
|
from core.enumerations import MessageFlags
|
||||||
from core.enumerations import NodeTlvs
|
from core.enumerations import NodeTlvs
|
||||||
from core.enumerations import NodeTypes
|
from core.enumerations import NodeTypes
|
||||||
from core.grpc.client import CoreGrpcClient
|
|
||||||
from core.grpc.server import CoreGrpcServer
|
from core.grpc.server import CoreGrpcServer
|
||||||
from core.misc import ipaddress
|
from core.misc import ipaddress
|
||||||
from core.misc.ipaddress import MacAddress
|
from core.misc.ipaddress import MacAddress
|
||||||
|
@ -214,6 +214,7 @@ def grpc_server():
|
||||||
thread = threading.Thread(target=grpc_server.listen)
|
thread = threading.Thread(target=grpc_server.listen)
|
||||||
thread.daemon = True
|
thread.daemon = True
|
||||||
thread.start()
|
thread.start()
|
||||||
|
time.sleep(0.1)
|
||||||
yield grpc_server
|
yield grpc_server
|
||||||
coremu.shutdown()
|
coremu.shutdown()
|
||||||
grpc_server.server.stop(None)
|
grpc_server.server.stop(None)
|
||||||
|
|
|
@ -4,7 +4,7 @@ import time
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from core.grpc import core_pb2
|
from core.grpc import core_pb2
|
||||||
from core.enumerations import NodeTypes
|
from core.enumerations import NodeTypes, EventTypes
|
||||||
from core.grpc.client import CoreGrpcClient
|
from core.grpc.client import CoreGrpcClient
|
||||||
|
|
||||||
MODELS = [
|
MODELS = [
|
||||||
|
@ -22,13 +22,14 @@ NET_TYPES = [
|
||||||
|
|
||||||
|
|
||||||
class TestGrpc:
|
class TestGrpc:
|
||||||
def test_create_session(self, grpc_server):
|
@pytest.mark.parametrize("session_id", [None, 6013])
|
||||||
|
def test_create_session(self, grpc_server, session_id):
|
||||||
# given
|
# given
|
||||||
client = CoreGrpcClient()
|
client = CoreGrpcClient()
|
||||||
|
|
||||||
# when
|
# when
|
||||||
with client.context_connect():
|
with client.context_connect():
|
||||||
response = client.create_session()
|
response = client.create_session(session_id)
|
||||||
|
|
||||||
# then
|
# then
|
||||||
assert isinstance(response.id, int)
|
assert isinstance(response.id, int)
|
||||||
|
@ -36,6 +37,9 @@ class TestGrpc:
|
||||||
session = grpc_server.coreemu.sessions.get(response.id)
|
session = grpc_server.coreemu.sessions.get(response.id)
|
||||||
assert session is not None
|
assert session is not None
|
||||||
assert session.state == response.state
|
assert session.state == response.state
|
||||||
|
if session_id is not None:
|
||||||
|
assert response.id == session_id
|
||||||
|
assert session.session_id == session_id
|
||||||
|
|
||||||
def test_delete_session(self, grpc_server):
|
def test_delete_session(self, grpc_server):
|
||||||
# given
|
# given
|
||||||
|
@ -49,3 +53,116 @@ class TestGrpc:
|
||||||
# then
|
# then
|
||||||
assert response.result is True
|
assert response.result is True
|
||||||
assert grpc_server.coreemu.sessions.get(session.session_id) is None
|
assert grpc_server.coreemu.sessions.get(session.session_id) is None
|
||||||
|
|
||||||
|
def test_get_session(self, grpc_server):
|
||||||
|
# given
|
||||||
|
client = CoreGrpcClient()
|
||||||
|
session = grpc_server.coreemu.create_session()
|
||||||
|
session.add_node()
|
||||||
|
session.set_state(EventTypes.DEFINITION_STATE)
|
||||||
|
|
||||||
|
# then
|
||||||
|
with client.context_connect():
|
||||||
|
response = client.get_session(session.session_id)
|
||||||
|
|
||||||
|
# then
|
||||||
|
assert response.state == core_pb2.DEFINITION
|
||||||
|
assert len(response.nodes) == 1
|
||||||
|
assert len(response.links) == 0
|
||||||
|
|
||||||
|
def test_get_sessions(self, grpc_server):
|
||||||
|
# given
|
||||||
|
client = CoreGrpcClient()
|
||||||
|
session = grpc_server.coreemu.create_session()
|
||||||
|
|
||||||
|
# then
|
||||||
|
with client.context_connect():
|
||||||
|
response = client.get_sessions()
|
||||||
|
|
||||||
|
# then
|
||||||
|
found_session = None
|
||||||
|
for current_session in response.sessions:
|
||||||
|
if current_session.id == session.session_id:
|
||||||
|
found_session = current_session
|
||||||
|
break
|
||||||
|
assert len(response.sessions) == 1
|
||||||
|
assert found_session is not None
|
||||||
|
|
||||||
|
def test_get_session_options(self, grpc_server):
|
||||||
|
# given
|
||||||
|
client = CoreGrpcClient()
|
||||||
|
session = grpc_server.coreemu.create_session()
|
||||||
|
|
||||||
|
# then
|
||||||
|
with client.context_connect():
|
||||||
|
response = client.get_session_options(session.session_id)
|
||||||
|
|
||||||
|
# then
|
||||||
|
assert len(response.groups) > 0
|
||||||
|
|
||||||
|
def test_get_session_location(self, grpc_server):
|
||||||
|
# given
|
||||||
|
client = CoreGrpcClient()
|
||||||
|
session = grpc_server.coreemu.create_session()
|
||||||
|
|
||||||
|
# then
|
||||||
|
with client.context_connect():
|
||||||
|
response = client.get_session_location(session.session_id)
|
||||||
|
|
||||||
|
# then
|
||||||
|
assert response.scale == 1.0
|
||||||
|
assert response.position.x == 0
|
||||||
|
assert response.position.y == 0
|
||||||
|
assert response.position.z == 0
|
||||||
|
assert response.position.lat == 0
|
||||||
|
assert response.position.lon == 0
|
||||||
|
assert response.position.alt == 0
|
||||||
|
|
||||||
|
def test_set_session_location(self, grpc_server):
|
||||||
|
# given
|
||||||
|
client = CoreGrpcClient()
|
||||||
|
session = grpc_server.coreemu.create_session()
|
||||||
|
|
||||||
|
# then
|
||||||
|
scale = 2
|
||||||
|
xyz = (1, 1, 1)
|
||||||
|
lat_lon_alt = (1, 1, 1)
|
||||||
|
with client.context_connect():
|
||||||
|
response = client.set_session_location(
|
||||||
|
session.session_id,
|
||||||
|
x=xyz[0], y=xyz[1], z=xyz[2],
|
||||||
|
lat=lat_lon_alt[0], lon=lat_lon_alt[1], alt=lat_lon_alt[2],
|
||||||
|
scale=scale
|
||||||
|
)
|
||||||
|
|
||||||
|
# then
|
||||||
|
assert response.result is True
|
||||||
|
assert session.location.refxyz == xyz
|
||||||
|
assert session.location.refscale == scale
|
||||||
|
assert session.location.refgeo == lat_lon_alt
|
||||||
|
|
||||||
|
def test_set_session_options(self, grpc_server):
|
||||||
|
# given
|
||||||
|
client = CoreGrpcClient()
|
||||||
|
session = grpc_server.coreemu.create_session()
|
||||||
|
|
||||||
|
# then
|
||||||
|
with client.context_connect():
|
||||||
|
response = client.set_session_options(session.session_id, {"preservedir": "1"})
|
||||||
|
|
||||||
|
# then
|
||||||
|
assert response.result is True
|
||||||
|
assert session.options.get_config("preservedir") == "1"
|
||||||
|
|
||||||
|
def test_set_session_state(self, grpc_server):
|
||||||
|
# given
|
||||||
|
client = CoreGrpcClient()
|
||||||
|
session = grpc_server.coreemu.create_session()
|
||||||
|
|
||||||
|
# then
|
||||||
|
with client.context_connect():
|
||||||
|
response = client.set_session_state(session.session_id, EventTypes.DEFINITION_STATE)
|
||||||
|
|
||||||
|
# then
|
||||||
|
assert response.result is True
|
||||||
|
assert session.state == EventTypes.DEFINITION_STATE.value
|
||||||
|
|
Loading…
Add table
Reference in a new issue