import json import demistomock as demisto from SkyhighSecureWebGatewayOnPrem import Client client = Client( username="user", password="password", base_url="base_url", verify=False, headers={"Content-Type": "application/mwg+xml"}, proxy=False, ) def util_load_file(path): with open(path, encoding="utf-8") as f: return f.read() def test_get_lists_command(mocker): """ Given - valid arguments for get lists command When - running get_lists_command in XSOAR Then - the expected human readable and entry context are returned """ from SkyhighSecureWebGatewayOnPrem import get_lists_command args = {"name": "blocklist"} raw_response = util_load_file("test_data/get_lists/raw_response.xml") expected_results = json.loads(util_load_file("test_data/get_lists/parsed_result.json")) mocker.patch.object(client, "get_lists", return_value=raw_response) command_result = get_lists_command(client, args) assert expected_results["EntryContext"] == command_result.to_context().get("EntryContext") assert expected_results["HumanReadable"] == command_result.to_context().get("HumanReadable") def test_get_list(mocker): """ Given - valid arguments for get list command When - running get_list_command in XSOAR Then - the expected human readable and entry context are returned """ from SkyhighSecureWebGatewayOnPrem import get_list_command args = {"list_id": "com.scur.type.regex.386"} raw_response = util_load_file("test_data/get_list/raw_response.xml") expected_results = json.loads(util_load_file("test_data/get_list/parsed_result.json")) mocker.patch.object(client, "get_list", return_value=raw_response) command_result = get_list_command(client, args) assert expected_results["EntryContext"] == command_result.to_context().get("EntryContext") assert expected_results["HumanReadable"] == command_result.to_context().get("HumanReadable") def test_get_list_entry(mocker): """ Given - valid arguments for get list entry command When - running get_list_entry_command in XSOAR Then - the expected human readable and entry context are returned """ from SkyhighSecureWebGatewayOnPrem import get_list_entry_command args = {"list_id": "com.scur.type.regex.386", "entry_pos": "0"} raw_response = util_load_file("test_data/get_list_entry/raw_response.xml") expected_results = json.loads(util_load_file("test_data/get_list_entry/parsed_result.json")) mocker.patch.object(client, "get_list_entry", return_value=raw_response) command_result = get_list_entry_command(client, args) assert expected_results["EntryContext"] == command_result.to_context().get("EntryContext") assert expected_results["HumanReadable"] == command_result.to_context().get("HumanReadable") def test_insert_entry(mocker): """ Given - valid arguments for insert entry command When - running insert_entry_command in XSOAR Then - the expected human readable and entry context are returned """ from SkyhighSecureWebGatewayOnPrem import insert_entry_command args = { "list_id": "com.scur.type.regex.386", "entry_pos": "0", "name": "http*://evil.corp/*", "description": "ticket #1: This is an evil domain", } raw_response = util_load_file("test_data/insert_entry/raw_response.xml") expected_results = json.loads(util_load_file("test_data/insert_entry/parsed_result.json")) mocker.patch.object(client, "insert_entry", return_value=raw_response) mocker.patch.object(client, "commit", return_value=True) command_result = insert_entry_command(client, args) assert expected_results["EntryContext"] == command_result.to_context().get("EntryContext") assert expected_results["HumanReadable"] == command_result.to_context().get("HumanReadable") def test_delete_entry(mocker): """ Given - valid arguments for delete entry command When - running delete_entry_command in XSOAR Then - the expected human readable is returned """ from SkyhighSecureWebGatewayOnPrem import delete_entry_command args = {"list_id": "com.scur.type.regex.386", "entry_pos": "0"} raw_response = util_load_file("test_data/delete_entry/raw_response.xml") expected_results = json.loads(util_load_file("test_data/delete_entry/parsed_result.json")) mocker.patch.object(client, "delete_entry", return_value=raw_response) mocker.patch.object(client, "commit", return_value=True) command_result = delete_entry_command(client, args) assert expected_results["HumanReadable"] == command_result.to_context().get("HumanReadable") def test_modify_list(mocker): """ Given - valid arguments for modify list command When - running modify_list_command in XSOAR Then - the expected human readable and entry context are returned """ from SkyhighSecureWebGatewayOnPrem import modify_list_command args = { "list_id": "com.scur.type.regex.386", "config": "blocklisthttp*://evil.corp/*" + "ticket #1: This is an evil domain", } raw_response = util_load_file("test_data/modify_list/raw_response.xml") expected_results = json.loads(util_load_file("test_data/modify_list/parsed_result.json")) mocker.patch.object(client, "put_list", return_value=raw_response) mocker.patch.object(client, "commit", return_value=True) command_result = modify_list_command(client, args) assert expected_results["EntryContext"] == command_result.to_context().get("EntryContext") assert expected_results["HumanReadable"] == command_result.to_context().get("HumanReadable") def test_create_list(mocker): """ Given - valid arguments for create list command When - running create_list_command in XSOAR Then - the expected human readable and entry context are returned """ from SkyhighSecureWebGatewayOnPrem import create_list_command args = {"name": "blocklist", "type": "regex"} raw_response = util_load_file("test_data/create_list/raw_response.xml") expected_results = json.loads(util_load_file("test_data/create_list/parsed_result.json")) mocker.patch.object(client, "create_list", return_value=raw_response) mocker.patch.object(client, "commit", return_value=True) command_result = create_list_command(client, args) assert expected_results["EntryContext"] == command_result.to_context().get("EntryContext") assert expected_results["HumanReadable"] == command_result.to_context().get("HumanReadable") def test_delete_list(mocker): """ Given - valid arguments for delete list command When - running delete_list_command in XSOAR Then - the expected human readable and entry context are returned """ from SkyhighSecureWebGatewayOnPrem import delete_list_command args = {"list_id": "com.scur.type.regex.460"} raw_response = util_load_file("test_data/delete_list/raw_response.xml") json.loads(util_load_file("test_data/delete_list/parsed_result.json")) mocker.patch.object(client, "delete_list", return_value=raw_response) mocker.patch.object(client, "commit", return_value=True) delete_list_command(client, args) def test_insert_entry_command_new_list(mocker): """ Given - valid arguments for insert entry command - list does not exist in context data When - running insert_entry_command function Then - the expected entry context is returned with new list format """ from SkyhighSecureWebGatewayOnPrem import insert_entry_command mock_args = { "list_id": "com.scur.type.regex.999", "entry_pos": "0", "name": "http*://new.evil.com/*", "description": "New evil domain", } mock_raw_response = ( "Added Entryhttp*://new.evil.com/*" "New evil domain" ) mocker.patch.object(client, "insert_entry", return_value=mock_raw_response) mocker.patch.object(client, "commit", return_value=True) mocker.patch.object(demisto, "context", return_value={}) mock_command_result = insert_entry_command(client, mock_args) assert mock_command_result.outputs_prefix == "SWG.List" assert mock_command_result.outputs_key_field == "ID" assert mock_command_result.outputs == { "ID": "com.scur.type.regex.999", "ListEntries": [ { "ListID": "com.scur.type.regex.999", "Position": "0", "Name": "http*://new.evil.com/*", "Description": "New evil domain", } ], } def test_insert_entry_command_existing_list(mocker): """ Given - valid arguments for insert entry command - list with the same ID already exists in context data When - running insert_entry_command function Then - the expected entry context is returned with existing list format """ from SkyhighSecureWebGatewayOnPrem import insert_entry_command mock_args = { "list_id": "com.scur.type.regex.386", "entry_pos": "1", "name": "http*://another.evil.com/*", "description": "Another evil domain", } mock_raw_response = ( "Added Entryhttp*://another.evil.com/*" "Another evil domain" ) mocker.patch.object(client, "insert_entry", return_value=mock_raw_response) mocker.patch.object(client, "commit", return_value=True) mocker.patch.object(demisto, "context", return_value={"SWG": {"List": {"ID": "com.scur.type.regex.386"}}}) command_result = insert_entry_command(client, mock_args) assert command_result.outputs_prefix == 'SWG.List(val.ID && val.ID == "com.scur.type.regex.386").ListEntries' assert command_result.outputs_key_field == "Name" assert command_result.outputs == { "ListID": "com.scur.type.regex.386", "Position": "1", "Name": "http*://another.evil.com/*", "Description": "Another evil domain", } def test_insert_entry_command_multiple_existing_lists(mocker): """ Given - valid arguments for insert entry command - multiple lists already exists in context data When - running insert_entry_command function Then - the expected entry context is returned with existing list format """ from SkyhighSecureWebGatewayOnPrem import insert_entry_command args = { "list_id": "com.scur.type.regex.777", "entry_pos": "0", "name": "http*://multiple.lists.com/*", "description": "Entry for multiple lists test", } raw_response = ( "Added Entryhttp*://multiple.lists.com/*" "Entry for multiple lists test" ) mocker.patch.object(client, "insert_entry", return_value=raw_response) mocker.patch.object(client, "commit", return_value=True) mocker.patch.object( demisto, "context", return_value={"SWG": {"List": [{"ID": "com.scur.type.regex.111"}, {"ID": "com.scur.type.regex.222"}]}} ) command_result = insert_entry_command(client, args) assert command_result.outputs_prefix == "SWG.List" assert command_result.outputs_key_field == "ID" assert command_result.outputs["ID"] == "com.scur.type.regex.777"