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,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
+