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
Justin
slapos
Commits
b62f8386
Commit
b62f8386
authored
Sep 08, 2022
by
Jérome Perrin
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master' into zope4py2
parents
25b5b32b
b696fd3d
Changes
37
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
476 additions
and
571 deletions
+476
-571
software/backupserver/test/test.py
software/backupserver/test/test.py
+1
-1
software/beremiz-ide/test/test.py
software/beremiz-ide/test/test.py
+0
-1
software/caddy-frontend/test/setup.py
software/caddy-frontend/test/setup.py
+0
-1
software/caddy-frontend/test/test.py
software/caddy-frontend/test/test.py
+1
-6
software/cloudooo/test/setup.py
software/cloudooo/test/setup.py
+0
-1
software/cloudooo/test/test.py
software/cloudooo/test/test.py
+23
-25
software/dream/test/test.py
software/dream/test/test.py
+0
-1
software/erp5/test/setup.py
software/erp5/test/setup.py
+0
-2
software/erp5/test/test/__init__.py
software/erp5/test/test/__init__.py
+0
-1
software/erp5/test/test/test_balancer.py
software/erp5/test/test/test_balancer.py
+40
-48
software/erp5/test/test/test_erp5.py
software/erp5/test/test/test_erp5.py
+35
-41
software/erp5/test/test/test_mariadb.py
software/erp5/test/test/test_mariadb.py
+7
-9
software/erp5/test/test/test_wcfs.py
software/erp5/test/test/test_wcfs.py
+1
-2
software/erp5/upgrade_test/setup.py
software/erp5/upgrade_test/setup.py
+0
-1
software/erp5/upgrade_test/test.py
software/erp5/upgrade_test/test.py
+8
-12
software/erp5testnode/testsuite/deploy-test/buildout.hash.cfg
...ware/erp5testnode/testsuite/deploy-test/buildout.hash.cfg
+1
-1
software/erp5testnode/testsuite/deploy-test/instance-deploy-test.cfg.jinja2
...ode/testsuite/deploy-test/instance-deploy-test.cfg.jinja2
+1
-1
software/erp5testnode/testsuite/deploy-test/instance.cfg.in
software/erp5testnode/testsuite/deploy-test/instance.cfg.in
+5
-8
software/erp5testnode/testsuite/deploy-test/software.cfg
software/erp5testnode/testsuite/deploy-test/software.cfg
+1
-17
software/fluentd/software-py2.cfg
software/fluentd/software-py2.cfg
+0
-6
software/fluentd/test/setup.py
software/fluentd/test/setup.py
+0
-1
software/fluentd/test/test.py
software/fluentd/test/test.py
+22
-24
software/gitlab/test/test.py
software/gitlab/test/test.py
+1
-1
software/kvm/test/setup.py
software/kvm/test/setup.py
+0
-1
software/kvm/test/test.py
software/kvm/test/test.py
+81
-84
software/metabase/test/setup.py
software/metabase/test/setup.py
+0
-1
software/metabase/test/test.py
software/metabase/test/test.py
+1
-2
software/slapos-master/test/test/test_balancer.py
software/slapos-master/test/test/test_balancer.py
+74
-65
software/slapos-master/test/test/test_erp5.py
software/slapos-master/test/test/test_erp5.py
+65
-64
software/slapos-master/test/test/test_mariadb.py
software/slapos-master/test/test/test_mariadb.py
+11
-10
software/slapos-master/test/test/test_wcfs.py
software/slapos-master/test/test/test_wcfs.py
+1
-1
software/slapos-sr-testing/README.md
software/slapos-sr-testing/README.md
+0
-1
software/slapos-sr-testing/software-py3.cfg
software/slapos-sr-testing/software-py3.cfg
+0
-44
software/slapos-sr-testing/software.cfg
software/slapos-sr-testing/software.cfg
+34
-20
software/slaprunner/test/setup.py
software/slaprunner/test/setup.py
+0
-1
software/slaprunner/test/test.py
software/slaprunner/test/test.py
+19
-20
software/theia/test/test.py
software/theia/test/test.py
+43
-46
No files found.
software/backupserver/test/test.py
View file @
b62f8386
...
@@ -45,7 +45,7 @@ class TestBackupServer(InstanceTestCase):
...
@@ -45,7 +45,7 @@ class TestBackupServer(InstanceTestCase):
# Check that there is a RSS feed
# Check that there is a RSS feed
self
.
assertTrue
(
'rss'
in
parameter_dict
)
self
.
assertTrue
(
'rss'
in
parameter_dict
)
self
.
assertTrue
(
parameter_dict
[
'rss'
].
startswith
(
self
.
assertTrue
(
parameter_dict
[
'rss'
].
startswith
(
'https://[%s]:9443/'
%
(
self
.
_ipv6_address
,
)
f'https://[
{
self
.
_ipv6_address
}
]:9443/'
))
))
result
=
requests
.
get
(
result
=
requests
.
get
(
...
...
software/beremiz-ide/test/test.py
View file @
b62f8386
...
@@ -24,7 +24,6 @@
...
@@ -24,7 +24,6 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
#
##############################################################################
##############################################################################
from
__future__
import
unicode_literals
import
os
import
os
import
requests
import
requests
...
...
software/caddy-frontend/test/setup.py
View file @
b62f8386
...
@@ -51,7 +51,6 @@ setup(name=name,
...
@@ -51,7 +51,6 @@ setup(name=name,
# caucase needed to connect to the KeDiFa caucase
# caucase needed to connect to the KeDiFa caucase
'caucase'
,
'caucase'
,
'cryptography'
,
'cryptography'
,
'backports.lzma'
,
],
],
zip_safe
=
True
,
zip_safe
=
True
,
test_suite
=
'test'
,
test_suite
=
'test'
,
...
...
software/caddy-frontend/test/test.py
View file @
b62f8386
...
@@ -51,18 +51,13 @@ import urllib.parse
...
@@ -51,18 +51,13 @@ import urllib.parse
import
socket
import
socket
import
sys
import
sys
import
logging
import
logging
import
lzma
import
random
import
random
import
string
import
string
from
slapos.slap.standalone
import
SlapOSNodeInstanceError
from
slapos.slap.standalone
import
SlapOSNodeInstanceError
import
caucase.client
import
caucase.client
import
caucase.utils
import
caucase.utils
try
:
import
lzma
except
ImportError
:
from
backports
import
lzma
import
datetime
import
datetime
from
cryptography
import
x509
from
cryptography
import
x509
...
...
software/cloudooo/test/setup.py
View file @
b62f8386
...
@@ -45,7 +45,6 @@ setup(name=name,
...
@@ -45,7 +45,6 @@ setup(name=name,
'slapos.cookbook'
,
'slapos.cookbook'
,
'slapos.libnetworkcache'
,
'slapos.libnetworkcache'
,
'requests'
,
'requests'
,
'six'
,
'PyPDF2'
,
'PyPDF2'
,
],
],
zip_safe
=
True
,
zip_safe
=
True
,
...
...
software/cloudooo/test/test.py
View file @
b62f8386
##############################################################################
##############################################################################
# coding: utf-8
#
#
# Copyright (c) 2020 Nexedi SA and Contributors. All Rights Reserved.
# Copyright (c) 2020 Nexedi SA and Contributors. All Rights Reserved.
#
#
...
@@ -31,8 +30,8 @@ import csv
...
@@ -31,8 +30,8 @@ import csv
import
multiprocessing
import
multiprocessing
import
os
import
os
import
json
import
json
import
six.moves.xmlrpc_
client
as
xmlrpclib
import
xmlrpc.
client
as
xmlrpclib
import
six.moves.
urllib.parse
as
urllib_parse
import
urllib.parse
as
urllib_parse
import
ssl
import
ssl
import
base64
import
base64
import
io
import
io
...
@@ -63,6 +62,7 @@ class CloudOooTestCase(_CloudOooTestCase):
...
@@ -63,6 +62,7 @@ class CloudOooTestCase(_CloudOooTestCase):
context
=
ssl_context
,
context
=
ssl_context
,
allow_none
=
True
,
allow_none
=
True
,
)
)
self
.
addCleanup
(
self
.
server
(
'close'
))
def
normalizeFontName
(
font_name
):
def
normalizeFontName
(
font_name
):
...
@@ -111,16 +111,16 @@ class HTMLtoPDFConversionFontTestMixin:
...
@@ -111,16 +111,16 @@ class HTMLtoPDFConversionFontTestMixin:
def
test
(
self
):
def
test
(
self
):
actual_font_mapping_mapping
=
{}
actual_font_mapping_mapping
=
{}
for
font
in
self
.
expected_font_mapping
:
for
font
in
self
.
expected_font_mapping
:
src_html
=
'''
src_html
=
f
'''
<style>
<style>
p {{ font-family: "
{
font
}
"; font-size: 20pt; }}
p {{ font-family: "
{
font
}
"; font-size: 20pt; }}
</style>
</style>
<p>the quick brown fox jumps over the lazy dog.</p>
<p>the quick brown fox jumps over the lazy dog.</p>
<p>THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.</p>
<p>THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.</p>
'''
.
format
(
**
locals
())
'''
pdf_data
=
self
.
_convert_html_to_pdf
(
src_html
)
pdf_data
=
self
.
_convert_html_to_pdf
(
src_html
)
pdf_reader
=
PyPDF2
.
PdfFileReader
(
io
.
BytesIO
(
(
pdf_data
)
))
pdf_reader
=
PyPDF2
.
PdfFileReader
(
io
.
BytesIO
(
pdf_data
))
self
.
assertEqual
(
self
.
assertEqual
(
self
.
pdf_producer
,
self
.
pdf_producer
,
pdf_reader
.
getDocumentInfo
()[
'/Producer'
])
pdf_reader
.
getDocumentInfo
()[
'/Producer'
])
...
@@ -165,7 +165,7 @@ class TestWkhtmlToPDF(HTMLtoPDFConversionFontTestMixin, CloudOooTestCase):
...
@@ -165,7 +165,7 @@ class TestWkhtmlToPDF(HTMLtoPDFConversionFontTestMixin, CloudOooTestCase):
'Liberation Sans Narrow'
:
'LiberationSansNarrow'
,
'Liberation Sans Narrow'
:
'LiberationSansNarrow'
,
'Liberation Serif'
:
'LiberationSerif'
,
'Liberation Serif'
:
'LiberationSerif'
,
'Linux LibertineG'
:
'LiberationSans'
,
'Linux LibertineG'
:
'LiberationSans'
,
'OpenSymbol'
:
set
([
'DejaVuSans'
,
'OpenSymbol'
])
,
'OpenSymbol'
:
{
'DejaVuSans'
,
'OpenSymbol'
}
,
'Palatino'
:
'LiberationSans'
,
'Palatino'
:
'LiberationSans'
,
'Roboto Black'
:
'LiberationSans'
,
'Roboto Black'
:
'LiberationSans'
,
'Roboto Condensed Light'
:
'LiberationSans'
,
'Roboto Condensed Light'
:
'LiberationSans'
,
...
@@ -180,9 +180,9 @@ class TestWkhtmlToPDF(HTMLtoPDFConversionFontTestMixin, CloudOooTestCase):
...
@@ -180,9 +180,9 @@ class TestWkhtmlToPDF(HTMLtoPDFConversionFontTestMixin, CloudOooTestCase):
}
}
def
_convert_html_to_pdf
(
self
,
src_html
):
def
_convert_html_to_pdf
(
self
,
src_html
):
return
base64
.
decode
string
(
return
base64
.
decode
bytes
(
self
.
server
.
convertFile
(
self
.
server
.
convertFile
(
base64
.
encode
string
(
src_html
.
encode
()).
decode
(),
base64
.
encode
bytes
(
src_html
.
encode
()).
decode
(),
'html'
,
'html'
,
'pdf'
,
'pdf'
,
False
,
False
,
...
@@ -238,9 +238,9 @@ class TestLibreoffice(HTMLtoPDFConversionFontTestMixin, CloudOooTestCase):
...
@@ -238,9 +238,9 @@ class TestLibreoffice(HTMLtoPDFConversionFontTestMixin, CloudOooTestCase):
}
}
def
_convert_html_to_pdf
(
self
,
src_html
):
def
_convert_html_to_pdf
(
self
,
src_html
):
return
base64
.
decode
string
(
return
base64
.
decode
bytes
(
self
.
server
.
convertFile
(
self
.
server
.
convertFile
(
base64
.
encode
string
(
src_html
.
encode
()).
decode
(),
base64
.
encode
bytes
(
src_html
.
encode
()).
decode
(),
'html'
,
'html'
,
'pdf'
,
'pdf'
,
).
encode
())
).
encode
())
...
@@ -251,10 +251,10 @@ class TestLibreOfficeTextConversion(CloudOooTestCase):
...
@@ -251,10 +251,10 @@ class TestLibreOfficeTextConversion(CloudOooTestCase):
def
test_html_to_text
(
self
):
def
test_html_to_text
(
self
):
self
.
assertEqual
(
self
.
assertEqual
(
base64
.
decode
string
(
base64
.
decode
bytes
(
self
.
server
.
convertFile
(
self
.
server
.
convertFile
(
base64
.
encode
string
(
base64
.
encode
bytes
(
u'<html>héhé</html>'
.
encode
(
'utf-8'
)).
decode
(),
'<html>héhé</html>'
.
encode
(
)).
decode
(),
'html'
,
'html'
,
'txt'
,
'txt'
,
).
encode
()),
).
encode
()),
...
@@ -274,19 +274,18 @@ class TestLibreOfficeCluster(CloudOooTestCase):
...
@@ -274,19 +274,18 @@ class TestLibreOfficeCluster(CloudOooTestCase):
global
_convert_html_to_text
global
_convert_html_to_text
def
_convert_html_to_text
(
src_html
):
def
_convert_html_to_text
(
src_html
):
return
base64
.
decode
string
(
return
base64
.
decode
bytes
(
self
.
server
.
convertFile
(
self
.
server
.
convertFile
(
base64
.
encode
string
(
src_html
.
encode
()).
decode
(),
base64
.
encode
bytes
(
src_html
.
encode
()).
decode
(),
'html'
,
'html'
,
'txt'
,
'txt'
,
).
encode
())
).
encode
())
pool
=
multiprocessing
.
Pool
(
5
)
pool
=
multiprocessing
.
Pool
(
5
)
# TODO py3: use with pool
with
pool
:
converted
=
pool
.
map
(
_convert_html_to_text
,
converted
=
pool
.
map
(
_convert_html_to_text
,
[
'<html><body>hello</body></html>'
]
*
100
)
[
'<html><body>hello</body></html>'
]
*
100
)
pool
.
terminate
()
pool
.
join
()
self
.
assertEqual
(
converted
,
[
codecs
.
BOM_UTF8
+
b'hello
\
n
'
]
*
100
)
self
.
assertEqual
(
converted
,
[
codecs
.
BOM_UTF8
+
b'hello
\
n
'
]
*
100
)
...
@@ -294,9 +293,8 @@ class TestLibreOfficeCluster(CloudOooTestCase):
...
@@ -294,9 +293,8 @@ class TestLibreOfficeCluster(CloudOooTestCase):
res
=
requests
.
get
(
res
=
requests
.
get
(
urllib_parse
.
urljoin
(
self
.
url
,
'/haproxy;csv'
),
urllib_parse
.
urljoin
(
self
.
url
,
'/haproxy;csv'
),
verify
=
False
,
verify
=
False
,
stream
=
True
,
)
)
reader
=
csv
.
DictReader
(
res
.
raw
)
reader
=
csv
.
DictReader
(
io
.
StringIO
(
res
.
text
)
)
line_list
=
list
(
reader
)
line_list
=
list
(
reader
)
# requests have been balanced
# requests have been balanced
total_hrsp_2xx
=
{
total_hrsp_2xx
=
{
...
@@ -309,8 +307,8 @@ class TestLibreOfficeCluster(CloudOooTestCase):
...
@@ -309,8 +307,8 @@ class TestLibreOfficeCluster(CloudOooTestCase):
# ideally there should be 25% of requests on each backend, because we use
# ideally there should be 25% of requests on each backend, because we use
# round robin scheduling, but it can happen that some backend take longer
# round robin scheduling, but it can happen that some backend take longer
# to start, so we are tolerant here and just check that each backend
# to start, so we are tolerant here and just check that each backend
# process at least
15% of requests.
# process at least
one request.
self
.
assertGreater
(
total_hrsp_2xx
[
backend
],
15
)
self
.
assertGreater
(
total_hrsp_2xx
[
backend
],
0
)
# no errors
# no errors
total_eresp
=
{
total_eresp
=
{
line
[
'svname'
]:
int
(
line
[
'eresp'
]
or
0
)
line
[
'svname'
]:
int
(
line
[
'eresp'
]
or
0
)
...
...
software/dream/test/test.py
View file @
b62f8386
##############################################################################
##############################################################################
# coding: utf-8
#
#
# Copyright (c) 2018 Nexedi SA and Contributors. All Rights Reserved.
# Copyright (c) 2018 Nexedi SA and Contributors. All Rights Reserved.
#
#
...
...
software/erp5/test/setup.py
View file @
b62f8386
...
@@ -24,7 +24,6 @@
...
@@ -24,7 +24,6 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
#
##############################################################################
##############################################################################
from
__future__
import
absolute_import
from
setuptools
import
setup
,
find_packages
from
setuptools
import
setup
,
find_packages
version
=
'0.0.1.dev0'
version
=
'0.0.1.dev0'
...
@@ -49,7 +48,6 @@ setup(name=name,
...
@@ -49,7 +48,6 @@ setup(name=name,
'psutil'
,
'psutil'
,
'requests'
,
'requests'
,
'mysqlclient'
,
'mysqlclient'
,
'backports.lzma'
,
'cryptography'
,
'cryptography'
,
'pexpect'
,
'pexpect'
,
'pyOpenSSL'
,
'pyOpenSSL'
,
...
...
software/erp5/test/test/__init__.py
View file @
b62f8386
...
@@ -25,7 +25,6 @@
...
@@ -25,7 +25,6 @@
#
#
##############################################################################
##############################################################################
from
__future__
import
absolute_import
import
json
import
json
import
os
import
os
...
...
software/erp5/test/test/test_balancer.py
View file @
b62f8386
This diff is collapsed.
Click to expand it.
software/erp5/test/test/test_erp5.py
View file @
b62f8386
This diff is collapsed.
Click to expand it.
software/erp5/test/test/test_mariadb.py
View file @
b62f8386
##############################################################################
##############################################################################
# coding: utf-8
#
#
# Copyright (c) 2018 Nexedi SA and Contributors. All Rights Reserved.
# Copyright (c) 2018 Nexedi SA and Contributors. All Rights Reserved.
#
#
...
@@ -26,11 +25,10 @@
...
@@ -26,11 +25,10 @@
#
#
##############################################################################
##############################################################################
from
__future__
import
absolute_import
import
os
import
os
import
json
import
json
import
glob
import
glob
import
six.moves.
urllib.parse
import
urllib.parse
import
socket
import
socket
import
sys
import
sys
import
time
import
time
...
@@ -39,7 +37,7 @@ import datetime
...
@@ -39,7 +37,7 @@ import datetime
import
subprocess
import
subprocess
import
gzip
import
gzip
from
backports
import
lzma
import
lzma
import
MySQLdb
import
MySQLdb
from
slapos.testing.utils
import
CrontabMixin
from
slapos.testing.utils
import
CrontabMixin
...
@@ -84,7 +82,7 @@ class MariaDBTestCase(ERP5InstanceTestCase):
...
@@ -84,7 +82,7 @@ class MariaDBTestCase(ERP5InstanceTestCase):
# type: () -> MySQLdb.connections.Connection
# type: () -> MySQLdb.connections.Connection
connection_parameter_dict
=
json
.
loads
(
connection_parameter_dict
=
json
.
loads
(
self
.
computer_partition
.
getConnectionParameterDict
()[
'_'
])
self
.
computer_partition
.
getConnectionParameterDict
()[
'_'
])
db_url
=
six
.
moves
.
urllib
.
parse
.
urlparse
(
connection_parameter_dict
[
'database-list'
][
0
])
db_url
=
urllib
.
parse
.
urlparse
(
connection_parameter_dict
[
'database-list'
][
0
])
self
.
assertEqual
(
'mysql'
,
db_url
.
scheme
)
self
.
assertEqual
(
'mysql'
,
db_url
.
scheme
)
self
.
assertTrue
(
db_url
.
path
.
startswith
(
'/'
))
self
.
assertTrue
(
db_url
.
path
.
startswith
(
'/'
))
...
@@ -208,7 +206,7 @@ class TestMariaDB(MariaDBTestCase):
...
@@ -208,7 +206,7 @@ class TestMariaDB(MariaDBTestCase):
"""
"""
select * from test_utf8_collation where col1 = "a"
select * from test_utf8_collation where col1 = "a"
"""
)
"""
)
self
.
assertEqual
(((
u
'à'
,),),
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
))
self
.
assertEqual
(((
'à'
,),),
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
))
class
TestMroonga
(
MariaDBTestCase
):
class
TestMroonga
(
MariaDBTestCase
):
...
@@ -232,7 +230,7 @@ class TestMroonga(MariaDBTestCase):
...
@@ -232,7 +230,7 @@ class TestMroonga(MariaDBTestCase):
SELECT mroonga_normalize("ABCDあぃうぇ㍑")
SELECT mroonga_normalize("ABCDあぃうぇ㍑")
"""
)
"""
)
# XXX this is returned as bytes by mroonga/mariadb (this might be a bug)
# XXX this is returned as bytes by mroonga/mariadb (this might be a bug)
self
.
assertEqual
(((
u'abcdあぃうぇリットル'
.
encode
(
'utf-8'
),),),
self
.
assertEqual
(((
'abcdあぃうぇリットル'
.
encode
(
),),),
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
))
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
))
if
0
:
if
0
:
...
@@ -245,7 +243,7 @@ class TestMroonga(MariaDBTestCase):
...
@@ -245,7 +243,7 @@ class TestMroonga(MariaDBTestCase):
"""
"""
SELECT mroonga_normalize("aBcDあぃウェ㍑", "NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark")
SELECT mroonga_normalize("aBcDあぃウェ㍑", "NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark")
"""
)
"""
)
self
.
assertEqual
(((
u'ABCDあぃうぇ㍑'
.
encode
(
'utf-8'
),),),
self
.
assertEqual
(((
'ABCDあぃうぇ㍑'
.
encode
(
),),),
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
))
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
))
def
test_mroonga_full_text_normalizer
(
self
):
def
test_mroonga_full_text_normalizer
(
self
):
...
@@ -282,7 +280,7 @@ class TestMroonga(MariaDBTestCase):
...
@@ -282,7 +280,7 @@ class TestMroonga(MariaDBTestCase):
WHERE MATCH (content) AGAINST ("+ブラック" IN BOOLEAN MODE)
WHERE MATCH (content) AGAINST ("+ブラック" IN BOOLEAN MODE)
"""
)
"""
)
self
.
assertEqual
(
self
.
assertEqual
(
((
datetime
.
date
(
2013
,
4
,
23
),
u
'ブラックコーヒーを飲んだ。'
),),
((
datetime
.
date
(
2013
,
4
,
23
),
'ブラックコーヒーを飲んだ。'
),),
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
),
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
),
)
)
...
...
software/erp5/test/test/test_wcfs.py
View file @
b62f8386
...
@@ -16,7 +16,6 @@
...
@@ -16,7 +16,6 @@
# See COPYING file for full licensing terms.
# See COPYING file for full licensing terms.
# See https://www.nexedi.com/licensing for rationale and options.
# See https://www.nexedi.com/licensing for rationale and options.
from
__future__
import
absolute_import
import
json
import
json
import
os.path
import
os.path
import
unittest
import
unittest
...
@@ -76,5 +75,5 @@ def lookupMount(zurl):
...
@@ -76,5 +75,5 @@ def lookupMount(zurl):
# readfile returns content of file @path.
# readfile returns content of file @path.
def
readfile
(
path
):
def
readfile
(
path
):
with
open
(
path
,
'r'
)
as
f
:
with
open
(
path
)
as
f
:
return
f
.
read
()
return
f
.
read
()
software/erp5/upgrade_test/setup.py
View file @
b62f8386
...
@@ -44,7 +44,6 @@ setup(name=name,
...
@@ -44,7 +44,6 @@ setup(name=name,
'slapos.core'
,
'slapos.core'
,
'supervisor'
,
'supervisor'
,
'slapos.libnetworkcache'
,
'slapos.libnetworkcache'
,
'typing; python_version<"3"'
,
],
],
test_suite
=
'test'
,
test_suite
=
'test'
,
)
)
software/erp5/upgrade_test/test.py
View file @
b62f8386
...
@@ -35,8 +35,8 @@ import tempfile
...
@@ -35,8 +35,8 @@ import tempfile
import
time
import
time
import
requests
import
requests
import
six.moves.urllib
as
urllib
import
urllib.parse
import
six.moves.xmlrpc_
client
import
xmlrpc.
client
import
urllib3
import
urllib3
from
slapos.grid.utils
import
md5digest
from
slapos.grid.utils
import
md5digest
...
@@ -83,8 +83,8 @@ class ERP5UpgradeTestCase(SlapOSInstanceTestCase):
...
@@ -83,8 +83,8 @@ class ERP5UpgradeTestCase(SlapOSInstanceTestCase):
@
classmethod
@
classmethod
def
setUpClass
(
cls
):
def
setUpClass
(
cls
):
# request and instan
c
iate with old software url
# request and instan
t
iate with old software url
super
(
ERP5UpgradeTestCase
,
cls
).
setUpClass
()
super
().
setUpClass
()
cls
.
setUpOldInstance
()
cls
.
setUpOldInstance
()
...
@@ -155,7 +155,7 @@ class TestERP5Upgrade(ERP5UpgradeTestCase):
...
@@ -155,7 +155,7 @@ class TestERP5Upgrade(ERP5UpgradeTestCase):
# wait for old site creation
# wait for old site creation
cls
.
session
.
get
(
cls
.
session
.
get
(
'{zope_base_url}/person_module'
.
format
(
zope_base_url
=
cls
.
zope_base_url
)
,
f'
{
cls
.
zope_base_url
}
/person_module'
,
auth
=
requests
.
auth
.
HTTPBasicAuth
(
auth
=
requests
.
auth
.
HTTPBasicAuth
(
username
=
param_dict
[
'inituser-login'
],
username
=
param_dict
[
'inituser-login'
],
password
=
param_dict
[
'inituser-password'
],
password
=
param_dict
[
'inituser-password'
],
...
@@ -171,14 +171,10 @@ class TestERP5Upgrade(ERP5UpgradeTestCase):
...
@@ -171,14 +171,10 @@ class TestERP5Upgrade(ERP5UpgradeTestCase):
ssl_context
=
ssl
.
create_default_context
()
ssl_context
=
ssl
.
create_default_context
()
ssl_context
.
check_hostname
=
False
ssl_context
.
check_hostname
=
False
ssl_context
.
verify_mode
=
ssl
.
CERT_NONE
ssl_context
.
verify_mode
=
ssl
.
CERT_NONE
erp5_xmlrpc_client
=
six
.
moves
.
xmlrpc_
client
.
ServerProxy
(
erp5_xmlrpc_client
=
xmlrpc
.
client
.
ServerProxy
(
cls
.
authenticated_zope_base_url
,
cls
.
authenticated_zope_base_url
,
context
=
ssl_context
,
context
=
ssl_context
,
)
)
# BBB use as a context manager only on python3
if
sys
.
version_info
<
(
3
,
):
yield
erp5_xmlrpc_client
else
:
with
erp5_xmlrpc_client
:
with
erp5_xmlrpc_client
:
yield
erp5_xmlrpc_client
yield
erp5_xmlrpc_client
...
@@ -188,7 +184,7 @@ class TestERP5Upgrade(ERP5UpgradeTestCase):
...
@@ -188,7 +184,7 @@ class TestERP5Upgrade(ERP5UpgradeTestCase):
try
:
try
:
custom
.
manage_addProduct
.
PythonScripts
.
manage_addPythonScript
(
custom
.
manage_addProduct
.
PythonScripts
.
manage_addPythonScript
(
script_id
)
script_id
)
except
six
.
moves
.
xmlrpc_
client
.
ProtocolError
as
e
:
except
xmlrpc
.
client
.
ProtocolError
as
e
:
if
e
.
errcode
!=
302
:
if
e
.
errcode
!=
302
:
raise
raise
getattr
(
custom
,
script_id
).
ZPythonScriptHTML_editAction
(
getattr
(
custom
,
script_id
).
ZPythonScriptHTML_editAction
(
...
...
software/erp5testnode/testsuite/deploy-test/buildout.hash.cfg
View file @
b62f8386
...
@@ -18,4 +18,4 @@ md5sum = 8357771b70efd0740561b1cb46f6955e
...
@@ -18,4 +18,4 @@ md5sum = 8357771b70efd0740561b1cb46f6955e
[template-deploy-test]
[template-deploy-test]
filename = instance.cfg.in
filename = instance.cfg.in
md5sum =
c5db797980951b764b69aaa4b60a0380
md5sum =
062e677990ca0cd0c0396993c58b46a2
software/erp5testnode/testsuite/deploy-test/instance-deploy-test.cfg.jinja2
View file @
b62f8386
...
@@ -22,7 +22,7 @@ parts =
...
@@ -22,7 +22,7 @@ parts =
[request-kvm]
[request-kvm]
<= slap-connection
<= slap-connection
recipe = slapos.cookbook:request
recipe = slapos.cookbook:request
.serialised
software-url = ${slap-connection:software-release-url}
software-url = ${slap-connection:software-release-url}
software-type = kvm
software-type = kvm
name = test-kvm
name = test-kvm
...
...
software/erp5testnode/testsuite/deploy-test/instance.cfg.in
View file @
b62f8386
...
@@ -25,24 +25,22 @@ command =
...
@@ -25,24 +25,22 @@ command =
[runTestSuite]
[runTestSuite]
recipe = slapos.recipe.template:jinja2
recipe = slapos.recipe.template:jinja2
rendered
= $${buildout:directory}/bin/$${:_buildout_section_name_}
output
= $${buildout:directory}/bin/$${:_buildout_section_name_}
template = inline:
inline =
#!/bin/sh
#!/bin/sh
export PATH=${python2.7-with-eggs:location}:$PATH
exec ${buildout:bin-directory}/${runTestSuite_py:interpreter} ${:_profile_base_location_}/runTestSuite.py --partition_ipv4 {{ list(partition_ipv4)[0] }} --partition_path $${buildout:directory} --test_reference "{{ slapparameter_dict.get('image-to-test-url') }} {{ slapparameter_dict.get('script-to-test-url')}}" --test_location "${test-location:base}/{{ slapparameter_dict.get('test-relative-directory', 'playbook/roles/standalone-shared') }}" --python_interpreter=${buildout:bin-directory}/${runTestSuite_py:interpreter} "$@"
exec ${buildout:bin-directory}/${runTestSuite_py:interpreter} ${:_profile_base_location_}/runTestSuite.py --partition_ipv4 {{ list(partition_ipv4)[0] }} --partition_path $${buildout:directory} --test_reference "{{ slapparameter_dict.get('image-to-test-url') }} {{ slapparameter_dict.get('script-to-test-url')}}" --test_location "${test-location:base}/{{ slapparameter_dict.get('test-relative-directory', 'playbook/roles/standalone-shared') }}" --python_interpreter=${buildout:bin-directory}/${runTestSuite_py:interpreter} "$@"
mode = 0755
context =
context =
key slapparameter_dict slap-configuration:configuration
key slapparameter_dict slap-configuration:configuration
key partition_ipv4 slap-configuration:ipv4
key partition_ipv4 slap-configuration:ipv4
[switch_softwaretype]
[switch_softwaretype]
default = $${:deploy-test}
default = $${:deploy-test}
deploy-test = dynamic-template-deploy-test:
rendered
deploy-test = dynamic-template-deploy-test:
output
[dynamic-template-deploy-test]
[dynamic-template-deploy-test]
recipe = slapos.recipe.template:jinja2
recipe = slapos.recipe.template:jinja2
template
= ${:_profile_base_location_}/instance-deploy-test.cfg.jinja2
url
= ${:_profile_base_location_}/instance-deploy-test.cfg.jinja2
rendered
= $${buildout:directory}/template-deploy-test.cfg
output
= $${buildout:directory}/template-deploy-test.cfg
context =
context =
key develop_eggs_directory buildout:develop-eggs-directory
key develop_eggs_directory buildout:develop-eggs-directory
key eggs_directory buildout:eggs-directory
key eggs_directory buildout:eggs-directory
...
@@ -52,4 +50,3 @@ context =
...
@@ -52,4 +50,3 @@ context =
raw in_vm_test_script_md5 ${deploy-script-controller-script:md5sum}
raw in_vm_test_script_md5 ${deploy-script-controller-script:md5sum}
raw waittime ${deploy-script-controller-script:waittime}
raw waittime ${deploy-script-controller-script:waittime}
raw tries ${deploy-script-controller-script:tries}
raw tries ${deploy-script-controller-script:tries}
mode = 0644
software/erp5testnode/testsuite/deploy-test/software.cfg
View file @
b62f8386
[buildout]
[buildout]
extends =
extends =
buildout.hash.cfg
buildout.hash.cfg
https://lab.nexedi.com/nexedi/slapos/raw/1.0.2
64
/software/kvm/software.cfg
https://lab.nexedi.com/nexedi/slapos/raw/1.0.2
71
/software/kvm/software.cfg
parts =
parts =
python-with-eggs
python-with-eggs
template-deploy-test
template-deploy-test
...
@@ -15,23 +15,8 @@ eggs =
...
@@ -15,23 +15,8 @@ eggs =
requests
requests
interpreter = ${:_buildout_section_name_}
interpreter = ${:_buildout_section_name_}
[python2.7-with-eggs]
# create interpreters named "python" and "python2.7" so that
# instance profile can use them in $PATH
recipe = plone.recipe.command
location = ${buildout:parts-directory}/${:_buildout_section_name_}
stop-on-error = true
command =
rm -fr ${:location} &&
mkdir -p ${:location} &&
ln -s ${buildout:bin-directory}/${python-with-eggs:interpreter} ${:location}/python &&
ln -s ${buildout:bin-directory}/${python-with-eggs:interpreter} ${:location}/python2.7
update-command = ${:command}
[playbook]
[playbook]
recipe = plone.recipe.command
recipe = plone.recipe.command
stop-on-error = true
stop-on-error = true
environment = export PATH=${tar:location}/bin:${gzip:location}/bin:$PATH
environment = export PATH=${tar:location}/bin:${gzip:location}/bin:$PATH
location = ${buildout:parts-directory}/${:_buildout_section_name_}
location = ${buildout:parts-directory}/${:_buildout_section_name_}
...
@@ -70,7 +55,6 @@ location = ${:_profile_base_location_}/${:filename}
...
@@ -70,7 +55,6 @@ location = ${:_profile_base_location_}/${:filename}
recipe = slapos.recipe.template
recipe = slapos.recipe.template
url = ${:_profile_base_location_}/${:filename}
url = ${:_profile_base_location_}/${:filename}
output = ${buildout:directory}/template.cfg
output = ${buildout:directory}/template.cfg
mode = 0644
[versions]
[versions]
erp5.util = 0.4.69
erp5.util = 0.4.69
software/fluentd/software-py2.cfg
deleted
100644 → 0
View file @
25b5b32b
[buildout]
extends =
software.cfg
[python]
part = python2.7
software/fluentd/test/setup.py
View file @
b62f8386
...
@@ -46,7 +46,6 @@ setup(name=name,
...
@@ -46,7 +46,6 @@ setup(name=name,
'slapos.libnetworkcache'
,
'slapos.libnetworkcache'
,
'erp5.util'
,
'erp5.util'
,
'supervisor'
,
'supervisor'
,
'six'
,
],
],
zip_safe
=
True
,
zip_safe
=
True
,
test_suite
=
'test'
,
test_suite
=
'test'
,
...
...
software/fluentd/test/test.py
View file @
b62f8386
...
@@ -34,11 +34,10 @@ import struct
...
@@ -34,11 +34,10 @@ import struct
import
subprocess
import
subprocess
import
tempfile
import
tempfile
import
time
import
time
import
six
import
sys
import
sys
from
six.moves.SimpleHTTPS
erver
import
SimpleHTTPRequestHandler
from
http.s
erver
import
SimpleHTTPRequestHandler
from
s
ix.moves.s
ocketserver
import
StreamRequestHandler
,
TCPServer
from
socketserver
import
StreamRequestHandler
,
TCPServer
from
slapos.testing.testcase
import
makeModuleSetUpAndTestCaseClass
from
slapos.testing.testcase
import
makeModuleSetUpAndTestCaseClass
from
slapos.testing.utils
import
findFreeTCPPort
from
slapos.testing.utils
import
findFreeTCPPort
...
@@ -49,8 +48,8 @@ FLUSH_INTERVAL = 1
...
@@ -49,8 +48,8 @@ FLUSH_INTERVAL = 1
setUpModule
,
SlapOSInstanceTestCase
=
makeModuleSetUpAndTestCaseClass
(
setUpModule
,
SlapOSInstanceTestCase
=
makeModuleSetUpAndTestCaseClass
(
os
.
path
.
abspath
(
os
.
path
.
abspath
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'..'
,
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'..'
,
'software.cfg'
)))
'software%s.cfg'
%
(
"-py2"
if
six
.
PY2
else
""
))))
class
FluentdTestCase
(
SlapOSInstanceTestCase
):
class
FluentdTestCase
(
SlapOSInstanceTestCase
):
__partition_reference__
=
'fluentd'
__partition_reference__
=
'fluentd'
...
@@ -135,11 +134,11 @@ class WendelinTutorialTestCase(FluentdTestCase):
...
@@ -135,11 +134,11 @@ class WendelinTutorialTestCase(FluentdTestCase):
return
subprocess
.
check_output
(
return
subprocess
.
check_output
(
[
self
.
_fluentd_bin
,
'-c'
,
conf_path
,
'--dry-run'
],
[
self
.
_fluentd_bin
,
'-c'
,
conf_path
,
'--dry-run'
],
env
=
{
'GEM_PATH'
:
self
.
_gem_path
},
env
=
{
'GEM_PATH'
:
self
.
_gem_path
},
universal_newlines
=
True
,
text
=
True
,
)
)
def
_test_configuration
(
self
,
expected_str
):
def
_test_configuration
(
self
,
expected_str
):
self
.
assertRegex
pMatches
(
self
.
assertRegex
(
self
.
read_fluentd_conf
(
self
.
_conf
),
self
.
read_fluentd_conf
(
self
.
_conf
),
expected_str
,
expected_str
,
)
)
...
@@ -168,12 +167,12 @@ class SensorConfTestCase(WendelinTutorialTestCase):
...
@@ -168,12 +167,12 @@ class SensorConfTestCase(WendelinTutorialTestCase):
@
classmethod
@
classmethod
def
sensor_conf
(
cls
,
script_path
):
def
sensor_conf
(
cls
,
script_path
):
return
'''
\
return
f
'''
\
<source>
<source>
@type exec
@type exec
tag tag.name
tag tag.name
command
%s %s
command
{
sys
.
executable
}
{
script_path
}
run_interval
%s
s
run_interval
{
FLUSH_INTERVAL
}
s
<parse>
<parse>
keys pressure, humidity, temperature
keys pressure, humidity, temperature
</parse>
</parse>
...
@@ -182,25 +181,25 @@ class SensorConfTestCase(WendelinTutorialTestCase):
...
@@ -182,25 +181,25 @@ class SensorConfTestCase(WendelinTutorialTestCase):
@type forward
@type forward
<server>
<server>
name myserver1
name myserver1
host
%s
host
{
cls
.
_ipv6_address
}
</server>
</server>
<buffer>
<buffer>
flush_mode immediate
flush_mode immediate
</buffer>
</buffer>
</match>'''
%
(
sys
.
executable
,
script_path
,
FLUSH_INTERVAL
,
cls
.
_ipv6_address
)
</match>'''
@
classmethod
@
classmethod
def
sensor_script
(
cls
,
measurementList
):
def
sensor_script
(
cls
,
measurementList
):
return
'''
\
measurement_text
=
"
\
t
"
.
join
(
measurementList
)
#!/usr/bin/python
return
f'''
\
#!
{
sys
.
executable
}
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
print("
%s")'''
%
"
\
t
"
.
join
(
measurementList
)
print("
{
measurement_text
}
")'''
def
test_configuration
(
self
):
def
test_configuration
(
self
):
self
.
_test_configuration
(
self
.
_test_configuration
(
r'adding forwarding server \'myserver1\' host="%s" port=%s weight=60'
fr'adding forwarding server \'myserver1\' host="
{
self
.
_ipv6_address
}
" port=
{
FLUENTD_PORT
}
weight=60'
%
(
self
.
_ipv6_address
,
FLUENTD_PORT
)
)
)
def
test_send_data
(
self
):
def
test_send_data
(
self
):
...
@@ -229,25 +228,24 @@ class GatewayConfTestCase(WendelinTutorialTestCase):
...
@@ -229,25 +228,24 @@ class GatewayConfTestCase(WendelinTutorialTestCase):
@
classmethod
@
classmethod
def
gateway_conf
(
cls
,
fluentd_port
,
wendelin_port
):
def
gateway_conf
(
cls
,
fluentd_port
,
wendelin_port
):
return
'''
\
return
f
'''
\
<source>
<source>
@type forward
@type forward
port
%s
port
{
fluentd_port
}
bind
%s
bind
{
cls
.
_ipv6_address
}
</source>
</source>
<match tag.name>
<match tag.name>
@type wendelin
@type wendelin
streamtool_uri http://[
%s]:%s
/erp5/portal_ingestion_policies/default
streamtool_uri http://[
{
cls
.
_ipv6_address
}
]:
{
wendelin_port
}
/erp5/portal_ingestion_policies/default
user foo
user foo
password bar
password bar
<buffer>
<buffer>
flush_mode interval
flush_mode interval
@type file
@type file
path fluentd-buffer-file/
path fluentd-buffer-file/
flush_interval
%s
s
flush_interval
{
FLUSH_INTERVAL
}
s
</buffer>
</buffer>
</match>'''
%
(
fluentd_port
,
cls
.
_ipv6_address
,
cls
.
_ipv6_address
,
</match>'''
wendelin_port
,
FLUSH_INTERVAL
)
@
classmethod
@
classmethod
def
get_configuration
(
cls
):
def
get_configuration
(
cls
):
...
...
software/gitlab/test/test.py
View file @
b62f8386
...
@@ -27,7 +27,7 @@
...
@@ -27,7 +27,7 @@
import
os
import
os
import
logging
import
logging
from
six.moves.
urllib.parse
import
urlparse
from
urllib.parse
import
urlparse
import
requests
import
requests
...
...
software/kvm/test/setup.py
View file @
b62f8386
...
@@ -48,7 +48,6 @@ setup(name=name,
...
@@ -48,7 +48,6 @@ setup(name=name,
'erp5.util'
,
'erp5.util'
,
'supervisor'
,
'supervisor'
,
'psutil'
,
'psutil'
,
'six'
,
],
],
zip_safe
=
True
,
zip_safe
=
True
,
test_suite
=
'test'
,
test_suite
=
'test'
,
...
...
software/kvm/test/test.py
View file @
b62f8386
This diff is collapsed.
Click to expand it.
software/metabase/test/setup.py
View file @
b62f8386
...
@@ -45,7 +45,6 @@ setup(name=name,
...
@@ -45,7 +45,6 @@ setup(name=name,
'slapos.cookbook'
,
'slapos.cookbook'
,
'slapos.libnetworkcache'
,
'slapos.libnetworkcache'
,
'supervisor'
,
'supervisor'
,
'six'
,
'requests'
'requests'
],
],
zip_safe
=
True
,
zip_safe
=
True
,
...
...
software/metabase/test/test.py
View file @
b62f8386
##############################################################################
##############################################################################
# coding: utf-8
#
#
# Copyright (c) 2020 Nexedi SA and Contributors. All Rights Reserved.
# Copyright (c) 2020 Nexedi SA and Contributors. All Rights Reserved.
#
#
...
@@ -28,7 +27,7 @@
...
@@ -28,7 +27,7 @@
import
os
import
os
import
json
import
json
from
six.moves.
urllib
import
parse
from
urllib
import
parse
import
requests
import
requests
from
slapos.testing.testcase
import
makeModuleSetUpAndTestCaseClass
from
slapos.testing.testcase
import
makeModuleSetUpAndTestCaseClass
...
...
software/slapos-master/test/test/test_balancer.py
View file @
b62f8386
This diff is collapsed.
Click to expand it.
software/slapos-master/test/test/test_erp5.py
View file @
b62f8386
...
@@ -28,11 +28,11 @@
...
@@ -28,11 +28,11 @@
import
os
import
os
import
json
import
json
import
glob
import
glob
import
urlparse
import
url
lib.
parse
import
socket
import
socket
import
time
import
time
import
re
import
re
import
BaseHTTPS
erver
import
http.s
erver
import
multiprocessing
import
multiprocessing
import
subprocess
import
subprocess
...
@@ -44,7 +44,7 @@ from . import setUpModule
...
@@ -44,7 +44,7 @@ from . import setUpModule
setUpModule
# pyflakes
setUpModule
# pyflakes
class
TestPublishedURLIsReachableMixin
(
object
)
:
class
TestPublishedURLIsReachableMixin
:
"""Mixin that checks that default page of ERP5 is reachable.
"""Mixin that checks that default page of ERP5 is reachable.
"""
"""
...
@@ -52,7 +52,7 @@ class TestPublishedURLIsReachableMixin(object):
...
@@ -52,7 +52,7 @@ class TestPublishedURLIsReachableMixin(object):
# We access ERP5 trough a "virtual host", which should make
# We access ERP5 trough a "virtual host", which should make
# ERP5 produce URLs using https://virtual-host-name:1234/virtual_host_root
# ERP5 produce URLs using https://virtual-host-name:1234/virtual_host_root
# as base.
# as base.
virtual_host_url
=
urlparse
.
urljoin
(
virtual_host_url
=
url
lib
.
parse
.
urljoin
(
base_url
,
base_url
,
'/VirtualHostBase/https/virtual-host-name:1234/{}/VirtualHostRoot/_vh_virtual_host_root/'
'/VirtualHostBase/https/virtual-host-name:1234/{}/VirtualHostRoot/_vh_virtual_host_root/'
.
format
(
site_id
))
.
format
(
site_id
))
...
@@ -72,7 +72,7 @@ class TestPublishedURLIsReachableMixin(object):
...
@@ -72,7 +72,7 @@ class TestPublishedURLIsReachableMixin(object):
total
=
60
,
total
=
60
,
backoff_factor
=
.
5
,
backoff_factor
=
.
5
,
status_forcelist
=
(
404
,
500
,
503
))))
status_forcelist
=
(
404
,
500
,
503
))))
with
session
:
r
=
session
.
get
(
virtual_host_url
,
verify
=
verify
,
allow_redirects
=
False
)
r
=
session
.
get
(
virtual_host_url
,
verify
=
verify
,
allow_redirects
=
False
)
self
.
assertEqual
(
r
.
status_code
,
requests
.
codes
.
found
)
self
.
assertEqual
(
r
.
status_code
,
requests
.
codes
.
found
)
# access on / are redirected to login form, with virtual host preserved
# access on / are redirected to login form, with virtual host preserved
...
@@ -80,7 +80,7 @@ class TestPublishedURLIsReachableMixin(object):
...
@@ -80,7 +80,7 @@ class TestPublishedURLIsReachableMixin(object):
# login page can be rendered and contain the text "ERP5"
# login page can be rendered and contain the text "ERP5"
r
=
session
.
get
(
r
=
session
.
get
(
urlparse
.
urljoin
(
base_url
,
'{}/login_form'
.
format
(
site_id
)
),
urllib
.
parse
.
urljoin
(
base_url
,
f'
{
site_id
}
/login_form'
),
verify
=
verify
,
verify
=
verify
,
allow_redirects
=
False
,
allow_redirects
=
False
,
)
)
...
@@ -134,7 +134,7 @@ class TestJupyter(ERP5InstanceTestCase, TestPublishedURLIsReachableMixin):
...
@@ -134,7 +134,7 @@ class TestJupyter(ERP5InstanceTestCase, TestPublishedURLIsReachableMixin):
param_dict
=
self
.
getRootPartitionConnectionParameterDict
()
param_dict
=
self
.
getRootPartitionConnectionParameterDict
()
self
.
assertEqual
(
self
.
assertEqual
(
'https://[%s]:8888/tree'
%
self
.
_ipv6_address
,
f'https://[
{
self
.
_ipv6_address
}
]:8888/tree'
,
param_dict
[
'jupyter-url'
]
param_dict
[
'jupyter-url'
]
)
)
...
@@ -172,7 +172,7 @@ class TestApacheBalancerPorts(ERP5InstanceTestCase):
...
@@ -172,7 +172,7 @@ class TestApacheBalancerPorts(ERP5InstanceTestCase):
}
}
def
checkValidHTTPSURL
(
self
,
url
):
def
checkValidHTTPSURL
(
self
,
url
):
parsed
=
urlparse
.
urlparse
(
url
)
parsed
=
url
lib
.
parse
.
urlparse
(
url
)
self
.
assertEqual
(
parsed
.
scheme
,
'https'
)
self
.
assertEqual
(
parsed
.
scheme
,
'https'
)
self
.
assertTrue
(
parsed
.
hostname
)
self
.
assertTrue
(
parsed
.
hostname
)
self
.
assertTrue
(
parsed
.
port
)
self
.
assertTrue
(
parsed
.
port
)
...
@@ -182,16 +182,16 @@ class TestApacheBalancerPorts(ERP5InstanceTestCase):
...
@@ -182,16 +182,16 @@ class TestApacheBalancerPorts(ERP5InstanceTestCase):
param_dict
=
self
.
getRootPartitionConnectionParameterDict
()
param_dict
=
self
.
getRootPartitionConnectionParameterDict
()
for
family_name
in
(
'family1'
,
'family2'
):
for
family_name
in
(
'family1'
,
'family2'
):
self
.
checkValidHTTPSURL
(
self
.
checkValidHTTPSURL
(
param_dict
[
'family-{family_name}'
.
format
(
family_name
=
family_name
)
])
param_dict
[
f'family-
{
family_name
}
'
])
self
.
checkValidHTTPSURL
(
self
.
checkValidHTTPSURL
(
param_dict
[
'family-{family_name}-v6'
.
format
(
family_name
=
family_name
)
])
param_dict
[
f'family-
{
family_name
}
-v6'
])
def
test_published_test_runner_url
(
self
):
def
test_published_test_runner_url
(
self
):
# each family's also a list of test test runner URLs, by default 3 per family
# each family's also a list of test test runner URLs, by default 3 per family
param_dict
=
self
.
getRootPartitionConnectionParameterDict
()
param_dict
=
self
.
getRootPartitionConnectionParameterDict
()
for
family_name
in
(
'family1'
,
'family2'
):
for
family_name
in
(
'family1'
,
'family2'
):
family_test_runner_url_list
=
param_dict
[
family_test_runner_url_list
=
param_dict
[
'{family_name}-test-runner-url-list'
.
format
(
family_name
=
family_name
)
]
f'
{
family_name
}
-test-runner-url-list'
]
self
.
assertEqual
(
3
,
len
(
family_test_runner_url_list
))
self
.
assertEqual
(
3
,
len
(
family_test_runner_url_list
))
for
url
in
family_test_runner_url_list
:
for
url
in
family_test_runner_url_list
:
self
.
checkValidHTTPSURL
(
url
)
self
.
checkValidHTTPSURL
(
url
)
...
@@ -209,23 +209,23 @@ class TestApacheBalancerPorts(ERP5InstanceTestCase):
...
@@ -209,23 +209,23 @@ class TestApacheBalancerPorts(ERP5InstanceTestCase):
# normal access on ipv4 and ipv6 and test runner access on ipv4 only
# normal access on ipv4 and ipv6 and test runner access on ipv4 only
with
self
.
slap
.
instance_supervisor_rpc
as
supervisor
:
with
self
.
slap
.
instance_supervisor_rpc
as
supervisor
:
all_process_info
=
supervisor
.
getAllProcessInfo
()
all_process_info
=
supervisor
.
getAllProcessInfo
()
process_info
,
=
[
p
for
p
in
all_process_info
if
p
[
'name'
]
==
'apache'
]
process_info
,
=
(
p
for
p
in
all_process_info
if
p
[
'name'
]
==
'apache'
)
apache_process
=
psutil
.
Process
(
process_info
[
'pid'
])
apache_process
=
psutil
.
Process
(
process_info
[
'pid'
])
self
.
assertEqual
(
self
.
assertEqual
(
sorted
([
socket
.
AF_INET
]
*
4
+
[
socket
.
AF_INET6
]
*
2
),
sorted
([
socket
.
AF_INET
]
*
4
+
[
socket
.
AF_INET6
]
*
2
),
sorted
(
[
sorted
(
c
.
family
c
.
family
for
c
in
apache_process
.
connections
()
for
c
in
apache_process
.
connections
()
if
c
.
status
==
'LISTEN'
if
c
.
status
==
'LISTEN'
]
))
))
def
test_haproxy_listen
(
self
):
def
test_haproxy_listen
(
self
):
# There is one haproxy per family
# There is one haproxy per family
with
self
.
slap
.
instance_supervisor_rpc
as
supervisor
:
with
self
.
slap
.
instance_supervisor_rpc
as
supervisor
:
all_process_info
=
supervisor
.
getAllProcessInfo
()
all_process_info
=
supervisor
.
getAllProcessInfo
()
process_info
,
=
[
process_info
,
=
(
p
for
p
in
all_process_info
if
p
[
'name'
].
startswith
(
'haproxy-'
)
p
for
p
in
all_process_info
if
p
[
'name'
].
startswith
(
'haproxy-'
)
]
)
haproxy_process
=
psutil
.
Process
(
process_info
[
'pid'
])
haproxy_process
=
psutil
.
Process
(
process_info
[
'pid'
])
self
.
assertEqual
([
socket
.
AF_INET
,
socket
.
AF_INET
],
[
self
.
assertEqual
([
socket
.
AF_INET
,
socket
.
AF_INET
],
[
c
.
family
for
c
in
haproxy_process
.
connections
()
if
c
.
status
==
'LISTEN'
c
.
family
for
c
in
haproxy_process
.
connections
()
if
c
.
status
==
'LISTEN'
...
@@ -290,8 +290,8 @@ class TestZopeNodeParameterOverride(ERP5InstanceTestCase, TestPublishedURLIsReac
...
@@ -290,8 +290,8 @@ class TestZopeNodeParameterOverride(ERP5InstanceTestCase, TestPublishedURLIsReac
zodb
[
"pool-timeout"
]
=
"10m"
zodb
[
"pool-timeout"
]
=
"10m"
storage
[
"storage"
]
=
"root"
storage
[
"storage"
]
=
"root"
storage
[
"server"
]
=
zeo_addr
storage
[
"server"
]
=
zeo_addr
with
open
(
'%s/etc/zope-%s.conf'
%
(
partition
,
zope
)
)
as
f
:
with
open
(
f'
{
partition
}
/etc/zope-
{
zope
}
.conf'
)
as
f
:
conf
=
map
(
str
.
strip
,
f
.
readlines
(
))
conf
=
list
(
map
(
str
.
strip
,
f
.
readlines
()
))
i
=
conf
.
index
(
"<zodb_db root>"
)
+
1
i
=
conf
.
index
(
"<zodb_db root>"
)
+
1
conf
=
iter
(
conf
[
i
:
conf
.
index
(
"</zodb_db>"
,
i
)])
conf
=
iter
(
conf
[
i
:
conf
.
index
(
"</zodb_db>"
,
i
)])
for
line
in
conf
:
for
line
in
conf
:
...
@@ -300,23 +300,23 @@ class TestZopeNodeParameterOverride(ERP5InstanceTestCase, TestPublishedURLIsReac
...
@@ -300,23 +300,23 @@ class TestZopeNodeParameterOverride(ERP5InstanceTestCase, TestPublishedURLIsReac
if
line
==
'</zeoclient>'
:
if
line
==
'</zeoclient>'
:
break
break
checkParameter
(
line
,
storage
)
checkParameter
(
line
,
storage
)
for
k
,
v
in
storage
.
ite
rite
ms
():
for
k
,
v
in
storage
.
items
():
self
.
assertIsNone
(
v
,
k
)
self
.
assertIsNone
(
v
,
k
)
del
storage
del
storage
else
:
else
:
checkParameter
(
line
,
zodb
)
checkParameter
(
line
,
zodb
)
for
k
,
v
in
zodb
.
ite
rite
ms
():
for
k
,
v
in
zodb
.
items
():
self
.
assertIsNone
(
v
,
k
)
self
.
assertIsNone
(
v
,
k
)
partition
=
self
.
getComputerPartitionPath
(
'zope-a'
)
partition
=
self
.
getComputerPartitionPath
(
'zope-a'
)
for
zope
in
x
range
(
3
):
for
zope
in
range
(
3
):
checkConf
({
checkConf
({
"cache-size-bytes"
:
"20MB"
,
"cache-size-bytes"
:
"20MB"
,
},
{
},
{
"cache-size"
:
"50MB"
,
"cache-size"
:
"50MB"
,
})
})
partition
=
self
.
getComputerPartitionPath
(
'zope-bb'
)
partition
=
self
.
getComputerPartitionPath
(
'zope-bb'
)
for
zope
in
x
range
(
5
):
for
zope
in
range
(
5
):
checkConf
({
checkConf
({
"cache-size-bytes"
:
"500MB"
if
zope
else
1
<<
20
,
"cache-size-bytes"
:
"500MB"
if
zope
else
1
<<
20
,
},
{
},
{
...
@@ -332,19 +332,20 @@ def popenCommunicate(command_list, input_=None, **kwargs):
...
@@ -332,19 +332,20 @@ def popenCommunicate(command_list, input_=None, **kwargs):
popen
.
kill
()
popen
.
kill
()
if
popen
.
returncode
!=
0
:
if
popen
.
returncode
!=
0
:
raise
ValueError
(
raise
ValueError
(
'Issue during calling %r, result was:
\
n
%s'
%
(
command_list
,
result
)
)
f'Issue during calling
{
command_list
!
r
}
, result was:
\
n
{
result
}
'
)
return
result
return
result
class
TestHandler
(
BaseHTTPS
erver
.
BaseHTTPRequestHandler
):
class
TestHandler
(
http
.
s
erver
.
BaseHTTPRequestHandler
):
def
do_GET
(
self
):
def
do_GET
(
self
):
self
.
send_response
(
200
)
self
.
send_response
(
200
)
response
=
json
.
dumps
(
response
=
{
{
'Path'
:
self
.
path
,
'Path'
:
self
.
path
,
'Incoming Headers'
:
self
.
headers
.
dict
'Incoming Headers'
:
{
k
.
lower
():
v
for
k
,
v
in
self
.
headers
.
items
()},
}
},
response
=
json
.
dumps
(
response
,
indent
=
2
)
indent
=
2
,
).
encode
(
'utf-8'
)
self
.
end_headers
()
self
.
end_headers
()
self
.
wfile
.
write
(
response
)
self
.
wfile
.
write
(
response
)
...
@@ -352,7 +353,7 @@ class TestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
...
@@ -352,7 +353,7 @@ class TestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
class
TestDeploymentScriptInstantiation
(
ERP5InstanceTestCase
):
class
TestDeploymentScriptInstantiation
(
ERP5InstanceTestCase
):
"""This check deployment script like instantiation
"""This check deployment script like instantiation
Low level assertions are done here in
ro
der to assure that
Low level assertions are done here in
or
der to assure that
https://lab.nexedi.com/nexedi/slapos.package/blob/master/playbook/
https://lab.nexedi.com/nexedi/slapos.package/blob/master/playbook/
slapos-master-standalone.yml
slapos-master-standalone.yml
works correctly
works correctly
...
@@ -426,8 +427,8 @@ class TestDeploymentScriptInstantiation(ERP5InstanceTestCase):
...
@@ -426,8 +427,8 @@ class TestDeploymentScriptInstantiation(ERP5InstanceTestCase):
1
,
1
,
len
(
backend_apache_configuration_list
)
len
(
backend_apache_configuration_list
)
)
)
backend_apache_configuration
=
open
(
with
open
(
backend_apache_configuration_list
[
0
])
as
f
:
backend_apache_configuration
_list
[
0
])
.
read
()
backend_apache_configuration
=
f
.
read
()
self
.
assertIn
(
self
.
assertIn
(
'SSLVerifyClient require'
,
'SSLVerifyClient require'
,
backend_apache_configuration
backend_apache_configuration
...
@@ -452,7 +453,7 @@ class TestDeploymentScriptInstantiation(ERP5InstanceTestCase):
...
@@ -452,7 +453,7 @@ class TestDeploymentScriptInstantiation(ERP5InstanceTestCase):
common_name
=
'TEST-SSL-AUTH'
common_name
=
'TEST-SSL-AUTH'
popenCommunicate
([
popenCommunicate
([
'openssl'
,
'req'
,
'-utf8'
,
'-nodes'
,
'-config'
,
openssl_config
,
'-new'
,
'openssl'
,
'req'
,
'-utf8'
,
'-nodes'
,
'-config'
,
openssl_config
,
'-new'
,
'-keyout'
,
key
,
'-out'
,
csr
,
'-days'
,
'3650'
],
'%s
\
n
'
%
(
common_name
,
),
'-keyout'
,
key
,
'-out'
,
csr
,
'-days'
,
'3650'
],
f'
{
common_name
}\
n
'
.
encode
(
),
stdin
=
subprocess
.
PIPE
)
stdin
=
subprocess
.
PIPE
)
popenCommunicate
([
popenCommunicate
([
'openssl'
,
'ca'
,
'-utf8'
,
'-days'
,
'3650'
,
'-batch'
,
'-config'
,
'openssl'
,
'ca'
,
'-utf8'
,
'-days'
,
'3650'
,
'-batch'
,
'-config'
,
...
@@ -464,11 +465,14 @@ class TestDeploymentScriptInstantiation(ERP5InstanceTestCase):
...
@@ -464,11 +465,14 @@ class TestDeploymentScriptInstantiation(ERP5InstanceTestCase):
ip
,
port
=
re
.
search
(
ip
,
port
=
re
.
search
(
r'.*http:\
/
\/(.*):(\
d*)
\/.*'
,
portal_slap_line
).
groups
()
r'.*http:\
/
\/(.*):(\
d*)
\/.*'
,
portal_slap_line
).
groups
()
port
=
int
(
port
)
port
=
int
(
port
)
server
=
BaseHTTPS
erver
.
HTTPServer
((
ip
,
port
),
TestHandler
)
server
=
http
.
s
erver
.
HTTPServer
((
ip
,
port
),
TestHandler
)
server_process
=
multiprocessing
.
Process
(
server_process
=
multiprocessing
.
Process
(
target
=
server
.
serve_forever
,
name
=
'HTTPServer'
)
target
=
server
.
serve_forever
,
name
=
'HTTPServer'
)
server_process
.
start
()
server_process
.
start
()
try
:
self
.
addCleanup
(
server_process
.
terminate
)
self
.
addCleanup
(
server_process
.
join
,
10
)
server
.
socket
.
close
()
# assert that accessing the service endpoint results with certificate
# assert that accessing the service endpoint results with certificate
# authentication and proper information extraction
# authentication and proper information extraction
result_json
=
requests
.
get
(
result_json
=
requests
.
get
(
...
@@ -482,6 +486,3 @@ class TestDeploymentScriptInstantiation(ERP5InstanceTestCase):
...
@@ -482,6 +486,3 @@ class TestDeploymentScriptInstantiation(ERP5InstanceTestCase):
'/erp5/portal_slap/'
,
'/erp5/portal_slap/'
,
result_json
[
'Path'
]
result_json
[
'Path'
]
)
)
finally
:
server_process
.
join
(
10
)
server_process
.
terminate
()
software/slapos-master/test/test/test_mariadb.py
View file @
b62f8386
##############################################################################
##############################################################################
# coding: utf-8
#
#
# Copyright (c) 2018 Nexedi SA and Contributors. All Rights Reserved.
# Copyright (c) 2018 Nexedi SA and Contributors. All Rights Reserved.
#
#
...
@@ -29,7 +28,7 @@
...
@@ -29,7 +28,7 @@
import
os
import
os
import
json
import
json
import
glob
import
glob
import
urlparse
import
url
lib.
parse
import
socket
import
socket
import
sys
import
sys
import
time
import
time
...
@@ -38,7 +37,7 @@ import datetime
...
@@ -38,7 +37,7 @@ import datetime
import
subprocess
import
subprocess
import
gzip
import
gzip
from
backports
import
lzma
import
lzma
import
MySQLdb
import
MySQLdb
from
slapos.testing.utils
import
CrontabMixin
from
slapos.testing.utils
import
CrontabMixin
...
@@ -80,7 +79,7 @@ class MariaDBTestCase(ERP5InstanceTestCase):
...
@@ -80,7 +79,7 @@ class MariaDBTestCase(ERP5InstanceTestCase):
def
getDatabaseConnection
(
self
):
def
getDatabaseConnection
(
self
):
connection_parameter_dict
=
json
.
loads
(
connection_parameter_dict
=
json
.
loads
(
self
.
computer_partition
.
getConnectionParameterDict
()[
'_'
])
self
.
computer_partition
.
getConnectionParameterDict
()[
'_'
])
db_url
=
urlparse
.
urlparse
(
connection_parameter_dict
[
'database-list'
][
0
])
db_url
=
url
lib
.
parse
.
urlparse
(
connection_parameter_dict
[
'database-list'
][
0
])
self
.
assertEqual
(
'mysql'
,
db_url
.
scheme
)
self
.
assertEqual
(
'mysql'
,
db_url
.
scheme
)
self
.
assertTrue
(
db_url
.
path
.
startswith
(
'/'
))
self
.
assertTrue
(
db_url
.
path
.
startswith
(
'/'
))
...
@@ -91,6 +90,8 @@ class MariaDBTestCase(ERP5InstanceTestCase):
...
@@ -91,6 +90,8 @@ class MariaDBTestCase(ERP5InstanceTestCase):
host
=
db_url
.
hostname
,
host
=
db_url
.
hostname
,
port
=
db_url
.
port
,
port
=
db_url
.
port
,
db
=
database_name
,
db
=
database_name
,
use_unicode
=
True
,
charset
=
'utf8mb4'
)
)
...
@@ -106,7 +107,7 @@ class TestCrontabs(MariaDBTestCase, CrontabMixin):
...
@@ -106,7 +107,7 @@ class TestCrontabs(MariaDBTestCase, CrontabMixin):
'mariadb-full'
,
'mariadb-full'
,
'20500101000000.sql.gz'
,
'20500101000000.sql.gz'
,
),
),
'r'
)
as
dump
:
'r
t
'
)
as
dump
:
self
.
assertIn
(
'CREATE TABLE'
,
dump
.
read
())
self
.
assertIn
(
'CREATE TABLE'
,
dump
.
read
())
def
test_logrotate_and_slow_query_digest
(
self
):
def
test_logrotate_and_slow_query_digest
(
self
):
...
@@ -148,7 +149,7 @@ class TestCrontabs(MariaDBTestCase, CrontabMixin):
...
@@ -148,7 +149,7 @@ class TestCrontabs(MariaDBTestCase, CrontabMixin):
'slowquery_digest'
,
'slowquery_digest'
,
'slowquery_digest.txt-2050-01-01.xz'
,
'slowquery_digest.txt-2050-01-01.xz'
,
)
)
with
lzma
.
open
(
slow_query_report
,
'r'
)
as
f
:
with
lzma
.
open
(
slow_query_report
,
'r
t
'
)
as
f
:
# this is the hash for our "select sleep(n)" slow query
# this is the hash for our "select sleep(n)" slow query
self
.
assertIn
(
"ID 0xF9A57DD5A41825CA"
,
f
.
read
())
self
.
assertIn
(
"ID 0xF9A57DD5A41825CA"
,
f
.
read
())
...
@@ -170,7 +171,7 @@ class TestCrontabs(MariaDBTestCase, CrontabMixin):
...
@@ -170,7 +171,7 @@ class TestCrontabs(MariaDBTestCase, CrontabMixin):
subprocess
.
check_output
(
'faketime 2050-01-01 %s'
%
check_slow_query_promise_plugin
[
'command'
],
shell
=
True
)
subprocess
.
check_output
(
'faketime 2050-01-01 %s'
%
check_slow_query_promise_plugin
[
'command'
],
shell
=
True
)
self
.
assertEqual
(
self
.
assertEqual
(
error_context
.
exception
.
output
,
error_context
.
exception
.
output
,
"""
\
b
"""
\
Threshold is lower than expected:
Threshold is lower than expected:
Expected total queries : 1.0 and current is: 2
Expected total queries : 1.0 and current is: 2
Expected slowest query : 0.1 and current is: 3
Expected slowest query : 0.1 and current is: 3
...
@@ -220,7 +221,7 @@ class TestMroonga(MariaDBTestCase):
...
@@ -220,7 +221,7 @@ class TestMroonga(MariaDBTestCase):
"""
"""
SELECT mroonga_normalize("ABCDあぃうぇ㍑")
SELECT mroonga_normalize("ABCDあぃうぇ㍑")
"""
)
"""
)
self
.
assertEqual
(((
'abcdあぃうぇリットル'
,),),
self
.
assertEqual
(((
'abcdあぃうぇリットル'
.
encode
()
,),),
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
))
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
))
if
0
:
if
0
:
...
@@ -233,7 +234,7 @@ class TestMroonga(MariaDBTestCase):
...
@@ -233,7 +234,7 @@ class TestMroonga(MariaDBTestCase):
"""
"""
SELECT mroonga_normalize("aBcDあぃウェ㍑", "NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark")
SELECT mroonga_normalize("aBcDあぃウェ㍑", "NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark")
"""
)
"""
)
self
.
assertEqual
(((
'ABCDあぃうぇ㍑'
,),),
self
.
assertEqual
(((
'ABCDあぃうぇ㍑'
.
encode
()
,),),
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
))
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
))
def
test_mroonga_full_text_normalizer
(
self
):
def
test_mroonga_full_text_normalizer
(
self
):
...
@@ -321,7 +322,7 @@ class TestMroonga(MariaDBTestCase):
...
@@ -321,7 +322,7 @@ class TestMroonga(MariaDBTestCase):
cnx
=
self
.
getDatabaseConnection
()
cnx
=
self
.
getDatabaseConnection
()
with
contextlib
.
closing
(
cnx
):
with
contextlib
.
closing
(
cnx
):
cnx
.
query
(
"SELECT mroonga_command('register token_filters/stem')"
)
cnx
.
query
(
"SELECT mroonga_command('register token_filters/stem')"
)
self
.
assertEqual
(((
'true'
,),),
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
))
self
.
assertEqual
(((
b
'true'
,),),
cnx
.
store_result
().
fetch_row
(
maxrows
=
2
))
cnx
.
query
(
cnx
.
query
(
"""
"""
CREATE TABLE memos (
CREATE TABLE memos (
...
...
software/slapos-master/test/test/test_wcfs.py
View file @
b62f8386
...
@@ -75,5 +75,5 @@ def lookupMount(zurl):
...
@@ -75,5 +75,5 @@ def lookupMount(zurl):
# readfile returns content of file @path.
# readfile returns content of file @path.
def
readfile
(
path
):
def
readfile
(
path
):
with
open
(
path
,
'r'
)
as
f
:
with
open
(
path
)
as
f
:
return
f
.
read
()
return
f
.
read
()
software/slapos-sr-testing/README.md
View file @
b62f8386
...
@@ -17,7 +17,6 @@ changes to the code, run tests and publish changes.
...
@@ -17,7 +17,6 @@ changes to the code, run tests and publish changes.
```
bash
```
bash
# install this software release and request an instance
# install this software release and request an instance
# use software-py3.cfg instead of software.cfg if the SR you want to test is written in Python 3
SR
=
https://lab.nexedi.com/nexedi/slapos/raw/1.0/software/slapos-sr-testing/software.cfg
SR
=
https://lab.nexedi.com/nexedi/slapos/raw/1.0/software/slapos-sr-testing/software.cfg
COMP
=
slaprunner
COMP
=
slaprunner
INSTANCE_NAME
=
$COMP
INSTANCE_NAME
=
$COMP
...
...
software/slapos-sr-testing/software-py3.cfg
deleted
100644 → 0
View file @
25b5b32b
[buildout]
extends =
software.cfg
[python]
part = python3
[python-interpreter]
extra-eggs +=
# plantuml 0.3.0 is only available for Python 3
${slapos.test.plantuml-setup:egg}
[template]
extra =
# The following list is for SR whose buildout runs only with Python 3.
caddy-frontend ${slapos.test.caddy-frontend-setup:setup}
caucase ${slapos.test.caucase-setup:setup}
erp5testnode ${slapos.test.erp5testnode-setup:setup}
galene ${slapos.test.galene-setup:setup}
grafana ${slapos.test.grafana-setup:setup}
headless-chromium ${slapos.test.headless-chromium-setup:setup}
helloworld ${slapos.test.helloworld-setup:setup}
html5as ${slapos.test.html5as-setup:setup}
html5as-base ${slapos.test.html5as-base-setup:setup}
htmlvalidatorserver ${slapos.test.htmlvalidatorserver-setup:setup}
hugo ${slapos.test.hugo-setup:setup}
jscrawler ${slapos.test.jscrawler-setup:setup}
jstestnode ${slapos.test.jstestnode-setup:setup}
jupyter ${slapos.test.jupyter-setup:setup}
kvm ${slapos.test.kvm-setup:setup}
matomo ${slapos.test.matomo-setup:setup}
metabase ${slapos.test.metabase-setup:setup}
monitor ${slapos.test.monitor-setup:setup}
nextcloud ${slapos.test.nextcloud-setup:setup}
nginx-push-stream ${slapos.test.nginx-push-stream-setup:setup}
ors-amarisoft ${slapos.test.ors-amarisoft-setup:setup}
plantuml ${slapos.test.plantuml-setup:setup}
powerdns ${slapos.test.powerdns-setup:setup}
proftpd ${slapos.test.proftpd-setup:setup}
repman ${slapos.test.repman-setup:setup}
restic-rest-server ${slapos.test.restic_rest_server-setup:setup}
seleniumserver ${slapos.test.seleniumserver-setup:setup}
theia ${slapos.test.theia-setup:setup}
turnserver ${slapos.test.turnserver-setup:setup}
software/slapos-sr-testing/software.cfg
View file @
b62f8386
...
@@ -27,9 +27,6 @@ parts =
...
@@ -27,9 +27,6 @@ parts =
shared-part-list =
shared-part-list =
[python]
part = python2.7
[setup-develop-egg]
[setup-develop-egg]
recipe = zc.recipe.egg:develop
recipe = zc.recipe.egg:develop
...
@@ -250,8 +247,7 @@ egg = slapos.core
...
@@ -250,8 +247,7 @@ egg = slapos.core
setup = ${slapos.core-repository:location}
setup = ${slapos.core-repository:location}
[python-interpreter]
[python-interpreter]
eggs += ${:extra-eggs}
eggs +=
extra-eggs =
${lxml-python:egg}
${lxml-python:egg}
${python-PyYAML:egg}
${python-PyYAML:egg}
${slapos.core-setup:egg}
${slapos.core-setup:egg}
...
@@ -289,10 +285,11 @@ extra-eggs =
...
@@ -289,10 +285,11 @@ extra-eggs =
${slapos.test.kvm-setup:egg}
${slapos.test.kvm-setup:egg}
${slapos.test.matomo-setup:egg}
${slapos.test.matomo-setup:egg}
${slapos.test.metabase-setup:egg}
${slapos.test.metabase-setup:egg}
${slapos.test.ors-amarisoft-setup:egg}
${slapos.test.monitor-setup:egg}
${slapos.test.monitor-setup:egg}
${slapos.test.nextcloud-setup:egg}
${slapos.test.nextcloud-setup:egg}
${slapos.test.nginx-push-stream-setup:egg}
${slapos.test.nginx-push-stream-setup:egg}
${slapos.test.ors-amarisoft-setup:egg}
${slapos.test.plantuml-setup:egg}
${slapos.test.powerdns-setup:egg}
${slapos.test.powerdns-setup:egg}
${slapos.test.proftpd-setup:egg}
${slapos.test.proftpd-setup:egg}
${slapos.test.re6stnet-setup:egg}
${slapos.test.re6stnet-setup:egg}
...
@@ -352,27 +349,46 @@ context =
...
@@ -352,27 +349,46 @@ context =
tests =
tests =
json-schemas ${slapos.cookbook-setup:setup}
json-schemas ${slapos.cookbook-setup:setup}
# The following list is for SR that work with either Python 2 and 3
# (as main Python). The test egg must supply a URL which depends on
# the version of Python that is used to run the test.
# Due to a bug in the way promises are run, we may also list some Py3-only SR
# here, to check there's no promise issue when slapos node runs with Python 2.
erp5 ${slapos.test.erp5-setup:setup}
fluentd ${slapos.test.fluentd-setup:setup}
###
${:extra}
extra =
# WARNING: This is for SR that only support Python 2.
# You should not add more lines here.
backupserver ${slapos.test.backupserver-setup:setup}
backupserver ${slapos.test.backupserver-setup:setup}
beremiz-ide ${slapos.test.beremiz-ide-setup:setup}
beremiz-ide ${slapos.test.beremiz-ide-setup:setup}
caddy-frontend ${slapos.test.caddy-frontend-setup:setup}
caucase ${slapos.test.caucase-setup:setup}
cloudooo ${slapos.test.cloudooo-setup:setup}
cloudooo ${slapos.test.cloudooo-setup:setup}
dream ${slapos.test.dream-setup:setup}
dream ${slapos.test.dream-setup:setup}
erp5 ${slapos.test.erp5-setup:setup}
erp5testnode ${slapos.test.erp5testnode-setup:setup}
fluentd ${slapos.test.fluentd-setup:setup}
galene ${slapos.test.galene-setup:setup}
gitlab ${slapos.test.gitlab-setup:setup}
gitlab ${slapos.test.gitlab-setup:setup}
grafana ${slapos.test.grafana-setup:setup}
headless-chromium ${slapos.test.headless-chromium-setup:setup}
helloworld ${slapos.test.helloworld-setup:setup}
html5as ${slapos.test.html5as-setup:setup}
html5as-base ${slapos.test.html5as-base-setup:setup}
htmlvalidatorserver ${slapos.test.htmlvalidatorserver-setup:setup}
hugo ${slapos.test.hugo-setup:setup}
jscrawler ${slapos.test.jscrawler-setup:setup}
jstestnode ${slapos.test.jstestnode-setup:setup}
jupyter ${slapos.test.jupyter-setup:setup}
kvm ${slapos.test.kvm-setup:setup}
matomo ${slapos.test.matomo-setup:setup}
metabase ${slapos.test.metabase-setup:setup}
monitor ${slapos.test.monitor-setup:setup}
nextcloud ${slapos.test.nextcloud-setup:setup}
nginx-push-stream ${slapos.test.nginx-push-stream-setup:setup}
ors-amarisoft ${slapos.test.ors-amarisoft-setup:setup}
plantuml ${slapos.test.plantuml-setup:setup}
powerdns ${slapos.test.powerdns-setup:setup}
proftpd ${slapos.test.proftpd-setup:setup}
re6stnet ${slapos.test.re6stnet-setup:setup}
re6stnet ${slapos.test.re6stnet-setup:setup}
repman ${slapos.test.repman-setup:setup}
restic-rest-server ${slapos.test.restic_rest_server-setup:setup}
seleniumserver ${slapos.test.seleniumserver-setup:setup}
slapos-master ${slapos.test.slapos-master-setup:setup}
slapos-master ${slapos.test.slapos-master-setup:setup}
slaprunner ${slapos.test.slaprunner-setup:setup}
slaprunner ${slapos.test.slaprunner-setup:setup}
theia ${slapos.test.theia-setup:setup}
turnserver ${slapos.test.turnserver-setup:setup}
upgrade_erp5 ${slapos.test.upgrade_erp5-setup:setup}
upgrade_erp5 ${slapos.test.upgrade_erp5-setup:setup}
[versions]
[versions]
...
@@ -397,11 +413,9 @@ PyPDF2 = 1.26.0+SlapOSPatched001
...
@@ -397,11 +413,9 @@ PyPDF2 = 1.26.0+SlapOSPatched001
# Django 1.11 is python 2 compatible
# Django 1.11 is python 2 compatible
Django = 1.11
Django = 1.11
mock = 2.0.0:whl
testfixtures = 6.11.0
testfixtures = 6.11.0
funcsigs = 1.0.2
funcsigs = 1.0.2
mysqlclient = 1.3.12
mysqlclient = 1.3.12
pexpect = 4.8.0
pexpect = 4.8.0
ptyprocess = 0.6.0
ptyprocess = 0.6.0
typing = 3.7.4.3
psycopg2 = 2.8.6
psycopg2 = 2.8.6
software/slaprunner/test/setup.py
View file @
b62f8386
...
@@ -48,7 +48,6 @@ setup(name=name,
...
@@ -48,7 +48,6 @@ setup(name=name,
'supervisor'
,
'supervisor'
,
'psutil'
,
'psutil'
,
'paramiko'
,
'paramiko'
,
'six'
,
'requests'
,
'requests'
,
],
],
zip_safe
=
True
,
zip_safe
=
True
,
...
...
software/slaprunner/test/test.py
View file @
b62f8386
...
@@ -35,12 +35,11 @@ import subprocess
...
@@ -35,12 +35,11 @@ import subprocess
import
json
import
json
import
time
import
time
from
six.moves.
urllib.parse
import
urlparse
from
urllib.parse
import
urlparse
from
six.moves.
urllib.parse
import
quote
from
urllib.parse
import
quote
from
six.moves.
urllib.parse
import
urljoin
from
urllib.parse
import
urljoin
from
six.moves.
configparser
import
ConfigParser
from
configparser
import
ConfigParser
import
requests
import
requests
import
six
from
slapos.recipe.librecipe
import
generateHashFromFiles
from
slapos.recipe.librecipe
import
generateHashFromFiles
from
slapos.testing.testcase
import
makeModuleSetUpAndTestCaseClass
from
slapos.testing.testcase
import
makeModuleSetUpAndTestCaseClass
...
@@ -191,7 +190,7 @@ class SlaprunnerTestCase(SlapOSInstanceTestCase):
...
@@ -191,7 +190,7 @@ class SlaprunnerTestCase(SlapOSInstanceTestCase):
takeover_password
=
parameter_dict
[
"takeover-%s-password"
%
scope
]
takeover_password
=
parameter_dict
[
"takeover-%s-password"
%
scope
]
resp
=
requests
.
get
(
resp
=
requests
.
get
(
"%s?password=%s"
%
(
takeover_url
,
takeover_password
)
,
f"
{
takeover_url
}
?password=
{
takeover_password
}
"
,
verify
=
True
)
verify
=
True
)
self
.
assertEqual
(
requests
.
codes
.
ok
,
resp
.
status_code
)
self
.
assertEqual
(
requests
.
codes
.
ok
,
resp
.
status_code
)
self
.
assertNotIn
(
"Error"
,
resp
.
text
,
self
.
assertNotIn
(
"Error"
,
resp
.
text
,
...
@@ -363,7 +362,7 @@ class TestSSH(SlaprunnerTestCase):
...
@@ -363,7 +362,7 @@ class TestSSH(SlaprunnerTestCase):
self
.
assertTrue
(
fingerprint_from_url
.
startswith
(
'ssh-rsa-'
),
fingerprint_from_url
)
self
.
assertTrue
(
fingerprint_from_url
.
startswith
(
'ssh-rsa-'
),
fingerprint_from_url
)
fingerprint_from_url
=
fingerprint_from_url
[
len
(
'ssh-rsa-'
):]
fingerprint_from_url
=
fingerprint_from_url
[
len
(
'ssh-rsa-'
):]
class
KeyPolicy
(
object
)
:
class
KeyPolicy
:
"""Accept server key and keep it in self.key for inspection
"""Accept server key and keep it in self.key for inspection
"""
"""
def
missing_host_key
(
self
,
client
,
hostname
,
key
):
def
missing_host_key
(
self
,
client
,
hostname
,
key
):
...
@@ -507,7 +506,7 @@ class TestResilientInstance(SlaprunnerTestCase):
...
@@ -507,7 +506,7 @@ class TestResilientInstance(SlaprunnerTestCase):
# just check that keys returned on requested partition are for resilient
# just check that keys returned on requested partition are for resilient
self
.
assertSetEqual
(
self
.
assertSetEqual
(
set
(
self
.
computer_partition
.
getConnectionParameterDict
().
keys
()),
set
(
self
.
computer_partition
.
getConnectionParameterDict
().
keys
()),
set
([
{
'backend-url'
,
'backend-url'
,
'feed-url-runner-1-pull'
,
'feed-url-runner-1-pull'
,
'feed-url-runner-1-push'
,
'feed-url-runner-1-push'
,
...
@@ -520,7 +519,7 @@ class TestResilientInstance(SlaprunnerTestCase):
...
@@ -520,7 +519,7 @@ class TestResilientInstance(SlaprunnerTestCase):
'takeover-runner-1-password'
,
'takeover-runner-1-password'
,
'takeover-runner-1-url'
,
'takeover-runner-1-url'
,
'url'
,
'url'
,
'webdav-url'
])
)
'webdav-url'
}
)
class
TestResilientCustomFrontend
(
TestCustomFrontend
):
class
TestResilientCustomFrontend
(
TestCustomFrontend
):
instance_max_retry
=
20
instance_max_retry
=
20
...
@@ -601,5 +600,5 @@ class TestResilientDummyInstance(SlaprunnerTestCase):
...
@@ -601,5 +600,5 @@ class TestResilientDummyInstance(SlaprunnerTestCase):
self
.
assertTrue
(
result_after
.
startswith
(
"Hello"
),
result_after
)
self
.
assertTrue
(
result_after
.
startswith
(
"Hello"
),
result_after
)
self
.
assertIn
(
result
,
result_after
,
self
.
assertIn
(
result
,
result_after
,
"%s not in %s"
%
(
result
,
result_after
)
)
f"
{
result
}
not in
{
result_after
}
"
)
software/theia/test/test.py
View file @
b62f8386
...
@@ -391,7 +391,9 @@ class TestTheiaEnv(TheiaTestCase):
...
@@ -391,7 +391,9 @@ class TestTheiaEnv(TheiaTestCase):
# Start a theia shell that inherits the environment of the theia process
# Start a theia shell that inherits the environment of the theia process
# This simulates the environment of a shell launched from the browser application
# This simulates the environment of a shell launched from the browser application
theia_shell_process
=
pexpect
.
spawnu
(
'{}/bin/theia-shell'
.
format
(
self
.
getPath
()),
env
=
theia_env
)
theia_shell_process
=
pexpect
.
spawnu
(
'{}/bin/theia-shell'
.
format
(
self
.
getPath
()),
env
=
theia_env
)
try
:
self
.
addCleanup
(
theia_shell_process
.
wait
)
self
.
addCleanup
(
theia_shell_process
.
terminate
)
theia_shell_process
.
expect_exact
(
'Standalone SlapOS for computer `slaprunner` activated'
)
theia_shell_process
.
expect_exact
(
'Standalone SlapOS for computer `slaprunner` activated'
)
# Launch slapos node software from theia shell
# Launch slapos node software from theia shell
...
@@ -433,11 +435,6 @@ class TestTheiaEnv(TheiaTestCase):
...
@@ -433,11 +435,6 @@ class TestTheiaEnv(TheiaTestCase):
self
.
assertEqual
(
theia_shell_env
[
'SLAPOS_CLIENT_CONFIGURATION'
],
supervisord_env
[
'SLAPOS_CLIENT_CONFIGURATION'
])
self
.
assertEqual
(
theia_shell_env
[
'SLAPOS_CLIENT_CONFIGURATION'
],
supervisord_env
[
'SLAPOS_CLIENT_CONFIGURATION'
])
self
.
assertEqual
(
theia_shell_env
[
'HOME'
],
supervisord_env
[
'HOME'
])
self
.
assertEqual
(
theia_shell_env
[
'HOME'
],
supervisord_env
[
'HOME'
])
finally
:
# Cleanup the theia shell process
theia_shell_process
.
terminate
()
theia_shell_process
.
wait
()
class
ResilientTheiaMixin
(
object
):
class
ResilientTheiaMixin
(
object
):
@
classmethod
@
classmethod
...
...
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