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,44 @@
1
+ # File: test_60910_DriverCallPgmzzmiss.rb
2
+ require "../test_authorization/auth"
3
+ require "../test_data/rowcol"
4
+
5
+ class Test_60910_DriverCallPgmZZMISS < 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_0030_pgm_zzmiss_error
15
+ # call missing PGM
16
+ # 'error' => 'on' -- slow large joblog (development)
17
+ # 'error' => 'off' -- slow subset joblog (development)
18
+ # 'error' => 'fast' -- high speed errors (production)
19
+ options = {'error'=>'off'}
20
+ zzmiss = XMLService::I_PGM.new("ZZMISS",$toolkit_test_lib,options)
21
+ # call IBM i zzmiss
22
+ zzmiss.xmlservice
23
+
24
+ # xmlservice error occurred?
25
+ puts "\n+++++++++ dump_error ++++++++++++++++"
26
+ rc = zzmiss.xmlservice_error
27
+ if rc
28
+ puts zzmiss.dump_error
29
+ end
30
+
31
+
32
+ # puts zzmiss.inspect
33
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
34
+ puts zzmiss.dump_inspect
35
+
36
+ self.match_value(__method__,__LINE__,'error' ,true,rc)
37
+ end
38
+
39
+ # -------------------------------
40
+ # non-test functions (no prefix test_)
41
+ # -------------------------------
42
+
43
+ end
44
+
@@ -0,0 +1,265 @@
1
+ # File: test_65010_DriverCallDB2.rb
2
+ require "../test_authorization/auth"
3
+ require "../test_data/rowcol"
4
+
5
+ class Test_65010_DriverCallDB2 < 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
+
15
+ def test_0020_DB2_query
16
+ # ***************************************
17
+ # * DB2 - query
18
+ # ***************************************
19
+ query = XMLService::I_DB2.new("select * from #{$toolkit_test_db2_lib}/animals")
20
+ # call IBM i
21
+ puts "\n+++++++++ input xml ++++++++++++++++"
22
+ puts query.to_xml
23
+ query.xmlservice
24
+ # xmlservice error occurred?
25
+ rc = query.xmlservice_error
26
+ if rc
27
+ puts query.dump_all()
28
+ self.match_value(__method__,__LINE__,'error' ,false,rc)
29
+ end
30
+
31
+ # inspect
32
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
33
+ puts query.dump_inspect
34
+
35
+ # output
36
+ # puts query.out_xml
37
+ # rows
38
+ puts "\n+++++++++ response output ++++++++++++++++"
39
+ query.response.output.each do |row|
40
+ all = ""
41
+ row.each do |n,v|
42
+ all << "#{n}=#{v} "
43
+ end
44
+ puts all
45
+ end
46
+
47
+ # verify
48
+ test = "ID=0 BREED=cat NAME=Pook WEIGHT=3.20"
49
+ all = ""
50
+ query.response.output.each do |row|
51
+ row.each do |n,v|
52
+ all << "#{n}=#{v} "
53
+ end
54
+ break
55
+ end
56
+ self.match_value(__method__,__LINE__,'one row',test,all)
57
+ end
58
+
59
+ def test_0030_DB2_query_parm
60
+ # ***************************************
61
+ # * DB2 - query
62
+ # ***************************************
63
+ id = 1
64
+ query = XMLService::I_DB2.new("select * from #{$toolkit_test_db2_lib}/animals where ID < ?",{'id'=>id})
65
+ # call IBM i
66
+ puts "\n+++++++++ input xml ++++++++++++++++"
67
+ puts query.to_xml
68
+ query.xmlservice
69
+ # xmlservice error occurred?
70
+ rc = query.xmlservice_error
71
+ if rc
72
+ puts query.dump_all()
73
+ self.match_value(__method__,__LINE__,'error' ,false,rc)
74
+ end
75
+
76
+ # inspect
77
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
78
+ puts query.dump_inspect
79
+
80
+ # output
81
+ puts "\n+++++++++ response output ++++++++++++++++"
82
+ # puts query.out_xml
83
+ # rows
84
+ puts "id < #{query.returndata.id.strip}"
85
+ query.response.output.each do |row|
86
+ all = ""
87
+ row.each do |n,v|
88
+ all << "#{n}=#{v} "
89
+ end
90
+ puts all
91
+ end
92
+
93
+ # verify
94
+ test = "ID=0 BREED=cat NAME=Pook WEIGHT=3.20"
95
+ all = ""
96
+ query.response.output.each do |row|
97
+ row.each do |n,v|
98
+ all << "#{n}=#{v} "
99
+ end
100
+ break
101
+ end
102
+ self.match_value(__method__,__LINE__,'one row',test,all)
103
+ self.match_value(__method__,__LINE__,'parm id',id,query.returndata.id)
104
+ end
105
+
106
+ def test_0040_DB2_query_parm2
107
+ # ***************************************
108
+ # * DB2 - query
109
+ # ***************************************
110
+ id = 5
111
+ weight = 0.20
112
+ query = XMLService::I_DB2.new("select * from #{$toolkit_test_db2_lib}/animals where ID < ? and WEIGHT > ?",{'id'=>id,"weight"=>weight})
113
+ # call IBM i
114
+ puts "\n+++++++++ input xml ++++++++++++++++"
115
+ puts query.to_xml
116
+ query.xmlservice
117
+ # xmlservice error occurred?
118
+ rc = query.xmlservice_error
119
+ if rc
120
+ puts query.dump_all()
121
+ self.match_value(__method__,__LINE__,'error' ,false,rc)
122
+ end
123
+
124
+ # inspect
125
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
126
+ puts query.dump_inspect
127
+
128
+ # output
129
+ puts "\n+++++++++ response output ++++++++++++++++"
130
+ # puts query.out_xml
131
+ # rows
132
+ puts "id < #{query.returndata.id.strip}"
133
+ puts "weight > #{query.returndata.weight.strip}"
134
+ query.response.output.each do |row|
135
+ all = ""
136
+ row.each do |n,v|
137
+ all << "#{n}=#{v} "
138
+ end
139
+ puts all
140
+ end
141
+
142
+ # verify
143
+ test = "ID=0 BREED=cat NAME=Pook WEIGHT=3.20"
144
+ all = ""
145
+ query.response.output.each do |row|
146
+ row.each do |n,v|
147
+ all << "#{n}=#{v} "
148
+ end
149
+ break
150
+ end
151
+ self.match_value(__method__,__LINE__,'one row',test,all)
152
+ self.match_value(__method__,__LINE__,'parm id',id,query.returndata.id)
153
+ self.match_value(__method__,__LINE__,'parm weight',weight,query.returndata.weight)
154
+ end
155
+
156
+
157
+ def test_0050_DB2_procedure
158
+ # ***************************************
159
+ # * DB2 - query
160
+ # ***************************************
161
+ in_name1 = 'Peaches'
162
+ in_name2 = 'Rickety Ride'
163
+ in_weight = 22.22
164
+ query = XMLService::I_DB2.new("call #{$toolkit_test_db2_lib}/MATCH_ANIMAL(?, ?, ?)",
165
+ {'name1'=>in_name1,"name2"=>in_name2,"weight"=>in_weight})
166
+ # call IBM i
167
+ puts "\n+++++++++ input xml ++++++++++++++++"
168
+ puts query.to_xml
169
+ query.xmlservice
170
+ # xmlservice error occurred?
171
+ rc = query.xmlservice_error
172
+ if rc
173
+ puts query.dump_all()
174
+ self.match_value(__method__,__LINE__,'error' ,false,rc)
175
+ end
176
+
177
+ # inspect
178
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
179
+ puts query.dump_inspect
180
+
181
+ # output
182
+ puts "\n+++++++++ response output ++++++++++++++++"
183
+ # puts query.out_xml
184
+ # rows
185
+ puts "name1 = #{query.returndata.name1.strip}"
186
+ puts "name2 = #{query.returndata.name2.strip}"
187
+ puts "weight = #{query.returndata.weight.strip}"
188
+ query.response.output.each do |row|
189
+ all = ""
190
+ row.each do |n,v|
191
+ all << "#{n}=#{v} "
192
+ end
193
+ puts all
194
+ end
195
+
196
+ # verify
197
+ out_name1 = 'Peaches'
198
+ out_name2 = 'TRUE'
199
+ out_weight = 12.3
200
+ test = "NAME=Peaches BREED=dog WEIGHT=12.30"
201
+ all = ""
202
+ query.response.output.each do |row|
203
+ row.each do |n,v|
204
+ all << "#{n}=#{v} "
205
+ end
206
+ break
207
+ end
208
+ self.match_value(__method__,__LINE__,'one row',test,all)
209
+ self.match_value(__method__,__LINE__,'name1',out_name1,query.returndata.name1)
210
+ self.match_value(__method__,__LINE__,'name2',out_name2,query.returndata.name2)
211
+ self.match_value(__method__,__LINE__,'name2',out_weight,query.returndata.weight)
212
+ end
213
+
214
+
215
+ def test_0100_DB2_query_graphic
216
+ # ***************************************
217
+ # * DB2 - query
218
+ # ***************************************
219
+ query = XMLService::I_DB2.new("select * from #{$toolkit_test_db2_lib}/VAR_GRAPHIC_TEST")
220
+ # call IBM i
221
+ puts "\n+++++++++ input xml ++++++++++++++++"
222
+ puts query.to_xml
223
+ query.xmlservice
224
+ # xmlservice error occurred?
225
+ rc = query.xmlservice_error
226
+ if rc
227
+ puts query.dump_all()
228
+ self.match_value(__method__,__LINE__,'error' ,false,rc)
229
+ end
230
+
231
+ # inspect
232
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
233
+ puts query.dump_inspect
234
+
235
+ # output
236
+ puts "\n+++++++++ response output ++++++++++++++++"
237
+ # puts query.out_xml
238
+ # rows
239
+ query.response.output.each do |row|
240
+ all = ""
241
+ row.each do |n,v|
242
+ all << "#{n}=#{v} "
243
+ end
244
+ puts all
245
+ end
246
+
247
+ # verify
248
+ test = "COL1=something COL2=something"
249
+ all = ""
250
+ query.response.output.each do |row|
251
+ row.each do |n,v|
252
+ all << "#{n}=#{v} "
253
+ end
254
+ break
255
+ end
256
+ self.match_value(__method__,__LINE__,'one row',test,all)
257
+ end
258
+
259
+
260
+
261
+ # -------------------------------
262
+ # non-test functions (no prefix test_)
263
+ # -------------------------------
264
+
265
+ end
@@ -0,0 +1,66 @@
1
+ class I_a
2
+ # value get/set not exist until created
3
+ # accessor inchara created dynamically
4
+ attr_accessor :inchara
5
+ def initialize(v)
6
+ @inchara = v
7
+ end
8
+ end
9
+
10
+ # param anchor for call input, repond
11
+ class I_Parameter
12
+ attr_accessor :elem
13
+ def initialize(elem)
14
+ @elem = elem
15
+ end
16
+ # methods get/set do not exist until created
17
+ # forwarding inchara methods created dynamically
18
+ def inchara
19
+ @elem.inchara
20
+ end
21
+ def inchara=(value)
22
+ @elem.inchara=value
23
+ end
24
+ end
25
+
26
+ # class will allow area to dynamically create
27
+ # entire object stack without prefixes
28
+ # (assuming 'clever naming' user of course)
29
+ class I_Data
30
+ # nothing in this class until dynamically created
31
+ attr_accessor :PARM0
32
+ def initialize(elem)
33
+ @PARM0 = elem
34
+ end
35
+ # forwarding inchara methods created dynamically
36
+ def inchara
37
+ @PARM0.inchara
38
+ end
39
+ def inchara=(value)
40
+ @PARM0.inchara=value
41
+ end
42
+ end
43
+
44
+ # main/top class
45
+ # assuming 'clever naming' user of course
46
+ # :input = I_Data.new
47
+ # :respond = I_Data.new
48
+ # (:returndata = I_Data.new)
49
+ class I_Pgm
50
+ attr_accessor :input, :respond
51
+ def initialize
52
+ @input = I_Data.new ( I_Parameter.new(I_a.new('a')) )
53
+ end
54
+ end
55
+
56
+ # customer script usage
57
+ zzcall = I_Pgm.new
58
+ puts zzcall.input.PARM0.inchara
59
+
60
+ zzcall.input.PARM0.inchara = 'b'
61
+ puts zzcall.input.PARM0.inchara
62
+
63
+ zzcall.input.inchara = 'c'
64
+ puts zzcall.input.inchara
65
+
66
+
@@ -0,0 +1,149 @@
1
+ # File: test_Quick.rb
2
+ require "../test_authorization/auth"
3
+ require "../test_data/rowcol"
4
+
5
+ class Test_Quick < RowColUnitTest
6
+
7
+
8
+ def test_0500_DB2_query_parm2
9
+ # ***************************************
10
+ # * DB2 - query
11
+ # ***************************************
12
+ id = 5
13
+ weight = 0.20
14
+ likethis = 'Peaches%' # ibm_db driver
15
+ query = XMLService::I_DB2.new("select * from #{$toolkit_test_db2_lib}/animals where NAME LIKE ?",{'name'=>likethis},{'error'=>'on'})
16
+ # call IBM i
17
+ puts "\n+++++++++ input xml ++++++++++++++++"
18
+ puts query.to_xml
19
+ query.xmlservice
20
+ # xmlservice error occurred?
21
+ rc = query.xmlservice_error
22
+ if rc
23
+ puts query.dump_all()
24
+ self.match_value(__method__,__LINE__,'error' ,false,rc)
25
+ end
26
+
27
+ # inspect
28
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
29
+ puts query.dump_inspect
30
+
31
+ # output
32
+ puts "\n+++++++++ response output ++++++++++++++++"
33
+ puts query.out_xml
34
+
35
+ end
36
+
37
+
38
+ def no_test_0500_pgm_zzcall_array
39
+ # call IBM i ZZCALL (default values)
40
+ zzcall = XMLService::I_PGM.new("ZZCALL",$toolkit_test_lib,{'error'=>'fast'})
41
+ zzcall << XMLService::I_a.new('inchara',1,'s')
42
+ zzcall << XMLService::I_a.new('incharb',1,'r')
43
+ zzcall << XMLService::I_p.new('indec1',7,4,55.1111)
44
+ zzcall << XMLService::I_p.new('indec2',12,2,333.22)
45
+ zzcall << XMLService::I_DS.new('inds1',1,
46
+ [{
47
+ 'fred'=>XMLService::I_a.new('dschara',1,'t'),
48
+ 'wilma'=>XMLService::I_a.new('dscharb',1,'f'),
49
+ 'betty'=>XMLService::I_p.new('dsdec1',7,4,77.6666),
50
+ 'bambam'=>XMLService::I_p.new('dsdec2',12,2,88888.77)
51
+ }])
52
+
53
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
54
+ puts zzcall.dump_inspect
55
+
56
+ zzcall.input.inchara = '1'
57
+ zzcall.input.incharb = '1'
58
+ zzcall.input.indec1 = 11.1111
59
+ zzcall.input.indec2 = 11.11
60
+ zzcall.input.inds1[0]['fred'].dschara = '1'
61
+ zzcall.input.inds1[0]['wilma'].dscharb = '1'
62
+ zzcall.input.inds1[0]['betty'].dsdec1 = 111.1111
63
+ zzcall.input.inds1[0]['bambam'].dsdec2 = 1111.11
64
+
65
+ parms = [ 'inchara'=>'2', 'incharb'=>'2', 'indec1'=>22.2222, 'indec2'=>22.22,
66
+ 'inds1'=>[{
67
+ 'wilma'=>{'dscharb'=>'2'},
68
+ 'betty'=>{'dsdec1'=>222.2222}}]
69
+ ]
70
+ zzcall.call(parms)
71
+
72
+ puts "\n+++++++++ dump_inspect ++++++++++++++++"
73
+ puts zzcall.dump_inspect
74
+
75
+ puts "\n+++++++++ dump input xml ++++++++++++++++"
76
+ puts zzcall.to_xml
77
+
78
+ puts "\n+++++++++ output ++++++++++++++++"
79
+ puts " inchara...#{zzcall.response.inchara}\n"
80
+ puts " incharb...#{zzcall.response.incharb}\n"
81
+ puts " indec1....#{zzcall.response.indec1}\n"
82
+ puts " indec2....#{zzcall.response.indec2}\n"
83
+ zzcall.response.inds1.each do |inds1|
84
+ puts " dschara...#{inds1.dschara}"
85
+ puts " dscharb...#{inds1.dscharb}"
86
+ puts " dsdec1....#{inds1.dsdec1}"
87
+ puts " dsdec2....#{inds1.dsdec2}"
88
+ end
89
+ end
90
+
91
+ def no_test_0501_pgm_zzcall_array
92
+ zzcall << XMLService::I_DS.new('inds1',1,
93
+ [
94
+ XMLService::I_a.new('dschara',1,'t'),
95
+ XMLService::I_a.new('dscharb',1,'f'),
96
+ XMLService::I_p.new('dsdec1',7,4,77.6666),
97
+ XMLService::I_p.new('dsdec2',12,2,88888.77)
98
+ ])
99
+ zzcall.input.inds1[0].dschara = 'a'
100
+ zzcall.input.inds1[1].dscharb = 'a'
101
+ zzcall.input.inds1[2].dsdec1 = 111.1111
102
+ zzcall.input.inds1[3].dsdec2 = 1111.11
103
+ end
104
+ def no_test_0502_pgm_zzcall_array
105
+ zzcall << XMLService::I_DS.new('inds1',1,
106
+ {
107
+ 'dschara'=>XMLService::I_a.new('dschara',1,'t'),
108
+ 'dscharb'=>XMLService::I_a.new('dscharb',1,'f'),
109
+ 'dsdec1'=>XMLService::I_p.new('dsdec1',7,4,77.6666),
110
+ 'dsdec2'=>XMLService::I_p.new('dsdec2',12,2,88888.77)
111
+ })
112
+ zzcall.input.inds1['dschara'].dschara = 'a'
113
+ zzcall.input.inds1['dscharb'].dscharb = 'a'
114
+ zzcall.input.inds1['dsdec1'].dsdec1 = 111.1111
115
+ zzcall.input.inds1['dsdec2'].dsdec2 = 1111.11
116
+ end
117
+
118
+
119
+ def no_test_0503_pgm_zzcall_array
120
+ zzcall << XMLService::I_DS.new('inds1',1,
121
+ [{
122
+ 'dschara'=>XMLService::I_a.new('dschara',1,'t'),
123
+ 'dscharb'=>XMLService::I_a.new('dscharb',1,'f'),
124
+ 'dsdec1'=>XMLService::I_p.new('dsdec1',7,4,77.6666),
125
+ 'dsdec2'=>XMLService::I_p.new('dsdec2',12,2,88888.77)
126
+ }])
127
+
128
+ zzcall.input.inds1[0]['dschara'].dschara = 'a'
129
+ zzcall.input.inds1[0]['dscharb'].dscharb = 'a'
130
+ zzcall.input.inds1[0]['dsdec1'].dsdec1 = 111.1111
131
+ zzcall.input.inds1[0]['dsdec2'].dsdec2 = 1111.11
132
+ end
133
+
134
+
135
+ def no_test_0504_pgm_zzcall_array
136
+ zzcall << XMLService::I_DS.new('inds1',1,
137
+ [[
138
+ XMLService::I_a.new('dschara',1,'t'),
139
+ XMLService::I_a.new('dscharb',1,'f'),
140
+ XMLService::I_p.new('dsdec1',7,4,77.6666),
141
+ XMLService::I_p.new('dsdec2',12,2,88888.77)
142
+ ]])
143
+ zzcall.input.inds1[0][0].dschara = 'a'
144
+ zzcall.input.inds1[0][1].dscharb = 'a'
145
+ zzcall.input.inds1[0][2].dsdec1 = 111.1111
146
+ zzcall.input.inds1[0][3].dsdec2 = 1111.11
147
+ end
148
+
149
+ end