From 0aca5e7669ab2bdeff2bbecfb439631f9466416d Mon Sep 17 00:00:00 2001 From: Grzegorz Bielecki Date: Fri, 3 Feb 2023 14:26:15 +0100 Subject: [PATCH] Add config and fix some files --- chat_client/src/main.py | 5 ++- chat_server/Dockerfile | 21 ++++----- chat_server/tests/test_main.py | 57 ++++++++++++++++++++++++ common/Dockerfile | 4 ++ docker_compose.yml => docker-compose.yml | 6 +-- grpc_chat_deployment.yaml | 26 +++++++++++ grpc_chat_service.yaml | 13 ++++++ kind_config.yaml | 10 +++++ tox.ini | 1 + 9 files changed, 125 insertions(+), 18 deletions(-) create mode 100644 common/Dockerfile rename docker_compose.yml => docker-compose.yml (82%) create mode 100644 grpc_chat_deployment.yaml create mode 100644 grpc_chat_service.yaml create mode 100644 kind_config.yaml diff --git a/chat_client/src/main.py b/chat_client/src/main.py index 33e1ca1..5de3517 100644 --- a/chat_client/src/main.py +++ b/chat_client/src/main.py @@ -1,4 +1,5 @@ import logging +import os from getpass import getpass import grpc @@ -159,7 +160,7 @@ def _open_chat_receiver(self) -> None: response_iterator = self._stub.RecieveMessages( chat_pb2.RecieveMessagesRequest(to_user_login=self._username) ) - self._receiver = chat_receiver.ChatReceiver(response_iterator) + self._receiver = ChatReceiver(response_iterator) self._receiver.start() def _start_chat(self) -> None: @@ -273,7 +274,7 @@ def _close_chat_receiver(self) -> None: if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.DEBUG) - chat_client = ChatClient("localhost", 50051) + chat_client = ChatClient(os.environ["CHAT_SERVER_IP_ADDR"], 50051) chat_client.connect() chat_client.run() diff --git a/chat_server/Dockerfile b/chat_server/Dockerfile index a138341..20656c0 100644 --- a/chat_server/Dockerfile +++ b/chat_server/Dockerfile @@ -2,20 +2,15 @@ FROM python:3.11 EXPOSE 50051 -RUN mkdir /chat_server -VOLUME /chat_server/src +ENV ETCD_SERVER_IP_ADDR=${ETCD_SERVER_IP_ADDR} -WORKDIR /chat_server/src - -# COPY protobufs/ /service/protobufs/ -# COPY chat_server/src /service/chat_server/src -# RUN python -m -I. --python_out=/service/chat_server/src --pyi_out=/service/chat_server/src \ -# --grpc_python_out=/service/chat_server/src protobufs/chat.proto -COPY requirements.txt . +COPY . /grpc_chat/chat_server/ +WORKDIR /grpc_chat/ +RUN ls +RUN ls chat_server +RUN ls chat_server/src RUN python -m pip install --upgrade pip -RUN python -m pip install --no-cache-dir -r requirements.txt - -COPY . . +RUN python -m pip install --no-cache-dir -r chat_server/requirements.txt -CMD ["python", "-u", "./main.py"] +CMD ["python", "-u","-m", "chat_server.src.main"] \ No newline at end of file diff --git a/chat_server/tests/test_main.py b/chat_server/tests/test_main.py index 81d5f1f..44bcd4f 100644 --- a/chat_server/tests/test_main.py +++ b/chat_server/tests/test_main.py @@ -106,5 +106,62 @@ def test_send_message_user_not_found(self, f"User Bruce not found" ) + @patch("chat_server.src.main.chat_pb2") + @patch("chat_server.src.main.EtcdMessagesHandler") + @patch("chat_server.src.main.logging") + @patch("chat_server.src.main.Parse") + def test_receive_messages(self, + parse: Mock, + _logging: Mock, + etcd_message_handler: Mock, + chat_pb2: Mock): + """Tests chat_server.src.auth.login_user() method.""" + request = Mock( + message=Mock( + to_user_login="Batman", + ) + ) + context = Mock( + is_active=Mock( + return_value=True + ) + ) + msg_handler = Mock( + get_elems_from_queue=Mock( + side_effect=[ + [("1", "Message1"), ("2", "Message2"), ("3", "Message3")], + [], + [("1", "Message4"), ("2", "Message5"), ("3", "Message6")], + InterruptedError() + ] + ) + ) + etcd_message_handler.return_value = msg_handler + empt_message = Mock() + chat_pb2.Message.return_value = empt_message + + list(self.chat_server.RecieveMessages(request, context)) + + etcd_message_handler.assert_called_once_with( + client=self.etcd_client, + to_user="Batman" + ) + + self.assertEqual(msg_handler.call_count, 3) + + parse.assert_has_calls( + call("Message1", empt_message), + call("Message2", empt_message), + call("Message3", empt_message), + call("Message4", empt_message), + call("Message5", empt_message), + call("Message6", empt_message), + ) + self.assertEqual(_logging.debug.call_count, 4) + msg_handler.store_and_delete_sent_messages.assert_called_once_with( + [("1", "Message4"), ("2", "Message5"), ("3", "Message6")]) + _logging.info.assert_called_once_with() + + if __name__ == '__main__': unittest.main() \ No newline at end of file diff --git a/common/Dockerfile b/common/Dockerfile new file mode 100644 index 0000000..11a9071 --- /dev/null +++ b/common/Dockerfile @@ -0,0 +1,4 @@ +FROM python:3.8 +COPY /*.py* /grpc_chat/common/ +RUN ls +RUN ls /grpc_chat \ No newline at end of file diff --git a/docker_compose.yml b/docker-compose.yml similarity index 82% rename from docker_compose.yml rename to docker-compose.yml index 8a794b3..a87b89b 100644 --- a/docker_compose.yml +++ b/docker-compose.yml @@ -5,9 +5,9 @@ services: build: context: ./chat_server dockerfile: Dockerfile - image: chat_server - volumes: - - ./chat_server/src:/chat_server/src + image: chat-server:0.1.0 + environment: + - ETCD_SERVER_IP_ADDR=172.28.0.2 ports: - 50051:50051 networks: diff --git a/grpc_chat_deployment.yaml b/grpc_chat_deployment.yaml new file mode 100644 index 0000000..c969217 --- /dev/null +++ b/grpc_chat_deployment.yaml @@ -0,0 +1,26 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: grpc-chat-deployment + labels: + app: grpc-chat +spec: + replicas: 2 + selector: + matchLabels: + app: grpc-chat-label + template: + metadata: + labels: + app: grpc-chat-label + spec: + nodeSelector: + type: backend + containers: + - name: grpc-chat-container + image: chat-server:0.1.0 + env: + - name: ETCD_SERVER_IP_ADDR + value: 172.28.0.2 + ports: + - containerPort: 50051 diff --git a/grpc_chat_service.yaml b/grpc_chat_service.yaml new file mode 100644 index 0000000..3269ba3 --- /dev/null +++ b/grpc_chat_service.yaml @@ -0,0 +1,13 @@ +apiVersion: apps/v1 +kind: Service +metadata: + name: grpc-chat-service + labels: + app: grpc-chat-label +spec: + ports: + - port: 50051 + targetPort: 50051 + protocol: TCP + selector: + app: grpc-chat-label diff --git a/kind_config.yaml b/kind_config.yaml new file mode 100644 index 0000000..a306085 --- /dev/null +++ b/kind_config.yaml @@ -0,0 +1,10 @@ +kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +nodes: +- role: control-plane +- role: worker + labels: + type: backend +- role: worker + labels: + type: backend \ No newline at end of file diff --git a/tox.ini b/tox.ini index 96fc07a..411246c 100644 --- a/tox.ini +++ b/tox.ini @@ -13,6 +13,7 @@ deps = commands = coverage erase coverage run -m pytest --junitxml=pytest-report.xml + coverage xml -i [coverage:report] skip_empty = true