Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated openshift orchestration to cluster paradigm #63

Merged
merged 1 commit into from
Feb 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 38 additions & 59 deletions esiclient/tests/unit/v1/cluster/test_cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from esiclient.tests.unit import base
from esiclient.tests.unit import utils
from esiclient.v1.cluster import cluster
from esiclient.v1.cluster import utils as cluster_utils


class TestList(base.TestCommand):
Expand Down Expand Up @@ -167,6 +168,9 @@ def mock_find_network(name):
self.app.client_manager.network.find_port.return_value = self.port1
self.app.client_manager.image.find_image.return_value = self.image

@mock.patch(
'esiclient.v1.cluster.utils.set_node_cluster_info',
autospec=True)
@mock.patch(
'esiclient.utils.get_floating_ip',
autospec=True)
Expand All @@ -192,7 +196,7 @@ def mock_find_network(name):
@mock.patch('json.load', autospec=True)
def test_take_action(self, mock_load, mock_uuid, mock_ct, mock_gocp,
mock_pnwi, mock_bnfu, mock_goapfi, mock_gfnifp,
mock_gfi):
mock_gfi, mock_snci):
mock_load.return_value = {
"node_configs": [
{
Expand Down Expand Up @@ -276,21 +280,23 @@ def test_take_action(self, mock_load, mock_uuid, mock_ct, mock_gocp,
)
assert mock_gfnifp.call_count == 3
assert mock_gfi.call_count == 3
self.app.client_manager.baremetal.node.update.assert_has_calls([
call('node_uuid_1', [{'path': '/extra/esi_cluster_uuid',
'value': 'cluster-uuid', 'op': 'add'},
{'path': '/extra/esi_port_uuid',
'value': 'port_uuid_1', 'op': 'add'},
{'path': '/extra/esi_fip_uuid',
'value': 'fip_uuid_1', 'op': 'add'}]),
call('node_uuid_2', [{'path': '/extra/esi_cluster_uuid',
'value': 'cluster-uuid', 'op': 'add'},
{'path': '/extra/esi_port_uuid', 'value':
'port_uuid_2', 'op': 'add'}]),
call('node_uuid_3', [{'path': '/extra/esi_cluster_uuid',
'value': 'cluster-uuid', 'op': 'add'},
{'path': '/extra/esi_port_uuid',
'value': 'port_uuid_3', 'op': 'add'}])
mock_snci.assert_has_calls([
call(self.app.client_manager.baremetal, 'node_uuid_1',
{
cluster_utils.ESI_CLUSTER_UUID: 'cluster-uuid',
cluster_utils.ESI_PORT_UUID: 'port_uuid_1',
cluster_utils.ESI_FIP_UUID: 'fip_uuid_1'
}),
call(self.app.client_manager.baremetal, 'node_uuid_2',
{
cluster_utils.ESI_CLUSTER_UUID: 'cluster-uuid',
cluster_utils.ESI_PORT_UUID: 'port_uuid_2',
}),
call(self.app.client_manager.baremetal, 'node_uuid_3',
{
cluster_utils.ESI_CLUSTER_UUID: 'cluster-uuid',
cluster_utils.ESI_PORT_UUID: 'port_uuid_3',
}),
])

@mock.patch('json.load', autospec=True)
Expand Down Expand Up @@ -335,7 +341,7 @@ def test_take_action_insufficient_nodes(self, mock_load):

with patch("builtins.open"):
self.assertRaisesRegex(
cluster.ESIOrchestrationException,
cluster_utils.ESIOrchestrationException,
"Cannot find 3 free baremetal nodes",
self.cmd.take_action,
parsed_args)
Expand Down Expand Up @@ -387,7 +393,7 @@ def test_take_action_unavailable_node(self, mock_load):

with patch("builtins.open"):
self.assertRaisesRegex(
cluster.ESIOrchestrationException,
cluster_utils.ESIOrchestrationException,
"node5 is not an available node",
self.cmd.take_action,
parsed_args)
Expand Down Expand Up @@ -439,7 +445,7 @@ def test_take_action_no_network(self, mock_load):

with patch("builtins.open"):
self.assertRaisesRegex(
cluster.ESIOrchestrationException,
cluster_utils.ESIOrchestrationException,
"Must specify a network",
self.cmd.take_action,
parsed_args)
Expand Down Expand Up @@ -491,7 +497,7 @@ def test_take_action_invalid_provisioning_type(self, mock_load):

with patch("builtins.open"):
self.assertRaisesRegex(
cluster.ESIOrchestrationException,
cluster_utils.ESIOrchestrationException,
"Unknown provisioning method",
self.cmd.take_action,
parsed_args)
Expand Down Expand Up @@ -547,20 +553,14 @@ def setUp(self):
"name": "node5",
"extra": {}
})
self.trunk = utils.create_mock_object({
"id": "trunk_uuid_1",
"name": "trunk",
})

self.app.client_manager.baremetal.node.list.return_value = [
self.node1, self.node2, self.node3, self.node4]
self.app.client_manager.network.find_trunk.return_value = \
self.trunk

@mock.patch(
'esiclient.utils.delete_trunk',
'esiclient.v1.cluster.utils.clean_cluster_node',
autospec=True)
def test_take_action(self, mock_dt):
def test_take_action(self, mock_ccn):
arglist = ['cluster-uuid-1']
verifylist = []

Expand All @@ -571,35 +571,14 @@ def test_take_action(self, mock_dt):
self.app.client_manager.baremetal.node.list.assert_called_once_with(
fields=["uuid", "name", "extra"],
)
self.app.client_manager.baremetal.node.set_provision_state.\
assert_has_calls([
call('node_uuid_1', 'deleted'),
call('node_uuid_2', 'deleted'),
call('node_uuid_3', 'deleted')
])
self.app.client_manager.network.find_trunk.\
assert_called_once_with('trunk-uuid-1')
mock_dt.assert_called_once_with(
self.app.client_manager.network, self.trunk)
self.app.client_manager.network.delete_port.assert_has_calls([
call('port-uuid-2'),
call('port-uuid-3')
])
self.app.client_manager.network.delete_ip.assert_called_once_with(
'fip-uuid-1'
)
self.app.client_manager.baremetal.node.update.assert_has_calls([
call('node_uuid_1', [
{'path': '/extra/esi_cluster_uuid', 'op': 'remove'},
{'path': '/extra/esi_trunk_uuid', 'op': 'remove'},
{'path': '/extra/esi_fip_uuid', 'op': 'remove'}
]),
call('node_uuid_2', [
{'path': '/extra/esi_cluster_uuid', 'op': 'remove'},
{'path': '/extra/esi_port_uuid', 'op': 'remove'}
]),
call('node_uuid_3', [
{'path': '/extra/esi_cluster_uuid', 'op': 'remove'},
{'path': '/extra/esi_port_uuid', 'op': 'remove'}
])
mock_ccn.assert_has_calls([
call(self.app.client_manager.baremetal,
self.app.client_manager.network,
self.node1),
call(self.app.client_manager.baremetal,
self.app.client_manager.network,
self.node2),
call(self.app.client_manager.baremetal,
self.app.client_manager.network,
self.node3),
])
145 changes: 76 additions & 69 deletions esiclient/tests/unit/v1/cluster/test_openshift.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from esiclient.tests.unit import base
from esiclient.tests.unit import utils
from esiclient.v1.cluster import openshift
from esiclient.v1.cluster import utils as cluster_utils


class MockResponse:
Expand Down Expand Up @@ -305,6 +306,9 @@ def mock_find_port(uuid):
"floating_ip_address": "4.4.4.4"
})

@mock.patch(
'esiclient.v1.cluster.utils.set_node_cluster_info',
autospec=True)
@mock.patch(
'esiclient.utils.get_or_assign_port_floating_ip',
autospec=True)
Expand All @@ -330,7 +334,7 @@ def mock_find_port(uuid):
"API_TOKEN": "api-token"})
def test_take_action(self, mock_load, mock_loads, mock_sleep, mock_caia,
mock_wfn, mock_bnfu, mock_gocp, mock_gocpbi,
mock_goapfi):
mock_goapfi, mock_snci):
mock_load.return_value = {
"cluster_name": "test_cluster",
"api_vip": "1.1.1.1",
Expand Down Expand Up @@ -398,8 +402,6 @@ def test_take_action(self, mock_load, mock_loads, mock_sleep, mock_caia,
'openshift_version': '1',
'high_availability_mode': 'Full',
'base_dns_domain': "foo.bar",
'api_vip': '1.1.1.1',
'ingress_vip': '2.2.2.2',
'ssh_public_key': "ssh-public-key",
'pull_secret': 'pull_secret_value'
}),
Expand All @@ -422,7 +424,17 @@ def test_take_action(self, mock_load, mock_loads, mock_sleep, mock_caia,
call("clusters/%s/" % self.cluster_id, 'get', headers),
# set machine network cidr
call("clusters/%s" % self.cluster_id, 'patch', headers,
{'machine_network_cidr': self.private_subnet.cidr}),
{
'machine_network_cidr': self.private_subnet.cidr,
'api_vips': [{
'cluster_id': self.cluster_id,
'ip': '1.1.1.1'
}],
'ingress_vips': [{
'cluster_id': self.cluster_id,
'ip': '2.2.2.2'
}]
}),
# start installing
call("clusters/%s/actions/install" % self.cluster_id, 'post',
headers),
Expand Down Expand Up @@ -470,6 +482,23 @@ def test_take_action(self, mock_load, mock_loads, mock_sleep, mock_caia,
self.app.client_manager.network),
])
self.assertEqual(expected, results)
mock_snci.assert_has_calls([
call(self.app.client_manager.baremetal, 'node1',
{
cluster_utils.ESI_CLUSTER_UUID: 'cluster-id',
cluster_utils.ESI_PORT_UUID: 'private_port_uuid_1',
}),
call(self.app.client_manager.baremetal, 'node2',
{
cluster_utils.ESI_CLUSTER_UUID: 'cluster-id',
cluster_utils.ESI_PORT_UUID: 'private_port_uuid_2',
}),
call(self.app.client_manager.baremetal, 'node3',
{
cluster_utils.ESI_CLUSTER_UUID: 'cluster-id',
cluster_utils.ESI_PORT_UUID: 'private_port_uuid_3',
}),
])

