diff --git a/awx/network_ui/consumers.py b/awx/network_ui/consumers.py index bd5dd90994..d07b68b729 100644 --- a/awx/network_ui/consumers.py +++ b/awx/network_ui/consumers.py @@ -225,11 +225,13 @@ def ws_connect(message): message.user.id, inventory_id) ) message.reply_channel.send({"close": True}) + return if message.user not in inventory.admin_role: logger.warn("User {} attempted connecting to inventory_id {} without permission.".format( message.user.id, inventory_id )) message.reply_channel.send({"close": True}) + return topology_ids = list(TopologyInventory.objects.filter(inventory_id=inventory_id).values_list('pk', flat=True)) topology_id = None if len(topology_ids) > 0: diff --git a/awx/network_ui/tests/unit/__init__.py b/awx/network_ui/tests/functional/__init__.py similarity index 100% rename from awx/network_ui/tests/unit/__init__.py rename to awx/network_ui/tests/functional/__init__.py diff --git a/awx/network_ui/tests/unit/test_consumers.py b/awx/network_ui/tests/functional/test_consumers.py similarity index 94% rename from awx/network_ui/tests/unit/test_consumers.py rename to awx/network_ui/tests/functional/test_consumers.py index de5c79e105..f5d3d36173 100644 --- a/awx/network_ui/tests/unit/test_consumers.py +++ b/awx/network_ui/tests/functional/test_consumers.py @@ -1,4 +1,3 @@ - import mock import logging import json @@ -7,6 +6,7 @@ from mock import patch patch('channels.auth.channel_session_user', lambda x: x).start() patch('channels.auth.channel_session_user_from_http', lambda x: x).start() +from awx.main.models import Inventory # noqa from awx.network_ui.consumers import parse_inventory_id, networking_events_dispatcher, send_snapshot # noqa from awx.network_ui.models import Topology, Device, Link, Interface, TopologyInventory, Client # noqa import awx # noqa @@ -178,7 +178,8 @@ def test_ws_connect_unauthenticated(): def test_ws_connect_new_topology(): - message = mock.MagicMock() + mock_user = mock.Mock() + message = mock.MagicMock(user=mock_user) logger = logging.getLogger('awx.network_ui.consumers') with mock.patch('awx.network_ui.consumers.Client') as client_mock,\ mock.patch('awx.network_ui.consumers.Topology') as topology_mock,\ @@ -191,10 +192,12 @@ def test_ws_connect_new_topology(): mock.patch.object(Topology, 'objects'),\ mock.patch.object(Device, 'objects'),\ mock.patch.object(Link, 'objects'),\ - mock.patch.object(Interface, 'objects'): + mock.patch.object(Interface, 'objects'),\ + mock.patch.object(Inventory, 'objects') as inventory_objects: client_mock.return_value.pk = 777 topology_mock.return_value = Topology( name="topology", scale=1.0, panX=0, panY=0, pk=999) + inventory_objects.get.return_value = mock.Mock(admin_role=[mock_user]) awx.network_ui.consumers.ws_connect(message) message.reply_channel.send.assert_has_calls([ mock.call({'text': '["id", 777]'}), @@ -206,7 +209,8 @@ def test_ws_connect_new_topology(): def test_ws_connect_existing_topology(): - message = mock.MagicMock() + mock_user = mock.Mock() + message = mock.MagicMock(user=mock_user) logger = logging.getLogger('awx.network_ui.consumers') with mock.patch('awx.network_ui.consumers.Client') as client_mock,\ mock.patch('awx.network_ui.consumers.send_snapshot') as send_snapshot_mock,\ @@ -218,7 +222,8 @@ def test_ws_connect_existing_topology(): mock.patch.object(Topology, 'objects') as topology_objects_mock,\ mock.patch.object(Device, 'objects'),\ mock.patch.object(Link, 'objects'),\ - mock.patch.object(Interface, 'objects'): + mock.patch.object(Interface, 'objects'),\ + mock.patch.object(Inventory, 'objects') as inventory_objects: topology_inventory_objects_mock.filter.return_value.values_list.return_value = [ 1] client_mock.return_value.pk = 888 @@ -230,6 +235,7 @@ def test_ws_connect_existing_topology(): scale=1.0, link_id_seq=1, device_id_seq=1) + inventory_objects.get.return_value = mock.Mock(admin_role=[mock_user]) awx.network_ui.consumers.ws_connect(message) message.reply_channel.send.assert_has_calls([ mock.call({'text': '["id", 888]'}), diff --git a/awx/network_ui/tests/unit/test_models.py b/awx/network_ui/tests/functional/test_models.py similarity index 100% rename from awx/network_ui/tests/unit/test_models.py rename to awx/network_ui/tests/functional/test_models.py diff --git a/awx/network_ui/tests/unit/test_network_events.py b/awx/network_ui/tests/functional/test_network_events.py similarity index 100% rename from awx/network_ui/tests/unit/test_network_events.py rename to awx/network_ui/tests/functional/test_network_events.py diff --git a/awx/network_ui/tests/unit/test_routing.py b/awx/network_ui/tests/functional/test_routing.py similarity index 100% rename from awx/network_ui/tests/unit/test_routing.py rename to awx/network_ui/tests/functional/test_routing.py diff --git a/awx/network_ui/tests/unit/test_views.py b/awx/network_ui/tests/functional/test_views.py similarity index 100% rename from awx/network_ui/tests/unit/test_views.py rename to awx/network_ui/tests/functional/test_views.py diff --git a/tools/docker-compose/unit-tests/docker-compose-shippable.yml b/tools/docker-compose/unit-tests/docker-compose-shippable.yml index b314d6acdd..5485b2e415 100644 --- a/tools/docker-compose/unit-tests/docker-compose-shippable.yml +++ b/tools/docker-compose/unit-tests/docker-compose-shippable.yml @@ -8,7 +8,7 @@ services: image: gcr.io/ansible-tower-engineering/unit-test-runner:${GIT_BRANCH:-latest} environment: SWIG_FEATURES: "-cpperraswarn -includeall -I/usr/include/openssl" - TEST_DIRS: awx/main/tests/functional awx/main/tests/unit awx/conf/tests awx/sso/tests + TEST_DIRS: awx/main/tests/functional awx/main/tests/unit awx/conf/tests awx/sso/tests awx/network_ui/tests command: ["make test"] volumes: - /awx_devel:/awx_devel diff --git a/tools/docker-compose/unit-tests/docker-compose.yml b/tools/docker-compose/unit-tests/docker-compose.yml index 9c94cc3564..0f652e40d5 100644 --- a/tools/docker-compose/unit-tests/docker-compose.yml +++ b/tools/docker-compose/unit-tests/docker-compose.yml @@ -8,7 +8,7 @@ services: image: gcr.io/ansible-tower-engineering/unit-test-runner:${GIT_BRANCH:-latest} environment: SWIG_FEATURES: "-cpperraswarn -includeall -I/usr/include/openssl" - TEST_DIRS: awx/main/tests/functional awx/main/tests/unit awx/conf/tests awx/sso/tests + TEST_DIRS: awx/main/tests/functional awx/main/tests/unit awx/conf/tests awx/sso/tests awx/network_ui/tests command: ["make test_combined"] volumes: - ../../../:/awx_devel