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.channel = None
def create_session(self):
return self.stub.CreateSession(core_pb2.CreateSessionRequest())
def create_session(self, _id=None):
request = core_pb2.CreateSessionRequest(id=_id)
return self.stub.CreateSession(request)
def delete_session(self, _id):
request = core_pb2.DeleteSessionRequest()

View file

@ -256,7 +256,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
def CreateSession(self, request, context):
logging.debug("create session: %s", request)
session = self.coreemu.create_session()
session = self.coreemu.create_session(request.id)
session.set_state(EventTypes.DEFINITION_STATE)
# default set session location

View file

@ -121,12 +121,12 @@ service CoreApi {
// rpc request/response messages
message CreateSessionRequest {
int32 id = 1;
}
message CreateSessionResponse {
int32 id = 1;
int32 state = 2;
SessionState state = 2;
}
message DeleteSessionRequest {
@ -149,7 +149,7 @@ message GetSessionRequest {
}
message GetSessionResponse {
int32 state = 1;
SessionState state = 1;
repeated Node nodes = 2;
repeated Link links = 3;
}
@ -713,7 +713,7 @@ message ConfigOption {
message Session {
int32 id = 1;
int32 state = 2;
SessionState state = 2;
int32 nodes = 3;
}

View file

@ -4,6 +4,7 @@ Unit test fixture module.
import os
import threading
import time
import pytest
from mock.mock import MagicMock
@ -27,7 +28,6 @@ from core.enumerations import LinkTypes
from core.enumerations import MessageFlags
from core.enumerations import NodeTlvs
from core.enumerations import NodeTypes
from core.grpc.client import CoreGrpcClient
from core.grpc.server import CoreGrpcServer
from core.misc import ipaddress
from core.misc.ipaddress import MacAddress
@ -214,6 +214,7 @@ def grpc_server():
thread = threading.Thread(target=grpc_server.listen)
thread.daemon = True
thread.start()
time.sleep(0.1)
yield grpc_server
coremu.shutdown()
grpc_server.server.stop(None)

View file

@ -4,7 +4,7 @@ import time
import pytest
from core.grpc import core_pb2
from core.enumerations import NodeTypes
from core.enumerations import NodeTypes, EventTypes
from core.grpc.client import CoreGrpcClient
MODELS = [
@ -22,13 +22,14 @@ NET_TYPES = [
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
client = CoreGrpcClient()
# when
with client.context_connect():
response = client.create_session()
response = client.create_session(session_id)
# then
assert isinstance(response.id, int)
@ -36,6 +37,9 @@ class TestGrpc:
session = grpc_server.coreemu.sessions.get(response.id)
assert session is not None
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):
# given
@ -49,3 +53,116 @@ class TestGrpc:
# then
assert response.result is True
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