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
696d0c7d
Commit
696d0c7d
authored
Apr 16, 2023
by
Jérome Perrin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
software/metabase/test: test backup restoration
parent
16372e53
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
70 additions
and
2 deletions
+70
-2
software/metabase/test/test.py
software/metabase/test/test.py
+70
-2
software/metabase/test/testdata/backup.pg_dump
software/metabase/test/testdata/backup.pg_dump
+0
-0
No files found.
software/metabase/test/test.py
View file @
696d0c7d
...
...
@@ -25,23 +25,32 @@
#
##############################################################################
import
contextlib
import
os
import
json
from
urllib
import
parse
import
shutil
import
subprocess
import
time
import
requests
from
slapos.testing.testcase
import
makeModuleSetUpAndTestCaseClass
from
slapos.testing.utils
import
CrontabMixin
setUpModule
,
Metab
aseTestCase
=
makeModuleSetUpAndTestCaseClass
(
setUpModule
,
B
aseTestCase
=
makeModuleSetUpAndTestCaseClass
(
os
.
path
.
abspath
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'..'
,
'software.cfg'
)))
class
TestMetabaseSetup
(
Metab
aseTestCase
):
class
MetabaseTestCase
(
B
aseTestCase
):
__partition_reference__
=
'S'
# postgresql use a socket in data dir
# instance can take time, /api/session/properties timeout at the beginning.
instance_max_retry
=
30
class
TestMetabaseSetup
(
MetabaseTestCase
):
def
test_setup
(
self
):
url
=
self
.
computer_partition
.
getConnectionParameterDict
()[
'url'
]
resp
=
requests
.
get
(
parse
.
urljoin
(
url
,
'/setup'
),
verify
=
False
)
...
...
@@ -94,3 +103,62 @@ class TestMetabaseSetup(MetabaseTestCase):
"password"
:
password
}).
json
()
self
.
assertTrue
(
session
.
get
(
'id'
))
class
TestMetabaseBackup
(
MetabaseTestCase
,
CrontabMixin
):
def
test_backup
(
self
):
self
.
_executeCrontabAtDate
(
'postgresql-backup-crontab-entry'
,
'2100-01-01'
)
with
open
(
os
.
path
.
join
(
self
.
computer_partition_root_path
,
'srv'
,
'backup'
,
'backup.pg_dump'
),
'rb'
)
as
f
:
self
.
assertIn
(
b'CREATE DATABASE metabase_db'
,
f
.
read
())
def
test_restore
(
self
):
# restore a "known good" backup and check we can login with the
# user from the backup.
url
=
self
.
computer_partition
.
getConnectionParameterDict
()[
'url'
]
shutil
.
copyfile
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'testdata'
,
'backup.pg_dump'
),
os
.
path
.
join
(
self
.
computer_partition_root_path
,
'srv'
,
'backup'
,
'backup.pg_dump'
)
)
with
self
.
slap
.
instance_supervisor_rpc
as
supervisor
:
# stop metabase, so that it does not interfere with restoring the backup
info
,
=
[
i
for
i
in
supervisor
.
getAllProcessInfo
()
if
'metabase-instance'
in
i
[
'name'
]]
metabase_process_name
=
f"
{
info
[
'group'
]
}
:
{
info
[
'name'
]
}
"
supervisor
.
stopProcess
(
metabase_process_name
)
# restart postgres, to terminate all current connections
info
,
=
[
i
for
i
in
supervisor
.
getAllProcessInfo
()
if
'postgres'
in
i
[
'name'
]]
postresql_process_name
=
f"
{
info
[
'group'
]
}
:
{
info
[
'name'
]
}
"
supervisor
.
stopProcess
(
postresql_process_name
)
supervisor
.
startProcess
(
postresql_process_name
)
subprocess
.
check_output
(
os
.
path
.
join
(
self
.
computer_partition_root_path
,
'bin'
,
'postgresql-restore-backup'
))
with
self
.
slap
.
instance_supervisor_rpc
as
supervisor
:
supervisor
.
startProcess
(
metabase_process_name
)
for
_
in
range
(
30
):
with
contextlib
.
suppress
(
requests
.
exceptions
.
RequestException
):
time
.
sleep
(
1
)
resp
=
requests
.
post
(
parse
.
urljoin
(
url
,
'/api/session'
),
verify
=
False
,
json
=
{
"username"
:
"youlooknicetoday@email.com"
,
"password"
:
"passwordformbackup123"
},
timeout
=
5
)
if
resp
.
ok
:
session
=
resp
.
json
()
break
else
:
resp
.
raise_for_status
()
self
.
assertTrue
(
session
.
get
(
'id'
))
software/metabase/test/testdata/backup.pg_dump
0 → 100644
View file @
696d0c7d
File added
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