baldertest 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- _balder/__init__.py +12 -0
- _balder/_version.py +34 -0
- _balder/balder_plugin.py +73 -0
- _balder/balder_session.py +341 -0
- _balder/balder_settings.py +15 -0
- _balder/cnnrelations/__init__.py +7 -0
- _balder/cnnrelations/and_connection_relation.py +176 -0
- _balder/cnnrelations/base_connection_relation.py +270 -0
- _balder/cnnrelations/or_connection_relation.py +65 -0
- _balder/collector.py +874 -0
- _balder/connection.py +863 -0
- _balder/connection_metadata.py +255 -0
- _balder/console/__init__.py +0 -0
- _balder/console/balder.py +58 -0
- _balder/controllers/__init__.py +12 -0
- _balder/controllers/base_device_controller.py +72 -0
- _balder/controllers/controller.py +29 -0
- _balder/controllers/device_controller.py +446 -0
- _balder/controllers/feature_controller.py +715 -0
- _balder/controllers/normal_scenario_setup_controller.py +402 -0
- _balder/controllers/scenario_controller.py +524 -0
- _balder/controllers/setup_controller.py +134 -0
- _balder/controllers/vdevice_controller.py +95 -0
- _balder/decorator_connect.py +104 -0
- _balder/decorator_covered_by.py +74 -0
- _balder/decorator_fixture.py +29 -0
- _balder/decorator_for_vdevice.py +118 -0
- _balder/decorator_gateway.py +34 -0
- _balder/decorator_insert_into_tree.py +52 -0
- _balder/decorator_parametrize.py +31 -0
- _balder/decorator_parametrize_by_feature.py +36 -0
- _balder/device.py +18 -0
- _balder/exceptions.py +182 -0
- _balder/executor/__init__.py +0 -0
- _balder/executor/basic_executable_executor.py +133 -0
- _balder/executor/basic_executor.py +205 -0
- _balder/executor/executor_tree.py +217 -0
- _balder/executor/parametrized_testcase_executor.py +52 -0
- _balder/executor/scenario_executor.py +169 -0
- _balder/executor/setup_executor.py +163 -0
- _balder/executor/testcase_executor.py +203 -0
- _balder/executor/unresolved_parametrized_testcase_executor.py +184 -0
- _balder/executor/variation_executor.py +882 -0
- _balder/exit_code.py +19 -0
- _balder/feature.py +74 -0
- _balder/feature_replacement_mapping.py +107 -0
- _balder/feature_vdevice_mapping.py +88 -0
- _balder/fixture_definition_scope.py +19 -0
- _balder/fixture_execution_level.py +22 -0
- _balder/fixture_manager.py +483 -0
- _balder/fixture_metadata.py +26 -0
- _balder/node_gateway.py +103 -0
- _balder/objects/__init__.py +0 -0
- _balder/objects/connections/__init__.py +0 -0
- _balder/objects/connections/osi_1_physical.py +116 -0
- _balder/objects/connections/osi_2_datalink.py +35 -0
- _balder/objects/connections/osi_3_network.py +47 -0
- _balder/objects/connections/osi_4_transport.py +40 -0
- _balder/objects/connections/osi_5_session.py +13 -0
- _balder/objects/connections/osi_6_presentation.py +13 -0
- _balder/objects/connections/osi_7_application.py +83 -0
- _balder/objects/devices/__init__.py +0 -0
- _balder/objects/devices/this_device.py +12 -0
- _balder/parametrization.py +75 -0
- _balder/plugin_manager.py +138 -0
- _balder/previous_executor_mark.py +23 -0
- _balder/routing_path.py +335 -0
- _balder/scenario.py +20 -0
- _balder/setup.py +18 -0
- _balder/solver.py +246 -0
- _balder/testresult.py +163 -0
- _balder/unmapped_vdevice.py +13 -0
- _balder/utils/__init__.py +0 -0
- _balder/utils/functions.py +103 -0
- _balder/utils/inner_device_managing_metaclass.py +14 -0
- _balder/utils/mixin_can_be_covered_by_executor.py +24 -0
- _balder/utils/typings.py +4 -0
- _balder/vdevice.py +9 -0
- balder/__init__.py +56 -0
- balder/connections.py +43 -0
- balder/devices.py +9 -0
- balder/exceptions.py +44 -0
- balder/parametrization.py +8 -0
- baldertest-0.1.0.dist-info/METADATA +356 -0
- baldertest-0.1.0.dist-info/RECORD +89 -0
- baldertest-0.1.0.dist-info/WHEEL +5 -0
- baldertest-0.1.0.dist-info/entry_points.txt +2 -0
- baldertest-0.1.0.dist-info/licenses/LICENSE +21 -0
- baldertest-0.1.0.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: baldertest
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: balder: reusable scenario based test framework
|
|
5
|
+
Home-page: https://docs.balder.dev
|
|
6
|
+
Author: Max Stahlschmidt and others
|
|
7
|
+
License: MIT
|
|
8
|
+
Project-URL: Source, https://github.com/balder-dev/balder
|
|
9
|
+
Project-URL: Tracker, https://github.com/balder-dev/balder/issues
|
|
10
|
+
Keywords: test,systemtest,reusable,scenario
|
|
11
|
+
Platform: unix
|
|
12
|
+
Platform: linux
|
|
13
|
+
Platform: osx
|
|
14
|
+
Platform: cygwin
|
|
15
|
+
Platform: win32
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
18
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
19
|
+
Classifier: Operating System :: POSIX
|
|
20
|
+
Classifier: Intended Audience :: Developers
|
|
21
|
+
Classifier: Programming Language :: Python :: 3
|
|
22
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
26
|
+
Classifier: Topic :: Software Development :: Testing
|
|
27
|
+
Classifier: Topic :: Utilities
|
|
28
|
+
Requires-Python: >=3.9
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Dynamic: license-file
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
<div align="center">
|
|
35
|
+
<img style="margin: 20px;max-width: 68%" src="https://docs.balder.dev/en/latest/_static/balder_w_boarder.png" alt="Balder logo">
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
Balder is a flexible Python test system that allows you to reuse test code written once for different but similar
|
|
39
|
+
platforms, devices, or applications. It enables you to install ready-to-use test cases and provides various test
|
|
40
|
+
development features that help you test your software or devices much faster.
|
|
41
|
+
|
|
42
|
+
You can use shared test code by installing an [existing BalderHub project](https://hub.balder.dev), or you can create
|
|
43
|
+
your own. This makes test development for your project much faster, since it is oftentimes enough to install a BalderHub
|
|
44
|
+
project and only provide the user-specific code.
|
|
45
|
+
|
|
46
|
+
Be part of the progress and share your tests with others, your company, or the whole world.
|
|
47
|
+
|
|
48
|
+
# Installation
|
|
49
|
+
|
|
50
|
+
You can install the latest release with pip:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
python -m pip install baldertest
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
# Run Balder
|
|
57
|
+
|
|
58
|
+
After you've installed it, you can run Balder inside a Balder environment with the following command:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
balder
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
You can also provide a specific path to the balder environment directory by using this console argument:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
balder --working-dir /path/to/working/dir
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
# How does it work?
|
|
71
|
+
|
|
72
|
+
Balder allows you to reuse previously written test code by dividing it into the components that **are needed** for a
|
|
73
|
+
test (`Scenario`) and the components that **you have** (`Setup`).
|
|
74
|
+
|
|
75
|
+
You can define a test within a method of a `Scenario` class. This is often an abstract layer, where you only describe
|
|
76
|
+
the general business logic without providing any specific implementation details.
|
|
77
|
+
|
|
78
|
+
These specific implementation details are provided in the `Setup` classes. They describe exactly **what you have**. In
|
|
79
|
+
these classes, you provide an implementation for the abstract elements that were defined earlier in the `Scenario`.
|
|
80
|
+
|
|
81
|
+
Balder then automatically searches for matching mappings and runs your tests using them.
|
|
82
|
+
|
|
83
|
+
## Define the `Scenario` class
|
|
84
|
+
|
|
85
|
+
Inside `Scenario` or `Setup` classes, you can describe the environment using inner `Device` classes. For example, let's
|
|
86
|
+
write a test that validates the functionality of a lamp. For that, keep in mind that we want to make this test as
|
|
87
|
+
flexible as possible. It should be able to run with all kind of things that have a lamp:
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
import balder
|
|
91
|
+
from lib.scenario_features import BaseLightFeature
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class ScenarioLight(balder.Scenario):
|
|
95
|
+
|
|
96
|
+
# The device with its features that are required for this test
|
|
97
|
+
class LightSpendingDevice(balder.Device):
|
|
98
|
+
light = BaseLightFeature()
|
|
99
|
+
|
|
100
|
+
def test_check_light(self):
|
|
101
|
+
self.LightSpendingDevice.light.switch_on()
|
|
102
|
+
assert self.LightSpendingDevice.light.light_is_on()
|
|
103
|
+
self.LightSpendingDevice.light.switch_off()
|
|
104
|
+
assert not self.LightSpendingDevice.light.light_is_on()
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Here, we have defined that a `LightSpendingDevice` **needs to have** a feature called `BaseLightFeature` so that this
|
|
111
|
+
scenario can be executed.
|
|
112
|
+
|
|
113
|
+
We have also added a test case (named with a `test_*()` prefix) called `test_check_light`, which executes the validation
|
|
114
|
+
of a lamp, by switching it on and off and checking its state.
|
|
115
|
+
|
|
116
|
+
**Note:** The `BaseLightFeature` is an abstract Feature class that defines the abstract methods `switch_on()`,
|
|
117
|
+
`switch_off()`, and `light_is_on()`.
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
## Define the `Setup` class
|
|
121
|
+
|
|
122
|
+
The next step is defining a `Setup` class, which describes what we have. For a `Scenario` to match a `Setup`, the
|
|
123
|
+
features of all scenario devices must be implemented by the mapped setup devices.
|
|
124
|
+
|
|
125
|
+
For example, if we want to test a car that includes a lamp, we could have a setup like the one shown below:
|
|
126
|
+
|
|
127
|
+
```python
|
|
128
|
+
import balder
|
|
129
|
+
from lib.setup_features import CarEngineFeature, CarLightFeature
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
class SetupGarage(balder.Setup):
|
|
133
|
+
|
|
134
|
+
class Car(balder.Device):
|
|
135
|
+
car_engine = CarEngineFeature()
|
|
136
|
+
car_light = CarLightFeature() # subclass of `lib.scenario_feature.BaseLightFeature`
|
|
137
|
+
...
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
When you run Balder in this environment, it will collect the `ScenarioLight` and the `SetupMyCar` classes and try to
|
|
143
|
+
find mappings between them. Based on the `ScenarioLight`, Balder looks for a device that provides an implementation of
|
|
144
|
+
the single `BaseLightFeature`. To do this, it scans all available setups. Since the `SetupMyCar.Car` device provides an
|
|
145
|
+
implementation through the `CarLightFeature`, this device will match.
|
|
146
|
+
|
|
147
|
+
```shell
|
|
148
|
+
+----------------------------------------------------------------------------------------------------------------------+
|
|
149
|
+
| BALDER Testsystem |
|
|
150
|
+
| python version 3.10.12 (main, Aug 15 2025, 14:32:43) [GCC 11.4.0] | balder version 0.1.0b14 |
|
|
151
|
+
+----------------------------------------------------------------------------------------------------------------------+
|
|
152
|
+
Collect 1 Setups and 1 Scenarios
|
|
153
|
+
resolve them to 1 valid variations
|
|
154
|
+
|
|
155
|
+
================================================== START TESTSESSION ===================================================
|
|
156
|
+
SETUP SetupGarage
|
|
157
|
+
SCENARIO ScenarioLight
|
|
158
|
+
VARIATION ScenarioLight.LightSpendingDevice:SetupGarage.Car
|
|
159
|
+
TEST ScenarioLight.test_check_light [.]
|
|
160
|
+
================================================== FINISH TESTSESSION ==================================================
|
|
161
|
+
TOTAL NOT_RUN: 0 | TOTAL FAILURE: 0 | TOTAL ERROR: 0 | TOTAL SUCCESS: 1 | TOTAL SKIP: 0 | TOTAL COVERED_BY: 0
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Add another Device to the `Setup` class
|
|
165
|
+
|
|
166
|
+
Now the big advantage of Balder comes into play. We can run our test with all devices that can implement the
|
|
167
|
+
`BaseLightFeature`, independent of how this will be implemented in detail. **You do not need to rewrite the test**.
|
|
168
|
+
|
|
169
|
+
So, We have more devices in our garage. So let's add them:
|
|
170
|
+
|
|
171
|
+
```python
|
|
172
|
+
import balder
|
|
173
|
+
from lib.setup_features import CarEngineFeature, CarLightFeature, PedalFeature, BicycleLightFeature, GateOpenerFeature
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
class SetupGarage(balder.Setup):
|
|
177
|
+
|
|
178
|
+
class Car(balder.Device):
|
|
179
|
+
car_engine = CarEngineFeature()
|
|
180
|
+
car_light = CarLightFeature() # subclass of `lib.scenario_feature.BaseLightFeature`
|
|
181
|
+
...
|
|
182
|
+
|
|
183
|
+
class Bicycle(balder.Device):
|
|
184
|
+
pedals = PedalFeature()
|
|
185
|
+
light = BicycleLightFeature() # another subclass of `lib.scenario_feature.BaseLightFeature`
|
|
186
|
+
|
|
187
|
+
class GarageGate(balder.Device):
|
|
188
|
+
opener = GateOpenerFeature()
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
If we run Balder now, it will find more mappings because the `Bicycle` device also provides an implementation for the
|
|
193
|
+
`BaseLightFeature` we are looking for.
|
|
194
|
+
|
|
195
|
+
```shell
|
|
196
|
+
+----------------------------------------------------------------------------------------------------------------------+
|
|
197
|
+
| BALDER Testsystem |
|
|
198
|
+
| python version 3.10.12 (main, Aug 15 2025, 14:32:43) [GCC 11.4.0] | balder version 0.1.0b14 |
|
|
199
|
+
+----------------------------------------------------------------------------------------------------------------------+
|
|
200
|
+
Collect 1 Setups and 1 Scenarios
|
|
201
|
+
resolve them to 2 valid variations
|
|
202
|
+
|
|
203
|
+
================================================== START TESTSESSION ===================================================
|
|
204
|
+
SETUP SetupGarage
|
|
205
|
+
SCENARIO ScenarioLight
|
|
206
|
+
VARIATION ScenarioLight.LightSpendingDevice:SetupGarage.Bicycle
|
|
207
|
+
TEST ScenarioLight.test_check_light [.]
|
|
208
|
+
VARIATION ScenarioLight.LightSpendingDevice:SetupGarage.Car
|
|
209
|
+
TEST ScenarioLight.test_check_light [.]
|
|
210
|
+
================================================== FINISH TESTSESSION ==================================================
|
|
211
|
+
TOTAL NOT_RUN: 0 | TOTAL FAILURE: 0 | TOTAL ERROR: 0 | TOTAL SUCCESS: 2 | TOTAL SKIP: 0 | TOTAL COVERED_BY: 0
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Balder handles all of this for you. You only need to describe your environment by defining `Scenario` and `Setup`
|
|
215
|
+
classes, then provide the specific implementations by creating the features. Balder will automatically search for and
|
|
216
|
+
apply the mappings between them.
|
|
217
|
+
|
|
218
|
+
**NOTE:** Balder offers many more elements to design complete device structures, including connections between multiple
|
|
219
|
+
devices.
|
|
220
|
+
|
|
221
|
+
You can learn more about that in the
|
|
222
|
+
[Tutorial Section of the Documentation](https://docs.balder.dev/en/latest/tutorial_guide/index.html).
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
# Example: Use an installable BalderHub package
|
|
226
|
+
|
|
227
|
+
With Balder, you can create custom test environments or install open-source-available test packages, known as
|
|
228
|
+
[BalderHub packages](https://hub.balder.dev). For example, if you want to test the login functionality of a website, simply use the
|
|
229
|
+
ready-to-use scenario `ScenarioSimpleLogin` from the [`balderhub-auth` package](https://hub.balder.dev/projects/auth/en/latest/examples.html),
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
We want to use [Selenium](https://www.selenium.dev/) to control the browser and of course use html elements, so let's install
|
|
233
|
+
`balderhub-selenium` and `balderhub-html` right away.
|
|
234
|
+
|
|
235
|
+
```
|
|
236
|
+
$ pip install balderhub-auth balderhub-selenium balderhub-html
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
So as mentioned, you don't need to define a scenario and a test yourself; you can simply import it:
|
|
240
|
+
|
|
241
|
+
```python
|
|
242
|
+
# file `scenario_balderhub.py`
|
|
243
|
+
|
|
244
|
+
from balderhub.auth.scenarios import ScenarioSimpleLogin
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
According to the [documentation of this BalderHub project](https://hub.balder.dev/projects/auth/en/latest/examples.html),
|
|
249
|
+
we only need to define the login page by overwriting the ``LoginPage`` feature:
|
|
250
|
+
|
|
251
|
+
```python
|
|
252
|
+
|
|
253
|
+
# file `lib/pages.py`
|
|
254
|
+
|
|
255
|
+
import balderhub.auth.contrib.html.pages
|
|
256
|
+
from balderhub.html.lib.utils import Selector
|
|
257
|
+
from balderhub.url.lib.utils import Url
|
|
258
|
+
import balderhub.html.lib.utils.components as html
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
class LoginPage(balderhub.auth.contrib.html.pages.LoginPage):
|
|
262
|
+
|
|
263
|
+
url = Url('https://example.com')
|
|
264
|
+
|
|
265
|
+
# Overwrite abstract property
|
|
266
|
+
@property
|
|
267
|
+
def input_username(self):
|
|
268
|
+
return html.inputs.HtmlTextInput.by_selector(self.driver, Selector.by_name('user'))
|
|
269
|
+
|
|
270
|
+
# Overwrite abstract property
|
|
271
|
+
@property
|
|
272
|
+
def input_password(self):
|
|
273
|
+
return html.inputs.HtmlPasswordInput.by_selector(self.driver, Selector.by_name('user'))
|
|
274
|
+
|
|
275
|
+
# Overwrite abstract property
|
|
276
|
+
@property
|
|
277
|
+
def btn_login(self):
|
|
278
|
+
return html.HtmlButtonElement.by_selector(self.driver, Selector.by_id('submit-button'))
|
|
279
|
+
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
And use it in our setup:
|
|
283
|
+
|
|
284
|
+
```python
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
# file `setups/setup_office.py`
|
|
288
|
+
|
|
289
|
+
import balder
|
|
290
|
+
import balderhub.auth.lib.scenario_features.role
|
|
291
|
+
from balderhub.selenium.lib.setup_features import SeleniumChromeWebdriverFeature
|
|
292
|
+
|
|
293
|
+
from lib.pages import LoginPage
|
|
294
|
+
|
|
295
|
+
class UserConfig(balderhub.auth.lib.scenario_features.role.UserRoleFeature):
|
|
296
|
+
# provide the credentials for the log in
|
|
297
|
+
username = 'admin'
|
|
298
|
+
password = 'secret'
|
|
299
|
+
|
|
300
|
+
class SetupOffice(balder.Setup):
|
|
301
|
+
|
|
302
|
+
class Server(balder.Device):
|
|
303
|
+
user = UserConfig()
|
|
304
|
+
|
|
305
|
+
class Browser(balder.Device):
|
|
306
|
+
selenium = SeleniumChromeWebdriverFeature()
|
|
307
|
+
page_login = LoginPage()
|
|
308
|
+
|
|
309
|
+
# fixture to prepare selenium - will be executed before the test session runs
|
|
310
|
+
@balder.fixture('session')
|
|
311
|
+
def selenium(self):
|
|
312
|
+
self.Browser.selenium.create()
|
|
313
|
+
yield
|
|
314
|
+
self.Browser.selenium.quit()
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
When you run Balder now, it will execute a complete login test that you didn't write yourself -
|
|
318
|
+
**it was created by the open-source community**.
|
|
319
|
+
|
|
320
|
+
```shell
|
|
321
|
+
+----------------------------------------------------------------------------------------------------------------------+
|
|
322
|
+
| BALDER Testsystem |
|
|
323
|
+
| python version 3.10.12 (main, Aug 15 2025, 14:32:43) [GCC 11.4.0] | balder version 0.1.0b14 |
|
|
324
|
+
+----------------------------------------------------------------------------------------------------------------------+
|
|
325
|
+
Collect 1 Setups and 1 Scenarios
|
|
326
|
+
resolve them to 1 valid variations
|
|
327
|
+
|
|
328
|
+
================================================== START TESTSESSION ===================================================
|
|
329
|
+
SETUP SetupOffice
|
|
330
|
+
SCENARIO ScenarioSimpleLogin
|
|
331
|
+
VARIATION ScenarioSimpleLogin.Client:SetupOffice.Browser | ScenarioSimpleLogin.System:SetupOffice.Server
|
|
332
|
+
TEST ScenarioSimpleLogin.test_login [.]
|
|
333
|
+
================================================== FINISH TESTSESSION ==================================================
|
|
334
|
+
TOTAL NOT_RUN: 0 | TOTAL FAILURE: 0 | TOTAL ERROR: 0 | TOTAL SUCCESS: 1 | TOTAL SKIP: 0 | TOTAL COVERED_BY: 0
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
If you'd like to learn more about it, feel free to dive [into the documentation](https://balder.dev).
|
|
338
|
+
|
|
339
|
+
# Contribution guidelines
|
|
340
|
+
|
|
341
|
+
Any help is appreciated. If you want to contribute to balder, take a look into the
|
|
342
|
+
[contribution guidelines](https://github.com/balder-dev/balder/blob/main/CONTRIBUTING.md).
|
|
343
|
+
|
|
344
|
+
Are you an expert in your field? Do you enjoy the concept of balder? How about creating your own
|
|
345
|
+
BalderHub project? You can contribute to an existing project or create your own. If you are not sure, a project for
|
|
346
|
+
your idea already exists or if you want to discuss your ideas with others, feel free to
|
|
347
|
+
[create an issue in the BalderHub main entry project](https://github.com/balder-dev/hub.balder.dev/issues) or
|
|
348
|
+
[start a new discussion](https://github.com/balder-dev/hub.balder.dev/discussions).
|
|
349
|
+
|
|
350
|
+
# License
|
|
351
|
+
|
|
352
|
+
Balder is free and Open-Source
|
|
353
|
+
|
|
354
|
+
Copyright (c) 2022-2025 Max Stahlschmidt and others
|
|
355
|
+
|
|
356
|
+
Distributed under the terms of the MIT license
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
_balder/__init__.py,sha256=Qk4wkVInPlXLFV36Yco5K7PDawJoeeWQVakzj6g5pmA,195
|
|
2
|
+
_balder/_version.py,sha256=5jwwVncvCiTnhOedfkzzxmxsggwmTBORdFL_4wq0ZeY,704
|
|
3
|
+
_balder/balder_plugin.py,sha256=EQzJP1dwwVDydhMLJtAmTCXOczlDuXBJur05lalmK_k,3136
|
|
4
|
+
_balder/balder_session.py,sha256=ezT86gC_VzPQZOQ4r5qQ75IEm6rXZHiIpEqZDczkRsE,16149
|
|
5
|
+
_balder/balder_settings.py,sha256=U96PVep7dGSaTXrMfeZMYf6oCIcEDPEqrBlFcoX476s,582
|
|
6
|
+
_balder/collector.py,sha256=vjqU8suydg_s_YHEXt-KieR8gMzs9_KWDvgL62KJ0UI,46070
|
|
7
|
+
_balder/connection.py,sha256=X0zGAsAywNFck-DBie38N-9sJLAde7UJ0qYuHaiO5GE,40775
|
|
8
|
+
_balder/connection_metadata.py,sha256=FrTj6NNBBUl6QuFx8DWy6HRueufXB93WTBkdc41uFaE,13632
|
|
9
|
+
_balder/decorator_connect.py,sha256=-DDHzTtEZVSHXAQNmqnu3x2gfOJu08Lq4piBDQ1R0no,5857
|
|
10
|
+
_balder/decorator_covered_by.py,sha256=5b5RuJF4C7VDhuxpWjZuN1B71E6q9sywhp8LLNGPlbg,3786
|
|
11
|
+
_balder/decorator_fixture.py,sha256=vVd3pXVWEaaVP2rxgW4nKoskmDByafHuSFHC0v_LMoI,1045
|
|
12
|
+
_balder/decorator_for_vdevice.py,sha256=adEzLc0otuvCpj2TntuJWMQX_mq2oLtYRXFFbIhQVYo,5917
|
|
13
|
+
_balder/decorator_gateway.py,sha256=Qa8Cjm50I1OSHhADU8LmeSQh2QSuH9qGRuedWAlLfu4,1381
|
|
14
|
+
_balder/decorator_insert_into_tree.py,sha256=l3nkaTzKzt3TIFYLJoehYwT3xxRRNz83fq8JhvR6DfQ,2069
|
|
15
|
+
_balder/decorator_parametrize.py,sha256=lHxADbHZVnWOhvQTUQgaYU1hQ8NF3ghMU57Z3r_oWVE,912
|
|
16
|
+
_balder/decorator_parametrize_by_feature.py,sha256=r0iySfWcFxXIVu0BNWIRU_E6_o2-lSzpL5aUifoqiyU,1381
|
|
17
|
+
_balder/device.py,sha256=5O3tqj_iLKfHb5Zi_viJ76VH82cMOzX58OzRrMRRv0k,833
|
|
18
|
+
_balder/exceptions.py,sha256=_zQFUK4kYKaVGUtH9IcH0q-GOyBb9qzqSU6BOsUnG7Y,4375
|
|
19
|
+
_balder/exit_code.py,sha256=P0oFWKfjMo36Frv13ADRcm8eSPN3kE-WmZBE9qZJHdA,513
|
|
20
|
+
_balder/feature.py,sha256=ce9d7Ljaapypn5VacRK7iAhV4IS5RGPIEqlBZ-2jsEU,4015
|
|
21
|
+
_balder/feature_replacement_mapping.py,sha256=NjGNfg_Ut8mvPTAnc2SPx2kJYnGh14dOCR93EWH8NUE,4235
|
|
22
|
+
_balder/feature_vdevice_mapping.py,sha256=aAQ8R48orYiOr_9_L8nZCz3jq5-qlq9gfY7DeTzmUyM,3576
|
|
23
|
+
_balder/fixture_definition_scope.py,sha256=0MP0U2fcM9iS28Ytkfuu3TzZ4cUNG5u81GBWGBm9ucw,709
|
|
24
|
+
_balder/fixture_execution_level.py,sha256=-y7-4bihTSMzhYvM2O1Qc40ovyvW7SP25rHvWHZpD6g,655
|
|
25
|
+
_balder/fixture_manager.py,sha256=UFVMmSezeHDlvV4ZoXmZPM7YcwaXNuKj7LlWhjYWfBU,29237
|
|
26
|
+
_balder/fixture_metadata.py,sha256=N3TQwa9-Y9kyPoEJDMn1QhnQqB5nhwvXM4XLmVEpU_I,880
|
|
27
|
+
_balder/node_gateway.py,sha256=64mv7Nx82JVknnQ09UXC-AcdDl6i_OB6NOsq_uBxeYo,4710
|
|
28
|
+
_balder/parametrization.py,sha256=SnaGeGpf7-5H-y107CBDx5V-onX-oiLS1KU1IquZwcU,2678
|
|
29
|
+
_balder/plugin_manager.py,sha256=Ev2jnx4NtFHDsZ3C6h0HrJtQisqLO-V34JRM3wzTnFM,6921
|
|
30
|
+
_balder/previous_executor_mark.py,sha256=gwpGu7d-kwPzQT8CmaPfuEG6fess2Upf5Q-zX6Oi6NY,835
|
|
31
|
+
_balder/routing_path.py,sha256=icIp09sC51sBsNHZPrWzGOtLqrOT5Se_dj0Db7MwtwY,17093
|
|
32
|
+
_balder/scenario.py,sha256=beHkEqb9pnhrMOt1qfgATSBWVfHahw9RsOCT-uxK6TE,954
|
|
33
|
+
_balder/setup.py,sha256=sIyuqhDSCzxtkWXW48jRrLDvGWkZwgpL6NvEKrFM65E,890
|
|
34
|
+
_balder/solver.py,sha256=NbpAdvrGWdJTY6eZmNZFr7YDubyggY0yW64rDB3JkT0,13121
|
|
35
|
+
_balder/testresult.py,sha256=AE_LWCwmR9aR36IHfPARaaqossBahv-P2URCZ8cFAvM,6893
|
|
36
|
+
_balder/unmapped_vdevice.py,sha256=oKr01YVTLViWtZkYz8kx8ccTx-KmwgNrHuQqqD4eLQw,513
|
|
37
|
+
_balder/vdevice.py,sha256=fc2xuMnTuN1RyfWh9mqFgLdSO9yGA75eERobTXUQ9JA,215
|
|
38
|
+
_balder/cnnrelations/__init__.py,sha256=LDnjVlJmclxmfKs3snKsK2RDMg8N7Xc6OeDVioxHR58,187
|
|
39
|
+
_balder/cnnrelations/and_connection_relation.py,sha256=PW9SPEKtwtj2jm9ROmqi4eqpTPN0ppRNkTqM8qHq2MU,9682
|
|
40
|
+
_balder/cnnrelations/base_connection_relation.py,sha256=g0jqCTXNI7cV8LYL5Ugfrs2YpmggH-7WoJhRGno4OEI,11418
|
|
41
|
+
_balder/cnnrelations/or_connection_relation.py,sha256=hPqC86qXRRgaOA6SeIzGnqxY6zd9OJ1KU5jwKbERo7s,2730
|
|
42
|
+
_balder/console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
|
+
_balder/console/balder.py,sha256=rF1qgW6h35hKqGijGbZgGD2_y0Sd9Mbs_EXF2v_EUCk,2581
|
|
44
|
+
_balder/controllers/__init__.py,sha256=UNb6QzMj4TqPI15OSvXyUJlA-NSai0CKkQhV5JIsba0,570
|
|
45
|
+
_balder/controllers/base_device_controller.py,sha256=g-vY2SqKFUC9yGOvHLfbdmILT3sK2YyaWKSfvTRcC0o,3174
|
|
46
|
+
_balder/controllers/controller.py,sha256=XGRE5LKWxxftEf-bZODvKxXwULu09iG131wMwRoz4Fk,803
|
|
47
|
+
_balder/controllers/device_controller.py,sha256=vFR45CnJwqeqsmV8-SS6_fMhuMdWogsJ1VZlRFEwZl0,23274
|
|
48
|
+
_balder/controllers/feature_controller.py,sha256=0nDIn0OTzJPJiC6oYvLfumLvYV9cFfb6Jl8xHycJ9Vc,41362
|
|
49
|
+
_balder/controllers/normal_scenario_setup_controller.py,sha256=JmxmPThcxTADOOR30W0SYQDADHn-634QiQSpUZrKUpY,21884
|
|
50
|
+
_balder/controllers/scenario_controller.py,sha256=RT8Q68rp6iRVRqEaou-XxPgGgIaOVRTqhl-5hcYioAY,28477
|
|
51
|
+
_balder/controllers/setup_controller.py,sha256=1jX_K_7iHQ2jWBZv-urC0_9lCi4RjrwxvtW7oWMVb7s,7082
|
|
52
|
+
_balder/controllers/vdevice_controller.py,sha256=rWK3oHzXbNlgXf0xbWyssDevx0qQ7Bmi7nsmHhAhFtg,4494
|
|
53
|
+
_balder/executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
|
+
_balder/executor/basic_executable_executor.py,sha256=RWwc8c4B7qO2BxlUB8dZH9IC64qm_KWh8tGCoBB8v6o,5395
|
|
55
|
+
_balder/executor/basic_executor.py,sha256=6rLSBrTGodlaRVfHV2kpXPjbAqUPEq9-2txCxz_-fXg,9327
|
|
56
|
+
_balder/executor/executor_tree.py,sha256=CfwUDUAgCb_k_haaqX7GC23DB2LLEpkL-NnSCEdufiA,10659
|
|
57
|
+
_balder/executor/parametrized_testcase_executor.py,sha256=Wk4XitAVOMGU7pSn7AOyvOsuL9CorcqFJ-iRuVtat1M,2149
|
|
58
|
+
_balder/executor/scenario_executor.py,sha256=tfQ1tKvmhAUgUkAcgJ94hI46hLcXAhIMD-d9qCmJiXg,8152
|
|
59
|
+
_balder/executor/setup_executor.py,sha256=QWMWhfzsssRT_fHOUKjw4gHfC2CaZjhL5NxF1eNl35w,8604
|
|
60
|
+
_balder/executor/testcase_executor.py,sha256=Yrifk_8hsm1KKrE6udd84EyBywmWiUN00MlcezMQ7xA,8216
|
|
61
|
+
_balder/executor/unresolved_parametrized_testcase_executor.py,sha256=Pb-LhEFNspb03pYTqTyFvSWPFMoRCjO8OVjjP2rHFMw,7628
|
|
62
|
+
_balder/executor/variation_executor.py,sha256=2VLXmPmRVFi69bkqVkHaz055l5OEPMNer1qSKD3SN9M,51515
|
|
63
|
+
_balder/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
64
|
+
_balder/objects/connections/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
|
+
_balder/objects/connections/osi_1_physical.py,sha256=74lKWJd6ETEtvNXH0_dmTbkZlStJ_af218pQkUht0aA,2189
|
|
66
|
+
_balder/objects/connections/osi_2_datalink.py,sha256=0k1imyx6x_YeSvtf5CG27rcLeDzpmz76DUbjWyIGJqg,875
|
|
67
|
+
_balder/objects/connections/osi_3_network.py,sha256=7s4gEYxR38LE3yUTPoDaYT6kJiWBQdcU9OBFO29E2j0,1175
|
|
68
|
+
_balder/objects/connections/osi_4_transport.py,sha256=9INPME_TWiZQ9rXUzIV__yOPsLQXcdf-7F336WijFOo,983
|
|
69
|
+
_balder/objects/connections/osi_5_session.py,sha256=cMSIBMGk80VSgmFdqWaYI3HQLOvJHi4uTaqDMqWaU5Q,390
|
|
70
|
+
_balder/objects/connections/osi_6_presentation.py,sha256=zCQXocR14CC8rFONFHUethvsoHh4b92e0CC3nLDqNZs,394
|
|
71
|
+
_balder/objects/connections/osi_7_application.py,sha256=VPTlKKCEd9FFusce2wVbScIBPzpikPQtpSPE7PHxMUI,2304
|
|
72
|
+
_balder/objects/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
|
+
_balder/objects/devices/this_device.py,sha256=Ah0UNIqgUbtZ_B85fROjKbQS-NTDH1F3gscshB8UBsc,442
|
|
74
|
+
_balder/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
|
+
_balder/utils/functions.py,sha256=0GcyDhEh1OCtY6RxOMBvvalTcTC97pgL9Ggg1iMYiiI,4323
|
|
76
|
+
_balder/utils/inner_device_managing_metaclass.py,sha256=5haJb6XNjhxULFW1Sy8Dp7SO9Hex-yuF0rK1FG0UOXk,570
|
|
77
|
+
_balder/utils/mixin_can_be_covered_by_executor.py,sha256=yDOsYh9mfhcLUAH0ahuFbdDKYsxaqbPsUEEctC3YenU,718
|
|
78
|
+
_balder/utils/typings.py,sha256=eh3mw8wRQjTkuitGJKJSKu2JmyOnpWYMI9bAzE9M_KU,118
|
|
79
|
+
balder/__init__.py,sha256=PvPDJT9-mnDt3PuidCkPM6mB6wvcETIoINld3Jt1TUU,1184
|
|
80
|
+
balder/connections.py,sha256=H6rf7UsiVY_FeZLngZXCT9WDw9cQqpiDiPbz_0J4yjM,2331
|
|
81
|
+
balder/devices.py,sha256=zupHtz8yaiEjzR8CrvgZU-RzsDQcZFeN5mObfhtjwSw,173
|
|
82
|
+
balder/exceptions.py,sha256=iaR4P2L7K3LggYSDnjCGLheZEaGgnMilxDQdoYD5KHQ,1954
|
|
83
|
+
balder/parametrization.py,sha256=R8U67f6DEnXdDc9cGOgS8yFTEAfhglv1v9mnAUAExUg,150
|
|
84
|
+
baldertest-0.1.0.dist-info/licenses/LICENSE,sha256=kNB2-kpqR9c3rEyXsMaQiqb1jiLZ5j6R6TSda63dcJY,1089
|
|
85
|
+
baldertest-0.1.0.dist-info/METADATA,sha256=83CvcgiNrDL9o7coFCbnroeCKu6QUyfVdc-5ob06KoQ,14526
|
|
86
|
+
baldertest-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
87
|
+
baldertest-0.1.0.dist-info/entry_points.txt,sha256=hzqu_nrMKTCi5IJqzS1fhIXWEiL7mTGZ-kgj2lUYlRU,65
|
|
88
|
+
baldertest-0.1.0.dist-info/top_level.txt,sha256=RUkIBkNLqHMemx2C9aEpoS65dpqb6_jU-oagIPxGQEA,15
|
|
89
|
+
baldertest-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022-2025 Max Stahlschmidt and others
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|