Skip to content

Commit d0835f1

Browse files
Mike ProsserMike Prosser
authored andcommitted
create a basic fake server and passing basic tests for it
1 parent 5d5404f commit d0835f1

File tree

2 files changed

+105
-0
lines changed

2 files changed

+105
-0
lines changed

tests/unit/test_fake_server.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
from concurrent import futures
2+
import grpc
3+
import pytest
4+
from google.protobuf.any_pb2 import Any
5+
from ni.pythonpanel.v1.python_panel_service_pb2_grpc import PythonPanelServiceStub
6+
from tests.utils._fake_python_panel_service import FakePythonPanelService
7+
from ni.pythonpanel.v1.python_panel_service_pb2 import (
8+
ConnectRequest,
9+
DisconnectRequest,
10+
GetValueRequest,
11+
SetValueRequest,
12+
)
13+
14+
15+
@pytest.fixture
16+
def grpc_server():
17+
# Create an in-process gRPC server
18+
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
19+
servicer = FakePythonPanelService()
20+
from ni.pythonpanel.v1.python_panel_service_pb2_grpc import (
21+
add_PythonPanelServiceServicer_to_server,
22+
)
23+
add_PythonPanelServiceServicer_to_server(servicer, server)
24+
port = server.add_insecure_port("[::]:0") # Bind to an available port
25+
server.start()
26+
yield server, port
27+
server.stop(None)
28+
29+
30+
@pytest.fixture
31+
def grpc_client(grpc_server):
32+
_, port = grpc_server
33+
channel = grpc.insecure_channel(f"localhost:{port}")
34+
yield PythonPanelServiceStub(channel)
35+
channel.close()
36+
37+
38+
def test_connect(grpc_client):
39+
request = ConnectRequest(panel_id="test_panel", panel_uri="path/to/panel")
40+
response = grpc_client.Connect(request)
41+
assert response is not None # Ensure response is returned
42+
43+
44+
def test_disconnect(grpc_client):
45+
request = DisconnectRequest(panel_id="test_panel")
46+
response = grpc_client.Disconnect(request)
47+
assert response is not None # Ensure response is returned
48+
49+
50+
def test_get_value(grpc_client):
51+
request = GetValueRequest(panel_id="test_panel", value_id="test_value")
52+
response = grpc_client.GetValue(request)
53+
assert response is not None # Ensure response is returned
54+
assert isinstance(response.value, Any) # Ensure the value is of type `Any`
55+
56+
57+
def test_set_value(grpc_client):
58+
value = Any()
59+
value.value = b"test_data"
60+
request = SetValueRequest(panel_id="test_panel", value_id="test_value", value=value)
61+
response = grpc_client.SetValue(request)
62+
assert response is not None # Ensure response is returned
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from concurrent import futures
2+
import grpc
3+
import time
4+
import google.protobuf.any_pb2 as any_pb2
5+
from ni.pythonpanel.v1.python_panel_service_pb2 import ConnectRequest, ConnectResponse, DisconnectRequest, DisconnectResponse, GetValueRequest, GetValueResponse, SetValueRequest, SetValueResponse
6+
from ni.pythonpanel.v1.python_panel_service_pb2_grpc import PythonPanelServiceServicer, add_PythonPanelServiceServicer_to_server
7+
8+
class FakePythonPanelService(PythonPanelServiceServicer):
9+
def Connect(self, request, context):
10+
# Basic implementation for testing
11+
print(f"Connecting to panel: {request.panel_id} at {request.panel_uri}")
12+
return ConnectResponse()
13+
14+
def Disconnect(self, request, context):
15+
# Basic implementation for testing
16+
print(f"Disconnecting from panel: {request.panel_id}")
17+
return DisconnectResponse()
18+
19+
def GetValue(self, request, context):
20+
# Basic implementation for testing
21+
print(f"Getting value for panel: {request.panel_id}, value_id: {request.value_id}")
22+
value = any_pb2.Any() # Placeholder for actual value
23+
return GetValueResponse(value=value)
24+
25+
def SetValue(self, request, context):
26+
# Basic implementation for testing
27+
print(f"Setting value for panel: {request.panel_id}, value_id: {request.value_id}, value: {request.value}")
28+
return SetValueResponse()
29+
30+
def serve():
31+
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
32+
add_PythonPanelServiceServicer_to_server(FakePythonPanelService(), server)
33+
server.add_insecure_port('[::]:50051') # TODO: do we need to find a free port?
34+
server.start()
35+
print("Server is running on port 50051...")
36+
try:
37+
while True:
38+
time.sleep(86400) # Keep the server running
39+
except KeyboardInterrupt:
40+
server.stop(0)
41+
42+
if __name__ == '__main__':
43+
serve()

0 commit comments

Comments
 (0)