import json
from subprocess import PIPE
from unittest.mock import MagicMock, call, patch
import demistomock as demisto
MOCK_DOMAIN = "test.com"
expected_entry_result = {
"Contents": "hosts_json_test",
"ContentsFormat": "json",
"EntryContext": {"Aquatone.discover": "hosts_json_test"},
"HumanReadable": "Output message",
"ReadableContentsFormat": "markdown",
"Type": 1,
}
expected_calls = [
call(["aquatone-discover", "--domain", "test.com"], stdout=PIPE, stderr=PIPE, encoding="utf-8"),
call().communicate(),
call(["cat", "/root/aquatone/test.com/hosts.json"], stdout=PIPE, stderr=PIPE, encoding="utf-8"),
call().communicate(),
]
def test_AquatoneDiscover(mocker):
"""
Given:
- A domain
When:
- running AquatoneDiscover command
Then:
- Ensure that Popen and demisto.results were called with the expected arguments
"""
from AquatoneDiscoverV2 import main
with patch("AquatoneDiscoverV2.Popen") as Popen:
proc = MagicMock()
Popen.return_value = proc
proc.communicate.return_value = ["Output message", "Error message"]
proc.returncode = 0
mocker.patch.object(demisto, "args", return_value={"domain": MOCK_DOMAIN})
mocker.patch.object(demisto, "results")
mocker.patch.object(json, "loads", return_value="hosts_json_test")
main()
assert Popen.mock_calls == expected_calls
assert Popen.call_count == 2
assert demisto.results.call_count == 1
results = demisto.results.call_args[0]
assert results[0] == expected_entry_result