File: soap_tests.py.unstable

package info (click to toggle)
python-softlayer 6.2.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 7,508 kB
  • sloc: python: 57,195; makefile: 133; xml: 97; sh: 59
file content (122 lines) | stat: -rw-r--r-- 4,743 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
"""
    SoftLayer.tests.transports.soap
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    :license: MIT, see LICENSE for more details.
"""

"""
Commented out for now, py3.11 has some issues with lxml and softlayer-zeep.
Since no one really uses the soap transport, we will just look at this later.

import io
import os
import requests
from unittest import mock as mock

from SoftLayer import testing
from SoftLayer.transports import Request
from SoftLayer.transports.soap import SoapTransport


def setup_response(filename, status_code=200, total_items=1):
    basepath = os.path.dirname(__file__)
    body = b''
    print(f"Base Path: {basepath}")
    with open(f"{basepath}/../../SoftLayer/fixtures/soap/{filename}.soap", 'rb') as fixture:
        body = fixture.read()
    response = requests.Response()
    list_body = body
    response.raw = io.BytesIO(list_body)
    response.headers['SoftLayer-Total-Items'] = total_items
    response.status_code = status_code
    return response

@pytest.mark.skip(reason="no way of currently testing this")
class TestSoapAPICall(testing.TestCase):

    def set_up(self):
        self.transport = SoapTransport(endpoint_url='https://api.softlayer.com/soap/v3.1/')

        self.user = "testUser"
        self.password = "testPassword"
        # self.user = os.getenv('SL_USER')
        # self.password = os.environ.get('SL_APIKEY')
        request = Request()
        request.service = 'SoftLayer_Account'
        request.method = 'getObject'
        request.transport_user = self.user
        request.transport_password = self.password
        self.request = request

    @mock.patch('requests.Session.post')
    def test_call(self, zeep_post):
        zeep_post.return_value = setup_response('SoftLayer_Account_getObject')
        self.request.mask = "mask[id,companyName]"
        data = self.transport(self.request)
        self.assertEqual(data.get('id'), 307608)
        self.assertEqual(data.get('companyName'), "SoftLayer Internal - Development Community")

    # def test_debug_call(self):

    #     self.request.mask = "mask[id,accountName,companyName]"
    #     data = self.transport(self.request)

    #     self.assertEqual(data.get('id'), 307608)
    #     debug_data = self.transport.print_reproduceable(self.request)
    #     print(debug_data['envelope'])
    #     self.assertEqual(":sdfsdf", debug_data)

    @mock.patch('requests.Session.post')
    def test_objectMask(self, zeep_post):
        zeep_post.return_value = setup_response('test_objectMask')
        self.request.mask = "mask[id,companyName]"
        data = self.transport(self.request)
        self.assertEqual(data.get('companyName'), "SoftLayer Internal - Development Community")
        self.assertIsNone(data.get('address1'))
        self.assertEqual(data.get('id'), 307608)

    @mock.patch('requests.Session.post')
    def test_objectFilter(self, zeep_post):
        zeep_post.return_value = setup_response('test_objectFilter')
        self.request.service = "SoftLayer_Product_Package"
        self.request.method = "getAllObjects"
        self.request.mask = "mask[id,description,keyName,type[id,keyName],name]"
        self.request.filter = {'type': {'keyName': {'operation': 'BARE_METAL_CPU'}}}
        self.request.limit = 5
        self.request.offset = 0
        data = self.transport(self.request)
        for package in data:
            self.assertEqual(package.get('type').get('keyName'), "BARE_METAL_CPU")

    @mock.patch('requests.Session.post')
    def test_virtualGuest(self, zeep_post):
        zeep_post.side_effect = [
            setup_response('SoftLayer_Account_getVirtualGuests'),
            setup_response('SoftLayer_Virtual_Guest_getObject')
        ]
        accountRequest = Request()
        accountRequest.service = "SoftLayer_Account"
        accountRequest.method = "getVirtualGuests"
        accountRequest.limit = 5
        accountRequest.offset = 0
        accountRequest.mask = "mask[id,hostname,domain]"
        accountRequest.transport_user = self.user
        accountRequest.transport_password = self.password

        vsis = self.transport(accountRequest)
        self.assertEqual(1, len(vsis))
        for vsi in vsis:
            self.assertGreater(vsi.get('id'), 1)
            vsiRequest = Request()
            vsiRequest.service = "SoftLayer_Virtual_Guest"
            vsiRequest.method = "getObject"
            vsiRequest.identifier = vsi.get('id')
            vsiRequest.mask = "mask[id,hostname,domain]"
            vsiRequest.transport_user = self.user
            vsiRequest.transport_password = self.password
            thisVsi = self.transport(vsiRequest)
            self.assertEqual(thisVsi.get('id'), vsi.get('id'))

    # NEXT MORE COMPLEX OBJECT FILTERS!
"""