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,45 @@
1
+ # File: test_60310_DriverCMD.rb
2
+ require "../test_authorization/auth"
3
+ require "../test_data/rowcol"
4
+
5
+ class Test_60310_DriverCMD < RowColUnitTest
6
+ # -------------------------------
7
+ # test functions (start with prefix test_)
8
+ # rake test -- Unit run alpha sort order
9
+ # run #1) test_0000_connect
10
+ # run #2) test_nnnn_xxx
11
+ # :
12
+ # run #n) test_9999_close
13
+ # -------------------------------
14
+ def test_0020_cmd_CHGLIBL
15
+ # ***************************************
16
+ # * CMD - CHGLIBL
17
+ # ***************************************
18
+ cmd = XMLService::I_CMD.new("CHGLIBL LIBL(QTEMP #{$toolkit_test_lib})")
19
+ # call IBM i
20
+ cmd.xmlservice
21
+ # inspect
22
+ puts cmd.dump_inspect
23
+ # xmlservice error occurred?
24
+ rc = cmd.xmlservice_error
25
+ if rc
26
+ puts cmd.dump_error()
27
+ self.match_value(__method__,__LINE__,'error' ,false,rc)
28
+ end
29
+ # output
30
+ # puts cmd.out_xml
31
+ output = cmd.response.output
32
+ puts output
33
+ # verify
34
+ must = "success"
35
+ ok = output.include? must
36
+ self.match_value(__method__,__LINE__,"E N D",must,output)
37
+ end
38
+
39
+
40
+
41
+ # -------------------------------
42
+ # non-test functions (no prefix test_)
43
+ # -------------------------------
44
+
45
+ end
@@ -0,0 +1,78 @@
1
+ require 'xmlservice'
2
+ require 'thread'
3
+
4
+ ActiveXMLService::Base.establish_connection(
5
+ :test_yaml => "../test_authorization/xmlservice.yml",
6
+ :test_env => "sqlpublic"
7
+ )
8
+
9
+ def foo1(n)
10
+ puts "run #{n}\n"
11
+ cmd = XMLService::I_SH.new("system -i 'WRKSYSVAL OUTPUT(*PRINT)'")
12
+ cmd.xmlservice
13
+ output = cmd.out_xml
14
+ if output.include? "User part of the library list"
15
+ puts "good #{n}\n"
16
+ else
17
+ puts output
18
+ puts "bad #{n}\n"
19
+ end
20
+ end
21
+
22
+ def foo2(n)
23
+ puts "run #{n}\n"
24
+ cmd = XMLService::I_CMD.new("RTVJOBA USRLIBL(?) SYSLIBL(?) CCSID(?N) OUTQ(?)")
25
+ cmd.xmlservice
26
+ output = cmd.out_xml
27
+ if output.include? "desc='OUTQ'"
28
+ puts "good #{n}\n"
29
+ else
30
+ puts output
31
+ puts "bad #{n}\n"
32
+ end
33
+ end
34
+
35
+
36
+ def foo3(n)
37
+ puts "run #{n}\n"
38
+ mybin = 0xA1A2A3A4A5A6A7A8A9AAA1A2A3A4A5A6A7A8A9AA
39
+ zzbinary = XMLService::I_SRVPGM.new("ZZSRV","ZZBINARY",$toolkit_test_lib)
40
+ zzbinary.inputParameter("parm","io",XMLService::I_Binary.new('myIn',20,mybin))
41
+ zzbinary.setReturn("binary", XMLService::I_Binary.new('myOut',20,0x00))
42
+ # call IBM i
43
+ zzbinary.xmlservice
44
+ if mybin.to_s(16).upcase == zzbinary.xml_binary.xml_myOut.to_s
45
+ puts "good #{n}\n"
46
+ else
47
+ puts output
48
+ puts "bad #{n}\n"
49
+ end
50
+ end
51
+
52
+
53
+ begin
54
+ threads = []
55
+ [1,2,3,4,5,6,7,8,9,10,11,12].each do |i|
56
+ threads << Thread.new do
57
+ puts "loop #{i}\n"
58
+ foo1(i)
59
+ end
60
+ end
61
+ [101,102,103,104,105,106,107,108,109,1010,1011,1012].each do |i|
62
+ threads << Thread.new do
63
+ puts "loop #{i}\n"
64
+ foo2(i)
65
+ end
66
+ end
67
+ [201,202,203,204,205,206,207,208,209,2010,2011,2012].each do |i|
68
+ threads << Thread.new do
69
+ puts "loop #{i}\n"
70
+ foo2(i)
71
+ end
72
+ end
73
+ threads.each(&:join)
74
+ rescue Exception => e
75
+ puts "EXCEPTION: #{e.inspect}"
76
+ puts "MESSAGE: #{e.message}"
77
+ end
78
+
@@ -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,270 @@
1
+ # File: test_70010_DriverCallPgmZZTEST.rb
2
+ ENV['TEST_ENV'] = "resttest"
3
+ require "../test_authorization/auth"
4
+ require "../test_data/rowcol"
5
+
6
+ class Test_70010_DriverCallPgmTestOnly < RowColUnitTest
7
+ # -------------------------------
8
+ # test functions (start with prefix test_)
9
+ # rake test -- Unit run alpha sort order
10
+ # run #1) test_0000_connect
11
+ # run #2) test_nnnn_xxx
12
+ # :
13
+ # run #n) test_9999_close
14
+ # -------------------------------
15
+ def test_0040_pgm_zztest_index_output
16
+ # call IBM i ZZTEST (see file ../test_data/zztest)
17
+ in_parm1 = {'inchara'=>'a','incharb'=>'b','indec1'=>11.1111,'indec2'=>222.22}
18
+ in_inds1 = {'dschara'=>'x','dscharb'=>'y','dsdec1'=>66.6666,'dsdec2'=>77777.77}
19
+ zztest = XMLService::I_PGM.new("ZZTEST", $toolkit_test_lib) <<
20
+ XMLService::I_a.new('inchara',1, in_parm1['inchara']) <<
21
+ XMLService::I_a.new('incharb',1, in_parm1['incharb']) <<
22
+ XMLService::I_p.new('indec1',7,4, in_parm1['indec1']) <<
23
+ XMLService::I_p.new('indec2',12,2,in_parm1['indec2']) <<
24
+ XMLService::I_DS.new("inds1",5,
25
+ [
26
+ XMLService::I_a.new('ds1chara',1, in_inds1['dschara']),
27
+ XMLService::I_a.new('ds1charb',1, in_inds1['dscharb']),
28
+ XMLService::I_p.new('ds1dec1',7,4, in_inds1['dsdec1']),
29
+ XMLService::I_p.new('ds1dec2',12,2,in_inds1['dsdec2']),
30
+ XMLService::I_DS.new("inds2",2,
31
+ [
32
+ XMLService::I_a.new('ds2chara',1, in_inds1['dschara']),
33
+ XMLService::I_a.new('ds2charb',1, in_inds1['dscharb']),
34
+ XMLService::I_p.new('ds2dec1',7,4, in_inds1['dsdec1']),
35
+ XMLService::I_p.new('ds2dec2',12,2,in_inds1['dsdec2']),
36
+ XMLService::I_DS.new("inds3",3,
37
+ [
38
+ XMLService::I_a.new('ds3chara',1, in_inds1['dschara']),
39
+ XMLService::I_a.new('ds3charb',1, in_inds1['dscharb']),
40
+ XMLService::I_p.new('ds3dec1',7,4, in_inds1['dsdec1']),
41
+ XMLService::I_p.new('ds3dec2',12,2,in_inds1['dsdec2'])
42
+ ]),
43
+ XMLService::I_a.new('ds5chara',1, in_inds1['dschara']),
44
+ XMLService::I_a.new('ds5charb',1, in_inds1['dscharb']),
45
+ XMLService::I_p.new('ds5dec1',7,4, in_inds1['dsdec1']),
46
+ XMLService::I_p.new('ds5dec2',12,2,in_inds1['dsdec2'])
47
+ ]),
48
+ XMLService::I_a.new('ds4chara',1, in_inds1['dschara']),
49
+ XMLService::I_a.new('ds4charb',1, in_inds1['dscharb']),
50
+ XMLService::I_p.new('ds4dec1',7,4, in_inds1['dsdec1']),
51
+ XMLService::I_p.new('ds4dec2',12,2,in_inds1['dsdec2'])
52
+ ])
53
+ # call IBM i ZZTEST
54
+ zztest.xmlservice
55
+ # inspect
56
+ puts zztest.dump_inspect
57
+ # xmlservice error occurred?
58
+ rc = zztest.xmlservice_error
59
+ if rc
60
+ puts zztest.dump_all()
61
+ self.match_value(__method__,__LINE__,'error' ,false,rc)
62
+ end
63
+
64
+ # output
65
+ puts "#{zztest.name}:"
66
+ puts " inchara...#{zztest.response.inchara}"
67
+ puts " incharb...#{zztest.response.incharb}"
68
+ puts " indec1....#{zztest.response.indec1}"
69
+ puts " indec2....#{zztest.response.indec2}"
70
+ for i in 0..zztest.response.inds1.count-1
71
+ inds1 = zztest.response.inds1[i]
72
+ puts " inds1[#{i}]:"
73
+ puts " ds1chara...#{inds1.ds1chara}"
74
+ puts " ds1charb...#{inds1.ds1charb}"
75
+ puts " ds1dec1....#{inds1.ds1dec1}"
76
+ puts " ds1dec2....#{inds1.ds1dec2}"
77
+ for j in 0..inds1.inds2.count-1
78
+ inds2 = inds1.inds2[j]
79
+ puts " inds2[#{j}]:"
80
+ puts " ds2chara...#{inds2.ds2chara}"
81
+ puts " ds2charb...#{inds2.ds2charb}"
82
+ puts " ds2dec1....#{inds2.ds2dec1}"
83
+ puts " ds2dec2....#{inds2.ds2dec2}"
84
+ for k in 0..inds2.inds3.count-1
85
+ inds3 = inds2.inds3[j]
86
+ puts " inds3[#{k}]:"
87
+ puts " ds3chara...#{inds3.ds3chara}"
88
+ puts " ds3charb...#{inds3.ds3charb}"
89
+ puts " ds3dec1....#{inds3.ds3dec1}"
90
+ puts " ds3dec2....#{inds3.ds3dec2}"
91
+ end
92
+ puts " inds2[#{j}]:"
93
+ puts " ds5chara...#{inds2.ds5chara}"
94
+ puts " ds5charb...#{inds2.ds5charb}"
95
+ puts " ds5dec1....#{inds2.ds5dec1}"
96
+ puts " ds5dec2....#{inds2.ds5dec2}"
97
+ end
98
+ puts " inds1[#{i}]:"
99
+ puts " ds4chara...#{inds1.ds4chara}"
100
+ puts " ds4charb...#{inds1.ds4charb}"
101
+ puts " ds4dec1....#{inds1.ds4dec1}"
102
+ puts " ds4dec2....#{inds1.ds4dec2}"
103
+ end
104
+ # verify
105
+ self.match_value(__method__,__LINE__,'inchara' ,in_parm1['inchara'] ,zztest.response.inchara)
106
+ self.match_value(__method__,__LINE__,'incharb' ,in_parm1['incharb'] ,zztest.response.incharb)
107
+ self.match_value(__method__,__LINE__,'indec1' ,in_parm1['indec1'] ,zztest.response.indec1)
108
+ self.match_value(__method__,__LINE__,'indec2' ,in_parm1['indec2'] ,zztest.response.indec2)
109
+ for i in 0..zztest.response.inds1.count - 1
110
+ inds1 = zztest.response.inds1[i]
111
+ self.match_value(__method__,__LINE__,'ds1chara' ,in_inds1['dschara'] ,inds1.ds1chara)
112
+ self.match_value(__method__,__LINE__,'ds1charb' ,in_inds1['dscharb'] ,inds1.ds1charb)
113
+ self.match_value(__method__,__LINE__,'ds1dec1' ,in_inds1['dsdec1'] ,inds1.ds1dec1)
114
+ self.match_value(__method__,__LINE__,'ds1dec2' ,in_inds1['dsdec2'] ,inds1.ds1dec2)
115
+ for j in 0..inds1.inds2.count - 1
116
+ inds2 = inds1.inds2[j]
117
+ self.match_value(__method__,__LINE__,'ds2chara' ,in_inds1['dschara'] ,inds2.ds2chara)
118
+ self.match_value(__method__,__LINE__,'ds2charb' ,in_inds1['dscharb'] ,inds2.ds2charb)
119
+ self.match_value(__method__,__LINE__,'ds2dec1' ,in_inds1['dsdec1'] ,inds2.ds2dec1)
120
+ self.match_value(__method__,__LINE__,'ds2dec2' ,in_inds1['dsdec2'] ,inds2.ds2dec2)
121
+ for k in 0..inds2.inds3.count - 1
122
+ inds3 = inds2.inds3[k]
123
+ self.match_value(__method__,__LINE__,'ds2chara' ,in_inds1['dschara'] ,inds3.ds3chara)
124
+ self.match_value(__method__,__LINE__,'ds2charb' ,in_inds1['dscharb'] ,inds3.ds3charb)
125
+ self.match_value(__method__,__LINE__,'ds2dec1' ,in_inds1['dsdec1'] ,inds3.ds3dec1)
126
+ self.match_value(__method__,__LINE__,'ds2dec2' ,in_inds1['dsdec2'] ,inds3.ds3dec2)
127
+ end
128
+ self.match_value(__method__,__LINE__,'ds5chara' ,in_inds1['dschara'] ,inds2.ds5chara)
129
+ self.match_value(__method__,__LINE__,'ds5charb' ,in_inds1['dscharb'] ,inds2.ds5charb)
130
+ self.match_value(__method__,__LINE__,'ds5dec1' ,in_inds1['dsdec1'] ,inds2.ds5dec1)
131
+ self.match_value(__method__,__LINE__,'ds5dec2' ,in_inds1['dsdec2'] ,inds2.ds5dec2)
132
+ end
133
+ self.match_value(__method__,__LINE__,'ds4chara' ,in_inds1['dschara'] ,inds1.ds4chara)
134
+ self.match_value(__method__,__LINE__,'ds4charb' ,in_inds1['dscharb'] ,inds1.ds4charb)
135
+ self.match_value(__method__,__LINE__,'ds4dec1' ,in_inds1['dsdec1'] ,inds1.ds4dec1)
136
+ self.match_value(__method__,__LINE__,'ds4dec2' ,in_inds1['dsdec2'] ,inds1.ds4dec2)
137
+ end
138
+ end
139
+
140
+ def test_0050_pgm_zztest_each_output
141
+ # call IBM i ZZTEST (see file ../test_data/zztest)
142
+ in_parm1 = {'inchara'=>'a','incharb'=>'b','indec1'=>11.1111,'indec2'=>222.22}
143
+ in_inds1 = {'dschara'=>'x','dscharb'=>'y','dsdec1'=>66.6666,'dsdec2'=>77777.77}
144
+ zztest = XMLService::I_PGM.new("ZZTEST", $toolkit_test_lib) <<
145
+ XMLService::I_a.new('inchara',1, in_parm1['inchara']) <<
146
+ XMLService::I_a.new('incharb',1, in_parm1['incharb']) <<
147
+ XMLService::I_p.new('indec1',7,4, in_parm1['indec1']) <<
148
+ XMLService::I_p.new('indec2',12,2,in_parm1['indec2']) <<
149
+ XMLService::I_DS.new("inds1",5,
150
+ [
151
+ XMLService::I_a.new('ds1chara',1, in_inds1['dschara']),
152
+ XMLService::I_a.new('ds1charb',1, in_inds1['dscharb']),
153
+ XMLService::I_p.new('ds1dec1',7,4, in_inds1['dsdec1']),
154
+ XMLService::I_p.new('ds1dec2',12,2,in_inds1['dsdec2']),
155
+ XMLService::I_DS.new("inds2",2,
156
+ [
157
+ XMLService::I_a.new('ds2chara',1, in_inds1['dschara']),
158
+ XMLService::I_a.new('ds2charb',1, in_inds1['dscharb']),
159
+ XMLService::I_p.new('ds2dec1',7,4, in_inds1['dsdec1']),
160
+ XMLService::I_p.new('ds2dec2',12,2,in_inds1['dsdec2']),
161
+ XMLService::I_DS.new("inds3",3,
162
+ [
163
+ XMLService::I_a.new('ds3chara',1, in_inds1['dschara']),
164
+ XMLService::I_a.new('ds3charb',1, in_inds1['dscharb']),
165
+ XMLService::I_p.new('ds3dec1',7,4, in_inds1['dsdec1']),
166
+ XMLService::I_p.new('ds3dec2',12,2,in_inds1['dsdec2'])
167
+ ]),
168
+ XMLService::I_a.new('ds5chara',1, in_inds1['dschara']),
169
+ XMLService::I_a.new('ds5charb',1, in_inds1['dscharb']),
170
+ XMLService::I_p.new('ds5dec1',7,4, in_inds1['dsdec1']),
171
+ XMLService::I_p.new('ds5dec2',12,2,in_inds1['dsdec2'])
172
+ ]),
173
+ XMLService::I_a.new('ds4chara',1, in_inds1['dschara']),
174
+ XMLService::I_a.new('ds4charb',1, in_inds1['dscharb']),
175
+ XMLService::I_p.new('ds4dec1',7,4, in_inds1['dsdec1']),
176
+ XMLService::I_p.new('ds4dec2',12,2,in_inds1['dsdec2'])
177
+ ])
178
+ # call IBM i ZZTEST
179
+ zztest.xmlservice
180
+ # inspect
181
+ puts zztest.dump_inspect
182
+ # xmlservice error occurred?
183
+ rc = zztest.xmlservice_error
184
+ if rc
185
+ puts zztest.dump_all()
186
+ self.match_value(__method__,__LINE__,'error' ,false,rc)
187
+ end
188
+
189
+ # output
190
+ puts "#{zztest.name}:"
191
+ puts " inchara...#{zztest.response.inchara}"
192
+ puts " incharb...#{zztest.response.incharb}"
193
+ puts " indec1....#{zztest.response.indec1}"
194
+ puts " indec2....#{zztest.response.indec2}"
195
+ inds1s = zztest.response.inds1
196
+ inds1s.each do |inds1|
197
+ puts " inds1[]:"
198
+ puts " ds1chara...#{inds1.ds1chara}"
199
+ puts " ds1charb...#{inds1.ds1charb}"
200
+ puts " ds1dec1....#{inds1.ds1dec1}"
201
+ puts " ds1dec2....#{inds1.ds1dec2}"
202
+ inds2s = inds1.inds2
203
+ inds2s.each do |inds2|
204
+ puts " inds2[]:"
205
+ puts " ds2chara...#{inds2.ds2chara}"
206
+ puts " ds2charb...#{inds2.ds2charb}"
207
+ puts " ds2dec1....#{inds2.ds2dec1}"
208
+ puts " ds2dec2....#{inds2.ds2dec2}"
209
+ inds3s = inds2.inds3
210
+ inds3s.each do |inds3|
211
+ puts " inds3[]:"
212
+ puts " ds3chara...#{inds3.ds3chara}"
213
+ puts " ds3charb...#{inds3.ds3charb}"
214
+ puts " ds3dec1....#{inds3.ds3dec1}"
215
+ puts " ds3dec2....#{inds3.ds3dec2}"
216
+ end
217
+ puts " inds2[]:"
218
+ puts " ds5chara...#{inds2.ds5chara}"
219
+ puts " ds5charb...#{inds2.ds5charb}"
220
+ puts " ds5dec1....#{inds2.ds5dec1}"
221
+ puts " ds5dec2....#{inds2.ds5dec2}"
222
+ end
223
+ puts " inds1[]:"
224
+ puts " ds4chara...#{inds1.ds4chara}"
225
+ puts " ds4charb...#{inds1.ds4charb}"
226
+ puts " ds4dec1....#{inds1.ds4dec1}"
227
+ puts " ds4dec2....#{inds1.ds4dec2}"
228
+ end
229
+ # verify
230
+ self.match_value(__method__,__LINE__,'inchara' ,in_parm1['inchara'] ,zztest.response.inchara)
231
+ self.match_value(__method__,__LINE__,'incharb' ,in_parm1['incharb'] ,zztest.response.incharb)
232
+ self.match_value(__method__,__LINE__,'indec1' ,in_parm1['indec1'] ,zztest.response.indec1)
233
+ self.match_value(__method__,__LINE__,'indec2' ,in_parm1['indec2'] ,zztest.response.indec2)
234
+ inds1s = zztest.response.inds1
235
+ inds1s.each do |inds1|
236
+ self.match_value(__method__,__LINE__,'ds1chara' ,in_inds1['dschara'] ,inds1.ds1chara)
237
+ self.match_value(__method__,__LINE__,'ds1charb' ,in_inds1['dscharb'] ,inds1.ds1charb)
238
+ self.match_value(__method__,__LINE__,'ds1dec1' ,in_inds1['dsdec1'] ,inds1.ds1dec1)
239
+ self.match_value(__method__,__LINE__,'ds1dec2' ,in_inds1['dsdec2'] ,inds1.ds1dec2)
240
+ inds2s = inds1.inds2
241
+ inds2s.each do |inds2|
242
+ self.match_value(__method__,__LINE__,'ds2chara' ,in_inds1['dschara'] ,inds2.ds2chara)
243
+ self.match_value(__method__,__LINE__,'ds2charb' ,in_inds1['dscharb'] ,inds2.ds2charb)
244
+ self.match_value(__method__,__LINE__,'ds2dec1' ,in_inds1['dsdec1'] ,inds2.ds2dec1)
245
+ self.match_value(__method__,__LINE__,'ds2dec2' ,in_inds1['dsdec2'] ,inds2.ds2dec2)
246
+ inds3s = inds2.inds3
247
+ inds3s.each do |inds3|
248
+ self.match_value(__method__,__LINE__,'ds2chara' ,in_inds1['dschara'] ,inds3.ds3chara)
249
+ self.match_value(__method__,__LINE__,'ds2charb' ,in_inds1['dscharb'] ,inds3.ds3charb)
250
+ self.match_value(__method__,__LINE__,'ds2dec1' ,in_inds1['dsdec1'] ,inds3.ds3dec1)
251
+ self.match_value(__method__,__LINE__,'ds2dec2' ,in_inds1['dsdec2'] ,inds3.ds3dec2)
252
+ end
253
+ self.match_value(__method__,__LINE__,'ds5chara' ,in_inds1['dschara'] ,inds2.ds5chara)
254
+ self.match_value(__method__,__LINE__,'ds5charb' ,in_inds1['dscharb'] ,inds2.ds5charb)
255
+ self.match_value(__method__,__LINE__,'ds5dec1' ,in_inds1['dsdec1'] ,inds2.ds5dec1)
256
+ self.match_value(__method__,__LINE__,'ds5dec2' ,in_inds1['dsdec2'] ,inds2.ds5dec2)
257
+ end
258
+ self.match_value(__method__,__LINE__,'ds4chara' ,in_inds1['dschara'] ,inds1.ds4chara)
259
+ self.match_value(__method__,__LINE__,'ds4charb' ,in_inds1['dscharb'] ,inds1.ds4charb)
260
+ self.match_value(__method__,__LINE__,'ds4dec1' ,in_inds1['dsdec1'] ,inds1.ds4dec1)
261
+ self.match_value(__method__,__LINE__,'ds4dec2' ,in_inds1['dsdec2'] ,inds1.ds4dec2)
262
+ end
263
+ end
264
+
265
+ # -------------------------------
266
+ # non-test functions (no prefix test_)
267
+ # -------------------------------
268
+
269
+ end
270
+
@@ -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,162 @@
1
+ # File: test_80010_DSLCallPgmZZCALL.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_80010_DSLCallPgmZZCALL < 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.input_parms do
37
+ char "inchara", 1
38
+ char "incharb", 1
39
+ dec "indec1", 7, 4
40
+ dec "indec2", 12, 2
41
+ struct("inds1", 1) do
42
+ char "dschara", 1
43
+ char "dscharb", 1
44
+ dec "dsdec1", 7, 4
45
+ dec "dsdec2", 12, 2
46
+ end
47
+ end
48
+
49
+ # set it Tony way ... PARMn is implied
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 zzcall.inspect
59
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
60
+ puts zzcall.dump_inspect
61
+ puts zzcall.to_xml
62
+
63
+ self.match_value(__method__,__LINE__,'inchara' ,'a' ,zzcall.input.PARM0.inchara)
64
+ self.match_value(__method__,__LINE__,'incharb' ,'a' ,zzcall.input.PARM1.incharb)
65
+ self.match_value(__method__,__LINE__,'indec1' ,11.1111 ,zzcall.input.PARM2.indec1)
66
+ self.match_value(__method__,__LINE__,'indec2' ,11.11 ,zzcall.input.PARM3.indec2)
67
+ self.match_value(__method__,__LINE__,'dschara' ,'a' ,zzcall.input.PARM4.inds1[0].dschara)
68
+ self.match_value(__method__,__LINE__,'dscharb' ,'a' ,zzcall.input.PARM4.inds1[1].dscharb)
69
+ self.match_value(__method__,__LINE__,'dsdec1' ,111.1111 ,zzcall.input.PARM4.inds1[2].dsdec1)
70
+ self.match_value(__method__,__LINE__,'dsdec2' ,1111.11 ,zzcall.input.PARM4.inds1[3].dsdec2)
71
+
72
+ # set it Don way ... what is a parm?
73
+ zzcall.input.inchara = 'b'
74
+ zzcall.input.incharb = 'b'
75
+ zzcall.input.indec1 = 22.2222
76
+ zzcall.input.indec2 = 22.22
77
+ zzcall.input.inds1[0].dschara = 'b'
78
+ zzcall.input.inds1[1].dscharb = 'b'
79
+ zzcall.input.inds1[2].dsdec1 = 222.2222
80
+ zzcall.input.inds1[3].dsdec2 = 2222.22
81
+ # puts zzcall.inspect
82
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
83
+ puts zzcall.dump_inspect
84
+ puts zzcall.to_xml
85
+
86
+ self.match_value(__method__,__LINE__,'inchara' ,'b' ,zzcall.input.PARM0.inchara)
87
+ self.match_value(__method__,__LINE__,'incharb' ,'b' ,zzcall.input.PARM1.incharb)
88
+ self.match_value(__method__,__LINE__,'indec1' ,22.2222 ,zzcall.input.PARM2.indec1)
89
+ self.match_value(__method__,__LINE__,'indec2' ,22.22 ,zzcall.input.PARM3.indec2)
90
+ self.match_value(__method__,__LINE__,'dschara' ,'b' ,zzcall.input.PARM4.inds1[0].dschara)
91
+ self.match_value(__method__,__LINE__,'dscharb' ,'b' ,zzcall.input.PARM4.inds1[1].dscharb)
92
+ self.match_value(__method__,__LINE__,'dsdec1' ,222.2222 ,zzcall.input.PARM4.inds1[2].dsdec1)
93
+ self.match_value(__method__,__LINE__,'dsdec2' ,2222.22 ,zzcall.input.PARM4.inds1[3].dsdec2)
94
+
95
+
96
+ # call IBM i ZZCALL
97
+ zzcall.execute
98
+
99
+ #puts zzcall.inspect
100
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
101
+ puts zzcall.dump_inspect
102
+
103
+ puts "\n+++++++++ output xml ++++++++++++++++"
104
+ puts zzcall.out_xml
105
+
106
+
107
+ # set it Aaron way ... just pass the data
108
+ parms = [ {'inchara'=>'1'},
109
+ {'incharb'=>'1'},
110
+ {'indec1'=>11.1111},
111
+ {'indec2'=>111.11},
112
+ {'inds1'=>[{'dschara'=>'2'},{'dscharb'=>'2'},{'dsdec1'=>22.2222},{'dsdec2'=>222.22}]} ]
113
+ zzcall.call(parms)
114
+
115
+ puts "\n+++++++++ input xml ++++++++++++++++"
116
+ puts zzcall.to_xml
117
+
118
+ self.match_value(__method__,__LINE__,'inchara' ,'1' ,zzcall.input.PARM0.inchara)
119
+ self.match_value(__method__,__LINE__,'incharb' ,'1' ,zzcall.input.PARM1.incharb)
120
+ self.match_value(__method__,__LINE__,'indec1' ,11.1111 ,zzcall.input.PARM2.indec1)
121
+ self.match_value(__method__,__LINE__,'indec2' ,111.11 ,zzcall.input.PARM3.indec2)
122
+ self.match_value(__method__,__LINE__,'dschara' ,'2' ,zzcall.input.PARM4.inds1[0].dschara)
123
+ self.match_value(__method__,__LINE__,'dscharb' ,'2' ,zzcall.input.PARM4.inds1[1].dscharb)
124
+ self.match_value(__method__,__LINE__,'dsdec1' ,22.2222 ,zzcall.input.PARM4.inds1[2].dsdec1)
125
+ self.match_value(__method__,__LINE__,'dsdec2' ,222.22 ,zzcall.input.PARM4.inds1[3].dsdec2)
126
+
127
+ #puts zzcall.inspect
128
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
129
+ puts zzcall.dump_inspect
130
+
131
+ puts "\n+++++++++ output xml ++++++++++++++++"
132
+ puts zzcall.out_xml
133
+
134
+ # response xml with fewer dots ... clever naming
135
+ puts "\n+++++++++ output fewer ++++++++++++++++"
136
+ puts " inchara...#{zzcall.response.inchara}\n"
137
+ puts " incharb...#{zzcall.response.incharb}\n"
138
+ puts " indec1....#{zzcall.response.indec1}\n"
139
+ puts " indec2....#{zzcall.response.indec2}\n"
140
+ zzcall.response.inds1.each do |inds1|
141
+ puts " dschara...#{inds1.dschara}"
142
+ puts " dscharb...#{inds1.dscharb}"
143
+ puts " dsdec1....#{inds1.dsdec1}"
144
+ puts " dsdec2....#{inds1.dsdec2}"
145
+ end
146
+ # verify output
147
+ self.match_value(__method__,__LINE__,'inchara' ,'C' ,zzcall.response.inchara)
148
+ self.match_value(__method__,__LINE__,'incharb' ,'D' ,zzcall.response.incharb)
149
+ self.match_value(__method__,__LINE__,'indec1' ,321.1234 ,zzcall.response.indec1)
150
+ self.match_value(__method__,__LINE__,'indec2' ,1234567890.12 ,zzcall.response.indec2)
151
+ zzcall.response.inds1.each do |inds1|
152
+ self.match_value(__method__,__LINE__,'dschara' ,'E' ,inds1.dschara)
153
+ self.match_value(__method__,__LINE__,'dscharb' ,'F' ,inds1.dscharb)
154
+ self.match_value(__method__,__LINE__,'dsdec1' ,333.333 ,inds1.dsdec1)
155
+ self.match_value(__method__,__LINE__,'dsdec2' ,4444444444.44 ,inds1.dsdec2)
156
+ end
157
+
158
+
159
+ end
160
+
161
+ end
162
+