Skip to content

Commit

Permalink
Merge pull request #29 from cgloeckner/sdm_use_env_vars
Browse files Browse the repository at this point in the history
use env vars for config
  • Loading branch information
cgloeckner authored Jan 22, 2025
2 parents be7b6e9 + dd2ceec commit 6b4a9d2
Show file tree
Hide file tree
Showing 38 changed files with 272 additions and 509 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/python-app.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ jobs:
runs-on: ${{ matrix.os }}

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
pyvtt
sha.txt
htmlcov/
run.sh

# VSCode
pyvtt.code-workspace

# PyCharm
.idea
.code-workspace

# Byte-compiled / optimized / DLL files
__pycache__/
Expand Down
2 changes: 1 addition & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
engine = Engine(argv=argv)
routes.register_gm(engine)
routes.register_player(engine)
routes.register_api(engine)
routes.register_resources(engine)
routes.register_error(engine)
routes.register_api(engine)

engine.cleanup_worker = CleanupThread(engine)
engine.run()
Expand Down
1 change: 0 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ cryptography
emoji-country-flag==1.3.1
gevent==23.9.0
gevent-websocket==0.10.1
greenlet==2.0.1
httpagentparser==1.9.5
httplib2==0.21.0
idna==3.4
Expand Down
35 changes: 0 additions & 35 deletions static/client/shard.js

This file was deleted.

2 changes: 1 addition & 1 deletion static/client/version.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
const version = "1.5.2";
const version = "1.6.0";
16 changes: 16 additions & 0 deletions test/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,21 @@ def make_zip(filename: str, data: str, n: int) -> bytes:

class EngineBaseTest(unittest.TestCase):

@staticmethod
def defaultEnviron():
os.environ['VTT_TITLE'] = 'unittest'
os.environ['VTT_LIMIT_TOKEN'] =' 2'
os.environ['VTT_LIMIT_BG'] = '10'
os.environ['VTT_LIMIT_GAME'] = '20'
os.environ['VTT_LIMIT_MUSIC'] = '10'
os.environ['VTT_NUM_MUSIC'] = '5'
os.environ['VTT_CLEANUP_EXPIRE'] = '3600'
os.environ['VTT_CLEANUP_TIME'] = '03:00'
os.environ['VTT_DOMAIN'] = 'vtt.example.com'
os.environ['VTT_PORT'] = '8080'
os.environ.pop('VTT_SSL', None)
os.environ.pop('VTT_REVERSE_PROXY', None)

def setUp(self) -> None:
# create temporary directory
self.tmpdir = tempfile.TemporaryDirectory()
Expand All @@ -71,6 +86,7 @@ def setUp(self) -> None:
h.write('demo')

# load engine app into webtest
EngineBaseTest.defaultEnviron()
self.engine = Engine(argv=['--quiet', '--localhost'], pref_dir=self.root)
self.engine.app.catchall = False
self.app = webtest.TestApp(self.engine.app)
Expand Down
1 change: 0 additions & 1 deletion test/routes/gm/auth_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ def setUp(self):
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

# FIXME: callback process via fake auth service via /vtt/callback/fake
1 change: 0 additions & 1 deletion test/routes/gm/test_drawer.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ def setUp(self):
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

# FIXME: move to EngineBaseTest (create_arthur) -> session_id
Expand Down
1 change: 0 additions & 1 deletion test/routes/gm/test_export.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ def setUp(self):
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

# register arthur
Expand Down
1 change: 0 additions & 1 deletion test/routes/gm/test_fallback_login.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ def setUp(self):
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

def test_post_vtt_join(self):
Expand Down
1 change: 0 additions & 1 deletion test/routes/gm/test_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ def setUp(self):
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

# create some images
Expand Down
1 change: 0 additions & 1 deletion test/routes/gm/test_login.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ def setUp(self):
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

# register arthur
Expand Down
1 change: 0 additions & 1 deletion test/routes/gm/test_login_callback.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ def setUp(self) -> None:
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

def test_can_login_via_callback_and_create_new_account(self) -> None:
Expand Down
1 change: 0 additions & 1 deletion test/routes/gm/test_thumbnail.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ def setUp(self):
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

# register arthur
Expand Down
1 change: 0 additions & 1 deletion test/routes/players/test_assets.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ def setUp(self):
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

