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:
bharnden 2019-03-22 13:45:53 -07:00
parent 3498a59ed5
commit 1f3e72e014
5 changed files with 130 additions and 11 deletions

View file

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

View file

@ -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

View file

@ -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;
} }

View file

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

View file

@ -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