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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Xiaowu Zhang
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
Hide 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
...
@@ -30,11 +30,14 @@ import errno
import
os
import
os
import
re
import
re
import
shutil
import
shutil
import
sqlite3
import
subprocess
import
subprocess
import
time
import
time
import
requests
import
requests
from
slapos.proxy.db_version
import
DB_VERSION
from
slapos.testing.testcase
import
SlapOSNodeCommandError
,
installSoftwareUrlList
from
slapos.testing.testcase
import
SlapOSNodeCommandError
,
installSoftwareUrlList
from
test
import
TheiaTestCase
,
ResilientTheiaMixin
,
theia_software_release_url
from
test
import
TheiaTestCase
,
ResilientTheiaMixin
,
theia_software_release_url
...
@@ -479,7 +482,26 @@ class TakeoverMixin(ExportAndImportMixin):
...
@@ -479,7 +482,26 @@ class TakeoverMixin(ExportAndImportMixin):
return
resp
.
text
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
test_instance_max_retries
=
0
backup_max_tries
=
70
backup_max_tries
=
70
backup_wait_interval
=
10
backup_wait_interval
=
10
...
@@ -505,20 +527,6 @@ class TestTheiaResilience(ResilienceMixin, TakeoverMixin, ResilientTheiaTestCase
...
@@ -505,20 +527,6 @@ class TestTheiaResilience(ResilienceMixin, TakeoverMixin, ResilientTheiaTestCase
# Remember content of ~/etc in the import theia
# Remember content of ~/etc in the import theia
self
.
etc_listdir
=
os
.
listdir
(
self
.
getPartitionPath
(
'import'
,
'etc'
))
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
):
def
_checkSync
(
self
):
# Check that ~/etc still contains everything it did before
# Check that ~/etc still contains everything it did before
etc_listdir
=
os
.
listdir
(
self
.
getPartitionPath
(
'import'
,
'etc'
))
etc_listdir
=
os
.
listdir
(
self
.
getPartitionPath
(
'import'
,
'etc'
))
...
@@ -554,3 +562,35 @@ class TestTheiaResilience(ResilienceMixin, TakeoverMixin, ResilientTheiaTestCase
...
@@ -554,3 +562,35 @@ class TestTheiaResilience(ResilienceMixin, TakeoverMixin, ResilientTheiaTestCase
# Check that the test instance is properly redeployed
# Check that the test instance is properly redeployed
# This checks the promises of the test instance
# This checks the promises of the test instance
self
.
_processEmbeddedInstance
(
self
.
test_instance_max_retries
)
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