mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-23 19:44:20 +00:00
Create network tests
This commit is contained in:
parent
efd18fc3a7
commit
1b00ea8ae6
7 changed files with 75 additions and 5 deletions
2
README.md
Normal file
2
README.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
# `royalnet`
|
||||
|
|
@ -1,2 +1,3 @@
|
|||
python-telegram-bot>=11.1.0
|
||||
websockets>=7.0
|
||||
pytest>=4.3.1
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
from .telegram import TelegramBot
|
||||
|
||||
__all__ = ["TelegramBot"]
|
|
@ -6,6 +6,10 @@ from ..utils import asyncify, Call, Command
|
|||
from ..network import RoyalnetLink, Message
|
||||
|
||||
|
||||
async def todo(message: Message):
|
||||
pass
|
||||
|
||||
|
||||
class TelegramBot:
|
||||
def __init__(self,
|
||||
api_key: str,
|
||||
|
@ -17,7 +21,7 @@ class TelegramBot:
|
|||
self.should_run: bool = False
|
||||
self.offset: int = -100
|
||||
self.missing_command = missing_command
|
||||
self.network: RoyalnetLink = RoyalnetLink(master_server_uri, master_server_secret, "telegram", null)
|
||||
self.network: RoyalnetLink = RoyalnetLink(master_server_uri, master_server_secret, "telegram", todo)
|
||||
# Generate commands
|
||||
self.commands = {}
|
||||
for command in commands:
|
||||
|
|
|
@ -68,7 +68,7 @@ class RoyalnetLink:
|
|||
self.request_handler = request_handler
|
||||
self._pending_requests: typing.Dict[typing.Optional[Message]] = {}
|
||||
self._connect_event: asyncio.Event = asyncio.Event()
|
||||
self._identify_event: asyncio.Event = asyncio.Event()
|
||||
self.identify_event: asyncio.Event = asyncio.Event()
|
||||
|
||||
async def connect(self):
|
||||
log.info(f"Connecting to {self.master_uri}...")
|
||||
|
@ -83,7 +83,7 @@ class RoyalnetLink:
|
|||
except websockets.ConnectionClosed:
|
||||
self.websocket = None
|
||||
self._connect_event.clear()
|
||||
self._identify_event.clear()
|
||||
self.identify_event.clear()
|
||||
log.info(f"Connection to {self.master_uri} was closed.")
|
||||
# What to do now? Let's just reraise.
|
||||
raise
|
||||
|
@ -100,7 +100,7 @@ class RoyalnetLink:
|
|||
response = response_package.data
|
||||
if isinstance(response, ErrorMessage):
|
||||
raise NetworkError(response, "Server returned error while identifying self")
|
||||
self._identify_event.set()
|
||||
self.identify_event.set()
|
||||
log.info(f"Identified successfully!")
|
||||
|
||||
@requires_identification
|
||||
|
@ -128,7 +128,7 @@ class RoyalnetLink:
|
|||
while True:
|
||||
if self.websocket is None:
|
||||
await self.connect()
|
||||
if not self._identify_event.is_set():
|
||||
if not self.identify_event.is_set():
|
||||
await self.identify()
|
||||
package: Package = await self.receive()
|
||||
# Package is a response
|
||||
|
|
27
setup.py
Normal file
27
setup.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
import setuptools
|
||||
|
||||
with open("README.md", "r") as f:
|
||||
long_description = f.read()
|
||||
|
||||
setuptools.setup(
|
||||
name="royalnet",
|
||||
version="5.0a1",
|
||||
author="Stefano Pigozzi",
|
||||
author_email="ste.pigozzi@gmail.com",
|
||||
description="The great bot network of the Royal Games community",
|
||||
long_description=long_description,
|
||||
long_description_content_type="text/markdown",
|
||||
url="https://github.com/Steffo99/royalnet",
|
||||
packages=setuptools.find_packages(),
|
||||
install_requires=[
|
||||
"python-telegram-bot>=11.1.0",
|
||||
"websockets>=7.0"
|
||||
],
|
||||
python_requires=">=3.7",
|
||||
classifiers=[
|
||||
"Development Status :: 3 - Alpha",
|
||||
"Operating System :: OS Independent",
|
||||
"Programming Language :: Python :: 3.7",
|
||||
"Topic :: Internet"
|
||||
]
|
||||
)
|
33
tests/test_network.py
Normal file
33
tests/test_network.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
import pytest
|
||||
import asyncio
|
||||
from royalnet.network import RoyalnetLink, RoyalnetServer
|
||||
from royalnet.network import Message
|
||||
|
||||
|
||||
async def echo(message: Message):
|
||||
return message
|
||||
|
||||
|
||||
def test_connection():
|
||||
loop = asyncio.SelectorEventLoop()
|
||||
server = RoyalnetServer("localhost", 1234, "testing")
|
||||
link = RoyalnetLink("ws://localhost:1234", "testing", "testing", echo)
|
||||
loop.create_task(server.run())
|
||||
loop.run_until_complete(link.run())
|
||||
assert link.websocket is not None
|
||||
assert link.identify_event.is_set()
|
||||
assert len(server.identified_clients) == 1
|
||||
assert server.identified_clients[0].link_type == "testing"
|
||||
|
||||
|
||||
def test_request():
|
||||
loop = asyncio.SelectorEventLoop()
|
||||
server = RoyalnetServer("localhost", 1234, "testing")
|
||||
link1 = RoyalnetLink("ws://localhost:1234", "testing", "testing1", echo)
|
||||
link2 = RoyalnetLink("ws://localhost:1234", "testing", "testing2", echo)
|
||||
loop.create_task(server.run())
|
||||
loop.create_task(link1.run())
|
||||
loop.create_task(link2.run())
|
||||
message = Message()
|
||||
response = loop.run_until_complete(link1.request(message, "testing2"))
|
||||
assert message is response
|
Loading…
Reference in a new issue