-
Notifications
You must be signed in to change notification settings - Fork 1
/
conftest.py
142 lines (107 loc) · 4.13 KB
/
conftest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
"""Pytest setup"""
import asyncio
from pathlib import Path
import pytest
import requests
from ruamel.yaml import YAML
from pyfortinet import FMG, FMGSettings, FMGBase, AsyncFMGBase, AsyncFMG
from pyfortinet.exceptions import FMGConfigurationException
def pytest_addoption(parser):
"""Pytest options"""
parser.addoption("--lab_config", action="store", default="lab-config.yml")
def pytest_configure(config):
"""Pytest configuration"""
pytest.lab_config_file = Path(config.getoption("--lab_config"))
pytest.lab_config = {}
if pytest.lab_config_file.is_file():
yaml = YAML(typ="safe", pure=True)
lab_config = yaml.load(pytest.lab_config_file)
pytest.lab_config = lab_config
@pytest.fixture
def prepare_lab():
"""Prepare global lab settings"""
# disable SSL warnings for testing
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
@pytest.fixture(scope="class")
def fmg_base(request):
# Create FMGBase object
try:
fmg = FMGBase(FMGSettings(**pytest.lab_config.get("fmg")))
except AttributeError as err:
raise FMGConfigurationException("FMG settings are missing") from err
# Create connection to FMG
fmg.open()
# Give FMG object to test object
yield fmg
# Logout and close connection to FMG
fmg.close(discard_changes=True)
@pytest.fixture(scope="class")
def fmg(request):
# Create FMG object
try:
fmg = FMG(FMGSettings(**pytest.lab_config.get("fmg")))
except AttributeError as err:
raise FMGConfigurationException("FMG settings are missing") from err
# Create connection to FMG
fmg.open()
# Give FMG object to test object
yield fmg
# Logout and close connection to FMG
fmg.close(discard_changes=True)
class AsyncTestCase:
"""Base class for async test cases."""
@pytest.fixture(scope="session")
def event_loop(self):
"""Override default event loop
This fixture overrides event_loop for the class and allows to run everything in a single loop. We get context
manager errors otherwise.
"""
# give some time for previous test to correctly logout and clean up
asyncio.sleep(2)
loop = asyncio.get_event_loop()
yield loop
loop.close()
@pytest.fixture(autouse=True, scope="class")
async def fmg_base(self):
"""Create and use a single FMG instance during all class tests.
In order to use this fixture, you need to inherit this class and specify ``fmg`` as argument for each test
method.
Examples:
class TestAsyncStuff(AsyncTestCase):
async def test_something(self, fmg_base):
assert fmg_base.adom
...
"""
# Create AsyncFMG object
try:
fmg_base = AsyncFMGBase(FMGSettings(**pytest.lab_config.get("fmg")))
except AttributeError as err:
raise FMGConfigurationException("FMG settings are missing") from err
# Create connection to FMG
await fmg_base.open()
# Give FMG object to test object
yield fmg_base
# Logout and close connection to FMG
await fmg_base.close(discard_changes=True)
@pytest.fixture(autouse=True, scope="class")
async def fmg(self):
"""Create and use a single FMG instance during all class tests.
In order to use this fixture, you need to inherit this class and specify ``fmg`` as argument for each test
method.
Examples:
class TestAsyncStuff(AsyncTestCase):
async def test_something(self, fmg):
assert fmg.adom
...
"""
# Create AsyncFMG object
try:
fmg = AsyncFMG(FMGSettings(**pytest.lab_config.get("fmg")))
except AttributeError as err:
raise FMGConfigurationException("FMG settings are missing") from err
# Create connection to FMG
await fmg.open()
# Give FMG object to test object
yield fmg
# Logout and close connection to FMG
await fmg.close(discard_changes=True)