Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
18
Merge Requests
18
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Jobs
Commits
Open sidebar
nexedi
slapos.core
Commits
da6f9e88
Commit
da6f9e88
authored
Mar 31, 2021
by
Xavier Thompson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
slapproxy: Add tests for root path migration
parent
189fa3a0
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
126 additions
and
21 deletions
+126
-21
slapos/tests/test_slapproxy.py
slapos/tests/test_slapproxy.py
+123
-18
slapos/tests/test_slapproxy/slapos_multimaster.cfg.in
slapos/tests/test_slapproxy/slapos_multimaster.cfg.in
+3
-3
No files found.
slapos/tests/test_slapproxy.py
View file @
da6f9e88
...
...
@@ -79,35 +79,39 @@ class BasicMixin(object):
Will set files and start slapproxy
"""
self
.
_tempdir
=
tempfile
.
mkdtemp
()
self
.
_rootdir
=
self
.
initRootDir
()
logging
.
basicConfig
(
level
=
logging
.
DEBUG
)
self
.
setFiles
()
self
.
startProxy
()
os
.
environ
.
pop
(
'SLAPGRID_INSTANCE_ROOT'
,
None
)
def
initRootDir
(
self
):
return
self
.
_tempdir
def
createSlapOSConfigurationFile
(
self
):
with
open
(
self
.
slapos_cfg
,
'w'
)
as
f
:
f
.
write
(
"""[slapos]
software_root = %(
temp
dir)s/opt/slapgrid
instance_root = %(
temp
dir)s/srv/slapgrid
software_root = %(
root
dir)s/opt/slapgrid
instance_root = %(
root
dir)s/srv/slapgrid
master_url = %(proxyaddr)s
computer_id = computer
[slapproxy]
host = 127.0.0.1
port = 8080
database_uri = %(
temp
dir)s/lib/proxy.db
"""
%
{
'
tempdir'
:
self
.
_temp
dir
,
'proxyaddr'
:
self
.
proxyaddr
})
database_uri = %(
root
dir)s/lib/proxy.db
"""
%
{
'
rootdir'
:
self
.
_root
dir
,
'proxyaddr'
:
self
.
proxyaddr
})
def
setFiles
(
self
):
"""
Set environment to run slapproxy
"""
self
.
slapos_cfg
=
os
.
path
.
join
(
self
.
_
temp
dir
,
'slapos.cfg'
)
self
.
proxy_db
=
os
.
path
.
join
(
self
.
_
temp
dir
,
'lib'
,
'proxy.db'
)
self
.
slapos_cfg
=
os
.
path
.
join
(
self
.
_
root
dir
,
'slapos.cfg'
)
self
.
proxy_db
=
os
.
path
.
join
(
self
.
_
root
dir
,
'lib'
,
'proxy.db'
)
self
.
proxyaddr
=
'http://localhost:80/'
self
.
computer_id
=
'computer'
self
.
createSlapOSConfigurationFile
()
for
directory
in
[
'opt'
,
'srv'
,
'lib'
]:
path
=
os
.
path
.
join
(
self
.
_
temp
dir
,
directory
)
path
=
os
.
path
.
join
(
self
.
_
root
dir
,
directory
)
os
.
mkdir
(
path
)
def
startProxy
(
self
):
...
...
@@ -1192,16 +1196,16 @@ class CliMasterMixin(MasterMixin):
self
.
proxyaddr
=
'http://%s:8080'
%
host
with
open
(
self
.
slapos_cfg
,
'w'
)
as
f
:
f
.
write
(
"""[slapos]
software_root = %(
temp
dir)s/opt/slapgrid
instance_root = %(
temp
dir)s/srv/slapgrid
software_root = %(
root
dir)s/opt/slapgrid
instance_root = %(
root
dir)s/srv/slapgrid
master_url = %(proxyaddr)s
master_rest_url = %(proxyaddr)s/hateoas
computer_id = computer
[slapproxy]
host = %(host)s
port = 8080
database_uri = %(
temp
dir)s/lib/proxy.db
"""
%
{
'
tempdir'
:
self
.
_temp
dir
,
'proxyaddr'
:
self
.
proxyaddr
,
'host'
:
host
})
database_uri = %(
root
dir)s/lib/proxy.db
"""
%
{
'
rootdir'
:
self
.
_root
dir
,
'proxyaddr'
:
self
.
proxyaddr
,
'host'
:
host
})
def
cliDoSlapos
(
self
,
command
,
method
=
subprocess
.
check_output
,
**
kwargs
):
return
method
(
...
...
@@ -1317,7 +1321,7 @@ class TestCliInformation(CliMasterMixin):
],
)
try
:
output2
=
self
.
cliDoSlapos
((
'service'
,
'info'
,
'MyInstance2'
),
stderr
=
subprocess
.
STDOUT
)
self
.
cliDoSlapos
((
'service'
,
'info'
,
'MyInstance2'
),
stderr
=
subprocess
.
STDOUT
)
self
.
fail
()
except
subprocess
.
CalledProcessError
as
e
:
self
.
assertIn
(
'Instance MyInstance2 does not exist.'
,
e
.
output
)
...
...
@@ -1655,7 +1659,7 @@ class TestMultiMasterSupport(MasterMixin):
self
.
db
=
sqlite_connect
(
self
.
proxy_db
)
self
.
external_slapproxy_configuration_file_location
=
os
.
path
.
join
(
self
.
_
temp
dir
,
'external_slapos.cfg'
)
self
.
_
root
dir
,
'external_slapos.cfg'
)
self
.
createExternalProxyConfigurationFile
()
self
.
startExternalProxy
()
...
...
@@ -1669,9 +1673,9 @@ computer_id = %(external_computer_id)s
[slapproxy]
host = %(host)s
port = %(port)s
database_uri = %(
temp
dir)s/lib/external_proxy.db
database_uri = %(
root
dir)s/lib/external_proxy.db
"""
%
{
'
tempdir'
:
self
.
_temp
dir
,
'
rootdir'
:
self
.
_root
dir
,
'host'
:
self
.
external_proxy_host
,
'port'
:
self
.
external_proxy_port
,
'external_computer_id'
:
self
.
external_computer_id
...
...
@@ -1716,7 +1720,7 @@ database_uri = %(tempdir)s/lib/external_proxy.db
configuration
=
bytes2str
(
pkg_resources
.
resource_string
(
'slapos.tests'
,
os
.
path
.
join
(
'test_slapproxy'
,
'slapos_multimaster.cfg.in'
)
))
%
{
'
tempdir'
:
self
.
_temp
dir
,
'proxyaddr'
:
self
.
proxyaddr
,
'
rootdir'
:
self
.
_root
dir
,
'proxyaddr'
:
self
.
proxyaddr
,
'external_proxy_host'
:
self
.
external_proxy_host
,
'external_proxy_port'
:
self
.
external_proxy_port
}
...
...
@@ -1925,7 +1929,7 @@ database_uri = %(tempdir)s/lib/external_proxy.db
self
.
assertEqual
({},
partition
.
getConnectionParameterDict
())
with
sqlite3
.
connect
(
os
.
path
.
join
(
self
.
_
temp
dir
,
self
.
_
root
dir
,
'lib'
,
'external_proxy.db'
,
))
as
db
:
...
...
@@ -2014,7 +2018,7 @@ database_uri = %(tempdir)s/lib/external_proxy.db
self
.
assertEqual
({},
partition
.
getConnectionParameterDict
())
with
sqlite3
.
connect
(
os
.
path
.
join
(
self
.
_
temp
dir
,
self
.
_
root
dir
,
'lib'
,
'external_proxy.db'
,
))
as
db
:
...
...
@@ -2043,6 +2047,107 @@ database_uri = %(tempdir)s/lib/external_proxy.db
}],
requested_by
)
class
TestLocalSoftwareReleaseRootPathMigration
(
MasterMixin
):
"""
Test local URL adaptation based on the local software release root path.
"""
def
initRootDir
(
self
):
rootdir
=
os
.
path
.
join
(
self
.
_tempdir
,
'0'
)
os
.
mkdir
(
rootdir
)
return
rootdir
def
newRootDir
(
self
):
return
os
.
path
.
join
(
self
.
_tempdir
,
str
(
1
+
int
(
os
.
path
.
basename
(
self
.
_rootdir
))))
def
createSlapOSConfigurationFile
(
self
):
super
(
TestLocalSoftwareReleaseRootPathMigration
,
self
).
createSlapOSConfigurationFile
()
with
open
(
self
.
slapos_cfg
,
'a'
)
as
f
:
f
.
write
(
"
\
n
local_software_release_root = %s/opt"
%
self
.
_rootdir
)
def
moveProxy
(
self
,
rootdir
=
None
):
if
not
rootdir
:
rootdir
=
self
.
newRootDir
()
os
.
rename
(
self
.
_rootdir
,
rootdir
)
self
.
_rootdir
=
rootdir
self
.
slapos_cfg
=
os
.
path
.
join
(
self
.
_rootdir
,
'slapos.cfg'
)
self
.
proxy_db
=
os
.
path
.
join
(
self
.
_rootdir
,
'lib'
,
'proxy.db'
)
self
.
createSlapOSConfigurationFile
()
views
.
is_schema_already_executed
=
False
self
.
startProxy
()
os
.
environ
.
pop
(
'SLAPGRID_INSTANCE_ROOT'
,
None
)
def
assertSoftwareUrls
(
self
,
*
expected_urls
):
sr_list
=
tuple
(
sr
.
getURI
()
for
sr
in
self
.
getFullComputerInformation
().
_software_release_list
)
self
.
assertEqual
(
sr_list
,
expected_urls
)
def
assertPartitionUrl
(
self
,
partition_id
,
expected_url
):
self
.
assertEqual
(
self
.
getPartitionInformation
(
partition_id
).
getSoftwareRelease
().
getURI
(),
expected_url
)
def
checkSupplyUrl
(
self
,
initial_url
,
expected_url
,
rootdir
=
None
):
self
.
supply
(
initial_url
)
self
.
assertSoftwareUrls
(
initial_url
)
self
.
moveProxy
(
rootdir
)
self
.
assertSoftwareUrls
(
expected_url
)
def
checkRequestUrl
(
self
,
initial_url
,
expected_url
,
rootdir
=
None
):
self
.
format_for_number_of_partitions
(
1
)
partition
=
self
.
request
(
initial_url
,
None
,
'MyInstance'
,
'slappart0'
)
self
.
assertPartitionUrl
(
partition
.
_partition_id
,
initial_url
)
self
.
moveProxy
(
rootdir
)
self
.
assertPartitionUrl
(
partition
.
_partition_id
,
expected_url
)
def
test_supply_local_url
(
self
):
initial_url
=
os
.
path
.
join
(
self
.
_rootdir
,
'opt'
,
'software.cfg'
)
new_rootdir
=
self
.
newRootDir
()
expected_url
=
os
.
path
.
join
(
new_rootdir
,
'opt'
,
'software.cfg'
)
self
.
checkSupplyUrl
(
initial_url
,
expected_url
,
new_rootdir
)
def
test_supply_not_in_root_url
(
self
):
url
=
os
.
path
.
join
(
self
.
_rootdir
,
'srv'
,
'software.cfg'
)
self
.
checkSupplyUrl
(
url
,
url
)
def
test_supply_http_url
(
self
):
url
=
"http://sr//"
self
.
checkSupplyUrl
(
url
,
url
)
def
test_supply_https_url
(
self
):
url
=
"https://sr//"
self
.
checkSupplyUrl
(
url
,
url
)
def
test_request_local_url
(
self
):
initial_url
=
os
.
path
.
join
(
self
.
_rootdir
,
'opt'
,
'software.cfg'
)
new_rootdir
=
self
.
newRootDir
()
expected_url
=
os
.
path
.
join
(
new_rootdir
,
'opt'
,
'software.cfg'
)
self
.
checkRequestUrl
(
initial_url
,
expected_url
,
new_rootdir
)
def
test_request_not_in_root_url
(
self
):
url
=
os
.
path
.
join
(
self
.
_rootdir
,
'srv'
,
'software.cfg'
)
self
.
checkRequestUrl
(
url
,
url
)
def
test_request_http_url
(
self
):
url
=
"http://sr//"
self
.
checkRequestUrl
(
url
,
url
)
def
test_request_https_url
(
self
):
url
=
"https://sr//"
self
.
checkRequestUrl
(
url
,
url
)
def
checkMultipleMoves
(
self
,
checkUrl
):
initial_url
=
os
.
path
.
join
(
self
.
_rootdir
,
'opt'
,
'software.cfg'
)
for
_
in
range
(
5
):
new_rootdir
=
self
.
newRootDir
()
expected_url
=
os
.
path
.
join
(
new_rootdir
,
'opt'
,
'software.cfg'
)
checkUrl
(
initial_url
,
expected_url
,
new_rootdir
)
initial_url
=
expected_url
def
test_supply_multiple_moves
(
self
):
self
.
checkMultipleMoves
(
self
.
checkSupplyUrl
)
def
test_request_multiple_moves
(
self
):
self
.
checkMultipleMoves
(
self
.
checkRequestUrl
)
class
_MigrationTestCase
(
TestInformation
,
TestRequest
,
TestSlaveRequest
,
TestMultiNodeSupport
):
"""
Test that old database version are automatically migrated without failure
...
...
slapos/tests/test_slapproxy/slapos_multimaster.cfg.in
View file @
da6f9e88
[slapos]
software_root = %(
temp
dir)s/opt/slapgrid
instance_root = %(
temp
dir)s/srv/slapgrid
software_root = %(
root
dir)s/opt/slapgrid
instance_root = %(
root
dir)s/srv/slapgrid
master_url = %(proxyaddr)s
computer_id = computer
[slapproxy]
host = 127.0.0.1
port = 8080
database_uri = %(
temp
dir)s/lib/proxy.db
database_uri = %(
root
dir)s/lib/proxy.db
# Here goes the list of slapos masters that slapproxy can contact
# Each section beginning by multimaster is a different SlapOS Master, represented by arbitrary name.
...
...
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