tla-sbuilder 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +116 -33
- data/VERSION +1 -1
- data/lib/cli/cli-customer.rb +41 -23
- data/lib/cli/cli-example.rb +1 -1
- data/lib/cli/cli-pet.rb +33 -30
- data/lib/cli/cli-text.rb +57 -17
- data/lib/cli/cli.rb +56 -10
- data/lib/sbuilder.rb +3 -1
- data/lib/sbuilder/constants.rb +5 -2
- data/lib/sbuilder/controller.rb +289 -59
- data/lib/sbuilder/default-sbuilder.yaml +25 -3
- data/lib/sbuilder/domain.rb +1 -1
- data/lib/sbuilder/domain_cardinality.rb +1 -1
- data/lib/sbuilder/domain_value.rb +1 -1
- data/lib/sbuilder/exception.rb +13 -7
- data/lib/sbuilder/extension_loader.rb +75 -18
- data/lib/sbuilder/facade/api_loader.rb +293 -0
- data/lib/sbuilder/factory.rb +66 -3
- data/lib/sbuilder/model.rb +59 -3
- data/lib/sbuilder/mustache/template.rb +13 -13
- data/lib/sbuilder/mustache/template_reader_context.rb +5 -3
- data/lib/sbuilder/param_set.rb +2 -1
- data/lib/sbuilder/param_set_db.rb +1 -1
- data/lib/sbuilder/param_set_def.rb +1 -1
- data/lib/sbuilder/param_set_if.rb +1 -1
- data/lib/sbuilder/param_set_loader_swagger.rb +122 -121
- data/lib/sbuilder/param_set_step.rb +1 -1
- data/lib/sbuilder/parameter.rb +1 -1
- data/lib/sbuilder/parameter_container.rb +1 -1
- data/lib/sbuilder/parameter_dom.rb +1 -1
- data/lib/sbuilder/parameter_ref.rb +2 -2
- data/lib/sbuilder/resolver_rule.rb +1 -1
- data/lib/sbuilder/resolver_rule_match.rb +1 -1
- data/lib/sbuilder/resolver_rule_ref.rb +1 -1
- data/lib/sbuilder/spec/README +5 -0
- data/lib/sbuilder/spec/api_loader_facade.rb +247 -0
- data/lib/utils/cache_lines.rb +21 -0
- data/lib/utils/netio.rb +5 -13
- data/mustache/cfg/macro_run.mustache +1 -0
- data/mustache/interface_processes.mustache +9 -2
- data/mustache/interface_stubs_dummy.mustache +7 -0
- data/mustache/interface_types.mustache +3 -3
- data/mustache/invariant_activate.mustache +16 -0
- data/mustache/setup/assumptions_activate.mustache +16 -0
- data/mustache/{domains_run.mustache → setup/domains_run.mustache} +2 -2
- data/mustache/setup/operator_run.mustache +2 -0
- data/mustache/setup/steps_run_bind_set.mustache +1 -1
- data/mustache/setup/steps_run_parameterBind.mustache +4 -2
- data/mustache/tla/macro_run.mustache +8 -0
- data/mustache/tla/operator_run.mustache +1 -0
- data/mustache/tla/plc_define_run.mustache +2 -4
- data/mustache/tla/plc_run_state.mustache +1 -1
- data/src-extend/extend/extend_invariant_cfg.mustache +1 -1
- data/src/pet/assumption_domains.tla +1 -1
- data/src/pet/correctness.cfg +4 -0
- data/tla-sbuilder.gemspec +3 -1
- metadata +14 -10
- data/lib/sbuilder/param_set_loader.rb +0 -77
- data/src-extend/extend_app/correctness.cfg +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4731a435e4630bf464dd4d183d3a40df97e1e38
|
4
|
+
data.tar.gz: 8c4e8a335e829e7df768069dfb3b276e199f2913
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7135b56dc4e078cc4f950402b3245e5bf239ea5718da7fd86c20f48fbdec39d00e06cc93f34fc2a8dfd90e727a5e6e6b9ddb41f212c510c9f604f28cc9a6954c
|
7
|
+
data.tar.gz: ad58191062c7e450f97f2e8f51c6deddf1eed8a39378c1775a44770be3dae2708b185340ce7022e194d04edadaac308a4b289999383568381f9ed3895bcfd89a
|
data/README.md
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
<link href="../site.css" rel="stylesheet"></link>
|
2
|
-
[
|
2
|
+
[Readme](README.md) [Releases](RELEASES.md)
|
3
3
|
|
4
|
-
|
5
|
-
# Sbuilder - A Specification Builder for TLA+ Tools - $Release:0.1.0$
|
4
|
+
# Sbuilder - A Specification Builder for TLA+ Tools - $Release:0.2.1$
|
6
5
|
|
7
6
|
A tool to generate runnable specification models in
|
8
7
|
[TLA+ language](http://research.microsoft.com/en-us/um/people/lamport/tla/book.html)
|
@@ -12,7 +11,24 @@ verified using
|
|
12
11
|
and parts of it can be presented as
|
13
12
|
[implementation blueprints](#BLUEPRINT) to developers.
|
14
13
|
|
15
|
-
See
|
14
|
+
See
|
15
|
+
[live documentation](http://jarjuk.github.io/tla-sbuilder/0.1.1.pre/features.html)
|
16
|
+
for more details on configuring Sbuilder, and on features implemented
|
17
|
+
by Sbuilder
|
18
|
+
|
19
|
+
Blog posts giving background information on Sbuilder:
|
20
|
+
|
21
|
+
* [Read an article "How Amazon uses formal methods"](https://jarjuk.wordpress.com/2016/03/03/sbuilder-1-problem):
|
22
|
+
summarizes experiences Amazon has gained, when using TLA+ tools,
|
23
|
+
what kind of benefits we should expect, when using formal methods to
|
24
|
+
model business IT
|
25
|
+
|
26
|
+
* [Sbuilder introduction](https://jarjuk.wordpress.com/2016/03/03/sbuilder-2-intro/):
|
27
|
+
mostly the same information as in this README
|
28
|
+
|
29
|
+
* [Using Sbuilder to Model Business IT Systems](https://jarjuk.wordpress.com/2016/03/03/sbuilder-3-case/):
|
30
|
+
a very loooong post demonstrating, how business IT system modeling
|
31
|
+
can be done using Sbuilder
|
16
32
|
|
17
33
|
## <a id="TARGET-SYSTEM">Target Systems</a>
|
18
34
|
|
@@ -36,11 +52,13 @@ architecture identifies
|
|
36
52
|
Sbuilder combines three main elements to create runnable TLA+
|
37
53
|
specification code:
|
38
54
|
|
39
|
-
1. **Interface specification**: Sbuilder accepts
|
55
|
+
1. **Interface specification**: Natively Sbuilder accepts
|
40
56
|
[RESTfull](https://en.wikipedia.org/wiki/Representational_state_transfer)
|
41
57
|
interface api specification expressed in
|
42
58
|
[Swagger](http://swagger.io/)
|
43
|
-
[v2.0](http://swagger.io/specification/) format.
|
59
|
+
[v2.0](http://swagger.io/specification/) format. Plugin system
|
60
|
+
allows importing API confiugration also from external systems,
|
61
|
+
e.g. from [salesforce](https://github.com/jarjuk/tla-sbuilder-salesforce)
|
44
62
|
|
45
63
|
2. **Specification extension**: Sbuilder tangles manually crafted code
|
46
64
|
snippets from Sbuilder *code repository* with the code generated
|
@@ -48,12 +66,12 @@ specification code:
|
|
48
66
|
TLA+ language to model behavior and correctness criteria of the
|
49
67
|
target system.
|
50
68
|
|
51
|
-
3. **Setups**: To complete runnable code
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
69
|
+
3. **Setups**: To complete runnable code Sbuilder uses setups. A setup
|
70
|
+
is a sequence of interface operations, and their input parameters.
|
71
|
+
In addition, a setup may define domain cardinalities, or domain
|
72
|
+
values. The tools allows defining multiple setups, each setup
|
73
|
+
resulting to a complete, runnable TLA+ code, allowing system model
|
74
|
+
to be run in various environment context
|
57
75
|
|
58
76
|
Sbuilder uses following categories to organize *specification
|
59
77
|
snippets* in its **code repository**:
|
@@ -82,16 +100,15 @@ snippets* in its **code repository**:
|
|
82
100
|
* **possibility**: optional operator definitions to increase
|
83
101
|
confidence in correctness invariants
|
84
102
|
|
85
|
-
* **assumption**: operator definitions,
|
86
|
-
|
87
|
-
|
103
|
+
* **assumption**: operator definitions, in TLA+ language specifying
|
104
|
+
properties on specification model constants, which must be not
|
105
|
+
violated.
|
88
106
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
blueprints
|
93
|
-
|
94
|
-
based on *interface specifications*.
|
107
|
+
Sbuilder can generate <a id="BLUEPRINT">**implementation
|
108
|
+
blueprints**</a> as depicted in section
|
109
|
+
[modeling pipeline](#MODELING-PIPELINE) below. *Implementation
|
110
|
+
blueprints* are html-pages including code snippets from Sbuilder *code
|
111
|
+
repository*, or code generated based on *interface specifications*.
|
95
112
|
|
96
113
|
|
97
114
|
## <a id="MODELING-PIPELINE">Modeling Pipeline</a>
|
@@ -105,7 +122,7 @@ the system being built - and thereby to justify the extra effort
|
|
105
122
|
needed in modeling.
|
106
123
|
|
107
124
|
|
108
|
-
![process](pics/process.
|
125
|
+
![process](pics/process.jpg)
|
109
126
|
|
110
127
|
We assume that services are currently implemented based on informal
|
111
128
|
service specification documents written in English. We also assume
|
@@ -264,7 +281,7 @@ and observing **Error: Evaluating invariant** `possible_tag_with_invalid_address
|
|
264
281
|
|
265
282
|
### Create Own Model
|
266
283
|
|
267
|
-
See [live documentation](features.html) for more details.
|
284
|
+
See [live documentation](http://jarjuk.github.io/tla-sbuilder/0.1.1.pre/features.html) for more details.
|
268
285
|
|
269
286
|
Create default directories used by `sbuilder` in current working directory
|
270
287
|
|
@@ -291,6 +308,20 @@ To run the model checking for setup `default` using TLA+tools jar in
|
|
291
308
|
(cd gen/default/tla; java -cp $CP tlc2.TLC setup)
|
292
309
|
|
293
310
|
|
311
|
+
Create TLA snippets in directory `src`, and include template snippets
|
312
|
+
to generated code using
|
313
|
+
[mustache syntax](https://mustache.github.io/mustache.5.html).
|
314
|
+
|
315
|
+
For example, put the following code to
|
316
|
+
|
317
|
+
at_least_two_tags == Cardinality( v_tags ) > 1
|
318
|
+
|
319
|
+
file `src/operator_at_least_two_tags.tla`, and include it to
|
320
|
+
specification code by adding following line into `src/operator`
|
321
|
+
|
322
|
+
{{>operator_at_least_two_tags.tla}}
|
323
|
+
|
324
|
+
|
294
325
|
## Manage State Space Explosion, and Allow Scaling
|
295
326
|
|
296
327
|
[State space explosion](https://www.google.fi/search?q=state+space+explosion)
|
@@ -298,21 +329,24 @@ is inherent problem in
|
|
298
329
|
[model checking](https://en.wikipedia.org/wiki/Model_checking), the
|
299
330
|
theory behind TLA+ tool.
|
300
331
|
|
301
|
-
Sbuilder tries to avoid problems due to state space explosion by
|
332
|
+
Sbuilder tries to avoid problems due to state space explosion by
|
333
|
+
controlling, how environment invokes interface operations, and in
|
334
|
+
effect, by throttling number of states generated during model
|
335
|
+
checking.
|
302
336
|
|
303
|
-
|
304
|
-
and in effect, throttling number of states generated during model
|
305
|
-
checking.
|
337
|
+
To avoid enumering to0 large sets Sbuilder allows
|
306
338
|
|
307
|
-
*
|
308
|
-
|
309
|
-
|
310
|
-
parameter combinations during model checking.
|
339
|
+
* fixing input parameter bindings in an interface operation. In cases,
|
340
|
+
where domain sizes are not a problem, SBuilder allows TLA+ tool to
|
341
|
+
use non-deterministic choice for input parameter values.
|
311
342
|
|
343
|
+
* using reduced domain ranges, when checking assumptions on resolved
|
344
|
+
domains.
|
312
345
|
|
313
346
|
In TLA+tools, number of states/sec decreases as specification code
|
314
|
-
volume increases (see a
|
315
|
-
|
347
|
+
volume increases (see a
|
348
|
+
[benchmark](https://rawgit.com/jarjuk/tla-sbuilder/master/BENCHMARK.html)
|
349
|
+
results for more details).
|
316
350
|
|
317
351
|
SBuilder tries to avoid problems due to increase in specification code
|
318
352
|
by offering run time option `--filter-src`, which parses TLA+ snippets
|
@@ -322,6 +356,55 @@ option `--filter-list` to continue after parser error, and to
|
|
322
356
|
configure manually modules call flow analyzer would otherwise omit
|
323
357
|
from the specification code.
|
324
358
|
|
359
|
+
## Extending Sbuilder
|
360
|
+
|
361
|
+
Sbuilder defines an extension point to add API loader plugins. An API
|
362
|
+
loader is a Ruby class
|
363
|
+
|
364
|
+
* using [Sbuilder::ApiLoader](lib/sbuilder/facade/api_loader.rb)
|
365
|
+
facade to integrate with Sbuilder
|
366
|
+
|
367
|
+
* satisfying [`api_loader_facade` contract](lib/sbuilder/spec/api_loader_facade.rb)
|
368
|
+
|
369
|
+
* used as demonstated in [cucumber tests](features/100-plugin-extension/010-api-loader-plugin.feature)
|
370
|
+
|
371
|
+
For a plugin implementation example, see an Swagger API loader in
|
372
|
+
Sbuilder:
|
373
|
+
|
374
|
+
* [implementation](lib/sbuilder/param_set_loader_swagger.rb)
|
375
|
+
|
376
|
+
* [rpsec test](spec/sbuilder/param_set_loader_swagger_spec.rb)
|
377
|
+
|
378
|
+
For example, to activate Sbuilder API loader plugin
|
379
|
+
`Sbuilder::Interfaces::Salesforce::SalesforceLoader` implemented in
|
380
|
+
`tla-sbuilder-salesforce` Gem using configuration hash shown below,
|
381
|
+
add the following YAML snippet to `sbuilder.yaml` configuration file
|
382
|
+
sub-section `extend.loaders`:
|
383
|
+
|
384
|
+
extend:
|
385
|
+
loaders:
|
386
|
+
- gem: tla-sbuilder-salesforce
|
387
|
+
className: Sbuilder::Interfaces::Salesforce::SalesforceLoader
|
388
|
+
configuration:
|
389
|
+
client_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdaYTBJBssnuS0bvkraFcSSlC9EQZngf97yspdbh8iV_EV
|
390
|
+
client_secret: xxxxxxxxxx476009913
|
391
|
+
username: xxxxxxxev@gmail.com
|
392
|
+
password: 'xxxxxxxx'
|
393
|
+
security_token: 'xxxxxxxxxxVnEZjYP9cUZix9'
|
394
|
+
|
395
|
+
API instances are configured using entries referring plugin
|
396
|
+
`className` in `sbuilder.yaml` `interfaces` array. For example, the
|
397
|
+
entry for an Salesforce API instance entry.
|
398
|
+
|
399
|
+
interfaces:
|
400
|
+
- className: Sbuilder::Interfaces::Salesforce::SalesforceLoader
|
401
|
+
file: salesforce-api.yaml
|
402
|
+
cache: sf
|
403
|
+
|
404
|
+
In the example, `file` -property points to a plugin configuration
|
405
|
+
file, and `cache` property gives name prefix for files, which the
|
406
|
+
plugin may use to cache API content to speed up generation phase.
|
407
|
+
|
325
408
|
|
326
409
|
## License
|
327
410
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1
|
1
|
+
0.2.1
|
data/lib/cli/cli-customer.rb
CHANGED
@@ -13,24 +13,34 @@ module Sbuilder
|
|
13
13
|
|
14
14
|
|
15
15
|
FILE_EXTENSIONS_CUSTOMER_COMMON="extend_customer_doms.yaml"
|
16
|
+
FILE_EXTENSIONS_CUSTOMER_IF="extend_customer_if.yaml"
|
16
17
|
FILE_EXTENSIONS_CUSTOMER_RUN1="extend_customer_run1.yaml"
|
17
18
|
FILE_EXTENSIONS_CUSTOMER_RUN2="extend_customer_run2.yaml"
|
18
19
|
|
19
|
-
SBUILDER_YAML_CUSTOMER= <<-EOS
|
20
|
+
SBUILDER_YAML_CUSTOMER= <<-EOS.unindent
|
21
|
+
|
22
|
+
# ------------------------------------------------------------------
|
23
|
+
#{Sbuilder::CliText::SBUILDER_PREFERENCES}
|
24
|
+
preferences:
|
25
|
+
debug-output: true
|
26
|
+
|
27
|
+
# ------------------------------------------------------------------
|
28
|
+
#{Sbuilder::CliText::SBUILDER_EXTENSION}
|
29
|
+
|
20
30
|
|
21
31
|
# ------------------------------------------------------------------
|
22
32
|
#{Sbuilder::CliText::SBUILBER_INTERFACES}
|
23
33
|
|
24
34
|
interfaces:
|
25
|
-
-
|
35
|
+
-
|
36
|
+
className: Sbuilder::ParamSetLoaderSwagger
|
26
37
|
file: #{FILE_INTERFACE_CUSTOMER}
|
27
38
|
|
28
39
|
|
29
40
|
# ------------------------------------------------------------------
|
30
41
|
#{Sbuilder::CliText::SBUILDER_RESOLVERS}
|
31
42
|
resolvers:
|
32
|
-
|
33
|
-
file: #{FILE_RESOLVER_CUSTOMER}
|
43
|
+
- file: #{FILE_RESOLVER_CUSTOMER}
|
34
44
|
|
35
45
|
# ------------------------------------------------------------------
|
36
46
|
#{Sbuilder::CliText::SBUILER_SETUPS}
|
@@ -39,34 +49,32 @@ module Sbuilder
|
|
39
49
|
|
40
50
|
- setupDirectory: customer1
|
41
51
|
extensions:
|
42
|
-
-
|
43
|
-
|
44
|
-
-
|
45
|
-
url: cnf/#{FILE_EXTENSIONS_CUSTOMER_RUN1}
|
52
|
+
- url: cnf/#{FILE_EXTENSIONS_CUSTOMER_COMMON}
|
53
|
+
- url: cnf/#{FILE_EXTENSIONS_CUSTOMER_IF}
|
54
|
+
- url: cnf/#{FILE_EXTENSIONS_CUSTOMER_RUN1}
|
46
55
|
|
47
56
|
- setupDirectory: customer2
|
48
57
|
extensions:
|
49
|
-
-
|
50
|
-
|
51
|
-
-
|
52
|
-
url: cnf/#{FILE_EXTENSIONS_CUSTOMER_RUN2}
|
58
|
+
- url: cnf/#{FILE_EXTENSIONS_CUSTOMER_COMMON}
|
59
|
+
- url: cnf/#{FILE_EXTENSIONS_CUSTOMER_IF}
|
60
|
+
- url: cnf/#{FILE_EXTENSIONS_CUSTOMER_RUN2}
|
53
61
|
|
54
62
|
# ------------------------------------------------------------------
|
55
|
-
#{Sbuilder::CliText::SBUILDER_PREFERENCES}
|
56
|
-
preferences:
|
57
|
-
debug-output: true
|
58
63
|
|
59
|
-
# ------------------------------------------------------------------
|
60
64
|
#{Sbuilder::CliText::SBUILDER_GENERATE}
|
61
65
|
|
62
66
|
|
63
|
-
|
67
|
+
# ------------------------------------------------------------------
|
64
68
|
|
65
|
-
|
69
|
+
#{Sbuilder::CliText::SBUILDER_INVARIANTS}
|
70
|
+
invariants:
|
71
|
+
# - Invariant1: Add TLA operator definition Invariant1 and uncomment this line
|
66
72
|
|
67
73
|
|
74
|
+
EOS
|
68
75
|
|
69
|
-
|
76
|
+
|
77
|
+
EXTENSIONS_CUSTOMER_COMMON = <<-EOS.unindent
|
70
78
|
#{Sbuilder::CliText::EXTENSION_HEADER_DOM}
|
71
79
|
#
|
72
80
|
#
|
@@ -87,7 +95,17 @@ module Sbuilder
|
|
87
95
|
|
88
96
|
EOS
|
89
97
|
|
90
|
-
|
98
|
+
EXTENSIONS_CUSTOMER_IF = <<-EOS.unindent
|
99
|
+
#{Sbuilder::CliText::EXTENSION_HEADER_IF}
|
100
|
+
#
|
101
|
+
# Exampl uses dummy process, which should be replaced with real implementation
|
102
|
+
- interface-extension:
|
103
|
+
- matcher: /customers(post)
|
104
|
+
implementation: dummy
|
105
|
+
EOS
|
106
|
+
|
107
|
+
|
108
|
+
EXTENSIONS_CUSTOMER_RUN1 = <<-EOS.unindent
|
91
109
|
#{Sbuilder::CliText::EXTENSION_HEADER_SETUP}
|
92
110
|
#
|
93
111
|
# Extend domain resolved in #{FILE_RESOLVER_CUSTOMER}
|
@@ -175,7 +193,7 @@ module Sbuilder
|
|
175
193
|
|
176
194
|
EOS
|
177
195
|
|
178
|
-
EXTENSIONS_CUSTOMER_RUN2 = <<-EOS
|
196
|
+
EXTENSIONS_CUSTOMER_RUN2 = <<-EOS.unindent
|
179
197
|
#{Sbuilder::CliText::EXTENSION_HEADER_SETUP}
|
180
198
|
#
|
181
199
|
#
|
@@ -205,7 +223,7 @@ module Sbuilder
|
|
205
223
|
|
206
224
|
|
207
225
|
|
208
|
-
RESOLVER_CUSTOMER = <<-EOS
|
226
|
+
RESOLVER_CUSTOMER = <<-EOS.unindent
|
209
227
|
#{Sbuilder::CliText::RESOLVER_HEADER}
|
210
228
|
#
|
211
229
|
# Example mapper for customer interface
|
@@ -281,7 +299,7 @@ module Sbuilder
|
|
281
299
|
EOS
|
282
300
|
|
283
301
|
|
284
|
-
INTERFACE_CUSTOMER_SWAGGER = <<-EOS
|
302
|
+
INTERFACE_CUSTOMER_SWAGGER = <<-EOS.unindent
|
285
303
|
# Example YAML configuration file
|
286
304
|
#
|
287
305
|
swagger: "2.0"
|
data/lib/cli/cli-example.rb
CHANGED
@@ -21,7 +21,6 @@ module Sbuilder
|
|
21
21
|
CliPet.write_files( dir, self )
|
22
22
|
# sbuilder - example sources
|
23
23
|
write_example_dir
|
24
|
-
|
25
24
|
end
|
26
25
|
|
27
26
|
desc :customer, "Create 'Customer' TLA+ model <cnf_dir> -directory"
|
@@ -35,6 +34,7 @@ module Sbuilder
|
|
35
34
|
write_example( dir, Sbuilder::CliCustomer::FILE_RESOLVER_CUSTOMER, Sbuilder::CliCustomer::RESOLVER_CUSTOMER )
|
36
35
|
write_example( dir, Sbuilder::CliCustomer::FILE_INTERFACE_CUSTOMER, Sbuilder::CliCustomer::INTERFACE_CUSTOMER_SWAGGER )
|
37
36
|
write_example( dir, Sbuilder::CliCustomer::FILE_EXTENSIONS_CUSTOMER_COMMON, Sbuilder::CliCustomer::EXTENSIONS_CUSTOMER_COMMON )
|
37
|
+
write_example( dir, Sbuilder::CliCustomer::FILE_EXTENSIONS_CUSTOMER_IF, Sbuilder::CliCustomer::EXTENSIONS_CUSTOMER_IF )
|
38
38
|
write_example( dir, Sbuilder::CliCustomer::FILE_EXTENSIONS_CUSTOMER_RUN1, Sbuilder::CliCustomer::EXTENSIONS_CUSTOMER_RUN1 )
|
39
39
|
write_example( dir, Sbuilder::CliCustomer::FILE_EXTENSIONS_CUSTOMER_RUN2, Sbuilder::CliCustomer::EXTENSIONS_CUSTOMER_RUN2 )
|
40
40
|
|
data/lib/cli/cli-pet.rb
CHANGED
@@ -28,14 +28,14 @@ module Sbuilder
|
|
28
28
|
|
29
29
|
interfaces:
|
30
30
|
|
31
|
-
-
|
31
|
+
- className: Sbuilder::ParamSetLoaderSwagger
|
32
32
|
url: #{PETSTORE_URL}
|
33
33
|
cache: petstore.yaml
|
34
34
|
|
35
|
-
-
|
35
|
+
- className: Sbuilder::ParamSetLoaderSwagger
|
36
36
|
file: #{FILE_INTERFACE_TAGS}
|
37
37
|
|
38
|
-
-
|
38
|
+
- className: Sbuilder::ParamSetLoaderSwagger
|
39
39
|
infrastructureServices: true
|
40
40
|
file: #{FILE_INFRASTRUCTURE_PETSTORE}
|
41
41
|
|
@@ -43,8 +43,7 @@ module Sbuilder
|
|
43
43
|
# ------------------------------------------------------------------
|
44
44
|
#{Sbuilder::CliText::SBUILDER_RESOLVERS}
|
45
45
|
resolvers:
|
46
|
-
-
|
47
|
-
url: cnf/#{FILE_RESOLVER_PETSTORE}
|
46
|
+
- url: cnf/#{FILE_RESOLVER_PETSTORE}
|
48
47
|
# un-comment to use default resolver.
|
49
48
|
# normally not used
|
50
49
|
# - type: resolver_yaml
|
@@ -54,50 +53,46 @@ module Sbuilder
|
|
54
53
|
#{Sbuilder::CliText::SBUILER_SETUPS}
|
55
54
|
setups:
|
56
55
|
- setupDirectory: default
|
57
|
-
|
56
|
+
desc: Validate assumptions
|
57
|
+
assumptions:
|
58
|
+
- Assume_Address_Domains
|
59
|
+
- Assume_Id_Domains
|
60
|
+
- Assume_Tag_Domains
|
61
|
+
- Assume_Owner_Domains
|
62
|
+
- Assume_Pet_Domains
|
58
63
|
- setupDirectory: pet1
|
59
64
|
extensions:
|
60
|
-
-
|
61
|
-
|
62
|
-
- type: default-yaml
|
63
|
-
url: cnf/#{FILE_EXTENSIONS_PETSTORE_RUN1}
|
65
|
+
- url: cnf/#{FILE_EXTENSIONS_PETSTORE_COMMON}
|
66
|
+
- url: cnf/#{FILE_EXTENSIONS_PETSTORE_RUN1}
|
64
67
|
possibilities:
|
65
68
|
- tag_with_invalid_address
|
66
69
|
- at_least_two_tags
|
67
70
|
|
68
71
|
- setupDirectory: pet2
|
69
72
|
extensions:
|
70
|
-
-
|
71
|
-
|
72
|
-
- type: default-yaml
|
73
|
-
url: cnf/#{FILE_EXTENSIONS_PETSTORE_RUN2}
|
73
|
+
- url: cnf/#{FILE_EXTENSIONS_PETSTORE_COMMON}
|
74
|
+
- url: cnf/#{FILE_EXTENSIONS_PETSTORE_RUN2}
|
74
75
|
|
75
76
|
- setupDirectory: pet3
|
76
77
|
extensions:
|
77
|
-
-
|
78
|
-
|
79
|
-
- type: default-yaml
|
80
|
-
url: cnf/#{FILE_EXTENSIONS_PETSTORE_RUN3}
|
78
|
+
- url: cnf/#{FILE_EXTENSIONS_PETSTORE_COMMON}
|
79
|
+
- url: cnf/#{FILE_EXTENSIONS_PETSTORE_RUN3}
|
81
80
|
possibilities:
|
82
81
|
- tag_with_invalid_address
|
83
82
|
- at_least_two_tags
|
84
83
|
|
85
84
|
- setupDirectory: pet-svg
|
86
85
|
extensions:
|
87
|
-
-
|
88
|
-
|
89
|
-
- type: default-yaml
|
90
|
-
url: cnf/#{FILE_EXTENSIONS_PETSTORE_RUN_SVG}
|
86
|
+
- url: cnf/#{FILE_EXTENSIONS_PETSTORE_COMMON}
|
87
|
+
- url: cnf/#{FILE_EXTENSIONS_PETSTORE_RUN_SVG}
|
91
88
|
|
92
89
|
- setupDirectory: error-invalidate-name
|
93
90
|
desc: Owner name is invalidate on a tag referenced
|
94
91
|
preferences:
|
95
92
|
error-invalidate-name: true
|
96
93
|
extensions:
|
97
|
-
-
|
98
|
-
|
99
|
-
- type: default-yaml
|
100
|
-
url: cnf/#{FILE_EXTENSIONS_PETSTORE_RUN3}
|
94
|
+
- url: cnf/#{FILE_EXTENSIONS_PETSTORE_COMMON}
|
95
|
+
- url: cnf/#{FILE_EXTENSIONS_PETSTORE_RUN3}
|
101
96
|
|
102
97
|
|
103
98
|
- setupDirectory: error-duplicate-tag
|
@@ -105,10 +100,8 @@ module Sbuilder
|
|
105
100
|
preferences:
|
106
101
|
error-duplicate-tag: true
|
107
102
|
extensions:
|
108
|
-
-
|
109
|
-
|
110
|
-
- type: default-yaml
|
111
|
-
url: cnf/#{FILE_EXTENSIONS_PETSTORE_RUN3}
|
103
|
+
- url: cnf/#{FILE_EXTENSIONS_PETSTORE_COMMON}
|
104
|
+
- url: cnf/#{FILE_EXTENSIONS_PETSTORE_RUN3}
|
112
105
|
|
113
106
|
|
114
107
|
# ------------------------------------------------------------------
|
@@ -294,6 +287,16 @@ module Sbuilder
|
|
294
287
|
# include: definition_types.mustache
|
295
288
|
|
296
289
|
|
290
|
+
#{Sbuilder::CliText::SBUILDER_INVARIANTS}
|
291
|
+
invariants:
|
292
|
+
- ValidatePets: All pet entries are valid
|
293
|
+
- UniquePet: Pet id is unique
|
294
|
+
- UniqueTag: Tag id is unique
|
295
|
+
- ValidReferecendTag: For all pets there exists a unique, valid tag entry.
|
296
|
+
- CoherentOwnerAddress: Address on all tags with the same ower are equal
|
297
|
+
- Pets_TypeInvariant: Type invariant Pet
|
298
|
+
- Tags_TypeInvariant: Type invariant Tag
|
299
|
+
|
297
300
|
EOS
|
298
301
|
|
299
302
|
EXTENSIONS_PETSTORE_COMMON = <<-EOS
|