Return realistic data from mocked library
Base CLI test mocks client library in order to test command line components indepentently. If not configured explicitly a mocked library returns mocks that accept any incomng message without producing an error, even if in real life scenarions if should be risen. This patch configured mocked library to return realistic data and fixes a problem in the code that was missed because of the above-mentioned misconfiguration. Closes-bug: #1467510 Change-Id: I065345d59c94e06f9d061c2e9b0b415e45fd62fb
This commit is contained in:
@@ -122,10 +122,10 @@ class EnvDelete(EnvMixIn, base.BaseDeleteCommand):
|
||||
def take_action(self, parsed_args):
|
||||
env = self.client.get_by_id(parsed_args.id)
|
||||
|
||||
if env.status == 'operational' and not parsed_args.force:
|
||||
if env['status'] == 'operational' and not parsed_args.force:
|
||||
self.app.stdout.write("Deleting an operational environment is a "
|
||||
"dangerous operation. Please use --force to "
|
||||
"bypass this message.")
|
||||
"dangerous operation.\n"
|
||||
"Please use --force to bypass this message.")
|
||||
return
|
||||
|
||||
return super(EnvDelete, self).take_action(parsed_args)
|
||||
|
||||
@@ -23,13 +23,14 @@ def get_fake_env(name=None, status=None, release_id=None,
|
||||
environment. Represents the average amount of data.
|
||||
|
||||
"""
|
||||
return {"status": status or "new",
|
||||
"is_customized": False,
|
||||
"release_id": release_id or 1,
|
||||
"name": name or "fake_env",
|
||||
"grouping": "roles",
|
||||
"net_provider": "nova_network",
|
||||
"fuel_version": fuel_version or "5.1",
|
||||
"pending_release_id": pending_release,
|
||||
"id": env_id or 1,
|
||||
"mode": "multinode"}
|
||||
return {'status': status or 'new',
|
||||
'is_customized': False,
|
||||
'release_id': release_id or 1,
|
||||
'name': name or 'fake_env',
|
||||
'grouping': 'roles',
|
||||
'net_provider': 'nova_network',
|
||||
'fuel_version': fuel_version or '5.1',
|
||||
'pending_release_id': pending_release,
|
||||
'id': env_id or 1,
|
||||
'changes': [],
|
||||
'mode': 'multinode'}
|
||||
|
||||
@@ -14,118 +14,114 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import random
|
||||
|
||||
from fuelclient import tests
|
||||
|
||||
|
||||
def get_fake_node(cluster=None, hostname=None, node_id=None, cpu_model=None,
|
||||
roles=None, mac=None, memory_b=None, os_platform=None,
|
||||
status=None, node_name=None, group_id=None):
|
||||
"""Creates a fake random node
|
||||
"""Creates a fake node
|
||||
|
||||
Returns the serialized and parametrized representation of a dumped Fuel
|
||||
environment. Represents the average amount of data.
|
||||
|
||||
"""
|
||||
host_name = hostname or tests.utils.random_string(15, prefix='fake-node-')
|
||||
host_name = hostname or 'fake-node-42'
|
||||
|
||||
return {"name": node_name or host_name,
|
||||
"error_type": None,
|
||||
"cluster": cluster or 1,
|
||||
"id": node_id or random.randint(1, 10000),
|
||||
"ip": "10.20.0.4",
|
||||
"kernel_params": None,
|
||||
"group_id": group_id or 1,
|
||||
"mac": mac or "d6:11:3f:b0:f1:43",
|
||||
"manufacturer": "VirtualBox",
|
||||
"online": True,
|
||||
"os_platform": os_platform or "centos",
|
||||
"pending_addition": False,
|
||||
"pending_deletion": False,
|
||||
"pending_roles": [],
|
||||
"platform_name": None,
|
||||
"progress": 100,
|
||||
"roles": roles or ["compute"],
|
||||
"status": status or "ready",
|
||||
"fqdn": "{hostname}.example.com".format(hostname=host_name),
|
||||
return {'name': node_name or host_name,
|
||||
'error_type': None,
|
||||
'cluster': cluster or 1,
|
||||
'id': node_id or 42,
|
||||
'ip': '10.20.0.4',
|
||||
'kernel_params': None,
|
||||
'group_id': group_id or 1,
|
||||
'mac': mac or 'd6:11:3f:b0:f1:43',
|
||||
'manufacturer': 'VirtualBox',
|
||||
'online': True,
|
||||
'os_platform': os_platform or 'centos',
|
||||
'pending_addition': False,
|
||||
'pending_deletion': False,
|
||||
'pending_roles': [],
|
||||
'platform_name': None,
|
||||
'progress': 100,
|
||||
'roles': roles or ['compute'],
|
||||
'status': status or 'ready',
|
||||
'fqdn': '{hostname}.example.com'.format(hostname=host_name),
|
||||
|
||||
"meta": {"cpu": {"real": 0,
|
||||
"spec": [{"frequency": 2553,
|
||||
"model": cpu_model or "Random CPU"}],
|
||||
"total": 1},
|
||||
'meta': {'cpu': {'real': 0,
|
||||
'spec': [{'frequency': 2553,
|
||||
'model': cpu_model or 'Random CPU'}],
|
||||
'total': 1},
|
||||
|
||||
"disks": [{"disk": "disk/by-path/pci:00:0d.0-scsi-2:0:0",
|
||||
"extra": ["disk/by-id/scsi-SATA_VBOX_aef0bb5c",
|
||||
"disk/by-id/ata-VBOX_HARDDISK_VB37"],
|
||||
"model": "VBOX HARDDISK",
|
||||
"name": "sdc",
|
||||
"removable": "0",
|
||||
"size": 68718428160},
|
||||
'disks': [{'disk': 'disk/by-path/pci:00:0d.0-scsi-2:0:0',
|
||||
'extra': ['disk/by-id/scsi-SATA_VBOX_aef0bb5c',
|
||||
'disk/by-id/ata-VBOX_HARDDISK_VB37'],
|
||||
'model': 'VBOX HARDDISK',
|
||||
'name': 'sdc',
|
||||
'removable': '0',
|
||||
'size': 68718428160},
|
||||
|
||||
{"disk": "disk/by-path/pci:0:0d.0-scsi-1:0:0:0",
|
||||
"extra": ["disk/by-id/scsi-SATA_VBOX_30fbc3bb",
|
||||
"disk/by-id/ata-VBOX_HARDD30fbc3bb"],
|
||||
"model": "VBOX HARDDISK",
|
||||
"name": "sdb",
|
||||
"removable": "0",
|
||||
"size": 68718428160},
|
||||
{'disk': 'disk/by-path/pci:0:0d.0-scsi-1:0:0:0',
|
||||
'extra': ['disk/by-id/scsi-SATA_VBOX_30fbc3bb',
|
||||
'disk/by-id/ata-VBOX_HARDD30fbc3bb'],
|
||||
'model': 'VBOX HARDDISK',
|
||||
'name': 'sdb',
|
||||
'removable': '0',
|
||||
'size': 68718428160},
|
||||
|
||||
{"disk": "disk/by-path/pci:00:d.0-scsi-0:0:0:0",
|
||||
"extra": ["disk/by-id/scsi-SATA_VBOX-17e33653",
|
||||
"disk/by-id/ata-VBOX_HARDD17e33653"],
|
||||
"model": "VBOX HARDDISK",
|
||||
"name": "sda",
|
||||
"removable": "0",
|
||||
"size": 68718428160}],
|
||||
{'disk': 'disk/by-path/pci:00:d.0-scsi-0:0:0:0',
|
||||
'extra': ['disk/by-id/scsi-SATA_VBOX-17e33653',
|
||||
'disk/by-id/ata-VBOX_HARDD17e33653'],
|
||||
'model': 'VBOX HARDDISK',
|
||||
'name': 'sda',
|
||||
'removable': '0',
|
||||
'size': 68718428160}],
|
||||
|
||||
"interfaces": [{"name": "eth2",
|
||||
"current_speed": 100,
|
||||
"mac": "08:00:27:88:9C:46",
|
||||
"max_speed": 100,
|
||||
"state": "unknown"},
|
||||
'interfaces': [{'name': 'eth2',
|
||||
'current_speed': 100,
|
||||
'mac': '08:00:27:88:9C:46',
|
||||
'max_speed': 100,
|
||||
'state': 'unknown'},
|
||||
|
||||
{"name": "eth1",
|
||||
"current_speed": 100,
|
||||
"mac": "08:00:27:24:BD:6D",
|
||||
"max_speed": 100,
|
||||
"state": "unknown"},
|
||||
{'name': 'eth1',
|
||||
'current_speed': 100,
|
||||
'mac': '08:00:27:24:BD:6D',
|
||||
'max_speed': 100,
|
||||
'state': 'unknown'},
|
||||
|
||||
{"name": "eth0",
|
||||
"current_speed": 100,
|
||||
"mac": "08:00:27:C1:C5:72",
|
||||
"max_speed": 100,
|
||||
"state": "unknown"}],
|
||||
"memory": {"total": memory_b or 1968627712},
|
||||
{'name': 'eth0',
|
||||
'current_speed': 100,
|
||||
'mac': '08:00:27:C1:C5:72',
|
||||
'max_speed': 100,
|
||||
'state': 'unknown'}],
|
||||
'memory': {'total': memory_b or 1968627712},
|
||||
|
||||
"system": {"family": "Virtual Machine",
|
||||
"fqdn": host_name,
|
||||
"manufacturer": "VirtualBox",
|
||||
"serial": "0",
|
||||
"version": "1.2"}},
|
||||
"network_data": [{"brd": "192.168.0.255",
|
||||
"dev": "eth0",
|
||||
"gateway": None,
|
||||
"ip": "192.168.0.2/24",
|
||||
"name": "management",
|
||||
"netmask": "255.255.255.0",
|
||||
"vlan": 101},
|
||||
'system': {'family': 'Virtual Machine',
|
||||
'fqdn': host_name,
|
||||
'manufacturer': 'VirtualBox',
|
||||
'serial': '0',
|
||||
'version': '1.2'}},
|
||||
'network_data': [{'brd': '192.168.0.255',
|
||||
'dev': 'eth0',
|
||||
'gateway': None,
|
||||
'ip': '192.168.0.2/24',
|
||||
'name': 'management',
|
||||
'netmask': '255.255.255.0',
|
||||
'vlan': 101},
|
||||
|
||||
{"brd": "192.168.1.255",
|
||||
"dev": "eth0",
|
||||
"gateway": None,
|
||||
"ip": "192.168.1.2/24",
|
||||
"name": "storage",
|
||||
"netmask": "255.255.255.0",
|
||||
"vlan": 102},
|
||||
{'brd': '192.168.1.255',
|
||||
'dev': 'eth0',
|
||||
'gateway': None,
|
||||
'ip': '192.168.1.2/24',
|
||||
'name': 'storage',
|
||||
'netmask': '255.255.255.0',
|
||||
'vlan': 102},
|
||||
|
||||
{"brd": "172.16.0.255",
|
||||
"dev": "eth1",
|
||||
"gateway": "172.16.0.1",
|
||||
"ip": "172.16.0.3/24",
|
||||
"name": "public",
|
||||
"netmask": "255.255.255.0",
|
||||
"vlan": None},
|
||||
{'brd': '172.16.0.255',
|
||||
'dev': 'eth1',
|
||||
'gateway': '172.16.0.1',
|
||||
'ip': '172.16.0.3/24',
|
||||
'name': 'public',
|
||||
'netmask': '255.255.255.0',
|
||||
'vlan': None},
|
||||
|
||||
{"dev": "eth0",
|
||||
"name": "admin"}]}
|
||||
{'dev': 'eth0',
|
||||
'name': 'admin'}]}
|
||||
|
||||
31
fuelclient/tests/utils/fake_task.py
Normal file
31
fuelclient/tests/utils/fake_task.py
Normal file
@@ -0,0 +1,31 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright 2015 Mirantis, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
def get_fake_task(task_id=None, status=None, name=None,
|
||||
cluster=None, result=None, progress=None):
|
||||
"""Create a fake task
|
||||
|
||||
Returns the serialized and parametrized representation of a dumped Fuel
|
||||
Task. Represents the average amount of data.
|
||||
|
||||
"""
|
||||
return {'status': status or 'running',
|
||||
'name': name or 'deploy',
|
||||
'task_id': task_id or 42,
|
||||
'cluster': cluster or 34,
|
||||
'result': result or '',
|
||||
'progress': progress or 50}
|
||||
@@ -18,6 +18,7 @@ import cStringIO
|
||||
|
||||
import mock
|
||||
|
||||
from fuelclient.tests.utils import fake_env
|
||||
from fuelclient.tests.v2.unit.cli import test_engine
|
||||
from fuelclient.v1 import environment
|
||||
|
||||
@@ -25,6 +26,15 @@ from fuelclient.v1 import environment
|
||||
class TestEnvCommand(test_engine.BaseCLITest):
|
||||
"""Tests for fuel2 env * commands."""
|
||||
|
||||
def setUp(self):
|
||||
super(TestEnvCommand, self).setUp()
|
||||
|
||||
self.m_client.get_all.return_value = [fake_env.get_fake_env()
|
||||
for i in range(10)]
|
||||
self.m_client.get_by_id.return_value = fake_env.get_fake_env()
|
||||
self.m_client.create.return_value = fake_env.get_fake_env()
|
||||
self.m_client.update.return_value = fake_env.get_fake_env()
|
||||
|
||||
def test_env_list(self):
|
||||
args = 'env list'
|
||||
self.exec_command(args)
|
||||
@@ -70,10 +80,9 @@ class TestEnvCommand(test_engine.BaseCLITest):
|
||||
|
||||
def test_env_delete_wo_force(self):
|
||||
args = 'env delete 42'
|
||||
fake_env = mock.Mock()
|
||||
fake_env.status = 'operational'
|
||||
|
||||
self.m_client.get_by_id.return_value = fake_env
|
||||
env = fake_env.get_fake_env(status='operational')
|
||||
self.m_client.get_by_id.return_value = env
|
||||
|
||||
with mock.patch('sys.stdout', new=cStringIO.StringIO()) as m_stdout:
|
||||
self.exec_command(args)
|
||||
|
||||
@@ -16,12 +16,20 @@
|
||||
|
||||
import mock
|
||||
|
||||
from fuelclient.tests.utils import fake_node
|
||||
from fuelclient.tests.v2.unit.cli import test_engine
|
||||
|
||||
|
||||
class TestNodeCommand(test_engine.BaseCLITest):
|
||||
"""Tests for fuel2 node * commands."""
|
||||
|
||||
def setUp(self):
|
||||
super(TestNodeCommand, self).setUp()
|
||||
|
||||
self.m_client.get_all.return_value = [fake_node.get_fake_node()
|
||||
for i in range(10)]
|
||||
self.m_client.get_by_id.return_value = fake_node.get_fake_node()
|
||||
|
||||
def test_node_list(self):
|
||||
args = 'node list'
|
||||
self.exec_command(args)
|
||||
|
||||
@@ -16,11 +16,19 @@
|
||||
|
||||
import mock
|
||||
|
||||
from fuelclient.tests.utils import fake_task
|
||||
from fuelclient.tests.v2.unit.cli import test_engine
|
||||
|
||||
|
||||
class TestTaskCommand(test_engine.BaseCLITest):
|
||||
|
||||
def setUp(self):
|
||||
super(TestTaskCommand, self).setUp()
|
||||
|
||||
self.m_client.get_all.return_value = [fake_task.get_fake_task()
|
||||
for i in range(10)]
|
||||
self.m_client.get_by_id.return_value = fake_task.get_fake_task()
|
||||
|
||||
def test_task_list(self):
|
||||
args = 'task list'
|
||||
self.exec_command(args)
|
||||
|
||||
Reference in New Issue
Block a user