xmlservice 1.3.0

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 (37) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +19 -0
  3. data/README_IBM_i +62 -0
  4. data/lib/adapters/abstract_adapter.rb +82 -0
  5. data/lib/adapters/db2_adapter.rb +70 -0
  6. data/lib/adapters/rest_adapter.rb +32 -0
  7. data/lib/password/password.rb +229 -0
  8. data/lib/xmlservice.rb +2477 -0
  9. data/test/README_IBM_i +3 -0
  10. data/test/Rakefile +42 -0
  11. data/test/genpassword.rb +111 -0
  12. data/test/test_60000_toolkit_driver/Rakefile +11 -0
  13. data/test/test_60000_toolkit_driver/test_60010_DriverCallPgmZZCALL.rb +403 -0
  14. data/test/test_60000_toolkit_driver/test_60110_DriverCallSrvPgmZZARRAY.rb +149 -0
  15. data/test/test_60000_toolkit_driver/test_60310_DriverCMD.rb +77 -0
  16. data/test/test_60000_toolkit_driver/test_60510_DriverDataQueue.rb +126 -0
  17. data/test/test_60000_toolkit_driver/test_60610_DriverCallSrvPgmZZBINARY.rb +59 -0
  18. data/test/test_60000_toolkit_driver/test_60710_DriverSH.rb +73 -0
  19. data/test/test_60000_toolkit_driver/test_60910_DriverCallPgmZZMISS.rb +44 -0
  20. data/test/test_60000_toolkit_driver/test_65010_DriverCallDB2.rb +265 -0
  21. data/test/test_60000_toolkit_driver/zzassign.rb +66 -0
  22. data/test/test_60000_toolkit_driver/zzquick.rb +149 -0
  23. data/test/test_60000_toolkit_driver/zztestrest.rb +45 -0
  24. data/test/test_60000_toolkit_driver/zzthreadold.rb +78 -0
  25. data/test/test_70000_toolkit_testonly/Rakefile +11 -0
  26. data/test/test_70000_toolkit_testonly/test_70010_DriverCallPgmTestOnly.rb +270 -0
  27. data/test/test_80000_toolkit_dsl/Rakefile +11 -0
  28. data/test/test_80000_toolkit_dsl/test_80010_DSLCallPgmZZCALL.rb +162 -0
  29. data/test/test_80000_toolkit_dsl/test_80110_DSLCallSrvPgmZZARRAY.rb +150 -0
  30. data/test/test_authorization/README_IBM_i +15 -0
  31. data/test/test_authorization/auth.rb +101 -0
  32. data/test/test_authorization/key.yml +2 -0
  33. data/test/test_authorization/password.yml +3 -0
  34. data/test/test_authorization/xmlservice.yml +69 -0
  35. data/test/test_data/rowcol.rb +57 -0
  36. data/version.txt +1 -0
  37. metadata +92 -0
@@ -0,0 +1,3 @@
1
+ =================
2
+ IBM i tests (see xmlservice/README_IBM_i)
3
+ =================
@@ -0,0 +1,42 @@
1
+ # rake test # run tests normally
2
+ require 'rake/testtask'
3
+ task :default => [:test]
4
+ $startDir = Dir.pwd
5
+ $results = ""
6
+
7
+ task :doit do
8
+ puts "============================="
9
+ puts Dir.pwd
10
+ out = `rake test`
11
+ puts out
12
+ stats = out.split("Finished")
13
+ $results << "------------------\n"
14
+ $results << Dir.pwd << "\n"
15
+ $results << "Finished" << stats[1] << "\n"
16
+ end
17
+
18
+ task :test_60000 do
19
+ Dir.chdir($startDir)
20
+ Dir.chdir("./test_60000_toolkit_driver")
21
+ Rake::Task['doit'].execute
22
+ end
23
+ task :test_80000 do
24
+ Dir.chdir($startDir)
25
+ Dir.chdir("./test_80000_toolkit_dsl")
26
+ Rake::Task['doit'].execute
27
+ end
28
+ task :test_result do
29
+ puts "============================="
30
+ puts "============================="
31
+ puts "============================="
32
+ puts $results
33
+ end
34
+
35
+ task :test => [
36
+ :test_60000,
37
+ :test_80000,
38
+ :test_result
39
+ ]
40
+
41
+
42
+
@@ -0,0 +1,111 @@
1
+ require 'xmlservice'
2
+ require 'active_record'
3
+ require 'ibm_db'
4
+ require 'pathname'
5
+
6
+ puts "Input: "
7
+ ARGV.each do|a|
8
+ puts " Argument: #{a}"
9
+ end
10
+
11
+ puts "Output: "
12
+ if (ARGV.count < 3)
13
+ puts "Syntax:"
14
+ puts " ruby genpassword.rb db user password [key]"
15
+ puts " db - *LOCAL (see WRKRDBDIRE)"
16
+ puts " user - user profile id"
17
+ puts " password - user profile password"
18
+ puts " Optional:"
19
+ puts " key - pass key (generate if missing)"
20
+ puts " - /path/key.yml "
21
+ puts " - YIPS4321AAAAAAAAAAAAAAA132424245 (actual key)"
22
+ exit(-1)
23
+ end
24
+
25
+ $db = ARGV[0]
26
+ $user = ARGV[1]
27
+ $pass = ARGV[2]
28
+ # $db = "LP0364D"
29
+ # $user = "DB2"
30
+ # $pass = "NICE2DB2"
31
+ ActiveXMLService::Base.establish_connection(
32
+ :adapter => 'ibm_db',
33
+ :database => $db,
34
+ :username => $user,
35
+ :password => $pass,
36
+ :connection => "ActiveRecord",
37
+ :install => "XMLSERVICE",
38
+ :ctl => "*sbmjob",
39
+ :ipc => "/tmp/ruby042",
40
+ :size => 15000000,
41
+ :head => "<?xml version='1.0'?>"
42
+ )
43
+ $isnew = false
44
+ if (ARGV.count < 4)
45
+ $key = ActiveXMLService::Base.generate_key()
46
+ $isnew = true
47
+ else
48
+ $key = ARGV[3]
49
+ if $key.include? ".yml"
50
+ yaml_file = $key
51
+ rfile = Pathname.new(yaml_file)
52
+ if rfile
53
+ f = open(rfile.to_s)
54
+ doc = YAML::load_stream( f )
55
+ doc.each do |key, value|
56
+ key.each do |key0, value0|
57
+ $key = value0
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ penc = ActiveXMLService::Base.generate_password($pass,$key)
64
+ puts
65
+ puts "config/database.yml"
66
+ puts "xmlservice: &xmlservice"
67
+ puts " connection: ActiveRecord"
68
+ puts " install: XMLSERVICE"
69
+ puts " ctl: *sbmjob"
70
+ puts " ipc: /tmp/ruby042"
71
+ puts " size: 15000000"
72
+ puts " head: \"<?xml version='1.0'?>\""
73
+ puts "development:"
74
+ puts " adapter: ibm_db"
75
+ puts " database: #{$db}"
76
+ puts " username: #{$user}"
77
+ puts " pwd_yaml: /path/password.yml"
78
+ puts " -- or --"
79
+ puts " pwd_enc: #{penc}"
80
+ puts " key_yaml: /path/key.yml"
81
+ puts " <<: *xmlservice"
82
+ puts "production:"
83
+ puts " adapter: ibm_db"
84
+ puts " database: #{$db}"
85
+ puts " username: #{$user}"
86
+ puts " pwd_yaml: /path/password.yml"
87
+ puts " <<: *xmlservice"
88
+ puts "test:"
89
+ puts " adapter: ibm_db"
90
+ puts " database: #{$db}"
91
+ puts " username: #{$user}"
92
+ puts " pwd_yaml: /path/password.yml"
93
+ puts " <<: *xmlservice"
94
+ puts
95
+ puts "/path/password.yml"
96
+ puts "#{$user}:"
97
+ puts " pwd_enc: #{penc}"
98
+ puts " key_yaml: /path/key.yml"
99
+ puts
100
+ if $isnew
101
+ puts "Warning: "
102
+ puts " pwd_key is new (generated now)"
103
+ puts " re-generate any exsisting"
104
+ puts " password.yml encrypted passwords"
105
+ puts " with a new key.yml (below)"
106
+ end
107
+ puts
108
+ puts "/path/key.yml"
109
+ puts "pwd_key: #{$key}"
110
+
111
+
@@ -0,0 +1,11 @@
1
+ # rake test # run tests normally
2
+ # rake test TEST=just_one_file.rb # run just one test file.
3
+ # rake test TESTOPTS="-v" # run in verbose mode
4
+ # rake test TESTOPTS="--runner=fox" # use the fox test runner
5
+ require 'rake/testtask'
6
+
7
+ Rake::TestTask.new do |t|
8
+ t.libs << "."
9
+ t.test_files = FileList['test_*.rb']
10
+ t.verbose = true
11
+ end
@@ -0,0 +1,403 @@
1
+ # File: test_60010_DriverCallPgmZZCALL.rb
2
+ require "../test_authorization/auth"
3
+ require "../test_data/rowcol"
4
+
5
+ # D INCHARA S 1a
6
+ # D INCHARB S 1a
7
+ # D INDEC1 S 7p 4
8
+ # D INDEC2 S 12p 2
9
+ # D INDS1 DS
10
+ # D DSCHARA 1a
11
+ # D DSCHARB 1a
12
+ # D DSDEC1 7p 4
13
+ # D DSDEC2 12p 2
14
+ # *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
15
+ # * main(): Control flow
16
+ # *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17
+ # C *Entry PLIST
18
+ # C PARM INCHARA
19
+ # C PARM INCHARB
20
+ # C PARM INDEC1
21
+ # C PARM INDEC2
22
+ # C PARM INDS1
23
+
24
+ class Test_60010_DriverCallPgmZZCALL < RowColUnitTest
25
+ # -------------------------------
26
+ # test functions (start with prefix test_)
27
+ # rake test -- Unit run alpha sort order
28
+ # run #1) test_0000_connect
29
+ # run #2) test_nnnn_xxx
30
+ # :
31
+ # run #n) test_9999_close
32
+ # -------------------------------
33
+ def test_0030_pgm_zzcall_array
34
+ # call IBM i ZZCALL (default values)
35
+ zzcall = XMLService::I_PGM.new("ZZCALL",$toolkit_test_lib,{'error'=>'fast'})
36
+ zzcall << XMLService::I_a.new('inchara',1,'s')
37
+ zzcall << XMLService::I_a.new('incharb',1,'r')
38
+ zzcall << XMLService::I_p.new('indec1',7,4,55.1111)
39
+ zzcall << XMLService::I_p.new('indec2',12,2,333.22)
40
+ zzcall << XMLService::I_DS.new('inds1',1,
41
+ [
42
+ XMLService::I_a.new('dschara',1,'t'),
43
+ XMLService::I_a.new('dscharb',1,'f'),
44
+ XMLService::I_p.new('dsdec1',7,4,77.6666),
45
+ XMLService::I_p.new('dsdec2',12,2,88888.77)
46
+ ])
47
+
48
+
49
+ # set input variables for call ... normal Ruby OO object path
50
+ zzcall.input.PARM0.inchara = 'a'
51
+ zzcall.input.PARM1.incharb = 'a'
52
+ zzcall.input.PARM2.indec1 = 11.1111
53
+ zzcall.input.PARM3.indec2 = 11.11
54
+ zzcall.input.PARM4.inds1[0].dschara = 'a'
55
+ zzcall.input.PARM4.inds1[1].dscharb = 'a'
56
+ zzcall.input.PARM4.inds1[2].dsdec1 = 111.1111
57
+ zzcall.input.PARM4.inds1[3].dsdec2 = 1111.11
58
+ puts "\n+++++++++ input normal ++++++++++++++++"
59
+ puts zzcall.to_xml
60
+ # verify input
61
+ self.match_value(__method__,__LINE__,'inchara' ,'a' ,zzcall.input.PARM0.inchara)
62
+ self.match_value(__method__,__LINE__,'incharb' ,'a' ,zzcall.input.PARM1.incharb)
63
+ self.match_value(__method__,__LINE__,'indec1' ,11.1111 ,zzcall.input.PARM2.indec1)
64
+ self.match_value(__method__,__LINE__,'indec2' ,11.11 ,zzcall.input.PARM3.indec2)
65
+ self.match_value(__method__,__LINE__,'dschara' ,'a' ,zzcall.input.PARM4.inds1[0].dschara)
66
+ self.match_value(__method__,__LINE__,'dscharb' ,'a' ,zzcall.input.PARM4.inds1[1].dscharb)
67
+ self.match_value(__method__,__LINE__,'dsdec1' ,111.1111 ,zzcall.input.PARM4.inds1[2].dsdec1)
68
+ self.match_value(__method__,__LINE__,'dsdec2' ,1111.11 ,zzcall.input.PARM4.inds1[3].dsdec2)
69
+
70
+ # set input with fewer dots ... clever naming
71
+ zzcall.input.inchara = 'b'
72
+ zzcall.input.incharb = 'b'
73
+ zzcall.input.indec1 = 22.2222
74
+ zzcall.input.indec2 = 22.22
75
+ zzcall.input.inds1[0].dschara = 'b'
76
+ zzcall.input.inds1[1].dscharb = 'b'
77
+ zzcall.input.inds1[2].dsdec1 = 222.2222
78
+ zzcall.input.inds1[3].dsdec2 = 2222.22
79
+ puts "\n+++++++++ input fewer ++++++++++++++++"
80
+ puts zzcall.to_xml
81
+ # verify input
82
+ self.match_value(__method__,__LINE__,'inchara' ,'b' ,zzcall.input.PARM0.inchara)
83
+ self.match_value(__method__,__LINE__,'incharb' ,'b' ,zzcall.input.PARM1.incharb)
84
+ self.match_value(__method__,__LINE__,'indec1' ,22.2222 ,zzcall.input.PARM2.indec1)
85
+ self.match_value(__method__,__LINE__,'indec2' ,22.22 ,zzcall.input.PARM3.indec2)
86
+ self.match_value(__method__,__LINE__,'dschara' ,'b' ,zzcall.input.PARM4.inds1[0].dschara)
87
+ self.match_value(__method__,__LINE__,'dscharb' ,'b' ,zzcall.input.PARM4.inds1[1].dscharb)
88
+ self.match_value(__method__,__LINE__,'dsdec1' ,222.2222 ,zzcall.input.PARM4.inds1[2].dsdec1)
89
+ self.match_value(__method__,__LINE__,'dsdec2' ,2222.22 ,zzcall.input.PARM4.inds1[3].dsdec2)
90
+
91
+
92
+ # call IBM i ZZCALL
93
+ zzcall.execute
94
+
95
+ # xmlservice error occurred?
96
+ rc = zzcall.xmlservice_error
97
+ if rc
98
+ puts zzcall.dump_error
99
+ self.match_value(__method__,__LINE__,'error' ,false,rc)
100
+ end
101
+
102
+ #puts zzcall.inspect
103
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
104
+ puts zzcall.dump_inspect
105
+
106
+ puts "\n+++++++++ output xml ++++++++++++++++"
107
+ puts zzcall.out_xml
108
+
109
+ # response xml ... normal Ruby OO object path
110
+ puts "\n+++++++++ output normal ++++++++++++++++"
111
+ puts " inchara...#{zzcall.response.PARM0.inchara}\n"
112
+ puts " incharb...#{zzcall.response.PARM1.incharb}\n"
113
+ puts " indec1....#{zzcall.response.PARM2.indec1}\n"
114
+ puts " indec2....#{zzcall.response.PARM3.indec2}\n"
115
+ for i in 0..zzcall.response.PARM4.inds1.count-1
116
+ puts " inds1[#{i}] = ["
117
+ puts " dschara...#{zzcall.response.PARM4.inds1[i].dschara}"
118
+ puts " dscharb...#{zzcall.response.PARM4.inds1[i].dscharb}"
119
+ puts " dsdec1....#{zzcall.response.PARM4.inds1[i].dsdec1}"
120
+ puts " dsdec2....#{zzcall.response.PARM4.inds1[i].dsdec2}"
121
+ puts " ]\n"
122
+ end
123
+ # verify response
124
+ self.match_value(__method__,__LINE__,'inchara' ,'C' ,zzcall.response.PARM0.inchara)
125
+ self.match_value(__method__,__LINE__,'incharb' ,'D' ,zzcall.response.PARM1.incharb)
126
+ self.match_value(__method__,__LINE__,'indec1' ,321.1234 ,zzcall.response.PARM2.indec1)
127
+ self.match_value(__method__,__LINE__,'indec2' ,1234567890.12 ,zzcall.response.PARM3.indec2)
128
+ for i in 0..zzcall.response.PARM4.inds1.count - 1
129
+ self.match_value(__method__,__LINE__,'dschara' ,'E' ,zzcall.response.PARM4.inds1[i].dschara)
130
+ self.match_value(__method__,__LINE__,'dscharb' ,'F' ,zzcall.response.PARM4.inds1[i].dscharb)
131
+ self.match_value(__method__,__LINE__,'dsdec1' ,333.333 ,zzcall.response.PARM4.inds1[i].dsdec1)
132
+ self.match_value(__method__,__LINE__,'dsdec2' ,4444444444.44 ,zzcall.response.PARM4.inds1[i].dsdec2)
133
+ end
134
+
135
+ # response xml with fewer dots ... clever naming
136
+ puts "\n+++++++++ output fewer ++++++++++++++++"
137
+ puts " inchara...#{zzcall.response.inchara}\n"
138
+ puts " incharb...#{zzcall.response.incharb}\n"
139
+ puts " indec1....#{zzcall.response.indec1}\n"
140
+ puts " indec2....#{zzcall.response.indec2}\n"
141
+ zzcall.response.inds1.each do |inds1|
142
+ puts " dschara...#{inds1.dschara}"
143
+ puts " dscharb...#{inds1.dscharb}"
144
+ puts " dsdec1....#{inds1.dsdec1}"
145
+ puts " dsdec2....#{inds1.dsdec2}"
146
+ end
147
+ # verify response
148
+ self.match_value(__method__,__LINE__,'inchara' ,'C' ,zzcall.response.inchara)
149
+ self.match_value(__method__,__LINE__,'incharb' ,'D' ,zzcall.response.incharb)
150
+ self.match_value(__method__,__LINE__,'indec1' ,321.1234 ,zzcall.response.indec1)
151
+ self.match_value(__method__,__LINE__,'indec2' ,1234567890.12 ,zzcall.response.indec2)
152
+ zzcall.response.inds1.each do |inds1|
153
+ self.match_value(__method__,__LINE__,'dschara' ,'E' ,inds1.dschara)
154
+ self.match_value(__method__,__LINE__,'dscharb' ,'F' ,inds1.dscharb)
155
+ self.match_value(__method__,__LINE__,'dsdec1' ,333.333 ,inds1.dsdec1)
156
+ self.match_value(__method__,__LINE__,'dsdec2' ,4444444444.44 ,inds1.dsdec2)
157
+ end
158
+
159
+
160
+ end
161
+
162
+ def test_0040_pgm_zzcall_hash
163
+ # call IBM i ZZCALL (default values)
164
+ zzcall = XMLService::I_PGM.new("ZZCALL",$toolkit_test_lib,{'error'=>'fast'})
165
+ zzcall.inputParameter('willy','both',XMLService::I_a.new('inchara',1,'s'))
166
+ zzcall.inputParameter('nilly','both',XMLService::I_a.new('incharb',1,'r'))
167
+ zzcall.inputParameter('silly','both',XMLService::I_p.new('indec1',7,4,55.1111))
168
+ zzcall.inputParameter('tilly','both',XMLService::I_p.new('indec2',12,2,333.22))
169
+ zzcall.inputParameter('filly','both',XMLService::I_DS.new('inds1',1,
170
+ {
171
+ 'dschara'=>XMLService::I_a.new('dschara',1,'t'),
172
+ 'dscharb'=>XMLService::I_a.new('dscharb',1,'f'),
173
+ 'dsdec1'=>XMLService::I_p.new('dsdec1',7,4,77.6666),
174
+ 'dsdec2'=>XMLService::I_p.new('dsdec2',12,2,88888.77)
175
+ }))
176
+
177
+ # set input variables for call ... normal Ruby OO object path
178
+ zzcall.input.willy.inchara = 'a'
179
+ zzcall.input.nilly.incharb = 'a'
180
+ zzcall.input.silly.indec1 = 11.1111
181
+ zzcall.input.tilly.indec2 = 11.11
182
+ zzcall.input.filly.inds1['dschara'].dschara = 'a'
183
+ zzcall.input.filly.inds1['dscharb'].dscharb = 'a'
184
+ zzcall.input.filly.inds1['dsdec1'].dsdec1 = 111.1111
185
+ zzcall.input.filly.inds1['dsdec2'].dsdec2 = 111.11
186
+ puts "\n+++++++++ input normal ++++++++++++++++"
187
+ puts zzcall.to_xml
188
+ self.match_value(__method__,__LINE__,'inchara' ,'a' ,zzcall.input.willy.inchara)
189
+ self.match_value(__method__,__LINE__,'incharb' ,'a' ,zzcall.input.nilly.incharb)
190
+ self.match_value(__method__,__LINE__,'indec1' ,11.1111 ,zzcall.input.silly.indec1)
191
+ self.match_value(__method__,__LINE__,'indec2' ,11.11 ,zzcall.input.tilly.indec2)
192
+ self.match_value(__method__,__LINE__,'dschara' ,'a' ,zzcall.input.filly.inds1['dschara'].dschara)
193
+ self.match_value(__method__,__LINE__,'dscharb' ,'a' ,zzcall.input.filly.inds1['dscharb'].dscharb)
194
+ self.match_value(__method__,__LINE__,'dsdec1' ,111.1111 ,zzcall.input.filly.inds1['dsdec1'].dsdec1)
195
+ self.match_value(__method__,__LINE__,'dsdec2' ,111.11 ,zzcall.input.filly.inds1['dsdec2'].dsdec2)
196
+
197
+
198
+ # set input with fewer dots ... clever naming
199
+ zzcall.input.inchara = 'b'
200
+ zzcall.input.incharb = 'b'
201
+ zzcall.input.indec1 = 22.2222
202
+ zzcall.input.indec2 = 22.22
203
+ zzcall.input.inds1['dschara'].dschara = 'b'
204
+ zzcall.input.inds1['dscharb'].dscharb = 'b'
205
+ zzcall.input.inds1['dsdec1'].dsdec1 = 222.2222
206
+ zzcall.input.inds1['dsdec2'].dsdec2 = 222.22
207
+ puts "\n+++++++++ input fewer ++++++++++++++++"
208
+ puts zzcall.to_xml
209
+ self.match_value(__method__,__LINE__,'inchara' ,'b' ,zzcall.input.willy.inchara)
210
+ self.match_value(__method__,__LINE__,'incharb' ,'b' ,zzcall.input.nilly.incharb)
211
+ self.match_value(__method__,__LINE__,'indec1' ,22.2222 ,zzcall.input.silly.indec1)
212
+ self.match_value(__method__,__LINE__,'indec2' ,22.22 ,zzcall.input.tilly.indec2)
213
+ self.match_value(__method__,__LINE__,'dschara' ,'b' ,zzcall.input.filly.inds1['dschara'].dschara)
214
+ self.match_value(__method__,__LINE__,'dscharb' ,'b' ,zzcall.input.filly.inds1['dscharb'].dscharb)
215
+ self.match_value(__method__,__LINE__,'dsdec1' ,222.2222 ,zzcall.input.filly.inds1['dsdec1'].dsdec1)
216
+ self.match_value(__method__,__LINE__,'dsdec2' ,222.22 ,zzcall.input.filly.inds1['dsdec2'].dsdec2)
217
+
218
+ # call IBM i ZZCALL
219
+ zzcall.execute
220
+
221
+ # xmlservice error occurred?
222
+ rc = zzcall.xmlservice_error
223
+ if rc
224
+ puts zzcall.dump_error()
225
+ self.match_value(__method__,__LINE__,'error' ,false,rc)
226
+ end
227
+
228
+ #puts zzcall.inspect
229
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
230
+ puts zzcall.dump_inspect
231
+
232
+ puts "\n+++++++++ output xml ++++++++++++++++"
233
+ puts zzcall.out_xml
234
+
235
+
236
+ # response xml ... normal Ruby OO object path
237
+ puts "\n+++++++++ output normal ++++++++++++++++"
238
+ puts " inchara...#{zzcall.response.willy.inchara}\n"
239
+ puts " incharb...#{zzcall.response.nilly.incharb}\n"
240
+ puts " indec1....#{zzcall.response.silly.indec1}\n"
241
+ puts " indec2....#{zzcall.response.tilly.indec2}\n"
242
+ zzcall.response.filly.inds1.each do |inds1|
243
+ puts " dschara...#{inds1.dschara}"
244
+ puts " dscharb...#{inds1.dscharb}"
245
+ puts " dsdec1....#{inds1.dsdec1}"
246
+ puts " dsdec2....#{inds1.dsdec2}"
247
+ end
248
+ # verify output
249
+ self.match_value(__method__,__LINE__,'inchara' ,'C' ,zzcall.response.willy.inchara)
250
+ self.match_value(__method__,__LINE__,'incharb' ,'D' ,zzcall.response.nilly.incharb)
251
+ self.match_value(__method__,__LINE__,'indec1' ,321.1234 ,zzcall.response.silly.indec1)
252
+ self.match_value(__method__,__LINE__,'indec2' ,1234567890.12 ,zzcall.response.tilly.indec2)
253
+ zzcall.response.filly.inds1.each do |inds1|
254
+ self.match_value(__method__,__LINE__,'dschara' ,'E' ,inds1.dschara)
255
+ self.match_value(__method__,__LINE__,'dscharb' ,'F' ,inds1.dscharb)
256
+ self.match_value(__method__,__LINE__,'dsdec1' ,333.333 ,inds1.dsdec1)
257
+ self.match_value(__method__,__LINE__,'dsdec2' ,4444444444.44 ,inds1.dsdec2)
258
+ end
259
+
260
+ # response xml with fewer dots ... clever naming
261
+ puts "\n+++++++++ output fewer ++++++++++++++++"
262
+ puts " inchara...#{zzcall.response.inchara}\n"
263
+ puts " incharb...#{zzcall.response.incharb}\n"
264
+ puts " indec1....#{zzcall.response.indec1}\n"
265
+ puts " indec2....#{zzcall.response.indec2}\n"
266
+ zzcall.response.inds1.each do |inds1|
267
+ puts " dschara...#{inds1.dschara}"
268
+ puts " dscharb...#{inds1.dscharb}"
269
+ puts " dsdec1....#{inds1.dsdec1}"
270
+ puts " dsdec2....#{inds1.dsdec2}"
271
+ end
272
+ # verify output
273
+ self.match_value(__method__,__LINE__,'inchara' ,'C' ,zzcall.response.inchara)
274
+ self.match_value(__method__,__LINE__,'incharb' ,'D' ,zzcall.response.incharb)
275
+ self.match_value(__method__,__LINE__,'indec1' ,321.1234 ,zzcall.response.indec1)
276
+ self.match_value(__method__,__LINE__,'indec2' ,1234567890.12 ,zzcall.response.indec2)
277
+ zzcall.response.inds1.each do |inds1|
278
+ self.match_value(__method__,__LINE__,'dschara' ,'E' ,inds1.dschara)
279
+ self.match_value(__method__,__LINE__,'dscharb' ,'F' ,inds1.dscharb)
280
+ self.match_value(__method__,__LINE__,'dsdec1' ,333.333 ,inds1.dsdec1)
281
+ self.match_value(__method__,__LINE__,'dsdec2' ,4444444444.44 ,inds1.dsdec2)
282
+ end
283
+ end
284
+
285
+
286
+ def test_0130_pgm_zzcall_array
287
+ # call IBM i ZZCALL (default values)
288
+ zzcall = XMLService::I_PGM.new("ZZCALL",$toolkit_test_lib,{'error'=>'fast'})
289
+ zzcall << XMLService::I_a.new('inchara',1,'s')
290
+ zzcall << XMLService::I_a.new('incharb',1,'r')
291
+ zzcall << XMLService::I_p.new('indec1',7,4,55.1111)
292
+ zzcall << XMLService::I_p.new('indec2',12,2,333.22)
293
+ zzcall << XMLService::I_DS.new('inds1',1,
294
+ [
295
+ XMLService::I_a.new('dschara',1,'t'),
296
+ XMLService::I_a.new('dscharb',1,'f'),
297
+ XMLService::I_p.new('dsdec1',7,4,77.6666),
298
+ XMLService::I_p.new('dsdec2',12,2,88888.77)
299
+ ])
300
+
301
+ puts "\n+++++++++ input call array of hash params ++++++++++++++++"
302
+ parms = [ {'inchara'=>'1'},
303
+ {'incharb'=>'1'},
304
+ {'indec1'=>11.1111},
305
+ {'indec2'=>111.11},
306
+ {'inds1'=>[{'dschara'=>'2'},{'dscharb'=>'2'},{'dsdec1'=>22.2222},{'dsdec2'=>222.22}]} ]
307
+ zzcall.call(parms)
308
+ puts zzcall.to_xml
309
+ self.match_value(__method__,__LINE__,'inchara' ,'1' ,zzcall.input.PARM0.inchara)
310
+ self.match_value(__method__,__LINE__,'incharb' ,'1' ,zzcall.input.PARM1.incharb)
311
+ self.match_value(__method__,__LINE__,'indec1' ,11.1111 ,zzcall.input.PARM2.indec1)
312
+ self.match_value(__method__,__LINE__,'indec2' ,111.11 ,zzcall.input.PARM3.indec2)
313
+ self.match_value(__method__,__LINE__,'dschara' ,'2' ,zzcall.input.PARM4.inds1[0].dschara)
314
+ self.match_value(__method__,__LINE__,'dscharb' ,'2' ,zzcall.input.PARM4.inds1[1].dscharb)
315
+ self.match_value(__method__,__LINE__,'dsdec1' ,22.2222 ,zzcall.input.PARM4.inds1[2].dsdec1)
316
+ self.match_value(__method__,__LINE__,'dsdec2' ,222.22 ,zzcall.input.PARM4.inds1[3].dsdec2)
317
+
318
+
319
+ puts "\n+++++++++ input call individual hash params ++++++++++++++++"
320
+ zzcall.call(
321
+ {'inchara'=>'3'},
322
+ {'incharb'=>'3'},
323
+ {'indec1'=>33.3333},
324
+ {'indec2'=>333.33},
325
+ {'inds1'=>[{'dschara'=>'4'},{'dscharb'=>'4'},{'dsdec1'=>44.4444},{'dsdec2'=>444.44}]})
326
+ puts zzcall.to_xml
327
+ self.match_value(__method__,__LINE__,'inchara' ,'3' ,zzcall.input.PARM0.inchara)
328
+ self.match_value(__method__,__LINE__,'incharb' ,'3' ,zzcall.input.PARM1.incharb)
329
+ self.match_value(__method__,__LINE__,'indec1' ,33.3333 ,zzcall.input.PARM2.indec1)
330
+ self.match_value(__method__,__LINE__,'indec2' ,333.33 ,zzcall.input.PARM3.indec2)
331
+ self.match_value(__method__,__LINE__,'dschara' ,'4' ,zzcall.input.PARM4.inds1[0].dschara)
332
+ self.match_value(__method__,__LINE__,'dscharb' ,'4' ,zzcall.input.PARM4.inds1[1].dscharb)
333
+ self.match_value(__method__,__LINE__,'dsdec1' ,44.4444 ,zzcall.input.PARM4.inds1[2].dsdec1)
334
+ self.match_value(__method__,__LINE__,'dsdec2' ,444.44 ,zzcall.input.PARM4.inds1[3].dsdec2)
335
+
336
+
337
+ puts "\n+++++++++ input call individual hash params (set one parm) ++++++++++++++++"
338
+ zzcall.call({'indec1'=>55.5555})
339
+ puts zzcall.to_xml
340
+ self.match_value(__method__,__LINE__,'inchara' ,'3' ,zzcall.input.PARM0.inchara)
341
+ self.match_value(__method__,__LINE__,'incharb' ,'3' ,zzcall.input.PARM1.incharb)
342
+ self.match_value(__method__,__LINE__,'indec1' ,55.5555 ,zzcall.input.PARM2.indec1)
343
+ self.match_value(__method__,__LINE__,'indec2' ,333.33 ,zzcall.input.PARM3.indec2)
344
+ self.match_value(__method__,__LINE__,'dschara' ,'4' ,zzcall.input.PARM4.inds1[0].dschara)
345
+ self.match_value(__method__,__LINE__,'dscharb' ,'4' ,zzcall.input.PARM4.inds1[1].dscharb)
346
+ self.match_value(__method__,__LINE__,'dsdec1' ,44.4444 ,zzcall.input.PARM4.inds1[2].dsdec1)
347
+ self.match_value(__method__,__LINE__,'dsdec2' ,444.44 ,zzcall.input.PARM4.inds1[3].dsdec2)
348
+
349
+
350
+ puts "\n+++++++++ input call individual hash params (set parm DS) ++++++++++++++++"
351
+ zzcall.call({'inds1'=>[{'dschara'=>'5'},{'dscharb'=>'5'},{'dsdec1'=>55.5555},{'dsdec2'=>555.55}]})
352
+ puts zzcall.to_xml
353
+ self.match_value(__method__,__LINE__,'inchara' ,'3' ,zzcall.input.PARM0.inchara)
354
+ self.match_value(__method__,__LINE__,'incharb' ,'3' ,zzcall.input.PARM1.incharb)
355
+ self.match_value(__method__,__LINE__,'indec1' ,55.5555 ,zzcall.input.PARM2.indec1)
356
+ self.match_value(__method__,__LINE__,'indec2' ,333.33 ,zzcall.input.PARM3.indec2)
357
+ self.match_value(__method__,__LINE__,'dschara' ,'5' ,zzcall.input.PARM4.inds1[0].dschara)
358
+ self.match_value(__method__,__LINE__,'dscharb' ,'5' ,zzcall.input.PARM4.inds1[1].dscharb)
359
+ self.match_value(__method__,__LINE__,'dsdec1' ,55.5555 ,zzcall.input.PARM4.inds1[2].dsdec1)
360
+ self.match_value(__method__,__LINE__,'dsdec2' ,555.55 ,zzcall.input.PARM4.inds1[3].dsdec2)
361
+
362
+
363
+ puts "\n+++++++++ input call array of hash params ++++++++++++++++"
364
+ parms = [ 'inchara'=>'6',
365
+ 'incharb'=>'6',
366
+ 'indec1'=>66.6666,
367
+ 'indec2'=>666.66,
368
+ 'inds1'=>[{'dschara'=>'7'},{'dscharb'=>'7'},{'dsdec1'=>77.7777},{'dsdec2'=>777.77}] ]
369
+ zzcall.call(parms)
370
+ puts zzcall.to_xml
371
+ self.match_value(__method__,__LINE__,'inchara' ,'6' ,zzcall.input.PARM0.inchara)
372
+ self.match_value(__method__,__LINE__,'incharb' ,'6' ,zzcall.input.PARM1.incharb)
373
+ self.match_value(__method__,__LINE__,'indec1' ,66.6666 ,zzcall.input.PARM2.indec1)
374
+ self.match_value(__method__,__LINE__,'indec2' ,666.66 ,zzcall.input.PARM3.indec2)
375
+ self.match_value(__method__,__LINE__,'dschara' ,'7' ,zzcall.input.PARM4.inds1[0].dschara)
376
+ self.match_value(__method__,__LINE__,'dscharb' ,'7' ,zzcall.input.PARM4.inds1[1].dscharb)
377
+ self.match_value(__method__,__LINE__,'dsdec1' ,77.7777 ,zzcall.input.PARM4.inds1[2].dsdec1)
378
+ self.match_value(__method__,__LINE__,'dsdec2' ,777.77 ,zzcall.input.PARM4.inds1[3].dsdec2)
379
+
380
+ end
381
+
382
+ def not_work_test_0000_pgm_zzcall_array
383
+ puts "\n+++++++++ input call array of hash params ++++++++++++++++"
384
+ parms = [ 'inchara'=>'8',
385
+ 'incharb'=>'8',
386
+ 'indec1'=>88.8888,
387
+ 'indec2'=>888.88,
388
+ 'inds1'=>[{'dschara'=>'9','dscharb'=>'9','dsdec1'=>99.9999,'dsdec2'=>999.99}] ]
389
+ zzcall.call(parms)
390
+ puts zzcall.to_xml
391
+ self.match_value(__method__,__LINE__,'inchara' ,'8' ,zzcall.input.PARM0.inchara)
392
+ self.match_value(__method__,__LINE__,'incharb' ,'8' ,zzcall.input.PARM1.incharb)
393
+ self.match_value(__method__,__LINE__,'indec1' ,88.9999 ,zzcall.input.PARM2.indec1)
394
+ self.match_value(__method__,__LINE__,'indec2' ,888.99 ,zzcall.input.PARM3.indec2)
395
+ self.match_value(__method__,__LINE__,'dschara' ,'9' ,zzcall.input.PARM4.inds1[0].dschara)
396
+ self.match_value(__method__,__LINE__,'dscharb' ,'9' ,zzcall.input.PARM4.inds1[1].dscharb)
397
+ self.match_value(__method__,__LINE__,'dsdec1' ,99.9999 ,zzcall.input.PARM4.inds1[2].dsdec1)
398
+ self.match_value(__method__,__LINE__,'dsdec2' ,999.99 ,zzcall.input.PARM4.inds1[3].dsdec2)
399
+
400
+ end
401
+
402
+ end
403
+