Best Python code snippet using localstack_python
test_create_computer_system.py
Source:test_create_computer_system.py
1# -*- coding: utf-8 -*-2# Copyright (2018) Hewlett Packard Enterprise Development LP3#4# Licensed under the Apache License, Version 2.0 (the "License"); you may5# not use this file except in compliance with the License. You may obtain6# a copy of the License at7#8# http://www.apache.org/licenses/LICENSE-2.09#10# Unless required by applicable law or agreed to in writing, software11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the13# License for the specific language governing permissions and limitations14# under the License.15# Python libs16import copy17import json18# 3rd party libs19from unittest import mock20from unittest.mock import call21from flask_api import status22from hpOneView.exceptions import HPOneViewException23from hpOneView.resources.storage.storage_pools import StoragePools24from hpOneView.resources.servers.server_hardware import ServerHardware25from hpOneView.resources.servers.server_profile_templates import ServerProfileTemplate26from hpOneView.resources.storage.volumes import Volumes27from hpOneView.resources.activity.tasks import Tasks28# Module libs29from oneview_redfish_toolkit.api.errors import OneViewRedfishException30from oneview_redfish_toolkit.blueprints import computer_system31from oneview_redfish_toolkit.services import computer_system_service32from oneview_redfish_toolkit.tests.base_flask_test import BaseFlaskTest33class TestCreateComputerSystem(BaseFlaskTest):34 """Tests for Create a ComputerSystem blueprint endpoint"""35 @classmethod36 def setUpClass(self):37 super(TestCreateComputerSystem, self).setUpClass()38 self.app.register_blueprint(computer_system.computer_system)39 self.not_found_error = HPOneViewException({40 'errorCode': 'RESOURCE_NOT_FOUND',41 'message': 'resource not found',42 })43 with open(44 'oneview_redfish_toolkit/mockups/oneview/ServerProfile.json'45 ) as f:46 self.server_profile = json.load(f)47 #profile_obj = ServerProfiles(self.oneview_client, self.server_profile)48 with open(49 'oneview_redfish_toolkit/mockups/oneview/ServerHardware.json'50 ) as f:51 self.server_hardware = json.load(f)52 self.server_hardware['serverProfileUri'] = None53 with open(54 'oneview_redfish_toolkit/mockups/redfish/'55 'PostToComposeSystem.json'56 ) as f:57 self.data_to_create_system = json.load(f)58 self.data_to_create_system["Links"]["ResourceBlocks"].append(59 {60 "@odata.id": "/redfish/v1/CompositionService/"61 "ResourceBlocks/B526F59E-9BC7-467F-9205-A9F4015CE296"62 }63 )64 with open(65 'oneview_redfish_toolkit/mockups/oneview/'66 'ServerProfileTemplate.json'67 ) as f:68 server_profile_template = json.load(f)69 self.server_profile_template = copy.deepcopy(70 server_profile_template)71 self.server_profile_template["connectionSettings"][72 "connections"].append({73 "portId": "Mezz 3:1-b",74 "id": 2,75 "requestedVFs": "0",76 "functionType": "FibreChannel",77 "name": "fcnw",78 "boot": {79 "priority": "NotBootable",80 },81 "networkUri": "/rest/fc-networks/nw_id"82 })83 with open(84 'oneview_redfish_toolkit/mockups/oneview/'85 'Drives.json'86 ) as f:87 self.drives = json.load(f)88 with open(89 'oneview_redfish_toolkit/mockups/oneview/'90 'Volumes.json'91 ) as f:92 volumes = json.load(f)93 self.volume = volumes[0]94 self.sh_id = "30303437-3034-4D32-3230-313133364752"95 self.spt_id = "1f0ca9ef-7f81-45e3-9d64-341b46cf87e0"96 self.drive1_id = "e11dd3e0-78cd-47e8-bacb-9813f4bb58a8"97 self.drive2_id = "53bd734f-19fe-42fe-a8ef-3f1a83b4e5c1"98 self.volume_id = "B526F59E-9BC7-467F-9205-A9F4015CE296"99 self.common_calls_to_assert_hardware = [100 call(self.sh_id),101 call(self.spt_id),102 call(self.drive1_id),103 call(self.drive2_id),104 call(self.volume_id)105 ]106 self.common_calls_to_assert_spt = [107 call(self.sh_id),108 call(self.spt_id),109 call(self.drive1_id),110 call(self.drive2_id),111 call(self.volume_id),112 call(self.spt_id)113 ]114 self.common_calls_to_assert_drives = [115 call('/rest/drives/' + self.sh_id),116 call('/rest/drives/' + self.spt_id),117 call('/rest/drives/' + self.drive1_id),118 call('/rest/drives/' + self.drive2_id),119 call('/rest/drives/' + self.volume_id)120 ]121 self.common_calls_to_assert_volumes = [122 call(self.sh_id),123 call(self.spt_id),124 call(self.drive1_id),125 call(self.drive2_id),126 call(self.volume_id),127 call(self.spt_id)128 ]129 self.fc_connection = {130 "portId": "Mezz 3:1-b",131 "id": 2,132 "requestedVFs": "0",133 "functionType": "FibreChannel",134 "name": "fcnw",135 "boot": {136 "priority": "NotBootable",137 },138 "networkUri": "/rest/fc-networks/nw_id"139 }140 self.san_storage = {141 "hostOSType": "VMware (ESXi)",142 "manageSanStorage": True,143 "volumeAttachments": [144 {145 "lunType": "Auto",146 "volumeUri": "/rest/storage-volumes/" +147 "B526F59E-9BC7-467F-9205-A9F4015CE296",148 "volumeStorageSystemUri": "/rest/storage-systems/"149 "TXQ1000307",150 "storagePaths": [151 {152 "targetSelector": "Auto",153 "isEnabled": True,154 "connectionId": 2,155 "targets": [156 ]157 }158 ]159 }160 ]161 }162 def run_common_mock_to_server_hardware(self):163 ov_client = self.oneview_client164 serverhw_obj = ServerHardware(165 self.oneview_client, self.server_hardware)166 ov_client.server_hardware.get_by_id.side_effect = [167 serverhw_obj,168 self.not_found_error,169 self.not_found_error,170 self.not_found_error,171 self.not_found_error,172 serverhw_obj, # for multiple oneview (power update status)173 serverhw_obj # for multiple oneview (create profile)174 ]175 #power_state.return_value = None176 def run_common_mock_to_server_profile_template(self):177 template_obj = ServerProfileTemplate(178 self.oneview_client, self.server_profile_template)179 self.oneview_client.server_profile_templates.get_by_id.side_effect = [180 self.not_found_error,181 template_obj,182 self.not_found_error,183 self.not_found_error,184 self.not_found_error,185 template_obj,186 ]187 def run_common_mock_to_drives(self):188 self.oneview_client.index_resources.get.side_effect = [189 self.not_found_error,190 self.not_found_error,191 self.drives[0],192 self.drives[1],193 self.not_found_error,194 ]195 def run_common_mock_to_volumes(self):196 volume_obj = Volumes(self.oneview_client, self.volume)197 self.oneview_client.volumes.get_by_id.side_effect = [198 self.not_found_error,199 self.not_found_error,200 self.not_found_error,201 self.not_found_error,202 volume_obj,203 self.not_found_error,204 ]205 def assert_common_calls(self):206 self.oneview_client.server_hardware.get_by_id.assert_has_calls(207 self.common_calls_to_assert_hardware)208 self.oneview_client.server_profile_templates.get_by_id.assert_has_calls(209 self.common_calls_to_assert_spt)210 self.oneview_client.index_resources.get.assert_has_calls(211 self.common_calls_to_assert_drives)212 @mock.patch.object(ServerHardware, 'update_power_state')213 @mock.patch.object(computer_system_service, 'time')214 def test_create_system(self, time_mock, power_state):215 """Tests create a redfish System with Network, Storage and Server"""216 with open(217 'oneview_redfish_toolkit/mockups/oneview/'218 'ServerProfileBuiltFromTemplateToCreateASystem.json'219 ) as f:220 expected_server_profile_built = json.load(f)221 expected_server_profile_built["sanStorage"] = self.san_storage222 expected_server_profile_built["connectionSettings"][223 "connections"].append(self.fc_connection)224 task_without_resource_uri = {225 "associatedResource": {226 "resourceUri": None227 },228 "uri": "/rest/tasks/123456"229 }230 task_with_resource_uri = {231 "associatedResource": {232 "resourceUri": self.server_profile["uri"]233 },234 "uri": "/rest/tasks/123456"235 }236 self.run_common_mock_to_server_hardware()237 power_state.return_value = None238 self.run_common_mock_to_server_profile_template()239 self.run_common_mock_to_drives()240 self.run_common_mock_to_volumes()241 storage_pool_obj = StoragePools(self.oneview_client, {242 "storageSystemUri": "/rest/storage-systems/TXQ1000307"243 })244 self.oneview_client.storage_pools.get_by_uri.return_value = storage_pool_obj245 # The connection.post return for /rest/server-profiles is a tuple246 self.oneview_client.connection.post.return_value = \247 (task_without_resource_uri, None)248 # The task will be requested 3 times in this case,249 # simulating the checking of resource uri250 task_without_resource_uri_obj = Tasks(251 self.oneview_client, task_without_resource_uri)252 task_with_resource_uri_obj = Tasks(253 self.oneview_client, task_with_resource_uri)254 self.oneview_client.tasks.get_by_uri.side_effect = [255 task_without_resource_uri_obj,256 task_without_resource_uri_obj,257 task_with_resource_uri_obj258 ]259 response = self.client.post(260 "/redfish/v1/Systems",261 data=json.dumps(self.data_to_create_system),262 content_type='application/json')263 self.assertEqual(status.HTTP_201_CREATED, response.status_code)264 self.assertEqual("application/json", response.mimetype)265 self.assertIn(266 "/redfish/v1/Systems/" + self.server_profile["uuid"],267 response.headers["Location"]268 )269 self.oneview_client.server_hardware.get_by_id.assert_has_calls(270 self.common_calls_to_assert_hardware)271 self.oneview_client.server_profile_templates.get_by_id.assert_has_calls(272 self.common_calls_to_assert_spt)273 self.oneview_client.index_resources.get.assert_has_calls(274 self.common_calls_to_assert_drives)275 self.oneview_client.server_profiles.create.assert_not_called()276 power_state \277 .assert_called_with({278 'powerControl': 'PressAndHold', 'powerState': 'Off'279 })280 self.oneview_client.tasks.get_by_uri.assert_called_with(281 task_without_resource_uri["uri"])282 # self.oneview_client.connection.post.assert_called_once_with(283 # '/rest/server-profiles', expected_server_profile_built284 # )285 self.assertEqual(self.oneview_client.tasks.get_by_uri.call_count, 3)286 time_mock.sleep.assert_called_with(3)287 def test_create_when_server_hardware_already_belongs_to_system(self,):288 """Tests create when server profile already applied to the server"""289 sh_with_profile_uri = copy.deepcopy(self.server_hardware)290 sh_with_profile_uri["serverProfileUri"] = "/server-profiles/uuid_1"291 self.oneview_client.server_hardware.get_by_id.side_effect = [292 sh_with_profile_uri,293 self.not_found_error,294 self.not_found_error,295 self.not_found_error,296 sh_with_profile_uri,297 sh_with_profile_uri298 ]299 self.run_common_mock_to_server_profile_template()300 self.run_common_mock_to_drives()301 response = self.client.post(302 "/redfish/v1/Systems",303 data=json.dumps(self.data_to_create_system),304 content_type="application/json")305 result = json.loads(response.data.decode("utf-8"))306 self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)307 self.assertEqual("application/json", response.mimetype)308 self.assertIn("Computer System Resource Block already belongs to a "309 "Composed System with ID uuid_1", str(result))310 self.oneview_client.connection.post.assert_not_called()311 @mock.patch.object(ServerHardware, 'update_power_state')312 @mock.patch.object(computer_system_service, 'config')313 def test_create_when_power_off_on_compose_is_not_configured(self,314 config_mock, power_state):315 """Tests create when power_off is blank, should below a normal flow"""316 with open(317 'oneview_redfish_toolkit/mockups/oneview/'318 'ServerProfileBuiltFromTemplateToCreateASystem.json'319 ) as f:320 expected_server_profile_built = json.load(f)321 expected_server_profile_built["sanStorage"] = self.san_storage322 expected_server_profile_built["connectionSettings"][323 "connections"].append(self.fc_connection)324 self.run_common_mock_to_server_hardware()325 self.run_common_mock_to_server_profile_template()326 self.run_common_mock_to_drives()327 self.run_common_mock_to_volumes()328 storage_pool_obj = StoragePools(self.oneview_client, {329 "storageSystemUri": "/rest/storage-systems/TXQ1000307"330 }331 )332 self.oneview_client.storage_pools.get_by_uri.return_value = storage_pool_obj333 config_mock.get_composition_settings.return_value = {334 'PowerOffServerOnCompose': ''335 }336 task_with_resource_uri = {337 "associatedResource": {338 "resourceUri": self.server_profile["uri"]339 },340 "uri": "/rest/tasks/123456"341 }342 self.oneview_client.connection.post.return_value = \343 (task_with_resource_uri, None)344 response = self.client.post(345 "/redfish/v1/Systems",346 data=json.dumps(self.data_to_create_system),347 content_type="application/json")348 self.assertEqual(status.HTTP_201_CREATED, response.status_code)349 self.assertEqual("application/json", response.mimetype)350 power_state.update_power_state \351 .assert_not_called()352 # self.oneview_client.connection.post.assert_called_once_with(353 # '/rest/server-profiles', expected_server_profile_built354 # )355 @mock.patch.object(ServerHardware, 'update_power_state')356 @mock.patch.object(computer_system_service, 'config')357 def test_create_when_power_off_on_compose_has_wrong_configuration(358 self, config_mock, power_state):359 """Tests create when power_off is blank, should below a normal flow"""360 self.run_common_mock_to_server_hardware()361 self.run_common_mock_to_server_profile_template()362 self.run_common_mock_to_drives()363 config_mock.get_composition_settings.return_value = {364 'PowerOffServerOnCompose': 'ForceOffff'365 }366 try:367 response = self.client.post(368 "/redfish/v1/Systems",369 data=json.dumps(self.data_to_create_system),370 content_type="application/json")371 result = json.loads(response.data.decode("utf-8"))372 except OneViewRedfishException:373 self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)374 self.assertIn('There is no mapping for ForceOffff on the OneView',375 str(result))376 power_state.update_power_state \377 .assert_not_called()378 self.oneview_client.connection.post.assert_not_called()379 @mock.patch.object(ServerHardware, 'update_power_state')380 @mock.patch.object(computer_system_service, 'time')381 def test_create_system_without_description(self, time_mock, power_state):382 """Tests create a redfish System with Network, Storage and Server"""383 with open(384 'oneview_redfish_toolkit/mockups/oneview/'385 'ServerProfileBuiltFromTemplateToCreateASystem.json'386 ) as f:387 expected_server_profile_built = json.load(f)388 task_without_resource_uri = {389 "associatedResource": {390 "resourceUri": None391 },392 "uri": "/rest/tasks/123456"393 }394 task_with_resource_uri = {395 "associatedResource": {396 "resourceUri": self.server_profile["uri"]397 },398 "uri": "/rest/tasks/123456"399 }400 expected_server_profile_built["sanStorage"] = self.san_storage401 expected_server_profile_built["connectionSettings"][402 "connections"].append(self.fc_connection)403 data_to_create_without_desc = copy.deepcopy(self.data_to_create_system)404 del expected_server_profile_built['description']405 data_to_create_without_desc['Description'] = ''406 self.run_common_mock_to_server_hardware()407 power_state.return_value = None408 self.run_common_mock_to_server_profile_template()409 self.run_common_mock_to_drives()410 self.run_common_mock_to_volumes()411 storage_prool_obj = StoragePools(self.oneview_client, {412 "storageSystemUri": "/rest/storage-systems/TXQ1000307"413 })414 self.oneview_client.storage_pools.get.return_value = storage_prool_obj415 # The connection.post return for /rest/server-profiles is a tuple416 self.oneview_client.connection.post.return_value = \417 (task_without_resource_uri, None)418 # The task will be requested 3 times in this case,419 # simulating the checking of resource uri420 task_without_resource_uri_obj = Tasks(421 self.oneview_client, task_without_resource_uri)422 task_with_resource_uri_obj = Tasks(423 self.oneview_client, task_with_resource_uri)424 self.oneview_client.tasks.get_by_uri.side_effect = [425 task_without_resource_uri_obj,426 task_without_resource_uri_obj,427 task_with_resource_uri_obj428 ]429 response = self.client.post(430 "/redfish/v1/Systems",431 data=json.dumps(data_to_create_without_desc),432 content_type='application/json')433 self.assertEqual(status.HTTP_201_CREATED, response.status_code)434 self.assertEqual("application/json", response.mimetype)435 self.assertIn(436 "/redfish/v1/Systems/" + self.server_profile["uuid"],437 response.headers["Location"]438 )439 self.oneview_client.server_hardware.get_by_id.assert_has_calls(440 self.common_calls_to_assert_hardware)441 self.oneview_client.server_profile_templates.get_by_id.assert_has_calls(442 self.common_calls_to_assert_spt)443 self.oneview_client.index_resources.get.assert_has_calls(444 self.common_calls_to_assert_drives)445 self.oneview_client.server_profiles.create.assert_not_called()446 self.oneview_client.tasks.get_by_uri.assert_called_with(447 task_without_resource_uri["uri"])448 # self.oneview_client.connection.post.assert_called_once_with(449 # '/rest/server-profiles', expected_server_profile_built450 # )451 self.assertEqual(self.oneview_client.tasks.get_by_uri.call_count, 3)452 time_mock.sleep.assert_called_with(3)453 def test_create_system_when_request_content_is_wrong(self):454 """Tests trying create a redfish System without Links"""455 data_to_send = {456 "Name": "Composed System Without Links"457 }458 response = self.client.post("/redfish/v1/Systems",459 data=json.dumps(data_to_send),460 content_type='application/json')461 self.assertEqual(462 status.HTTP_400_BAD_REQUEST, response.status_code)463 self.assertEqual("application/json", response.mimetype)464 self.oneview_client.server_hardware.get_by_id.assert_not_called()465 self.oneview_client.server_profile_templates.get_by_id.assert_not_called()466 self.oneview_client.index_resources.get.assert_not_called()467 self.oneview_client.connection.post.assert_not_called()468 def test_create_system_when_request_content_has_not_compute(self):469 """Tests trying create a redfish System without Compute Resource"""470 self.oneview_client.server_hardware.get_by_id.side_effect = [471 self.not_found_error,472 self.not_found_error,473 self.not_found_error,474 self.not_found_error,475 self.not_found_error476 ]477 response = self.client.post(478 "/redfish/v1/Systems/",479 data=json.dumps(self.data_to_create_system),480 content_type='application/json')481 self.assertEqual(482 status.HTTP_400_BAD_REQUEST, response.status_code)483 self.assertIn(484 "Should have a Computer System Resource Block",485 response.data.decode()486 )487 self.assertEqual("application/json", response.mimetype)488 self.oneview_client.server_hardware.get_by_id.assert_has_calls(489 self.common_calls_to_assert_hardware)490 self.oneview_client.server_profile_templates.get_by_id.assert_not_called()491 self.oneview_client.index_resources.get.assert_not_called()492 self.oneview_client.connection.post.assert_not_called()493 def test_create_system_when_request_content_has_not_network(self):494 """Tests trying create a redfish System without Network Resource"""495 self.oneview_client.server_hardware.get_by_id.side_effect = [496 self.server_hardware,497 self.not_found_error,498 self.not_found_error,499 self.not_found_error,500 self.not_found_error501 ]502 self.oneview_client.server_profile_templates.get_by_id.side_effect = [503 self.not_found_error,504 self.not_found_error,505 self.not_found_error,506 self.not_found_error,507 self.not_found_error508 ]509 response = self.client.post(510 "/redfish/v1/Systems/",511 data=json.dumps(self.data_to_create_system),512 content_type='application/json')513 self.assertEqual(514 status.HTTP_400_BAD_REQUEST, response.status_code)515 self.assertIn(516 "Should have a valid Network Resource Block",517 response.data.decode()518 )519 self.assertEqual("application/json", response.mimetype)520 self.oneview_client.server_hardware.get_by_id.assert_has_calls(521 self.common_calls_to_assert_hardware)522 self.oneview_client.server_profile_templates.get_by_id.assert_has_calls(523 [524 call(self.sh_id),525 call(self.spt_id),526 call(self.drive1_id),527 call(self.drive2_id)528 ])529 self.oneview_client.index_resources.get.assert_not_called()530 self.oneview_client.connection.post.assert_not_called()531 def test_create_system_when_request_content_has_not_a_valid_network(532 self):533 """Tests trying create a redfish System with a invalid Network"""534 self.oneview_client.server_hardware.get_by_id.side_effect = [535 self.server_hardware,536 self.not_found_error,537 self.not_found_error,538 self.not_found_error,539 self.not_found_error540 ]541 self.oneview_client.server_profile_templates.get_by_id.side_effect = [542 self.not_found_error,543 self.server_profile_template,544 self.not_found_error,545 self.not_found_error,546 self.not_found_error547 ]548 data_to_send = copy.copy(self.data_to_create_system)549 # wrong SPT id550 data_to_send["Id"] = "75871d70-789e-4cf9-8bc8-6f4d73193578"551 response = self.client.post(552 "/redfish/v1/Systems/",553 data=json.dumps(data_to_send),554 content_type='application/json')555 self.assertEqual(556 status.HTTP_400_BAD_REQUEST, response.status_code)557 self.assertIn(558 "Should have a valid Network Resource Block",559 response.data.decode()560 )561 self.assertEqual("application/json", response.mimetype)562 self.oneview_client.server_hardware.get_by_id.assert_has_calls(563 self.common_calls_to_assert_hardware)564 self.oneview_client.server_profile_templates.get_by_id.assert_has_calls(565 [566 call(self.sh_id),567 call(self.spt_id),568 call(self.drive1_id),569 call(self.drive2_id)570 ])571 self.oneview_client.index_resources.get.assert_not_called()572 self.oneview_client.connection.post.assert_not_called()573 @mock.patch.object(ServerHardware, 'update_power_state')574 @mock.patch.object(computer_system_service, 'time')575 def test_create_system_when_request_content_has_not_storage(self, _, power_state):576 """Tests create a redfish System without Storage.577 This test should works well.578 This case is when we are creating a System without Storage579 Resource Blocks, but the Server Profile Template related has a580 local storage controller configured properly581 """582 with open(583 'oneview_redfish_toolkit/mockups/redfish/'584 'PostToComposeSystemWithoutStorage.json'585 ) as f:586 data_to_send = json.load(f)587 """588 with open(589 'oneview_redfish_toolkit/mockups/oneview/'590 'ServerProfileBuiltFromZoneWithoutStorageToCreateASystem.json'591 ) as f:592 expected_server_profile_built = json.load(f)593 """594 with open(595 'oneview_redfish_toolkit/mockups/oneview/'596 'ServerProfileTemplates.json'597 ) as f:598 list_spt = json.load(f)599 spt = list_spt[1] # without local storage controller configured600 spt_id = spt["uri"].split("/")[-1]601 task = {602 "associatedResource": {603 "resourceUri": self.server_profile["uri"]604 },605 "uri": "/rest/tasks/123456"606 }607 serverhw_obj = ServerHardware(608 self.oneview_client, self.server_hardware)609 self.oneview_client.server_hardware.get_by_id.side_effect = [610 serverhw_obj,611 self.not_found_error,612 serverhw_obj, # for multiple oneview (power update status)613 serverhw_obj614 ]615 power_state.return_value = None616 template_obj = ServerProfileTemplate(self.oneview_client, spt)617 self.oneview_client.server_profile_templates.get_by_id.side_effect = [618 self.not_found_error,619 template_obj,620 template_obj,621 ]622 self.oneview_client.index_resources.get.side_effect = [623 self.not_found_error,624 self.not_found_error,625 ]626 self.run_common_mock_to_volumes()627 self.oneview_client.connection.post.return_value = (task, None)628 response = self.client.post(629 "/redfish/v1/Systems/",630 data=json.dumps(data_to_send),631 content_type='application/json')632 self.assertEqual(status.HTTP_201_CREATED, response.status_code)633 self.assertEqual("application/json", response.mimetype)634 self.assertIn(635 "/redfish/v1/Systems/" + self.server_profile["uuid"],636 response.headers["Location"]637 )638 self.oneview_client.server_hardware.get_by_id.assert_has_calls(639 [640 call(self.sh_id),641 call(spt_id),642 ])643 self.oneview_client.server_profile_templates.get_by_id.assert_has_calls(644 [645 call(self.sh_id),646 call(spt_id),647 call(spt_id)648 ])649 self.oneview_client.index_resources.get.assert_has_calls(650 [651 call('/rest/drives/' + self.sh_id),652 call('/rest/drives/' + spt_id),653 ])654 # self.oneview_client.connection.post.assert_called_with(655 # '/rest/server-profiles',656 # expected_server_profile_built)657 @mock.patch.object(ServerHardware, 'update_power_state')658 @mock.patch.object(computer_system_service, 'time')659 def test_create_system_when_has_not_storage_and_controller(self, _, power_state):660 """Tests create a System without Storage but with Storage Controller.661 This test should works well.662 This case is when we are creating a System without Storage663 Resource Blocks and the Server Profile Template related has not a664 local storage controller configured properly665 """666 task = {667 "associatedResource": {668 "resourceUri": self.server_profile["uri"]669 },670 "uri": "/rest/tasks/123456"671 }672 serverhw_obj = ServerHardware(673 self.oneview_client, self.server_hardware)674 self.oneview_client.server_hardware.get_by_id.side_effect = [675 serverhw_obj,676 self.not_found_error,677 self.not_found_error,678 self.not_found_error,679 self.not_found_error,680 serverhw_obj, # for multiple oneview (power update status)681 serverhw_obj # Get for multiple OneView support682 ]683 power_state.return_value = None684 template_without_controller = copy.deepcopy(685 self.server_profile_template)686 template_without_controller["localStorage"]["controllers"] = []687 template_obj = ServerProfileTemplate(688 self.oneview_client, template_without_controller)689 self.oneview_client.server_profile_templates.get_by_id.side_effect = [690 self.not_found_error,691 template_obj,692 self.not_found_error,693 self.not_found_error,694 self.not_found_error,695 template_obj696 ]697 self.oneview_client.index_resources.get.side_effect = [698 self.not_found_error,699 self.not_found_error,700 self.not_found_error,701 self.not_found_error,702 self.not_found_error,703 ]704 self.run_common_mock_to_volumes()705 storage_pools_obj = StoragePools(self.oneview_client, {706 "storageSystemUri": "/rest/storage-systems/TXQ1000307"707 })708 self.oneview_client.storage_pools.get.return_value = storage_pools_obj709 self.oneview_client.connection.post.return_value = (task, None)710 response = self.client.post(711 "/redfish/v1/Systems/",712 data=json.dumps(self.data_to_create_system),713 content_type='application/json')714 self.assertEqual(status.HTTP_201_CREATED, response.status_code)715 self.assertEqual("application/json", response.mimetype)716 # self.assertIn(717 # "/redfish/v1/Systems/" + self.server_profile["uuid"],718 # response.headers["Location"]719 # )720 self.assert_common_calls()721 def test_create_system_when_a_generic_exception_is_raised(self):722 """Tests create a redfish System when occurs a generic exception"""723 self.oneview_client.server_hardware.get_by_id.side_effect = Exception()724 response = self.client.post(725 "/redfish/v1/Systems/",726 data=json.dumps(self.data_to_create_system),727 content_type='application/json')728 self.assertEqual(status.HTTP_500_INTERNAL_SERVER_ERROR,729 response.status_code)730 self.assertEqual("application/json", response.mimetype)731 self.oneview_client.server_hardware.get_by_id.assert_called_with(732 self.sh_id)733 self.oneview_client.server_profile_templates.get_by_id.assert_not_called()734 self.oneview_client.index_resources.get.assert_not_called()735 @mock.patch.object(ServerHardware, 'update_power_state')736 @mock.patch.object(computer_system_service, 'time')737 def test_create_system_when_a_task_error_is_raised(self, _, power_state):738 """Tests create a System when the Oneview raises a task error.739 This test should return a http 403 with a error message.740 Some problems are server hardware is powered On and the drive used741 belongs to another enclosure.742 """743 task = {744 "associatedResource": {745 "resourceUri": None746 },747 "uri": "/rest/tasks/123456",748 "taskErrors": [749 {"message": "The server hardware 123 is powered on"}750 ]751 }752 self.run_common_mock_to_server_hardware()753 self.run_common_mock_to_server_profile_template()754 self.run_common_mock_to_drives()755 self.run_common_mock_to_volumes()756 self.oneview_client.connection.post.return_value = (task, object())757 response = self.client.post(758 "/redfish/v1/Systems/",759 data=json.dumps(self.data_to_create_system),760 content_type='application/json')761 self.assertEqual(762 status.HTTP_403_FORBIDDEN,763 response.status_code764 )765 self.assertEqual("application/json", response.mimetype)766 self.assertIn("The server hardware 123 is powered on",767 response.data.decode())768 self.assert_common_calls()769 @mock.patch.object(ServerHardware, 'update_power_state')770 @mock.patch.object(computer_system_service, 'time')771 def test_when_has_more_than_one_task_error(self, _, power_state):772 """Tests create a System when the Oneview raises two task errors.773 This test should return a http 403 with a error message.774 Some problems are server hardware is powered On and the drive used775 belongs to another enclosure.776 """777 task = {778 "associatedResource": {779 "resourceUri": None780 },781 "uri": "/rest/tasks/123456",782 "taskErrors": [783 {"message": "The server hardware 123 is powered on"},784 {"message": "The drive used belongs to another enclosure"}785 ]786 }787 self.run_common_mock_to_server_hardware()788 power_state.return_value = None789 self.run_common_mock_to_server_profile_template()790 self.run_common_mock_to_drives()791 self.run_common_mock_to_volumes()792 self.oneview_client.connection.post.return_value = (task, object())793 response = self.client.post(794 "/redfish/v1/Systems/",795 data=json.dumps(self.data_to_create_system),796 content_type='application/json')797 expected_error_msg = "The server hardware 123 is powered on\\n" \798 "The drive used belongs to another enclosure\\n"799 self.assertEqual(800 status.HTTP_403_FORBIDDEN,801 response.status_code802 )803 self.assertEqual("application/json", response.mimetype)804 self.assertIn(expected_error_msg, response.data.decode())805 self.assert_common_calls()806 def test_create_system_when_has_storage_but_not_valid_controller(self):807 """Tests when the Server Profile Template has not a valid storage controller.808 This test should return a http 403 with a error message.809 The case is: the server profile template associated with the810 request has not a valid local storage controller configured,811 but the request has storage resource blocks to compose the system812 """813 self.run_common_mock_to_server_hardware()814 template_without_controller = copy.deepcopy(815 self.server_profile_template)816 template_without_controller["localStorage"]["controllers"] = []817 spt_without_controller_obj = ServerProfileTemplate(818 self.oneview_client, template_without_controller)819 self.oneview_client.server_profile_templates.get_by_id.side_effect = [820 self.not_found_error,821 spt_without_controller_obj,822 self.not_found_error,823 self.not_found_error,824 spt_without_controller_obj825 ]826 self.run_common_mock_to_drives()827 try:828 response = self.client.post(829 "/redfish/v1/Systems/",830 data=json.dumps(self.data_to_create_system),831 content_type='application/json')832 except OneViewRedfishException:833 self.assertEqual(834 status.HTTP_403_FORBIDDEN,835 response.status_code836 )837 self.assertIn("The Server Profile Template should have a valid "838 "storage controller to use the Storage Resource "839 "Blocks passed",840 response.data.decode())...
check_consistency.py
Source:check_consistency.py
1import os2import sys3path = "/Users/avankemp/Workspace/Triple-A/Experiments/G5K/Interval_7s/Renater20000Jobs_Cache20_40_60_seed777_7s/transient"4os.chdir(path)5for filename in os.listdir(os.getcwd()):6 if not filename.startswith('.'):7 if os.path.isdir(filename):8 print(filename)9 if filename.startswith("dht"):10 cmd = """ grep -r "Error 404" """ + filename + "/*"11 list_of_file_not_found = os.popen(cmd).read()12 list_of_file_not_found = list_of_file_not_found.split("\n")13 del list_of_file_not_found[-1]14 nbr_of_error = len(list_of_file_not_found)15 print("404 errors: "+ str(nbr_of_error))16 for not_found_error in list_of_file_not_found:17 cluster_name = not_found_error.split("/")[1].split("-")[0]18 job_id = not_found_error.split(":")[6]19 to_grep_msg = job_id + ":DEBUG:DHT:req_time"20 to_grep_cmd = """ grep "{}" {} """.format(to_grep_msg, not_found_error.split(":")[0])21 dht_req_node = os.popen(to_grep_cmd).read()22 error_location = dht_req_node.split(",")[3].split(".")[3].split("\n")[0]23 location = not_found_error.split(",")[1].split("=")[1].split(".")[3]24 file_hash = not_found_error.split(":")[8].split("=")[1].split(',')[0]25 log_to_check = not_found_error.replace(not_found_error.split('/')[1].split("-")[0]+"-"+not_found_error.split('/')[1].split("-")[1], cluster_name+"-"+error_location).split(":")[0]26 req_msg = job_id + ":DEFAULT:{'type': 'DHT', 'subtype': 'request', 'file_hash':"+file_hash27 del_msg = "DEFAULT:{'type': 'DHT', 'subtype': 'del', 'file_hash':"+file_hash28 cmd_req = """ grep -A 500 "{}" {} """.format(req_msg, log_to_check)29 cmd_req = cmd_req.replace("\\", "")30 req_found = os.popen(cmd_req).read()31 req_found = req_found.split("\n")32 del req_found[-1]33 found_del_msg = False34 for log_entry in req_found:35 if del_msg in log_entry:36 found_del_msg = True37 print(job_id+ " - Found the DEL msg right after")38 break39 if found_del_msg == False:40 sys.exit(job_id+ " - INCONSISTENCY - No del message... - ")41 elif filename.startswith("new"):42 cmd = """ grep -r "Error 404" """ + filename + "/*"43 list_of_file_not_found = os.popen(cmd).read()44 list_of_file_not_found = list_of_file_not_found.split("\n")45 del list_of_file_not_found[-1]46 nbr_of_error = len(list_of_file_not_found)47 print("404 errors: " + str(nbr_of_error))48 for not_found_error in list_of_file_not_found:49 log_to_check = not_found_error.split(":")[0]50 job_id = not_found_error.split(":")[6]51 file_hash = not_found_error.split(":")[8].split("=")[1].split(',')[0]52 cmd_grep = """ grep -A 2500 -B 2500 "{}" {} """.format(job_id+":Error 404", log_to_check)53 req_found = os.popen(cmd_grep).read()54 req_found = req_found.split("\n")55 del req_found[-1]56 found_del_msg = False57 del_msg = "DEFAULT:{'type': 'DELETE', 'file_hash':"+file_hash58 for log_entry in req_found:59 if del_msg in log_entry:60 found_del_msg = True61 print(job_id+ " - Found the DEL msg right after")62 break63 if found_del_msg == False:...
main.py
Source:main.py
...14 except BaseException:15 print("home/error/try1")16 return render_template('index.html', form=form)17@app.errorhandler(400)18def not_found_error(error):19 pass20 # return render_template('Error/400.html'), 40021@app.errorhandler(401)22def not_found_error(error):23 pass24 # return render_template('Error/401.html'), 40125@app.errorhandler(404)26def not_found_error(error):27 return render_template('404/404.html'), 40428@app.errorhandler(500)29def not_found_error(error):30 pass31 # return render_template('Error/500.html'), 50032@app.errorhandler(502)33def not_found_error(error):34 pass35 # return render_template('Error/502.html'), 50236@app.errorhandler(503)37def not_found_error(error):38 pass39 # return render_template('Error/503.html'), 50340if __name__ == '__main__':41 port = int(os.environ.get("PORT", 5000))...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!