Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
slapos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Léo-Paul Géneau
slapos
Commits
6a268834
Commit
6a268834
authored
Sep 19, 2022
by
Xavier Thompson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
software/theia: Add test for frontend forwarding
parent
93d60f13
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
55 additions
and
15 deletions
+55
-15
software/theia/test/test_resiliency.py
software/theia/test/test_resiliency.py
+55
-15
No files found.
software/theia/test/test_resiliency.py
View file @
6a268834
...
...
@@ -30,11 +30,14 @@ import errno
import
os
import
re
import
shutil
import
sqlite3
import
subprocess
import
time
import
requests
from
slapos.proxy.db_version
import
DB_VERSION
from
slapos.testing.testcase
import
SlapOSNodeCommandError
,
installSoftwareUrlList
from
test
import
TheiaTestCase
,
ResilientTheiaMixin
,
theia_software_release_url
...
...
@@ -479,7 +482,26 @@ class TakeoverMixin(ExportAndImportMixin):
return
resp
.
text
class
TestTheiaResilience
(
ResilienceMixin
,
TakeoverMixin
,
ResilientTheiaTestCase
):
class
TheiaSyncMixin
(
ResilienceMixin
,
TakeoverMixin
):
def
_doSync
(
self
,
max_tries
=
None
,
wait_interval
=
None
):
max_tries
=
max_tries
or
self
.
backup_max_tries
wait_interval
=
wait_interval
or
self
.
backup_wait_interval
start
=
time
.
time
()
# Call exporter script instead of waiting for cron job
# XXX Accelerate cron frequency instead ?
exporter_script
=
self
.
getPartitionPath
(
'export'
,
'bin'
,
'exporter'
)
transaction_id
=
str
(
int
(
time
.
time
()))
subprocess
.
check_call
((
exporter_script
,
'--transaction-id'
,
transaction_id
))
takeover_url
,
_
=
self
.
_getTakeoverUrlAndPassword
()
# Wait for takoever to be ready
self
.
_waitTakeoverReady
(
takeover_url
,
start
,
max_tries
,
wait_interval
)
class
TestTheiaResilience
(
TheiaSyncMixin
,
ResilientTheiaTestCase
):
test_instance_max_retries
=
0
backup_max_tries
=
70
backup_wait_interval
=
10
...
...
@@ -505,20 +527,6 @@ class TestTheiaResilience(ResilienceMixin, TakeoverMixin, ResilientTheiaTestCase
# Remember content of ~/etc in the import theia
self
.
etc_listdir
=
os
.
listdir
(
self
.
getPartitionPath
(
'import'
,
'etc'
))
def
_doSync
(
self
):
start
=
time
.
time
()
# Call exporter script instead of waiting for cron job
# XXX Accelerate cron frequency instead ?
exporter_script
=
self
.
getPartitionPath
(
'export'
,
'bin'
,
'exporter'
)
transaction_id
=
str
(
int
(
time
.
time
()))
subprocess
.
check_call
((
exporter_script
,
'--transaction-id'
,
transaction_id
))
takeover_url
,
_
=
self
.
_getTakeoverUrlAndPassword
()
# Wait for takoever to be ready
self
.
_waitTakeoverReady
(
takeover_url
,
start
,
self
.
backup_max_tries
,
self
.
backup_wait_interval
)
def
_checkSync
(
self
):
# Check that ~/etc still contains everything it did before
etc_listdir
=
os
.
listdir
(
self
.
getPartitionPath
(
'import'
,
'etc'
))
...
...
@@ -554,3 +562,35 @@ class TestTheiaResilience(ResilienceMixin, TakeoverMixin, ResilientTheiaTestCase
# Check that the test instance is properly redeployed
# This checks the promises of the test instance
self
.
_processEmbeddedInstance
(
self
.
test_instance_max_retries
)
class
TestTheiaFrontendForwarding
(
TheiaSyncMixin
,
ResilientTheiaTestCase
):
backup_max_tries
=
100
backup_wait_interval
=
20
html5as_url
=
os
.
path
.
abspath
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'..'
,
'..'
,
'html5as'
,
'software.cfg'
))
def
_prepareExport
(
self
):
# Deploy an embedded html5as
self
.
_deployEmbeddedSoftware
(
self
.
html5as_url
,
'html5as'
,
1
)
def
_checkSync
(
self
):
proxy_relpath
=
os
.
path
.
join
(
'srv'
,
'runner'
,
'var'
,
'proxy.db'
)
query
=
"SELECT rowid, partition_reference FROM forwarded_partition_request%s"
%
DB_VERSION
# Check that theia0 forwards frontend requests
with
sqlite3
.
connect
(
self
.
getPartitionPath
(
'export'
,
proxy_relpath
))
as
db
:
rows
=
db
.
execute
(
query
).
fetchall
()
self
.
assertIn
(
"slappart0_HTML5AS frontend"
,
(
row
[
1
]
for
row
in
rows
))
# Check that theia1 does not forward frontend requests
# i.e that there were no new insertions in the database since it was cloned
# by ensuring the rowids are still the same
with
sqlite3
.
connect
(
self
.
getPartitionPath
(
'import'
,
proxy_relpath
))
as
db
:
self
.
assertEqual
(
db
.
execute
(
query
).
fetchall
(),
rows
)
def
_doTakeover
(
self
):
# do nothing
pass
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment