tla-trace-arch 0.1.0 → 0.1.1
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.
- checksums.yaml +4 -4
- data/README.org +48 -5
- data/VERSION +1 -1
- data/lib/test-runner/configuration.rb +18 -0
- data/lib/test-runner/iterate_archive_files.rb +85 -0
- data/lib/test-runner/read_archive_file.rb +68 -0
- data/lib/tla_trace_arch.rb +26 -0
- data/mustache/api-call-init.mustache +8 -5
- data/mustache/api-call-post.mustache +2 -0
- data/mustache/arch-call-script.mustache +19 -7
- data/mustache/arch-yaml-afterState.mustache +11 -0
- data/mustache/arch-yaml-api_input.mustache +11 -0
- data/mustache/arch-yaml-api_return.mustache +11 -0
- data/mustache/arch-yaml-beforeState.mustache +12 -0
- data/tla-trace-arch.gemspec +5 -2
- metadata +14 -9
- data/mustache/arch-demo-afterState.mustache +0 -7
- data/mustache/arch-demo-api_input.mustache +0 -6
- data/mustache/arch-demo-api_return.mustache +0 -6
- data/mustache/arch-demo-beforeState.mustache +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 391d89ba6d8725af0ffb27dc83c66e4b5829bdc1
|
4
|
+
data.tar.gz: e4b94cea107ae1cf970354839362263a01d54a6f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86c061f880c452907783d9a9bb6ffc23689e1bc040f45884ff90eeef716ef2e5d7a89e6266372164765f01ed5a9eee81e28452dd24e24500148ada6260526731
|
7
|
+
data.tar.gz: 0972e2f0a7e1ca410e60e927a5ccf2e5eaedd1a74b6487876c5d0c4ce460c78929af48dd5c0d39e6192eaec426604dcb3dd3fafa4ca7a87f07dda3c937cbb1af
|
data/README.org
CHANGED
@@ -2,7 +2,8 @@
|
|
2
2
|
|
3
3
|
A set of [[https://mustache.github.io/mustache.5.html][mustache]] templates extending [[https://github.com/jarjuk/tla-trace-filter][tla-trace-filter]] -tool to create
|
4
4
|
a self extracting achieve for API traces generated, when [[http://research.microsoft.com/en-us/um/people/lamport/tla/tools.html][model
|
5
|
-
checking]] formal models created by [[https://github.com/jarjuk/tla-sbuilder][Sbuilder]] -tool.
|
5
|
+
checking]] formal models created by [[https://github.com/jarjuk/tla-sbuilder][Sbuilder]] -tool. Includes also APIs
|
6
|
+
for iterating files extracted from the archive.
|
6
7
|
|
7
8
|
** Use case
|
8
9
|
|
@@ -31,18 +32,24 @@ being developed by the developer.
|
|
31
32
|
- [X] SHA1 hash to guarantee achieve integrity
|
32
33
|
- [X] Archive creation time stamp, hostname and userid
|
33
34
|
- [ ] Name of property generating API Trace
|
34
|
-
-
|
35
|
+
- Content of Api Trace step in the archive
|
35
36
|
- [X] Before state
|
36
37
|
- [X] Name of interface operation and parameter values
|
37
38
|
- [X] Return values and return status
|
38
39
|
- [X] After state
|
40
|
+
- [X] Defaults YAML dump for =beforeState=, =ap_input=, =api_return=, =afterState=
|
39
41
|
- Archive commands
|
40
42
|
- [X] Help
|
41
43
|
- [X] List steps
|
42
44
|
- [X] Extract by step number
|
43
45
|
- [X] Extract by interface name
|
44
|
-
-
|
46
|
+
- Name of extracted file
|
47
|
+
- [X] File name pattern <step>-<inp|api|ret|out>-<interface>.<SHA1>
|
48
|
+
- Archive extract options
|
45
49
|
- [X] Define target directory for achieve extract
|
50
|
+
- API to acess the extracted files
|
51
|
+
- [X] =Sbuilder::TlaTraceArch::IterateArchiveFiles.iteratateTestCases=
|
52
|
+
- [X] =Sbuilder::TlaTraceArch::ExtractArchiveFile.parserTestCaseFile=
|
46
53
|
- Extension points
|
47
54
|
- [X] Control content of Api Trace Step elements per interface name
|
48
55
|
|
@@ -66,8 +73,15 @@ and run
|
|
66
73
|
bundle install
|
67
74
|
#+END_SRC
|
68
75
|
|
76
|
+
|
69
77
|
** Usage
|
70
78
|
|
79
|
+
For a complete example, starting with installation of sbuilder- tool
|
80
|
+
and creating a formal model, refer to [[./test-trace.org][test-trace.org]].
|
81
|
+
|
82
|
+
|
83
|
+
*** Create Archive
|
84
|
+
|
71
85
|
=tla-trace-filter= uses TLA+tools model checker log output and a YAML
|
72
86
|
file mapping model checker log output to application interfaces.
|
73
87
|
|
@@ -107,6 +121,8 @@ export SETUP=setup1; bundle exec tla-trace-filter.rb api-calls $SETUP --src-di
|
|
107
121
|
chmod +x arch.sh
|
108
122
|
#+END_SRC
|
109
123
|
|
124
|
+
*** Using the Archive
|
125
|
+
|
110
126
|
To show instructions for using the archive run
|
111
127
|
|
112
128
|
#+name: exe-arch
|
@@ -144,8 +160,35 @@ $ usage
|
|
144
160
|
|
145
161
|
#+end_example
|
146
162
|
|
147
|
-
|
148
|
-
|
163
|
+
To extract files in the archive =arch.sh= for API trace step =1= into
|
164
|
+
an existing directory =tmp= run
|
165
|
+
|
166
|
+
#+BEGIN_SRC sh :eval no
|
167
|
+
./arch.sh --dir tmp step 1
|
168
|
+
#+END_SRC
|
169
|
+
|
170
|
+
|
171
|
+
*** Iterate extracted archive files in Ruby
|
172
|
+
|
173
|
+
Files extracted from an archive can be iterated and parsed using APIs
|
174
|
+
in =tla_trace_arch= GEM.
|
175
|
+
|
176
|
+
#+BEGIN_SRC ruby :eval no
|
177
|
+
require 'tla_trace_arch'
|
178
|
+
require 'set'
|
179
|
+
|
180
|
+
# Iterate api-steps for 'interface' extracted into directory 'ARGV[0]'
|
181
|
+
Sbuilder::TlaTraceArch::ReadArchiveFile.iterateApiTraceSteps( ARGV[0], interface ) do |sha1,apiTraceStep|
|
182
|
+
# parse YAML data && output
|
183
|
+
puts "sha1 : #{sha1} = #{apiTraceStep["00-step"]["sha1"]} step=#{apiTraceStep["00-step"]["step"]} interface=#{apiTraceStep["00-step"]["interface"]}"
|
184
|
+
puts "beforeState #{apiTraceStep["01-inp"]}"
|
185
|
+
puts "api_input #{apiTraceStep["02-api"]}"
|
186
|
+
puts "api_return #{apiTraceStep["03-ret"]}"
|
187
|
+
puts "afterState #{apiTraceStep["04-out"]}"
|
188
|
+
end
|
189
|
+
|
190
|
+
#+END_SRC
|
191
|
+
|
149
192
|
|
150
193
|
** Extension point =api-call-init=
|
151
194
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
module Sbuilder
|
3
|
+
module TlaTraceArch
|
4
|
+
class Configuration
|
5
|
+
|
6
|
+
# @# @!attribute [type] extract_filename_parser set regexp
|
7
|
+
# parser to parse names of extracted archive files
|
8
|
+
attr_writer :extract_filename_parser
|
9
|
+
|
10
|
+
# @return [String] regexp parser to parse names of extracted
|
11
|
+
# archive files
|
12
|
+
def extract_filename_parser
|
13
|
+
self.extract_filename_parser = @extract_filename_parser || Sbuilder::TlaTraceArch::EXTRACT_FILENAME_PARSER
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
|
2
|
+
module Sbuilder
|
3
|
+
module TlaTraceArch
|
4
|
+
module IterateArchiveFiles
|
5
|
+
|
6
|
+
# # ------------------------------------------------------------------
|
7
|
+
# @!group PUblic services
|
8
|
+
|
9
|
+
# iterate apiTraceStep -files files in 'dir' and combine files
|
10
|
+
# with same SHA1 value to ApiTraceStep test hashes. These hashes
|
11
|
+
# are validated using 'validateTestCase' method.
|
12
|
+
#
|
13
|
+
# @param interface [String] if given process only files for
|
14
|
+
# 'interface'
|
15
|
+
#
|
16
|
+
#
|
17
|
+
#
|
18
|
+
# @return [Hash] of test case keyed by sha1
|
19
|
+
def iteratateSbuilderTestCases( dir, interface=nil )
|
20
|
+
testCases = {}
|
21
|
+
iterateFiles(dir) do |fileName|
|
22
|
+
# valid file name parses 'sha1' and type 'type'
|
23
|
+
testInputMatch = matchTestCase( fileName )
|
24
|
+
next if testInputMatch.nil? || !interface.nil? && testInputMatch["interface"] != interface
|
25
|
+
if ( testInputMatch ) then
|
26
|
+
testCases[testInputMatch["sha1"] ] ||= {}
|
27
|
+
testCases[ testInputMatch["sha1"] ][testInputMatch["type"]] = testInputMatch.merge({ "dir" => dir, "fileName" => fileName } )
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# report error if no data found
|
32
|
+
raise "No test input found in directory '#{dir}'" if testCases == {}
|
33
|
+
|
34
|
+
# Validata test case - raise error for invalid
|
35
|
+
testCases.each do |sha1,testCase|
|
36
|
+
validateTestCase testCase, sha1
|
37
|
+
end
|
38
|
+
|
39
|
+
testCases
|
40
|
+
end
|
41
|
+
module_function :iteratateSbuilderTestCases
|
42
|
+
public :iteratateSbuilderTestCases
|
43
|
+
|
44
|
+
|
45
|
+
# @!endgroup
|
46
|
+
|
47
|
+
# # ------------------------------------------------------------------
|
48
|
+
# @!group Helpers
|
49
|
+
|
50
|
+
# check if 'fileName' can parsed with api_step_mask
|
51
|
+
|
52
|
+
def matchTestCase fileName
|
53
|
+
regu = Sbuilder::TlaTraceArch.configuration.extract_filename_parser
|
54
|
+
regu = "(?<step>\\d{3})-(?<type>\\d+-\\w{3})-(?<interface>[^\\.]+)\\.(?<sha1>[0-9a-fA-F]{40})"
|
55
|
+
found = fileName.match( /#{regu}/ )
|
56
|
+
found = found.names.zip( found.captures).to_h unless found.nil?
|
57
|
+
found
|
58
|
+
end
|
59
|
+
module_function :matchTestCase
|
60
|
+
|
61
|
+
|
62
|
+
# yield files in
|
63
|
+
# #{Sbuilder::TestRunner.configuration.api_step_directory}
|
64
|
+
# directory
|
65
|
+
def iterateFiles( dir = Sbuilder::TestRunner.configuration.api_step_directory )
|
66
|
+
raise "No such directory #{dir}" unless Dir.exists?( dir )
|
67
|
+
Dir.foreach( dir ).
|
68
|
+
select { |e| File.file?("#{dir}/#{e}") } .
|
69
|
+
each { |f| yield f }
|
70
|
+
end
|
71
|
+
module_function :iterateFiles
|
72
|
+
|
73
|
+
# Validate that test case 'testCase' defines 4 keys (for
|
74
|
+
# beforeState, api_input, api_return and afterState)
|
75
|
+
def validateTestCase( testCase, sha1 )
|
76
|
+
raise "Missing test input for sha1=#{sha1}, found input #{testCase.keys.join(',')}" if testCase.keys.length != 4
|
77
|
+
end
|
78
|
+
module_function :validateTestCase
|
79
|
+
|
80
|
+
|
81
|
+
# @!endgroup
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
module Sbuilder
|
3
|
+
module TlaTraceArch
|
4
|
+
|
5
|
+
class ParserErrorException < Exception; end
|
6
|
+
module ReadArchiveFile
|
7
|
+
|
8
|
+
# Read (and parse) API trace step from files pointed by
|
9
|
+
# 'apiStepFiles' hash.
|
10
|
+
#
|
11
|
+
# @param apiStepFiles [Hash] hash with values pointing to a file to
|
12
|
+
# read (parse) API trace step
|
13
|
+
#
|
14
|
+
#
|
15
|
+
# @return [Hash] A hash with values in 'apiStepFiles' replaces by
|
16
|
+
# data parsed from files pointed by apiStepFiles
|
17
|
+
# 'dir' and 'fileNmae' properties. The has
|
18
|
+
# includes also a new key "00-step" with value
|
19
|
+
# hash with properties 'interface' and 'sha'
|
20
|
+
def readApiTraceStep( apiStepFiles )
|
21
|
+
apiStepFiles.inject( { "00-step" => {} } ) do |ret, (k,v)|
|
22
|
+
if ret.keys.length == 1
|
23
|
+
ret[ret.keys.first] = {
|
24
|
+
"interface" => v["interface"],
|
25
|
+
"sha1" => v["sha1"],
|
26
|
+
"step" => v["step"],
|
27
|
+
}
|
28
|
+
end
|
29
|
+
ret[k] = parseArchiveFile( File.join( v["dir"], v["fileName"] ))
|
30
|
+
ret
|
31
|
+
end
|
32
|
+
end
|
33
|
+
module_function :readApiTraceStep
|
34
|
+
public :readApiTraceStep
|
35
|
+
|
36
|
+
|
37
|
+
#
|
38
|
+
def iterateApiTraceSteps( dir, interface )
|
39
|
+
IterateArchiveFiles.iteratateSbuilderTestCases( dir, interface).each do |sha1,apiStepFiles|
|
40
|
+
apiTraceStep = readApiTraceStep( apiStepFiles )
|
41
|
+
yield sha1, apiTraceStep
|
42
|
+
end
|
43
|
+
end
|
44
|
+
module_function :iterateApiTraceSteps
|
45
|
+
public :iterateApiTraceSteps
|
46
|
+
|
47
|
+
# Load YAML data from 'filePath'. Raise exception if 'filePath'
|
48
|
+
# does not exist or YAML -load error.
|
49
|
+
def parseArchiveFile( filePath )
|
50
|
+
|
51
|
+
raise "No such file #{filePath}" unless File.exists? filePath
|
52
|
+
begin
|
53
|
+
YAML.load_file( filePath )
|
54
|
+
rescue Exception => err
|
55
|
+
msg = <<-HERE
|
56
|
+
Could not parse file #{filePath}
|
57
|
+
|
58
|
+
#{err}: when trying to parse YAML
|
59
|
+
HERE
|
60
|
+
raise ParserErrorException, msg, err.backtrace
|
61
|
+
end
|
62
|
+
end
|
63
|
+
module_function :parseArchiveFile
|
64
|
+
public :parseArchiveFile
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative "test-runner/configuration.rb"
|
2
|
+
require_relative "test-runner/iterate_archive_files.rb"
|
3
|
+
require_relative "test-runner/read_archive_file.rb"
|
4
|
+
|
5
|
+
|
6
|
+
module Sbuilder
|
7
|
+
module TlaTraceArch
|
8
|
+
|
9
|
+
# Default regexp to parse extracted files
|
10
|
+
EXTRACT_FILENAME_PARSER = "xx"
|
11
|
+
|
12
|
+
def self.configuration
|
13
|
+
@configuration ||= Sbuilder::TlaTraceArch::Configuration.new
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
# Configure Sbuilder::TestRunner
|
18
|
+
def self.configure
|
19
|
+
yield configuration if block_given?
|
20
|
+
end
|
21
|
+
# module_function :configure
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -1,28 +1,31 @@
|
|
1
1
|
{{!
|
2
2
|
|
3
|
-
Override api-call-init.mustache in tla-trace-filter GEM
|
3
|
+
Override api-call-init.mustache in tla-trace-filter GEM.
|
4
|
+
|
5
|
+
Default creates yaml-dumps for step beforeState, api_input,
|
6
|
+
api_return, and afterState.
|
4
7
|
|
5
8
|
}}
|
6
9
|
{{#API_BEFORE_STATE_INIT}}
|
7
|
-
default: arch-
|
10
|
+
default: arch-yaml-beforeState
|
8
11
|
{{/API_BEFORE_STATE_INIT}}{{!
|
9
12
|
|
10
13
|
Configure templates to render API CALL
|
11
14
|
|
12
15
|
}}{{#API_CALL_INIT}}
|
13
|
-
default: arch-
|
16
|
+
default: arch-yaml-api_input
|
14
17
|
{{/API_CALL_INIT}}{{!
|
15
18
|
|
16
19
|
Configure templates to render API_RETURN
|
17
20
|
|
18
21
|
}}{{#API_RETURN_INIT}}
|
19
|
-
default: arch-
|
22
|
+
default: arch-yaml-api_return
|
20
23
|
{{/API_RETURN_INIT}}{{!
|
21
24
|
|
22
25
|
Configure templates to render state after API call
|
23
26
|
|
24
27
|
}}{{#API_AFTER_STATE_INIT}}
|
25
|
-
default: arch-
|
28
|
+
default: arch-yaml-afterState
|
26
29
|
{{/API_AFTER_STATE_INIT}}{{!
|
27
30
|
|
28
31
|
Do not output new-line
|
@@ -7,7 +7,7 @@ arch-call-script.mustache: self extracting stcript
|
|
7
7
|
#!/bin/bash
|
8
8
|
|
9
9
|
echo ""
|
10
|
-
echo "Self
|
10
|
+
echo "Self create by {{META.user}}@{{META.hostname}}"
|
11
11
|
echo ""
|
12
12
|
|
13
13
|
# functions
|
@@ -83,6 +83,9 @@ EOF
|
|
83
83
|
print msg
|
84
84
|
}
|
85
85
|
}
|
86
|
+
function isListCmd() {
|
87
|
+
return cmd == "list"
|
88
|
+
}
|
86
89
|
function escape_pattern(pat, safe) {
|
87
90
|
safe = pat
|
88
91
|
gsub(/[][^$.*?+{}\\()|]/, "\\\\&", safe)
|
@@ -91,7 +94,7 @@ EOF
|
|
91
94
|
# @return [String] name of of file where to extract
|
92
95
|
function extractFileName( dir, prefix ) {
|
93
96
|
# current_step using 3 digits
|
94
|
-
return dir "/" sprintf("%03d", current_step) "-" prefix "-" current_interface_implementation "
|
97
|
+
return dir "/" sprintf("%03d", current_step) "-" prefix "-" current_interface_implementation "." sha1Archive
|
95
98
|
}
|
96
99
|
BEGIN {
|
97
100
|
extract_file=""
|
@@ -105,6 +108,7 @@ EOF
|
|
105
108
|
# step_start= step_start ".*interface=" escape_pattern(interface,interface)
|
106
109
|
step_start= step_start ".*interface=" interface
|
107
110
|
}
|
111
|
+
dbg( "cmd==" cmd " for interface=" interface ", isListCmd=" isListCmd() )
|
108
112
|
dbg( "step_start=" step_start " for interface=" interface )
|
109
113
|
# identify rules
|
110
114
|
step_end="^__END_OF_STEP__"
|
@@ -139,25 +143,33 @@ EOF
|
|
139
143
|
# choose extract file
|
140
144
|
in_step && match( $0, beforeState_start ) {
|
141
145
|
extract_file = extractFileName( extract_dir, "01-inp" )
|
142
|
-
|
146
|
+
if ( isListCmd() ) {
|
147
|
+
print "" > extract_file
|
148
|
+
}
|
143
149
|
dbg( "in_step && beforeState_start:" $0 ", extract_file=" extract_file)
|
144
150
|
next # getline
|
145
151
|
}
|
146
152
|
in_step && match( $0, api_call_start ) {
|
147
153
|
extract_file = extractFileName( extract_dir, "02-api" )
|
148
|
-
|
154
|
+
if ( isListCmd() ) {
|
155
|
+
print "" > extract_file
|
156
|
+
}
|
149
157
|
dbg( "in_step && api_call_start:" $0 ", extract_file=" extract_file )
|
150
158
|
next # getline
|
151
159
|
}
|
152
160
|
in_step && match( $0, api_return_start ) {
|
153
161
|
extract_file = extractFileName( extract_dir, "03-ret" )
|
154
|
-
|
162
|
+
if ( isListCmd() ) {
|
163
|
+
print "" > extract_file
|
164
|
+
}
|
155
165
|
dbg( "in_step && api_return_start:" $0 ", extract_file=" extract_file )
|
156
166
|
next # getline
|
157
167
|
}
|
158
168
|
in_step && match( $0, afterState_start ) {
|
159
169
|
extract_file = extractFileName( extract_dir, "04-out" )
|
160
|
-
|
170
|
+
if ( isListCmd() ) {
|
171
|
+
print "" > extract_file
|
172
|
+
}
|
161
173
|
dbg( "in_step && afterState_start:" $0 ", extract_file=" extract_file )
|
162
174
|
next # getline
|
163
175
|
}
|
@@ -183,7 +195,7 @@ EOF
|
|
183
195
|
next # getline
|
184
196
|
}
|
185
197
|
# extract?
|
186
|
-
|
198
|
+
( ! isListCmd() && length(extract_file) > 0 ) {
|
187
199
|
print $0 >> extract_file
|
188
200
|
}
|
189
201
|
# done
|
@@ -0,0 +1,11 @@
|
|
1
|
+
{{!
|
2
|
+
arch-yaml-afterState: default template outputting YAML dump for
|
3
|
+
API trace `afterState`
|
4
|
+
}}#
|
5
|
+
# Step {{now}} call to {{interface.interface_operation}} afterState
|
6
|
+
{{#DUMP_YAML}}afterState{{/DUMP_YAML}}
|
7
|
+
{{!
|
8
|
+
Local Variables:
|
9
|
+
require-final-newline: nil
|
10
|
+
End:
|
11
|
+
}}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
{{!
|
2
|
+
arch-yaml-api_input: default template outputting YAML dump for
|
3
|
+
API trace `api_input`
|
4
|
+
}}#
|
5
|
+
# Step {{now}} call to {{interface.interface_operation}} api_input
|
6
|
+
{{#DUMP_YAML}}api_input{{/DUMP_YAML}}
|
7
|
+
{{!
|
8
|
+
Local Variables:
|
9
|
+
require-final-newline: nil
|
10
|
+
End:
|
11
|
+
}}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
{{!
|
2
|
+
arch-yaml-api_return: default template outputting YAML dump for
|
3
|
+
API trace `api_return`
|
4
|
+
}}#
|
5
|
+
# Step {{now}} call to {{interface.interface_operation}} api_return
|
6
|
+
{{#DUMP_YAML}}api_return{{/DUMP_YAML}}
|
7
|
+
{{!
|
8
|
+
Local Variables:
|
9
|
+
require-final-newline: nil
|
10
|
+
End:
|
11
|
+
}}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
{{!
|
2
|
+
arch-yaml-beforeState: default template outputting YAML dump for
|
3
|
+
API trace `beforeState`
|
4
|
+
}}#
|
5
|
+
#
|
6
|
+
# Step {{now}} call to {{interface.interface_operation}} beforeState
|
7
|
+
{{#DUMP_YAML}}beforeState{{/DUMP_YAML}}
|
8
|
+
{{!
|
9
|
+
Local Variables:
|
10
|
+
require-final-newline: nil
|
11
|
+
End:
|
12
|
+
}}
|
data/tla-trace-arch.gemspec
CHANGED
@@ -22,6 +22,9 @@ Gem::Specification.new do |s|
|
|
22
22
|
to create a self extracting achieve for API traces generated, when
|
23
23
|
model checking formal models created by [tla-Sbuilder] -tool.
|
24
24
|
|
25
|
+
Also includes Ruby classes to extract test cases from archive
|
26
|
+
extract.
|
27
|
+
|
25
28
|
Use case:
|
26
29
|
|
27
30
|
Formal models, built using [tla-sbuilder], and model checked using
|
@@ -52,13 +55,13 @@ Gem::Specification.new do |s|
|
|
52
55
|
EOF
|
53
56
|
|
54
57
|
s.authors = ["jarjuk"]
|
55
|
-
s.files = ["README.org", "VERSION", "#{s.name}.gemspec" ] | Dir.glob("mustache/**/*")
|
58
|
+
s.files = ["README.org", "VERSION", "#{s.name}.gemspec" ] | Dir.glob("mustache/**/*") | Dir.glob("lib/**/*")
|
56
59
|
s.require_paths = [ "lib" ]
|
57
60
|
# s.executables = [ "tla-trace-filter.rb" ]
|
58
61
|
s.license = 'MIT'
|
59
62
|
|
60
63
|
s.required_ruby_version = '~> 2', ">=2.3"
|
61
64
|
|
62
|
-
s.add_runtime_dependency 'tla-trace-filter', '~>0.0', ">=0.0.
|
65
|
+
s.add_runtime_dependency 'tla-trace-filter', '~>0.0', ">=0.0.6"
|
63
66
|
|
64
67
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tla-trace-arch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jarjuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tla-trace-filter
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '0.0'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.0.
|
22
|
+
version: 0.0.6
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,10 +29,11 @@ dependencies:
|
|
29
29
|
version: '0.0'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 0.0.
|
32
|
+
version: 0.0.6
|
33
33
|
description: "\n A set of [mustache] templates extending [tla-trace-filter] -tool\n
|
34
34
|
\ to create a self extracting achieve for API traces generated, when\n model
|
35
|
-
checking formal models created by [tla-Sbuilder] -tool.\n\n
|
35
|
+
checking formal models created by [tla-Sbuilder] -tool.\n\n Also includes Ruby
|
36
|
+
classes to extract test cases from archive\n extract.\n\n Use case:\n\n Formal
|
36
37
|
models, built using [tla-sbuilder], and model checked using\n [TLA+tools]], can
|
37
38
|
generate /API Traces/, which represent\n end-to-end scenarios executing across
|
38
39
|
system services in the\n formal model. An API Trace is composed of steps, with
|
@@ -56,6 +57,10 @@ extra_rdoc_files: []
|
|
56
57
|
files:
|
57
58
|
- README.org
|
58
59
|
- VERSION
|
60
|
+
- lib/test-runner/configuration.rb
|
61
|
+
- lib/test-runner/iterate_archive_files.rb
|
62
|
+
- lib/test-runner/read_archive_file.rb
|
63
|
+
- lib/tla_trace_arch.rb
|
59
64
|
- mustache/api-call-after-state-post.mustache
|
60
65
|
- mustache/api-call-after-state-pre.mustache
|
61
66
|
- mustache/api-call-before-state-post.mustache
|
@@ -72,10 +77,10 @@ files:
|
|
72
77
|
- mustache/api-call-step-post.mustache
|
73
78
|
- mustache/api-call-step-pre.mustache
|
74
79
|
- mustache/arch-call-script.mustache
|
75
|
-
- mustache/arch-
|
76
|
-
- mustache/arch-
|
77
|
-
- mustache/arch-
|
78
|
-
- mustache/arch-
|
80
|
+
- mustache/arch-yaml-afterState.mustache
|
81
|
+
- mustache/arch-yaml-api_input.mustache
|
82
|
+
- mustache/arch-yaml-api_return.mustache
|
83
|
+
- mustache/arch-yaml-beforeState.mustache
|
79
84
|
- tla-trace-arch.gemspec
|
80
85
|
homepage:
|
81
86
|
licenses:
|