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
17
Merge Requests
17
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
f4416d63
Commit
f4416d63
authored
Nov 21, 2013
by
Cédric de Saint Martin
Committed by
Gabriel Monnerat
Jan 13, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SlapOS Core] Add tests for everything related to Software Product support.
parent
62495c3c
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
235 additions
and
1 deletion
+235
-1
slapos/tests/client.py
slapos/tests/client.py
+110
-0
slapos/tests/slap.py
slapos/tests/slap.py
+125
-1
No files found.
slapos/tests/client.py
0 → 100644
View file @
f4416d63
##############################################################################
#
# Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
import
logging
import
unittest
# XXX: BasicMixin should be in a separated module, not in slapgrid test module.
from
slapos.tests.slapgrid
import
BasicMixin
import
slapos.slap
import
slapos.client
class
TestClient
(
unittest
.
TestCase
):
def
setUp
(
self
):
self
.
called_software_product
=
None
class
FakeSoftwareProductCollection
(
object
):
def
__init__
(
inner_self
,
*
args
,
**
kw_args
):
inner_self
.
__getattr__
=
inner_self
.
get
def
get
(
inner_self
,
software_product
):
self
.
called_software_product
=
software_product
return
self
.
software_product_reference
self
.
slap
=
slapos
.
slap
.
slap
()
self
.
product_collection
=
FakeSoftwareProductCollection
(
logging
.
getLogger
(),
self
.
slap
)
def
test_getSoftwareReleaseFromSoftwareString_softwareProduct
(
self
):
"""
Test that if given software is a Sofwtare Product (i.e matching
the magic string), it returns the corresponding value of a call to
SoftwareProductCollection.
"""
self
.
software_product_reference
=
'foo'
software_string
=
'%s%s'
%
(
slapos
.
client
.
SOFTWARE_PRODUCT_NAMESPACE
,
self
.
software_product_reference
)
slapos
.
client
.
_getSoftwareReleaseFromSoftwareString
(
logging
.
getLogger
(),
software_string
,
self
.
product_collection
)
self
.
assertEqual
(
self
.
called_software_product
,
self
.
software_product_reference
)
def
test_getSoftwareReleaseFromSoftwareString_softwareProduct_emptySoftwareProduct
(
self
):
"""
Test that if given software is a Software Product (i.e matching
the magic string), but this software product is empty, it exits.
"""
self
.
software_product_reference
=
'foo'
software_string
=
'%s%s'
%
(
slapos
.
client
.
SOFTWARE_PRODUCT_NAMESPACE
,
self
.
software_product_reference
)
def
fake_get
(
software_product
):
raise
AttributeError
()
self
.
product_collection
.
get
=
fake_get
self
.
assertRaises
(
SystemExit
,
slapos
.
client
.
_getSoftwareReleaseFromSoftwareString
,
logging
.
getLogger
(),
software_string
,
self
.
product_collection
)
def
test_getSoftwareReleaseFromSoftwareString_softwareRelease
(
self
):
"""
Test that if given software is a simple Software Release URL (not matching
the magic string), it is just returned without modification.
"""
software_string
=
'foo'
returned_value
=
slapos
.
client
.
_getSoftwareReleaseFromSoftwareString
(
logging
.
getLogger
(),
software_string
,
self
.
product_collection
)
self
.
assertEqual
(
self
.
called_software_product
,
None
)
self
.
assertEqual
(
returned_value
,
software_string
)
slapos/tests/slap.py
View file @
f4416d63
...
...
@@ -26,6 +26,7 @@
##############################################################################
import
httplib
import
logging
import
os
import
unittest
import
urlparse
...
...
@@ -40,7 +41,7 @@ class UndefinedYetException(Exception):
class
SlapMixin
(
unittest
.
TestCase
):
"""
Useful
l
methods for slap tests
Useful methods for slap tests
"""
def
setUp
(
self
):
self
.
_server_url
=
os
.
environ
.
get
(
'TEST_SLAP_SERVER_URL'
,
None
)
...
...
@@ -288,6 +289,74 @@ class TestSlap(SlapMixin):
None
,
None
)
def
test_getSoftwareReleaseListFromSoftwareProduct_software_product_reference
(
self
):
"""
Check that slap.getSoftwareReleaseListFromSoftwareProduct calls
"/getSoftwareReleaseListFromSoftwareProduct" URL with correct parameters,
with software_product_reference parameter being specified.
"""
self
.
slap
.
initializeConnection
(
self
.
server_url
)
software_product_reference
=
'random_reference'
software_release_url_list
=
[
'1'
,
'2'
]
def
server_response
(
self_httpconnection
,
path
,
method
,
body
,
header
):
parsed_url
=
urlparse
.
urlparse
(
path
.
lstrip
(
'/'
))
parsed_qs
=
urlparse
.
parse_qs
(
parsed_url
.
query
)
if
parsed_url
.
path
==
'getSoftwareReleaseListFromSoftwareProduct'
\
and
parsed_qs
==
{
'software_product_reference'
:
[
software_product_reference
]}:
return
(
200
,
{},
xml_marshaller
.
xml_marshaller
.
dumps
(
software_release_url_list
))
httplib
.
HTTPConnection
.
_callback
=
server_response
self
.
assertEqual
(
self
.
slap
.
getSoftwareReleaseListFromSoftwareProduct
(
software_product_reference
=
software_product_reference
),
software_release_url_list
)
def
test_getSoftwareReleaseListFromSoftwareProduct_software_release_url
(
self
):
"""
Check that slap.getSoftwareReleaseListFromSoftwareProduct calls
"/getSoftwareReleaseListFromSoftwareProduct" URL with correct parameters,
with software_release_url parameter being specified.
"""
self
.
slap
.
initializeConnection
(
self
.
server_url
)
software_release_url
=
'random_url'
software_release_url_list
=
[
'1'
,
'2'
]
def
server_response
(
self_httpconnection
,
path
,
method
,
body
,
header
):
parsed_url
=
urlparse
.
urlparse
(
path
.
lstrip
(
'/'
))
parsed_qs
=
urlparse
.
parse_qs
(
parsed_url
.
query
)
if
parsed_url
.
path
==
'getSoftwareReleaseListFromSoftwareProduct'
\
and
parsed_qs
==
{
'software_release_url'
:
[
software_release_url
]}:
return
(
200
,
{},
xml_marshaller
.
xml_marshaller
.
dumps
(
software_release_url_list
))
httplib
.
HTTPConnection
.
_callback
=
server_response
self
.
assertEqual
(
self
.
slap
.
getSoftwareReleaseListFromSoftwareProduct
(
software_release_url
=
software_release_url
),
software_release_url_list
)
def
test_getSoftwareReleaseListFromSoftwareProduct_too_many_parameters
(
self
):
"""
Check that slap.getSoftwareReleaseListFromSoftwareProduct raises if
both parameters are set.
"""
self
.
assertRaises
(
AttributeError
,
self
.
slap
.
getSoftwareReleaseListFromSoftwareProduct
,
'foo'
,
'bar'
)
def
test_getSoftwareReleaseListFromSoftwareProduct_no_parameter
(
self
):
"""
Check that slap.getSoftwareReleaseListFromSoftwareProduct raises if
both parameters are either not set or None.
"""
self
.
assertRaises
(
AttributeError
,
self
.
slap
.
getSoftwareReleaseListFromSoftwareProduct
)
class
TestComputer
(
SlapMixin
):
"""
Tests slapos.slap.slap.Computer class functionality
...
...
@@ -804,6 +873,61 @@ class TestOpenOrder(SlapMixin):
self
.
assertIsInstance
(
computer_partition
,
slapos
.
slap
.
ComputerPartition
)
self
.
assertEqual
(
requested_partition_id
,
computer_partition
.
getId
())
class
TestSoftwareProductCollection
(
SlapMixin
):
def
setUp
(
self
):
SlapMixin
.
setUp
(
self
)
self
.
real_getSoftwareReleaseListFromSoftwareProduct
=
\
slapos
.
slap
.
slap
.
getSoftwareReleaseListFromSoftwareProduct
def
fake_getSoftwareReleaseListFromSoftwareProduct
(
inside_self
,
software_product_reference
):
return
self
.
getSoftwareReleaseListFromSoftwareProduct_response
slapos
.
slap
.
slap
.
getSoftwareReleaseListFromSoftwareProduct
=
\
fake_getSoftwareReleaseListFromSoftwareProduct
self
.
product_collection
=
slapos
.
slap
.
SoftwareProductCollection
(
logging
.
getLogger
(),
slapos
.
slap
.
slap
())
def
tearDown
(
self
):
slapos
.
slap
.
slap
.
getSoftwareReleaseListFromSoftwareProduct
=
\
self
.
real_getSoftwareReleaseListFromSoftwareProduct
def
test_get_product
(
self
):
"""
Test that the get method (aliased to __getattr__) returns the first element
of the list given by getSoftwareReleaseListFromSoftwareProduct (i.e the
best one).
"""
self
.
getSoftwareReleaseListFromSoftwareProduct_response
=
[
'0'
,
'1'
,
'2'
]
self
.
assertEqual
(
self
.
product_collection
.
get
(
'random_reference'
),
self
.
getSoftwareReleaseListFromSoftwareProduct_response
[
0
]
)
def
test_get_product_empty_product
(
self
):
"""
Test that the get method (aliased to __getattr__) raises if no
Software Release is related to the Software Product, or if the
Software Product does not exist.
"""
self
.
getSoftwareReleaseListFromSoftwareProduct_response
=
[]
self
.
assertRaises
(
AttributeError
,
self
.
product_collection
.
get
,
'random_reference'
,
)
def
test_get_product_gettattr
(
self
):
"""
Test that __getattr__ method is bound to get() method.
"""
self
.
getSoftwareReleaseListFromSoftwareProduct_response
=
[]
self
.
assertEqual
(
self
.
product_collection
.
__getattr__
,
self
.
product_collection
.
get
)
if
__name__
==
'__main__'
:
print
'You can point to any SLAP server by setting TEST_SLAP_SERVER_URL '
\
'environment variable'
...
...
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