Skip to content

Fix/tests #16

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Mar 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions .github/workflows/CD.yml → .github/workflows/CICD.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,26 @@
name: CD
name: CICD

on:
push:
branches: [master, next, json_import_viewer]
branches: [master, next]

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: "3.9"
- name: Test
run: |
pip install pytest
pip install -r requirements.txt
pytest
build:
runs-on: ubuntu-latest
needs: test
steps:
- name: Checkout
uses: actions/checkout@v4
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ venv/
.vscode/
__pycache__/
.env
data/
/node_modules
latest_logs
schemas.json
build
*.egg-info
7 changes: 6 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,19 @@ classifiers = [
"Homepage" = "https://github.com/Geode-solutions/OpenGeodeWeb-Viewer"
"Bug Tracker" = "https://github.com/Geode-solutions/OpenGeodeWeb-Viewer/issues"

[project.scripts]
opengeodeweb_viewer = "opengeodeweb_viewer.vtkw_server:run_server"

[tool.setuptools.dynamic]
dependencies = {file = ["requirements.txt"]}

[tool.setuptools.packages.find]
where = ["src"]

[tool.setuptools.package-data]
"opengeodeweb_Viewer.rpc.schemas" = ["*.json"]
"opengeodeweb_viewer.rpc.schemas" = ["*.json"]
"opengeodeweb_viewer.tests.images" = ["*.*"]
"opengeodeweb_viewer.tests.data" = ["*.*"]

[tool.semantic_release]
version_toml = [
Expand Down
File renamed without changes.
3 changes: 3 additions & 0 deletions src/opengeodeweb_viewer/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from .config import *
from .function import *
from .vtk_protocol import *
2 changes: 1 addition & 1 deletion src/opengeodeweb_viewer/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ def dev_config():
def test_config():
default_config()
os.environ["DATA_FOLDER_PATH"] = os.path.join(
os.path.dirname(__file__), "..", "..", "tests", "data"
os.path.dirname(__file__), "tests", "data"
)
2 changes: 1 addition & 1 deletion src/opengeodeweb_viewer/vtk_protocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from vtk.web import protocols as vtk_protocols
from wslink import register as exportRpc
import vtk
from function import validate_schemas
from .function import validate_schemas

schemas = os.path.join(os.path.dirname(__file__), "rpc/schemas")

Expand Down
15 changes: 10 additions & 5 deletions src/opengeodeweb_viewer/vtkw_server.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import sys
import argparse
import config
import os

from wslink import server
from vtk.web import wslink as vtk_wslink
from vtk.web import protocols as vtk_protocols
import vtk
from vtk_protocol import VtkView
from .vtk_protocol import VtkView
import dotenv
from .config import *


# =============================================================================
# Server class
Expand Down Expand Up @@ -77,16 +78,16 @@ def initialize(self):
# =============================================================================


if __name__ == "__main__":
def run_server():
basedir = os.path.abspath(os.path.dirname(__file__))
dot_env_path = os.path.join(basedir, "../../.env")
if os.path.isfile(dot_env_path):
dotenv.load_dotenv(dot_env_path)
PYTHON_ENV = os.environ.get("PYTHON_ENV", default="prod").strip().lower()
if PYTHON_ENV == "prod":
config.prod_config()
prod_config()
elif PYTHON_ENV == "dev":
config.dev_config()
dev_config()

parser = argparse.ArgumentParser(description="Vtk server")
server.add_arguments(parser)
Expand All @@ -99,3 +100,7 @@ def initialize(self):

_Server.configure(args)
server.start_webserver(options=args, protocol=_Server)


if __name__ == "__main__":
run_server()
Empty file added src/tests/__init__.py
Empty file.
33 changes: 22 additions & 11 deletions tests/conftest.py → src/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,19 @@
from xprocess import ProcessStarter
import vtk
import os
from src.opengeodeweb_viewer import config
from opengeodeweb_viewer import config


class ServerMonitor:
def __init__(self, log):
self.log = log
self.ws = create_connection("ws://localhost:1234/ws")
self.images_dir_path = os.path.abspath(
os.path.join(os.path.dirname(__file__), "data", "images")
)
self.test_output_dir = os.path.abspath(
os.path.join(os.path.dirname(__file__), "tests_output")
)
self.ws.send(
json.dumps(
{
Expand Down Expand Up @@ -53,28 +59,33 @@ def get_response(self):
response = eval(self.ws.recv())
return response

def compare_image(self, nb_messages, path_image):
def compare_image(self, nb_messages, filename):
for i in range(nb_messages):
print(f"{i=}", flush=True)
image = self.ws.recv()
if isinstance(image, bytes):
test_filename = os.path.abspath(f"tests/tests_output/test.jpeg")
with open(test_filename, "wb") as f:
test_file_path = os.path.abspath(
os.path.join(self.test_output_dir, "test.jpeg")
)
with open(test_file_path, "wb") as f:
f.write(image)
f.close()
if isinstance(image, bytes):
print(f"{image=}", flush=True)
response = self.ws.recv()
print(f"{response=}", flush=True)
format = json.loads(response)["result"]["format"]
test_filename = os.path.abspath(f"tests/tests_output/test.{format}")
with open(test_filename, "wb") as f:
test_file_path = os.path.abspath(
os.path.join(self.test_output_dir, f"test.{format}")
)
with open(test_file_path, "wb") as f:
f.write(image)
f.close()

test_reader = vtk.vtkJPEGReader()
test_reader.SetFileName(test_filename)
test_reader.SetFileName(test_file_path)

path_image = os.path.join(self.images_dir_path, filename)
answer_reader = vtk.vtkJPEGReader()
answer_reader.SetFileName(path_image)

Expand All @@ -94,20 +105,20 @@ def __init__(self, root_path):

def get_xprocess_args(self):

server_path = "src/opengeodeweb_viewer/vtkw_server.py"
server_path = "opengeodeweb_viewer/vtkw_server.py"
print(f"{server_path=}", flush=True)

class Starter(ProcessStarter):
terminate_on_interrupt = True
pattern = "wslink: Starting factory"
timeout = 10

# command to start process
args = [
"python3",
str(self.root_path / server_path),
"opengeodeweb_viewer",
]

return Path(server_path).name, Starter, ServerMonitor
return "vtkw_server", Starter, ServerMonitor


ROOT_PATH = Path(__file__).parent.parent.absolute()
Expand Down
File renamed without changes.
File renamed without changes.
Binary file added src/tests/data/images/apply_textures.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
File renamed without changes
Binary file added src/tests/data/images/toggle_edge_visibility.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
47 changes: 15 additions & 32 deletions tests/test_protocol.py → src/tests/test_protocol.py
Original file line number Diff line number Diff line change
@@ -1,48 +1,38 @@
import os

images_dir_path = os.path.abspath("./tests/data/images")


def test_create_visualization(server):
server.call("create_visualization")
abs_path = os.path.join(images_dir_path, "create_visualization.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "create_visualization.jpeg") == True


def test_reset_camera(server):
server.call("reset_camera")
abs_path = os.path.join(images_dir_path, "reset_camera.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "reset_camera.jpeg") == True


def test_create_object_pipeline(server):
server.call("create_object_pipeline", [{"id": "123456", "file_name": "hat.vtp"}])
abs_path = os.path.join(images_dir_path, "create_object_pipeline.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "create_object_pipeline.jpeg") == True


def test_delete_object_pipeline(server):
server.call("create_object_pipeline", [{"id": "123456789", "file_name": "hat.vtp"}])
abs_path = os.path.join(images_dir_path, "create_object_pipeline.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "create_object_pipeline.jpeg") == True

server.call("delete_object_pipeline", [{"id": "123456789"}])
abs_path = os.path.join(images_dir_path, "delete_object_pipeline.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "delete_object_pipeline.jpeg") == True


def test_toggle_object_visibility(server):
server.call("create_object_pipeline", [{"id": "123456789", "file_name": "hat.vtp"}])
abs_path = os.path.join(images_dir_path, "create_object_pipeline.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "create_object_pipeline.jpeg") == True

server.call("toggle_object_visibility", [{"id": "123456789", "is_visible": False}])
abs_path = os.path.join(images_dir_path, "toggle_object_visibility_1.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "toggle_object_visibility_1.jpeg") == True

server.call("toggle_object_visibility", [{"id": "123456789", "is_visible": True}])
abs_path = os.path.join(images_dir_path, "toggle_object_visibility_2.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "toggle_object_visibility_2.jpeg") == True


def test_apply_textures(server):
Expand All @@ -51,8 +41,7 @@ def test_apply_textures(server):
"create_object_pipeline",
[{"id": "123456789", "file_name": "hat.vtp"}],
)
abs_path = os.path.join(images_dir_path, "create_object_pipeline.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "create_object_pipeline.jpeg") == True

server.call(
"apply_textures",
Expand All @@ -68,8 +57,7 @@ def test_apply_textures(server):
}
],
)
abs_path = os.path.join(images_dir_path, "apply_textures.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "apply_textures.jpeg") == True


def test_get_point_position(server):
Expand All @@ -78,8 +66,7 @@ def test_get_point_position(server):
"create_object_pipeline",
[{"id": "123456789", "file_name": "hat.vtp"}],
)
abs_path = os.path.join(images_dir_path, "create_object_pipeline.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "create_object_pipeline.jpeg") == True

server.call("get_point_position", [{"x": 0, "y": 0}])
response = server.get_response()
Expand All @@ -100,12 +87,10 @@ def test_toggle_edge_visibility(server):
"create_object_pipeline",
[{"id": "123456789", "file_name": "hat.vtp"}],
)
abs_path = os.path.join(images_dir_path, "create_object_pipeline.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "create_object_pipeline.jpeg") == True

server.call("toggle_edge_visibility", [{"id": "123456789", "visibility": True}])
abs_path = os.path.join(images_dir_path, "toggle_edge_visibility.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "toggle_edge_visibility.jpeg") == True


def test_set_color(server):
Expand All @@ -114,9 +99,7 @@ def test_set_color(server):
"create_object_pipeline",
[{"id": "123456789", "file_name": "hat.vtp"}],
)
abs_path = os.path.join(images_dir_path, "create_object_pipeline.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "create_object_pipeline.jpeg") == True

server.call("set_color", [{"id": "123456789", "red": 50, "green": 2, "blue": 250}])
abs_path = os.path.join(images_dir_path, "set_color.jpeg")
assert server.compare_image(3, abs_path) == True
assert server.compare_image(3, "set_color.jpeg") == True