xmlservice 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
+