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
Xavier Thompson
slapos
Commits
8c0ffedc
Commit
8c0ffedc
authored
Apr 15, 2021
by
Xavier Thompson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[tmp] software/theia: Add ERP5 resiliency test
parent
7fb6a975
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
44 additions
and
16 deletions
+44
-16
software/theia/test/test.py
software/theia/test/test.py
+44
-16
No files found.
software/theia/test/test.py
View file @
8c0ffedc
...
@@ -42,14 +42,22 @@ import psutil
...
@@ -42,14 +42,22 @@ import psutil
import
requests
import
requests
import
sqlite3
import
sqlite3
from
slapos.testing.testcase
import
makeModuleSetUpAndTestCaseClass
from
slapos.testing.testcase
import
makeModuleSetUpAndTestCaseClass
,
installSoftwareUrlList
from
slapos.grid.svcbackend
import
getSupervisorRPC
from
slapos.grid.svcbackend
import
getSupervisorRPC
from
slapos.grid.svcbackend
import
_getSupervisordSocketPath
from
slapos.grid.svcbackend
import
_getSupervisordSocketPath
setUpModule
,
SlapOSInstanceTestCase
=
makeModuleSetUpAndTestCaseClass
(
theia_software_release_url
=
os
.
path
.
abspath
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'..'
,
'software.cfg'
))
os
.
path
.
abspath
(
erp5_software_release_url
=
'https://lab.nexedi.com/nexedi/slapos/raw/1.0.187/software/erp5/software.cfg'
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'..'
,
'software.cfg'
)))
_
,
SlapOSInstanceTestCase
=
makeModuleSetUpAndTestCaseClass
(
theia_software_release_url
)
def
setUpModule
():
installSoftwareUrlList
(
SlapOSInstanceTestCase
,
[
theia_software_release_url
,
erp5_software_release_url
],
debug
=
bool
(
int
(
os
.
environ
.
get
(
'SLAPOS_TEST_DEBUG'
,
0
))),
)
class
TheiaTestCase
(
SlapOSInstanceTestCase
):
class
TheiaTestCase
(
SlapOSInstanceTestCase
):
...
@@ -339,11 +347,8 @@ class ResilientTheiaTestCase(TheiaTestCase):
...
@@ -339,11 +347,8 @@ class ResilientTheiaTestCase(TheiaTestCase):
return
cls
.
_getTypePartitionPath
(
software_type
,
'srv'
,
'runner'
,
'bin'
,
'slapos'
)
return
cls
.
_getTypePartitionPath
(
software_type
,
'srv'
,
'runner'
,
'bin'
,
'slapos'
)
@
classmethod
@
classmethod
def
_
deployEmbeddedSoftware
(
cls
,
software_url
,
instance_name
,
retries
=
0
):
def
_
processEmbeddedInstance
(
cls
,
retries
=
0
):
slapos
=
cls
.
_getSlapos
()
slapos
=
cls
.
_getSlapos
()
subprocess
.
check_call
((
slapos
,
'supply'
,
software_url
,
'slaprunner'
))
subprocess
.
check_call
((
slapos
,
'node'
,
'software'
))
subprocess
.
check_call
((
slapos
,
'request'
,
instance_name
,
software_url
))
for
_
in
range
(
retries
):
for
_
in
range
(
retries
):
try
:
try
:
subprocess
.
check_call
((
slapos
,
'node'
,
'instance'
))
subprocess
.
check_call
((
slapos
,
'node'
,
'instance'
))
...
@@ -353,6 +358,14 @@ class ResilientTheiaTestCase(TheiaTestCase):
...
@@ -353,6 +358,14 @@ class ResilientTheiaTestCase(TheiaTestCase):
else
:
else
:
subprocess
.
check_call
((
slapos
,
'node'
,
'instance'
))
subprocess
.
check_call
((
slapos
,
'node'
,
'instance'
))
@
classmethod
def
_deployEmbeddedSoftware
(
cls
,
software_url
,
instance_name
,
retries
=
0
):
slapos
=
cls
.
_getSlapos
()
subprocess
.
check_call
((
slapos
,
'supply'
,
software_url
,
'slaprunner'
))
subprocess
.
check_call
((
slapos
,
'node'
,
'software'
))
subprocess
.
check_call
((
slapos
,
'request'
,
instance_name
,
software_url
))
cls
.
_processEmbeddedInstance
(
retries
)
@
classmethod
@
classmethod
def
getInstanceSoftwareType
(
cls
):
def
getInstanceSoftwareType
(
cls
):
return
'resilient'
return
'resilient'
...
@@ -449,8 +462,9 @@ class TestTheiaExportImportWebURL(TestTheiaExportImport):
...
@@ -449,8 +462,9 @@ class TestTheiaExportImportWebURL(TestTheiaExportImport):
class
TestTheiaResilience
(
ResilientTheiaTestCase
):
class
TestTheiaResilience
(
ResilientTheiaTestCase
):
test_instance_max_retries
=
0
test_instance_max_retries
=
0
test_backup_started_tries
=
100
backup_started_tries
=
100
test_backup_finished_tries
=
100
backup_finished_tries
=
100
backup_wait_interval
=
1
def
_getTestSoftwareUrl
(
self
):
def
_getTestSoftwareUrl
(
self
):
return
"https://lab.nexedi.com/xavier_thompson/slapos/raw/a0f0ac90/software/theia/test/dummy/software.cfg"
return
"https://lab.nexedi.com/xavier_thompson/slapos/raw/a0f0ac90/software/theia/test/dummy/software.cfg"
...
@@ -467,10 +481,12 @@ class TestTheiaResilience(ResilientTheiaTestCase):
...
@@ -467,10 +481,12 @@ class TestTheiaResilience(ResilientTheiaTestCase):
return
resp
.
text
return
resp
.
text
def
_waitBackupStarted
(
self
,
takeover_url
,
wait
=
1
,
tries
=
1
):
def
_waitBackupStarted
(
self
,
takeover_url
,
wait
=
1
,
tries
=
1
):
for
_
in
range
(
tries
):
for
i
in
range
(
tries
):
if
"No backup downloaded yet, takeover should not happen now."
in
self
.
_getTakeoverPage
(
takeover_url
):
if
"No backup downloaded yet, takeover should not happen now."
in
self
.
_getTakeoverPage
(
takeover_url
):
print
(
"[attempt %d]: No backup downloaded yet, waiting a bit"
%
i
)
time
.
sleep
(
wait
)
time
.
sleep
(
wait
)
continue
continue
print
(
"[attempt %d]: Backup started, continuing"
%
i
)
break
break
else
:
else
:
with
open
(
self
.
_getTypePartitionPath
(
'import'
,
'var'
,
'log'
,
'equeue.log'
))
as
f
:
with
open
(
self
.
_getTypePartitionPath
(
'import'
,
'var'
,
'log'
,
'equeue.log'
))
as
f
:
...
@@ -478,10 +494,12 @@ class TestTheiaResilience(ResilientTheiaTestCase):
...
@@ -478,10 +494,12 @@ class TestTheiaResilience(ResilientTheiaTestCase):
self
.
fail
(
"Backup did not start before timeout:
\
n
%s"
%
log
)
self
.
fail
(
"Backup did not start before timeout:
\
n
%s"
%
log
)
def
_waitBackupFinished
(
self
,
takeover_url
,
wait
=
1
,
tries
=
1
):
def
_waitBackupFinished
(
self
,
takeover_url
,
wait
=
1
,
tries
=
1
):
for
_
in
range
(
tries
):
for
i
in
range
(
tries
):
if
"<b>Importer script(s) of backup in progress:</b> True"
in
self
.
_getTakeoverPage
(
takeover_url
):
if
"<b>Importer script(s) of backup in progress:</b> True"
in
self
.
_getTakeoverPage
(
takeover_url
):
print
(
"[attempt %d]: Backup in progress, waiting a bit"
%
i
)
time
.
sleep
(
wait
)
time
.
sleep
(
wait
)
continue
continue
print
(
"[attempt %d]: Backup finished, continuing"
%
i
)
break
break
else
:
else
:
with
open
(
self
.
_getTypePartitionPath
(
'import'
,
'var'
,
'log'
,
'equeue.log'
))
as
f
:
with
open
(
self
.
_getTypePartitionPath
(
'import'
,
'var'
,
'log'
,
'equeue.log'
))
as
f
:
...
@@ -513,15 +531,15 @@ class TestTheiaResilience(ResilientTheiaTestCase):
...
@@ -513,15 +531,15 @@ class TestTheiaResilience(ResilientTheiaTestCase):
takeover_url
,
takeover_password
=
self
.
_getTakeoverUrlAndPassword
()
takeover_url
,
takeover_password
=
self
.
_getTakeoverUrlAndPassword
()
# Wait for importer to start and finish
# Wait for importer to start and finish
self
.
_waitBackupStarted
(
takeover_url
,
1
,
self
.
test_
backup_started_tries
)
self
.
_waitBackupStarted
(
takeover_url
,
self
.
backup_wait_interval
,
self
.
backup_started_tries
)
self
.
_waitBackupFinished
(
takeover_url
,
1
,
self
.
test_
backup_finished_tries
)
self
.
_waitBackupFinished
(
takeover_url
,
self
.
backup_wait_interval
,
self
.
backup_finished_tries
)
# Takeover
# Takeover
self
.
_doTakeover
(
takeover_url
,
takeover_password
)
self
.
_doTakeover
(
takeover_url
,
takeover_password
)
# Wait for import instance to become export instance and new import to be allocated
# Wait for import instance to become export instance and new import to be allocated
# This also checks that all promises of theia instances succeed
# This also checks that all promises of theia instances succeed
self
.
slap
.
waitForInstance
(
10
)
self
.
slap
.
waitForInstance
(
self
.
instance_max_retry
)
self
.
computer_partition
=
self
.
requestDefaultInstance
()
self
.
computer_partition
=
self
.
requestDefaultInstance
()
# Check that there is an export, import and frozen instance and get their new partition IDs
# Check that there is an export, import and frozen instance and get their new partition IDs
...
@@ -540,4 +558,14 @@ class TestTheiaResilience(ResilientTheiaTestCase):
...
@@ -540,4 +558,14 @@ class TestTheiaResilience(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
subprocess
.
check_call
((
self
.
_getSlapos
(
'export'
),
'node'
,
'instance'
))
self
.
_processEmbeddedInstance
(
self
.
test_instance_max_retries
)
class
TestTheiaResilienceERP5
(
TestTheiaResilience
):
test_instance_max_retries
=
10
backup_started_tries
=
1000
backup_finished_tries
=
1000
backup_wait_interval
=
10
def
_getTestSoftwareUrl
(
self
):
return
erp5_software_release_url
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