# register arthur
Expand Down
1 change: 0 additions & 1 deletion test/routes/players/test_login.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ def setUp(self):
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

# register arthur
Expand Down
1 change: 0 additions & 1 deletion test/routes/players/test_upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ def setUp(self):
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

# create some images
Expand Down
1 change: 0 additions & 1 deletion test/routes/players/test_websocket.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ def setUp(self):
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

# @NOTE establishing a websocket is not tested atm
Expand Down
54 changes: 0 additions & 54 deletions test/routes/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,57 +71,3 @@ def test_can_query_games_and_assets_as_gm(self):
ret = self.app.get('/vtt/api/assets-list/arthur/test-game-1', expect_errors=True)
self.assertEqual(ret.status_int, 200)

def test_query_this_server_if_no_shards_specified(self):
ret = self.app.get('/vtt/query/0', expect_errors=True)
self.assertEqual(ret.status_int, 200)

def test_query_servers_within_shard(self):
# setup server shards
test_ports = [8081, 8000]
self.engine.shards = ['http://localhost:{0}'.format(p) for p in test_ports]
self.engine.shards.append('http://localhost:80') # this server
greenlets = list()
for port in test_ports:
# confirm port to be free
with self.assertRaises(requests.exceptions.ConnectionError):
requests.get('http://localhost:{0}'.format(port))
# setup server instance
e = EngineBaseTest()
e.setUp()
e.engine.hosting['port'] = port
e.engine.shards = self.engine.shards
# run in thread
g = gevent.Greenlet(run=e.engine.run)
g.start()
greenlets.append(g)
# confirm server is online
requests.get('http://localhost:{0}'.format(port))

# can query all servers
for i, url in enumerate(self.engine.shards):
ret = self.app.get('/vtt/query/{0}'.format(i))
self.assertEqual(ret.status_int, 200)
# @NOTE: cannot test countryCode due to localhost and status
# because this may fail on the GitHub workflow test

# stop server shard instances
for g in greenlets:
gevent.kill(g)

def test_cannot_query_unknown_server(self):
ret = self.app.get('/vtt/query/245245', expect_errors=True)
self.assertEqual(ret.status_int, 404)

def test_show_shard_page_if_no_shards_specified(self):
ret = self.app.get('/vtt/shard', expect_errors=True)
self.assertEqual(ret.status_int, 200)

def test_show_shard_page_if_only_one_server_specified(self):
self.engine.shards = ['http://localhost:80']
ret = self.app.get('/vtt/shard')
self.assertEqual(ret.status_int, 200)

def test_show_shard_page_if_multiple_servers_specified(self):
self.engine.shards = ['https://{0}'.format(h) for h in ['example.com', 'foo.bar', 'test.org']]
ret = self.app.get('/vtt/shard')
self.assertEqual(ret.status_int, 200)
1 change: 0 additions & 1 deletion test/routes/test_error.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ def setUp(self):
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

def test_401(self):
Expand Down
7 changes: 3 additions & 4 deletions test/routes/test_resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ def setUp(self):
routes.register_gm(self.engine)
routes.register_player(self.engine)
routes.register_resources(self.engine)
routes.register_api(self.engine)
# @NOTE: custom error pages are not routed here

# register arthur
Expand Down Expand Up @@ -51,7 +50,7 @@ def test_can_load_custom_static_file(self):
new_file.touch()
ret = self.app.get('/static/malicious.js')
self.assertEqual(ret.status_int, 200)
self.assertEqual(ret.content_type, 'application/javascript')
self.assertIn('javascript', ret.content_type)

def test_can_load_existing_png(self):
ret = self.app.get('/static/d20.png')
Expand All @@ -66,12 +65,12 @@ def test_can_load_existing_jpg(self):
def test_can_load_favicon(self):
ret = self.app.get('/static/favicon.ico')
self.assertEqual(ret.status_int, 200)
self.assertEqual(ret.content_type, 'image/vnd.microsoft.icon')
self.assertIn('icon', ret.content_type)

def test_can_load_existing_javascript_file(self):
ret = self.app.get('/static/client/render.js')
self.assertEqual(ret.status_int, 200)
self.assertEqual(ret.content_type, 'application/javascript')
self.assertIn('javascript', ret.content_type)

def test_can_load_existing_css_file(self):
ret = self.app.get('/static/client/layout.css')
Expand Down
Loading

0 comments on commit 6b4a9d2

Please sign in to comment.