@mock.patch('json.load', autospec=True)
@mock.patch.dict(os.environ, {"PULL_SECRET": "pull_secret_file",
Expand All @@ -495,7 +524,7 @@ def test_take_action_missing_fields(self, mock_load):

with patch("builtins.open"):
self.assertRaisesRegex(
openshift.OrchestrationException,
cluster_utils.ESIOrchestrationException,
'Please specify these missing values',
self.cmd.take_action, parsed_args)

Expand Down Expand Up @@ -523,7 +552,7 @@ def test_take_action_missing_pull_secret(self, mock_load):

with patch("builtins.open"):
self.assertRaisesRegex(
openshift.OrchestrationException,
cluster_utils.ESIOrchestrationException,
'Please export PULL_SECRET',
self.cmd.take_action, parsed_args)

Expand All @@ -534,48 +563,6 @@ def setUp(self):
super(TestUndeploy, self).setUp()
self.cmd = openshift.Undeploy(self.app, None)

self.provisioning_port1 = utils.create_mock_object({
"id": "provisioning_port_uuid_1",
"network_id": "network_uuid_2",
})
self.provisioning_port2 = utils.create_mock_object({
"id": "provisioning_port_uuid_2",
"network_id": "network_uuid_2",
})
self.provisioning_port3 = utils.create_mock_object({
"id": "provisioning_port_uuid_3",
"network_id": "network_uuid_2",
})
self.private_port1 = utils.create_mock_object({
"id": "private_port_uuid_1",
"network_id": "network_uuid_1",
})
self.private_port2 = utils.create_mock_object({
"id": "private_port_uuid_2",
"network_id": "network_uuid_1",
})
self.private_port3 = utils.create_mock_object({
"id": "private_port_uuid_3",
"network_id": "network_uuid_1",
})

def mock_find_port(uuid):
if uuid == "esi-node1-provisioning_network":
return self.provisioning_port1
if uuid == "esi-node2-provisioning_network":
return self.provisioning_port2
if uuid == "esi-node3-provisioning_network":
return self.provisioning_port3
if uuid == "esi-node1-private_network":
return self.private_port1
if uuid == "esi-node2-private_network":
return self.private_port2
if uuid == "esi-node3-private_network":
return self.private_port3
return None
self.app.client_manager.network.find_port.\
side_effect = mock_find_port

self.api_port = utils.create_mock_object({
"id": "api_port_uuid_1",
"network_id": "network_uuid_1",
Expand Down Expand Up @@ -616,15 +603,38 @@ def mock_ips(fixed_ip_address=None):
self.app.client_manager.network.delete_ip.\
return_value = None

self.app.client_manager.baremetal.node.set_provision_state.\
return_value = None
self.node1 = utils.create_mock_object({
"uuid": "node_uuid_1",
"name": "node1",
})
self.node2 = utils.create_mock_object({
"uuid": "node_uuid_2",
"name": "node2",
})
self.node3 = utils.create_mock_object({
"uuid": "node_uuid_3",
"name": "node3",
})

@mock.patch('time.sleep', autospec=True)
def mock_get_node(name):
if name == "node1":
return self.node1
if name == "node2":
return self.node2
if name == "node3":
return self.node3
return None
self.app.client_manager.baremetal.node.get.\
side_effect = mock_get_node

@mock.patch(
'esiclient.v1.cluster.utils.clean_cluster_node',
autospec=True)
@mock.patch('json.loads', autospec=True)
@mock.patch('json.load', autospec=True)
@mock.patch.dict(os.environ, {"PULL_SECRET": "pull_secret_file",
"API_TOKEN": "api-token"})
def test_take_action(self, mock_load, mock_loads, mock_sleep):
def test_take_action(self, mock_load, mock_loads, mock_ccn):
mock_load.return_value = {
"cluster_name": "test_cluster",
"api_vip": "1.1.1.1",
Expand Down Expand Up @@ -663,24 +673,21 @@ def test_take_action(self, mock_load, mock_loads, mock_sleep):
self.app.client_manager.network.delete_port.assert_has_calls([
call('api_port_uuid_1'),
call('apps_port_uuid_1'),
call('provisioning_port_uuid_1'),
call('private_port_uuid_1'),
call('provisioning_port_uuid_2'),
call('private_port_uuid_2'),
call('provisioning_port_uuid_3'),
call('private_port_uuid_3')
])
self.app.client_manager.baremetal.node.set_provision_state.\
self.app.client_manager.baremetal.node.get.\
assert_has_calls([
call('node1', 'deleted'),
call('node2', 'deleted'),
call('node3', 'deleted')
call('node1'),
call('node2'),
call('node3')
])
self.app.client_manager.network.find_port.assert_has_calls([
call('esi-node1-provisioning_network'),
call('esi-node1-private_network'),
call('esi-node2-provisioning_network'),
call('esi-node2-private_network'),
call('esi-node3-provisioning_network'),
call('esi-node3-private_network')
mock_ccn.assert_has_calls([
call(self.app.client_manager.baremetal,
self.app.client_manager.network,
self.node1),
call(self.app.client_manager.baremetal,
self.app.client_manager.network,
self.node2),
call(self.app.client_manager.baremetal,
self.app.client_manager.network,
self.node3),
])
Loading
Loading