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.
Files changed (89) hide show
  1. _balder/__init__.py +12 -0
  2. _balder/_version.py +34 -0
  3. _balder/balder_plugin.py +73 -0
  4. _balder/balder_session.py +341 -0
  5. _balder/balder_settings.py +15 -0
  6. _balder/cnnrelations/__init__.py +7 -0
  7. _balder/cnnrelations/and_connection_relation.py +176 -0
  8. _balder/cnnrelations/base_connection_relation.py +270 -0
  9. _balder/cnnrelations/or_connection_relation.py +65 -0
  10. _balder/collector.py +874 -0
  11. _balder/connection.py +863 -0
  12. _balder/connection_metadata.py +255 -0
  13. _balder/console/__init__.py +0 -0
  14. _balder/console/balder.py +58 -0
  15. _balder/controllers/__init__.py +12 -0
  16. _balder/controllers/base_device_controller.py +72 -0
  17. _balder/controllers/controller.py +29 -0
  18. _balder/controllers/device_controller.py +446 -0
  19. _balder/controllers/feature_controller.py +715 -0
  20. _balder/controllers/normal_scenario_setup_controller.py +402 -0
  21. _balder/controllers/scenario_controller.py +524 -0
  22. _balder/controllers/setup_controller.py +134 -0
  23. _balder/controllers/vdevice_controller.py +95 -0
  24. _balder/decorator_connect.py +104 -0
  25. _balder/decorator_covered_by.py +74 -0
  26. _balder/decorator_fixture.py +29 -0
  27. _balder/decorator_for_vdevice.py +118 -0
  28. _balder/decorator_gateway.py +34 -0
  29. _balder/decorator_insert_into_tree.py +52 -0
  30. _balder/decorator_parametrize.py +31 -0
  31. _balder/decorator_parametrize_by_feature.py +36 -0
  32. _balder/device.py +18 -0
  33. _balder/exceptions.py +182 -0
  34. _balder/executor/__init__.py +0 -0
  35. _balder/executor/basic_executable_executor.py +133 -0
  36. _balder/executor/basic_executor.py +205 -0
  37. _balder/executor/executor_tree.py +217 -0
  38. _balder/executor/parametrized_testcase_executor.py +52 -0
  39. _balder/executor/scenario_executor.py +169 -0
  40. _balder/executor/setup_executor.py +163 -0
  41. _balder/executor/testcase_executor.py +203 -0
  42. _balder/executor/unresolved_parametrized_testcase_executor.py +184 -0
  43. _balder/executor/variation_executor.py +882 -0
  44. _balder/exit_code.py +19 -0
  45. _balder/feature.py +74 -0
  46. _balder/feature_replacement_mapping.py +107 -0
  47. _balder/feature_vdevice_mapping.py +88 -0
  48. _balder/fixture_definition_scope.py +19 -0
  49. _balder/fixture_execution_level.py +22 -0
  50. _balder/fixture_manager.py +483 -0
  51. _balder/fixture_metadata.py +26 -0
  52. _balder/node_gateway.py +103 -0
  53. _balder/objects/__init__.py +0 -0
  54. _balder/objects/connections/__init__.py +0 -0
  55. _balder/objects/connections/osi_1_physical.py +116 -0
  56. _balder/objects/connections/osi_2_datalink.py +35 -0
  57. _balder/objects/connections/osi_3_network.py +47 -0
  58. _balder/objects/connections/osi_4_transport.py +40 -0
  59. _balder/objects/connections/osi_5_session.py +13 -0
  60. _balder/objects/connections/osi_6_presentation.py +13 -0
  61. _balder/objects/connections/osi_7_application.py +83 -0
  62. _balder/objects/devices/__init__.py +0 -0
  63. _balder/objects/devices/this_device.py +12 -0
  64. _balder/parametrization.py +75 -0
  65. _balder/plugin_manager.py +138 -0
  66. _balder/previous_executor_mark.py +23 -0
  67. _balder/routing_path.py +335 -0
  68. _balder/scenario.py +20 -0
  69. _balder/setup.py +18 -0
  70. _balder/solver.py +246 -0
  71. _balder/testresult.py +163 -0
  72. _balder/unmapped_vdevice.py +13 -0
  73. _balder/utils/__init__.py +0 -0
  74. _balder/utils/functions.py +103 -0
  75. _balder/utils/inner_device_managing_metaclass.py +14 -0
  76. _balder/utils/mixin_can_be_covered_by_executor.py +24 -0
  77. _balder/utils/typings.py +4 -0
  78. _balder/vdevice.py +9 -0
  79. balder/__init__.py +56 -0
  80. balder/connections.py +43 -0
  81. balder/devices.py +9 -0
  82. balder/exceptions.py +44 -0
  83. balder/parametrization.py +8 -0
  84. baldertest-0.1.0.dist-info/METADATA +356 -0
  85. baldertest-0.1.0.dist-info/RECORD +89 -0
  86. baldertest-0.1.0.dist-info/WHEEL +5 -0
  87. baldertest-0.1.0.dist-info/entry_points.txt +2 -0
  88. baldertest-0.1.0.dist-info/licenses/LICENSE +21 -0
  89. 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,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ balder = _balder.console.balder:console_balder
@@ -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.
@@ -0,0 +1,2 @@
1
+ _balder
2
+ balder