Skip to content

Commit 5854136

Browse files
feat(Open Service Broker): add service to project (#34)
Co-authored-by: Jorge Vega <[email protected]>
1 parent c8b8f5a commit 5854136

File tree

7 files changed

+3509
-0
lines changed

7 files changed

+3509
-0
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ matrix:
1212
&& openssl aes-256-cbc -K $encrypted_a72454cfb42f_key -iv $encrypted_a72454cfb42f_iv -in iam_policy_management.env.enc -out iam_policy_management.env -d
1313
&& openssl aes-256-cbc -K $encrypted_6eaa1fc94541_key -iv $encrypted_6eaa1fc94541_iv -in catalog_mgmt.env.enc -out catalog_mgmt.env -d
1414
&& openssl aes-256-cbc -K $encrypted_dac53b985913_key -iv $encrypted_dac53b985913_iv -in case_management.env.enc -out case_management.env -d
15+
&& openssl aes-256-cbc -K $encrypted_9b829ae06290_key -iv $encrypted_9b829ae06290_iv -in open_service_broker.env.enc -out open_service_broker.env -d
1516
|| true
1617
- python: 3.6
1718
- python: 3.7

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ Service Name | Imported Class Name
5656
[Global Tagging](https://cloud.ibm.com/apidocs/tagging) | GlobalTaggingV1
5757
[IAM Access Groups](https://cloud.ibm.com/apidocs/iam-access-groups) | IamAccessGroupsV2
5858
[IAM Policy Management](https://cloud.ibm.com/apidocs/iam-policy-management) | IamPolicyManagementV1
59+
[Open Service Broker](https://cloud.ibm.com/apidocs/resource-controller/ibm-cloud-osb-api) | OpenServiceBrokerV1
5960
[Resource Manager](https://cloud.ibm.com/apidocs/resource-controller/resource-manager) | ResourceManagerV2
6061

6162
## Prerequisites

ibm_platform_services/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,5 @@
3030
from .global_tagging_v1 import GlobalTaggingV1
3131
from .iam_access_groups_v2 import IamAccessGroupsV2
3232
from .iam_policy_management_v1 import IamPolicyManagementV1
33+
from .open_service_broker_v1 import OpenServiceBrokerV1
3334
from .resource_manager_v2 import ResourceManagerV2

ibm_platform_services/open_service_broker_v1.py

Lines changed: 1854 additions & 0 deletions
Large diffs are not rendered by default.

open_service_broker.env.enc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
 �LmDhQ��a6�S��ٝ����1S��M n���$�t�_����y�MF�k�l�<^�6�v���߸ �˹fC[��gvn���U������NM�� ���W����9W̌��i����u7����֞� �ջn;�饎
2+
VI:���T ���j�/3е�o�n���}eB���;T4��'B �?#@l��O�/�k�:���#6 �Sq�#�~����
Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
# coding: utf-8
2+
3+
# Copyright 2019 IBM All Rights Reserved.
4+
#
5+
# Licensed under the Apache License, Version 2.0 (the "License");
6+
# you may not use this file except in compliance with the License.
7+
# You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS,
13+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
# See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
17+
"""
18+
This class contains an integration test for the Open Service Broker service.
19+
"""
20+
21+
import pytest
22+
import unittest
23+
import os
24+
import os.path
25+
import uuid
26+
import time
27+
from ibm_cloud_sdk_core import *
28+
from ibm_platform_services.open_service_broker_v1 import *
29+
from dotenv import load_dotenv
30+
31+
# Read config file
32+
configFile = 'open_service_broker.env'
33+
34+
class TestOpenServiceBrokerV1(unittest.TestCase):
35+
@classmethod
36+
def setUpClass(cls):
37+
if os.path.exists(configFile):
38+
os.environ['IBM_CREDENTIALS_FILE'] = configFile
39+
else:
40+
raise unittest.SkipTest('External configuration not available, skipping...')
41+
42+
cls.service = OpenServiceBrokerV1.new_instance()
43+
assert cls.service is not None
44+
45+
cls.testAccountId = 'bc2b2fca0af84354a916dc1de6eee42e'
46+
cls.testResourceGroupGuid = '13aa3ee48c3b44ddb64c05c79f7ab8ef'
47+
cls.testOrgGuid = 'd35d4f0e-5076-4c89-9361-2522894b6548'
48+
cls.testSpaceGuid = '336ba5f3-f185-488e-ac8d-02195eebb2f3'
49+
cls.testAppGuid = 'bf692181-1f0e-46be-9faf-eb0857f4d1d5'
50+
cls.testPlanId1 = 'a10e4820-3685-11e9-b210-d663bd873d93'
51+
cls.testPlanId2 = 'a10e4410-3685-11e9-b210-d663bd873d933'
52+
cls.testPlanId3 = 'a10e4960-3685-11e9-b210-d663bd873d93'
53+
cls.testInstanceId = 'crn:v1:staging:public:bss-monitor:global:a/bc2b2fca0af84354a916dc1de6eee42e:sdkTestInstance::'
54+
cls.testInstanceId2 = 'crn:v1:staging:public:bss-monitor:us-south:a/bc2b2fca0af84354a916dc1de6eee42e:osb-sdk-test00:resource-binding:osb-sdk-binding-test00'
55+
cls.testBindingId = 'crn:v1:staging:public:bss-monitor:us-south:a/bc2b2fca0af84354a916dc1de6eee42e:sdkTestInstance:resource-binding:sdkTestBinding'
56+
cls.testBindingId2 = 'crnL:v1:staging:public:bss-monitor:global:a/bc2b2fca0af84354a916dc1de6eee42e:osb-sdk-test00::'
57+
58+
cls.testPlatform = 'ibmcloud'
59+
cls.testReasonCode = 'test_reason'
60+
cls.testInitiatorId = 'test_initiator'
61+
cls.testDashboardUrlEscaped = 'http://www.example.com/crn%3Av1%3Astaging%3Apublic%3Abss-monitor%3Aglobal%3Aa%2Fbc2b2fca0af84354a916dc1de6eee42e%3AsdkTestInstance%3A%3A'
62+
cls.testDashboardUrl = 'http://www.example.com/crn:v1:staging:public:bss-monitor:global:a/bc2b2fca0af84354a916dc1de6eee42e:sdkTestInstance::'
63+
cls.transactionId = str(uuid.uuid4())
64+
cls.testInstanceIdEscaped = 'crn%3Av1%3Astaging%3Apublic%3Abss-monitor%3Aglobal%3Aa%2Fbc2b2fca0af84354a916dc1de6eee42e%3AsdkTestInstance%3A%3A'
65+
cls.testInstanceId2Escaped = 'crn%3Av1%3Astaging%3Apublic%3Abss-monitor%3Aus-south%3Aa%2Fbc2b2fca0af84354a916dc1de6eee42e%3Aosb-sdk-test00%3Aresource-binding%3Aosb-sdk-binding-test00'
66+
cls.testBindingIdEscaped = 'crn%3Av1%3Astaging%3Apublic%3Abss-monitor%3Aus-south%3Aa%2Fbc2b2fca0af84354a916dc1de6eee42e%3AsdkTestInstance%3Aresource-binding%3AsdkTestBinding'
67+
cls.testBindingId2Escaped = 'crn%3Av1%3Astaging%3Apublic%3Abss-monitor%3Aglobal%3Aa%2Fbc2b2fca0af84354a916dc1de6eee42e%3Aosb-sdk-test00%3A%3A'
68+
cls.testServiceId = 'a10e46ae-3685-11e9-b210-d663bd873d93'
69+
cls.testEnable = True
70+
71+
print('\nTransaction-Id for Test Run: ' + cls.transactionId)
72+
print('Setup complete.')
73+
74+
75+
def test_00_create_service_instance(self):
76+
customHeaders = {}
77+
customHeaders["Transaction-Id"] = "osb-sdk-python-test00-" + self.transactionId
78+
79+
testContext = Context(account_id=self.testAccountId, crn=self.testInstanceId, platform=self.testPlatform)
80+
testPars = {}
81+
82+
response = self.service.replace_service_instance(
83+
instance_id=self.testInstanceId,
84+
organization_guid=self.testOrgGuid,
85+
plan_id=self.testPlanId1,
86+
service_id=self.testServiceId,
87+
space_guid=self.testSpaceGuid,
88+
context=testContext,
89+
parameters=testPars,
90+
accepts_incomplete=True,
91+
headers=customHeaders
92+
)
93+
94+
assert response is not None
95+
assert response.get_status_code() == 201
96+
97+
result = response.get_result()
98+
assert result is not None
99+
assert result.get('dashboard_url') is not None
100+
101+
def test_01_update_service_instance(self):
102+
customHeaders = {}
103+
customHeaders["Transaction-Id"] = "osb-sdk-python-test01-" + self.transactionId
104+
105+
testContext = Context(account_id=self.testAccountId, crn=self.testInstanceId, platform=self.testPlatform)
106+
testPars = {}
107+
testPrevValues = {}
108+
109+
response = self.service.update_service_instance(
110+
instance_id=self.testInstanceId,
111+
service_id=self.testServiceId,
112+
context=testContext,
113+
parameters=testPars,
114+
plan_id=self.testPlanId1,
115+
previous_values=testPrevValues,
116+
accepts_incomplete=True,
117+
headers=customHeaders
118+
)
119+
120+
assert response is not None
121+
assert response.get_status_code() == 200
122+
123+
result = response.get_result()
124+
assert result is not None
125+
assert result.get('service_instance_id') == self.testInstanceId
126+
assert result.get('plan_id') == self.testPlanId1
127+
128+
def test_02_disable_service_instance_state(self):
129+
customHeaders = {}
130+
customHeaders["Transaction-Id"] = "osb-sdk-python-test02-" + self.transactionId
131+
132+
response = self.service.replace_service_instance_state(
133+
instance_id=self.testInstanceId,
134+
enabled=False,
135+
initiator_id=self.testInitiatorId,
136+
reason_code=self.testReasonCode,
137+
headers=customHeaders
138+
)
139+
140+
assert response is not None
141+
assert response.get_status_code() == 200
142+
143+
result = response.get_result()
144+
assert result is not None
145+
assert result.get('active') is not None
146+
assert result.get('enabled') is not None
147+
148+
def test_03_enable_service_instance_state(self):
149+
customHeaders = {}
150+
customHeaders["Transaction-Id"] = "osb-sdk-python-test03-" + self.transactionId
151+
152+
response = self.service.replace_service_instance_state(
153+
instance_id=self.testInstanceId,
154+
enabled=True,
155+
initiator_id=self.testInitiatorId,
156+
reason_code=self.testReasonCode,
157+
headers=customHeaders
158+
)
159+
160+
assert response is not None
161+
assert response.get_status_code() == 200
162+
163+
result = response.get_result()
164+
assert result is not None
165+
assert result.get('active') is not None
166+
assert result.get('enabled') is not None
167+
168+
def test_04_bind_service_instance_state(self):
169+
customHeaders = {}
170+
customHeaders["Transaction-Id"] = "osb-sdk-python-test04-" + self.transactionId
171+
testParams = {}
172+
testBindResource = BindResource(account_id=self.testAccountId, serviceid_crn=self.testAppGuid)
173+
174+
response = self.service.replace_service_binding(
175+
binding_id=self.testBindingId2,
176+
instance_id=self.testInstanceId2,
177+
plan_id=self.testPlanId3,
178+
service_id=self.testServiceId,
179+
bind_resource=testBindResource,
180+
parameters=testParams,
181+
headers=customHeaders
182+
)
183+
184+
assert response is not None
185+
assert response.get_status_code() == 201
186+
187+
result = response.get_result()
188+
assert result is not None
189+
assert result.get('credentials') is not None
190+
191+
def test_05_get_service_instance_state(self):
192+
customHeaders = {}
193+
customHeaders["Transaction-Id"] = "osb-sdk-python-test05-" + self.transactionId
194+
195+
response = self.service.get_service_instance_state(
196+
instance_id=self.testInstanceId,
197+
headers=customHeaders
198+
)
199+
200+
assert response is not None
201+
assert response.get_status_code() == 200
202+
203+
result = response.get_result()
204+
assert result is not None
205+
assert result.get('active') is not None
206+
assert result.get('enabled') is not None
207+
208+
def test_06_get_catalog_metadata(self):
209+
customHeaders = {}
210+
customHeaders["Transaction-Id"] = "osb-sdk-python-test06-" + self.transactionId
211+
212+
response = self.service.list_catalog(
213+
headers=customHeaders
214+
)
215+
216+
assert response is not None
217+
assert response.get_status_code() == 200
218+
219+
result = response.get_result()
220+
assert result is not None
221+
assert result.get('services')[0].get('id') is not None
222+
assert result.get('services')[0].get('name') is not None
223+
assert result.get('services')[0].get('bindable') is not None
224+
assert result.get('services')[0].get('plan_updateable') is not None
225+
226+
def test_07_delete_service_binding(self):
227+
customHeaders = {}
228+
customHeaders["Transaction-Id"] = "osb-sdk-python-test07-" + self.transactionId
229+
230+
response = self.service.delete_service_binding(
231+
binding_id=self.testBindingId2,
232+
instance_id=self.testInstanceId2,
233+
plan_id=self.testPlanId3,
234+
service_id=self.testServiceId,
235+
headers=customHeaders
236+
)
237+
238+
assert response is not None
239+
assert response.get_status_code() == 200
240+
241+
def test_08_delete_service_instance(self):
242+
customHeaders = {}
243+
customHeaders["Transaction-Id"] = "osb-sdk-python-test08-" + self.transactionId
244+
245+
response = self.service.delete_service_instance(
246+
service_id=self.testServiceId,
247+
plan_id=self.testPlanId3,
248+
instance_id=self.testInstanceId2,
249+
headers=customHeaders
250+
)
251+
252+
assert response is not None
253+
assert response.get_status_code() == 200
254+
result = response.get_result()
255+
assert result is not None

0 commit comments

Comments
 (0)