interapp 6.0.0 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9eeabb5748667c0cb614f7d41aff22cbc3bffa34f0d21008f9f697b9c74b9bf7
4
- data.tar.gz: 8bb5636d99624fab81291e54d33d1ec833bec95176b2a30e5903cfae79d5eb45
3
+ metadata.gz: 8a89ce38942b6077d2e30c9c6dc7de4b5ac48f615f14d0ec208442f865416429
4
+ data.tar.gz: 659b765754e8d24d8e7337a2990cc173ef0fcdc360de98192cc7a09645da384b
5
5
  SHA512:
6
- metadata.gz: ca0455b56b3d26db61328084ec371de9e5e39db7c4900568401cbc46bee849b0bc35241f0628ad95d21a750c1e16fe477094b0aea4b85e98265d63caed1cb8ff
7
- data.tar.gz: 93bef7f5ca4b85b89d13c357daee37b3e7d1f8c424f4abab7591707f2a52056926b44b966c29045dd4dc6c26f974a444d819162a55c2aebc47c48480d97466f7
6
+ metadata.gz: 9364bb56e351ff06d277113b3e9cdb4588db1b0b51fb3e344fa561aa2f296a3c5324562615e567ee32cc38842b5ffb9b9f15ec31b9221e3e7f4a75a7ff405b1a
7
+ data.tar.gz: f1e2ebac3e15fbe78ed8a95179b3dd4af1bc5ed115177fb646ccfe586d80c937b8fd4b2d384d6f8be2ff192a8333b81fffdb16c5440d8965ddfa1e157c5d7c3f
@@ -1,3 +1,6 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+
1
4
  module Interapp
2
5
  class SendMessageService
3
6
  attr :message, :peer, :payload
@@ -10,12 +13,17 @@ module Interapp
10
13
  end
11
14
 
12
15
  def perform
13
- response = RestClient.post(peer.endpoint, message.payload, {
14
- content_type: 'application/json',
15
- "X-Interapp-Identifier" => Interapp.configuration.identifier,
16
- "X-Interapp-Signature" => message.signature
17
- })
18
- JSON.parse(response) if response
16
+ response = Net::HTTP.post(
17
+ URI(peer.endpoint),
18
+ message.payload,
19
+ {
20
+ "X-Interapp-Identifier" => Interapp.configuration.identifier,
21
+ "X-Interapp-Signature" => message.signature,
22
+ "Content-Type" => "application/json",
23
+ "Accept" => "application/json"
24
+ }
25
+ )
26
+ JSON.parse(response.body) if response
19
27
  end
20
28
 
21
29
  private
data/lib/interapp.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require "ecdsa"
2
- require "rest-client"
3
2
  require "interapp/engine"
4
3
  require "interapp/configuration"
5
4
  require "interapp/cryptography"
@@ -1,3 +1,3 @@
1
1
  module Interapp
2
- VERSION = '6.0.0'.freeze
2
+ VERSION = '6.1.0'.freeze
3
3
  end
@@ -18,17 +18,21 @@ describe Interapp::SendMessageService do
18
18
  end
19
19
 
20
20
  describe "#perform" do
21
- it "sends the POST request" do
22
- expect(RestClient).to receive(:post).with(subject.peer.endpoint, subject.message.payload, {
23
- content_type: 'application/json',
24
- "X-Interapp-Identifier" => Interapp.configuration.identifier,
25
- "X-Interapp-Signature" => subject.message.signature
26
- })
27
- subject.perform
28
- end
29
-
30
- it "returns parsed json response" do
31
- allow(RestClient).to receive(:post).and_return("{\"dummy\":\"response\"}")
21
+ it "sends the POST request and return parsed json response" do
22
+ stub_request(:post, "https://dummy.example.com/interapp")
23
+ .with(
24
+ body: "{\"test\":[\"message\",\"payload\"]}",
25
+ headers: {
26
+ 'Content-Type' => 'application/json',
27
+ 'Accept' => 'application/json',
28
+ 'X-Interapp-Identifier' => Interapp.configuration.identifier,
29
+ 'X-Interapp-Signature' => subject.message.signature
30
+ }
31
+ ).to_return(
32
+ status: 200,
33
+ body: "{\"dummy\":\"response\"}",
34
+ headers: {}
35
+ )
32
36
  expect(subject.perform).to eq({"dummy" => "response"})
33
37
  end
34
38
  end
data/spec/spec_helper.rb CHANGED
@@ -2,6 +2,9 @@ ENV['RAILS_ENV'] ||= 'test'
2
2
 
3
3
  require File.expand_path('dummy/config/environment.rb', __dir__)
4
4
  require 'rspec/rails'
5
+ require 'webmock/rspec'
6
+
7
+ WebMock.disable_net_connect!
5
8
 
6
9
  Rails.backtrace_cleaner.remove_silencers!
7
10
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: interapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0
4
+ version: 6.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Zhou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-05 00:00:00.000000000 Z
11
+ date: 2021-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ecdsa
@@ -45,27 +45,21 @@ dependencies:
45
45
  - !ruby/object:Gem::Version
46
46
  version: '7.0'
47
47
  - !ruby/object:Gem::Dependency
48
- name: rest-client
48
+ name: rspec-rails
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ">"
52
- - !ruby/object:Gem::Version
53
- version: 1.7.0
54
- - - "<"
51
+ - - ">="
55
52
  - !ruby/object:Gem::Version
56
- version: '3.0'
57
- type: :runtime
53
+ version: '0'
54
+ type: :development
58
55
  prerelease: false
59
56
  version_requirements: !ruby/object:Gem::Requirement
60
57
  requirements:
61
- - - ">"
62
- - !ruby/object:Gem::Version
63
- version: 1.7.0
64
- - - "<"
58
+ - - ">="
65
59
  - !ruby/object:Gem::Version
66
- version: '3.0'
60
+ version: '0'
67
61
  - !ruby/object:Gem::Dependency
68
- name: rspec-rails
62
+ name: sqlite3
69
63
  requirement: !ruby/object:Gem::Requirement
70
64
  requirements:
71
65
  - - ">="
@@ -79,7 +73,7 @@ dependencies:
79
73
  - !ruby/object:Gem::Version
80
74
  version: '0'
81
75
  - !ruby/object:Gem::Dependency
82
- name: sqlite3
76
+ name: webmock
83
77
  requirement: !ruby/object:Gem::Requirement
84
78
  requirements:
85
79
  - - ">="
@@ -145,7 +139,6 @@ files:
145
139
  - spec/dummy/config/routes.rb
146
140
  - spec/dummy/config/secrets.yml
147
141
  - spec/dummy/db/test.sqlite3
148
- - spec/dummy/log/test.log
149
142
  - spec/dummy/public/404.html
150
143
  - spec/dummy/public/422.html
151
144
  - spec/dummy/public/500.html
@@ -174,49 +167,47 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
167
  - !ruby/object:Gem::Version
175
168
  version: '0'
176
169
  requirements: []
177
- rubyforge_project:
178
- rubygems_version: 2.7.6
170
+ rubygems_version: 3.1.4
179
171
  signing_key:
180
172
  specification_version: 4
181
173
  summary: Interapp handles simple and secure inter-app messaging.
182
174
  test_files:
183
175
  - spec/services/receive_message_service_spec.rb
184
176
  - spec/services/send_message_service_spec.rb
177
+ - spec/models/message_spec.rb
185
178
  - spec/spec_helper.rb
186
179
  - spec/requests/interapp_spec.rb
187
- - spec/models/message_spec.rb
188
- - spec/dummy/README.rdoc
189
- - spec/dummy/app/assets/javascripts/application.js
190
- - spec/dummy/app/assets/stylesheets/application.css
191
- - spec/dummy/app/helpers/application_helper.rb
192
- - spec/dummy/app/views/layouts/application.html.erb
193
- - spec/dummy/app/controllers/application_controller.rb
194
- - spec/dummy/config/initializers/wrap_parameters.rb
195
- - spec/dummy/config/initializers/session_store.rb
196
- - spec/dummy/config/initializers/mime_types.rb
197
- - spec/dummy/config/initializers/filter_parameter_logging.rb
198
- - spec/dummy/config/initializers/inflections.rb
199
- - spec/dummy/config/initializers/backtrace_silencers.rb
200
- - spec/dummy/config/initializers/interapp.rb
201
- - spec/dummy/config/initializers/cookies_serializer.rb
202
- - spec/dummy/config/locales/en.yml
180
+ - spec/dummy/config/secrets.yml
181
+ - spec/dummy/config/boot.rb
203
182
  - spec/dummy/config/environments/test.rb
204
183
  - spec/dummy/config/environments/development.rb
205
184
  - spec/dummy/config/environments/production.rb
206
- - spec/dummy/config/environment.rb
207
- - spec/dummy/config/boot.rb
208
185
  - spec/dummy/config/routes.rb
209
- - spec/dummy/config/secrets.yml
210
186
  - spec/dummy/config/database.yml
187
+ - spec/dummy/config/locales/en.yml
188
+ - spec/dummy/config/environment.rb
189
+ - spec/dummy/config/initializers/cookies_serializer.rb
190
+ - spec/dummy/config/initializers/interapp.rb
191
+ - spec/dummy/config/initializers/backtrace_silencers.rb
192
+ - spec/dummy/config/initializers/session_store.rb
193
+ - spec/dummy/config/initializers/wrap_parameters.rb
194
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
195
+ - spec/dummy/config/initializers/mime_types.rb
196
+ - spec/dummy/config/initializers/inflections.rb
211
197
  - spec/dummy/config/application.rb
212
- - spec/dummy/bin/rake
213
- - spec/dummy/bin/bundle
214
- - spec/dummy/bin/rails
215
- - spec/dummy/log/test.log
216
198
  - spec/dummy/db/test.sqlite3
199
+ - spec/dummy/config.ru
200
+ - spec/dummy/app/views/layouts/application.html.erb
201
+ - spec/dummy/app/helpers/application_helper.rb
202
+ - spec/dummy/app/assets/stylesheets/application.css
203
+ - spec/dummy/app/assets/javascripts/application.js
204
+ - spec/dummy/app/controllers/application_controller.rb
217
205
  - spec/dummy/public/favicon.ico
218
- - spec/dummy/public/422.html
219
- - spec/dummy/public/500.html
220
206
  - spec/dummy/public/404.html
221
- - spec/dummy/config.ru
207
+ - spec/dummy/public/500.html
208
+ - spec/dummy/public/422.html
222
209
  - spec/dummy/Rakefile
210
+ - spec/dummy/README.rdoc
211
+ - spec/dummy/bin/bundle
212
+ - spec/dummy/bin/rails
213
+ - spec/dummy/bin/rake
@@ -1,287 +0,0 @@
1
-  (1.8ms) SELECT sqlite_version(*)
2
-  (0.2ms) begin transaction
3
-  (0.1ms) rollback transaction
4
-  (0.1ms) begin transaction
5
-  (0.1ms) rollback transaction
6
-  (0.0ms) begin transaction
7
-  (0.1ms) rollback transaction
8
-  (0.0ms) begin transaction
9
-  (0.0ms) rollback transaction
10
-  (0.0ms) begin transaction
11
-  (0.0ms) rollback transaction
12
-  (0.1ms) begin transaction
13
-  (0.0ms) rollback transaction
14
-  (0.1ms) begin transaction
15
-  (0.1ms) rollback transaction
16
-  (0.0ms) begin transaction
17
-  (0.1ms) rollback transaction
18
-  (0.1ms) begin transaction
19
-  (0.1ms) rollback transaction
20
-  (0.1ms) begin transaction
21
-  (0.1ms) rollback transaction
22
-  (0.0ms) begin transaction
23
-  (0.0ms) rollback transaction
24
-  (0.0ms) begin transaction
25
-  (0.1ms) rollback transaction
26
-  (0.1ms) begin transaction
27
-  (0.0ms) rollback transaction
28
-  (0.1ms) begin transaction
29
-  (0.1ms) rollback transaction
30
-  (0.0ms) begin transaction
31
-  (0.0ms) rollback transaction
32
-  (0.1ms) begin transaction
33
-  (0.0ms) rollback transaction
34
-  (0.0ms) begin transaction
35
-  (0.2ms) rollback transaction
36
-  (0.0ms) begin transaction
37
-  (0.1ms) rollback transaction
38
-  (0.8ms) SELECT sqlite_version(*)
39
-  (0.0ms) begin transaction
40
-  (0.0ms) rollback transaction
41
-  (0.1ms) begin transaction
42
-  (0.1ms) rollback transaction
43
-  (0.0ms) begin transaction
44
-  (0.0ms) rollback transaction
45
-  (0.0ms) begin transaction
46
-  (0.0ms) rollback transaction
47
-  (0.0ms) begin transaction
48
-  (0.1ms) rollback transaction
49
-  (0.0ms) begin transaction
50
-  (0.1ms) rollback transaction
51
-  (0.0ms) begin transaction
52
-  (0.1ms) rollback transaction
53
-  (0.0ms) begin transaction
54
-  (0.1ms) rollback transaction
55
-  (0.1ms) begin transaction
56
-  (0.0ms) rollback transaction
57
-  (0.0ms) begin transaction
58
-  (0.1ms) rollback transaction
59
-  (0.0ms) begin transaction
60
-  (0.0ms) rollback transaction
61
-  (0.0ms) begin transaction
62
-  (0.0ms) rollback transaction
63
-  (0.0ms) begin transaction
64
-  (0.0ms) rollback transaction
65
-  (0.0ms) begin transaction
66
-  (0.0ms) rollback transaction
67
-  (0.0ms) begin transaction
68
-  (0.1ms) rollback transaction
69
-  (0.0ms) begin transaction
70
-  (0.1ms) rollback transaction
71
-  (0.1ms) begin transaction
72
-  (0.1ms) rollback transaction
73
-  (0.1ms) begin transaction
74
-  (0.1ms) rollback transaction
75
-  (1.5ms) SELECT sqlite_version(*)
76
-  (0.1ms) begin transaction
77
-  (0.1ms) rollback transaction
78
-  (0.0ms) begin transaction
79
-  (0.1ms) rollback transaction
80
-  (0.1ms) begin transaction
81
-  (0.1ms) rollback transaction
82
-  (0.0ms) begin transaction
83
-  (0.0ms) rollback transaction
84
-  (0.1ms) begin transaction
85
-  (0.1ms) rollback transaction
86
-  (0.1ms) begin transaction
87
-  (0.0ms) rollback transaction
88
-  (0.1ms) begin transaction
89
-  (0.0ms) rollback transaction
90
-  (0.1ms) begin transaction
91
-  (0.1ms) rollback transaction
92
-  (0.0ms) begin transaction
93
-  (0.1ms) rollback transaction
94
-  (0.1ms) begin transaction
95
-  (0.0ms) rollback transaction
96
-  (0.0ms) begin transaction
97
-  (0.0ms) rollback transaction
98
-  (0.0ms) begin transaction
99
-  (0.0ms) rollback transaction
100
-  (0.0ms) begin transaction
101
-  (0.0ms) rollback transaction
102
-  (0.0ms) begin transaction
103
-  (0.1ms) rollback transaction
104
-  (0.0ms) begin transaction
105
-  (0.1ms) rollback transaction
106
-  (0.0ms) begin transaction
107
-  (0.1ms) rollback transaction
108
-  (0.0ms) begin transaction
109
-  (0.0ms) rollback transaction
110
-  (0.0ms) begin transaction
111
-  (0.1ms) rollback transaction
112
-  (0.8ms) SELECT sqlite_version(*)
113
-  (0.0ms) begin transaction
114
-  (0.1ms) rollback transaction
115
-  (0.0ms) begin transaction
116
-  (0.1ms) rollback transaction
117
-  (0.0ms) begin transaction
118
-  (0.1ms) rollback transaction
119
-  (0.1ms) begin transaction
120
-  (0.1ms) rollback transaction
121
-  (0.1ms) begin transaction
122
-  (0.1ms) rollback transaction
123
-  (0.0ms) begin transaction
124
-  (0.0ms) rollback transaction
125
-  (0.1ms) begin transaction
126
-  (0.1ms) rollback transaction
127
-  (0.1ms) begin transaction
128
-  (0.0ms) rollback transaction
129
-  (0.0ms) begin transaction
130
-  (0.0ms) rollback transaction
131
-  (0.0ms) begin transaction
132
-  (0.1ms) rollback transaction
133
-  (0.0ms) begin transaction
134
-  (0.1ms) rollback transaction
135
-  (0.1ms) begin transaction
136
-  (0.0ms) rollback transaction
137
-  (0.0ms) begin transaction
138
-  (0.0ms) rollback transaction
139
-  (0.0ms) begin transaction
140
-  (0.0ms) rollback transaction
141
-  (0.0ms) begin transaction
142
-  (0.0ms) rollback transaction
143
-  (0.0ms) begin transaction
144
-  (0.0ms) rollback transaction
145
-  (0.1ms) begin transaction
146
-  (0.1ms) rollback transaction
147
-  (0.1ms) begin transaction
148
-  (0.0ms) rollback transaction
149
-  (0.7ms) SELECT sqlite_version(*)
150
-  (0.0ms) begin transaction
151
-  (0.1ms) rollback transaction
152
-  (0.1ms) begin transaction
153
-  (0.1ms) rollback transaction
154
-  (0.0ms) begin transaction
155
-  (0.1ms) rollback transaction
156
-  (0.0ms) begin transaction
157
-  (0.1ms) rollback transaction
158
-  (0.1ms) begin transaction
159
-  (0.1ms) rollback transaction
160
-  (0.0ms) begin transaction
161
-  (0.0ms) rollback transaction
162
-  (0.0ms) begin transaction
163
-  (0.0ms) rollback transaction
164
-  (0.0ms) begin transaction
165
-  (0.1ms) rollback transaction
166
-  (0.0ms) begin transaction
167
-  (0.0ms) rollback transaction
168
-  (0.0ms) begin transaction
169
-  (0.0ms) rollback transaction
170
-  (0.0ms) begin transaction
171
-  (0.0ms) rollback transaction
172
-  (0.0ms) begin transaction
173
- Started POST "/interapp" for 127.0.0.1 at 2019-09-05 16:36:13 +1000
174
- Processing by Interapp::MessagesController#create as HTML
175
- Parameters: {"test"=>["message", "payload"], "message"=>{"test"=>["message", "payload"]}}
176
- Completed 200 OK in 136ms (Views: 0.2ms | ActiveRecord: 0.0ms | Allocations: 772877)
177
-  (0.0ms) rollback transaction
178
-  (0.1ms) begin transaction
179
-  (0.0ms) rollback transaction
180
-  (0.1ms) begin transaction
181
-  (0.0ms) rollback transaction
182
-  (0.0ms) begin transaction
183
-  (0.0ms) rollback transaction
184
-  (0.0ms) begin transaction
185
-  (0.1ms) rollback transaction
186
-  (0.0ms) begin transaction
187
-  (0.1ms) rollback transaction
188
-  (0.1ms) begin transaction
189
-  (0.1ms) rollback transaction
190
-  (1.3ms) SELECT sqlite_version(*)
191
-  (0.1ms) begin transaction
192
- Started POST "/interapp" for 127.0.0.1 at 2019-09-05 16:36:50 +1000
193
- Processing by Interapp::MessagesController#create as HTML
194
- Parameters: {"test"=>["message", "payload"], "message"=>{"test"=>["message", "payload"]}}
195
- Completed 200 OK in 192ms (Views: 0.2ms | ActiveRecord: 0.0ms | Allocations: 774404)
196
-  (0.0ms) rollback transaction
197
-  (0.0ms) begin transaction
198
- Started POST "/interapp" for 127.0.0.1 at 2019-09-05 16:36:50 +1000
199
- Processing by Interapp::MessagesController#create as HTML
200
- Parameters: {"test"=>["message", "payload"], "message"=>{"test"=>["message", "payload"]}}
201
- Completed 403 Forbidden in 0ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 156)
202
-  (0.0ms) rollback transaction
203
-  (0.0ms) begin transaction
204
- Started POST "/interapp" for 127.0.0.1 at 2019-09-05 16:36:50 +1000
205
- Processing by Interapp::MessagesController#create as HTML
206
- Parameters: {"test"=>["message", "payload"], "message"=>{"test"=>["message", "payload"]}}
207
- Completed 403 Forbidden in 0ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 175)
208
-  (0.0ms) rollback transaction
209
-  (0.0ms) begin transaction
210
-  (0.1ms) rollback transaction
211
-  (0.0ms) begin transaction
212
-  (0.0ms) rollback transaction
213
-  (0.1ms) begin transaction
214
-  (0.1ms) rollback transaction
215
-  (0.0ms) begin transaction
216
-  (0.0ms) rollback transaction
217
-  (0.0ms) begin transaction
218
-  (0.0ms) rollback transaction
219
-  (0.0ms) begin transaction
220
-  (0.1ms) rollback transaction
221
-  (0.1ms) begin transaction
222
-  (0.1ms) rollback transaction
223
-  (0.1ms) begin transaction
224
-  (0.0ms) rollback transaction
225
-  (0.1ms) begin transaction
226
-  (0.1ms) rollback transaction
227
-  (0.0ms) begin transaction
228
-  (0.1ms) rollback transaction
229
-  (0.1ms) begin transaction
230
-  (0.1ms) rollback transaction
231
-  (0.1ms) begin transaction
232
-  (0.1ms) rollback transaction
233
-  (0.1ms) begin transaction
234
-  (0.0ms) rollback transaction
235
-  (0.1ms) begin transaction
236
-  (0.0ms) rollback transaction
237
-  (0.1ms) begin transaction
238
-  (0.0ms) rollback transaction
239
-  (0.9ms) SELECT sqlite_version(*)
240
-  (0.1ms) begin transaction
241
-  (0.1ms) rollback transaction
242
-  (0.0ms) begin transaction
243
-  (0.1ms) rollback transaction
244
-  (0.1ms) begin transaction
245
-  (0.0ms) rollback transaction
246
-  (0.1ms) begin transaction
247
-  (0.1ms) rollback transaction
248
-  (0.0ms) begin transaction
249
-  (0.0ms) rollback transaction
250
-  (0.1ms) begin transaction
251
- Started POST "/interapp" for 127.0.0.1 at 2019-09-05 16:37:16 +1000
252
- Processing by Interapp::MessagesController#create as HTML
253
- Parameters: {"test"=>["message", "payload"], "message"=>{"test"=>["message", "payload"]}}
254
- Completed 403 Forbidden in 1ms (Views: 0.2ms | ActiveRecord: 0.0ms | Allocations: 273)
255
-  (0.0ms) rollback transaction
256
-  (0.0ms) begin transaction
257
- Started POST "/interapp" for 127.0.0.1 at 2019-09-05 16:37:16 +1000
258
- Processing by Interapp::MessagesController#create as HTML
259
- Parameters: {"test"=>["message", "payload"], "message"=>{"test"=>["message", "payload"]}}
260
- Completed 403 Forbidden in 0ms (Views: 0.2ms | ActiveRecord: 0.0ms | Allocations: 150)
261
-  (0.1ms) rollback transaction
262
-  (0.0ms) begin transaction
263
- Started POST "/interapp" for 127.0.0.1 at 2019-09-05 16:37:16 +1000
264
- Processing by Interapp::MessagesController#create as HTML
265
- Parameters: {"test"=>["message", "payload"], "message"=>{"test"=>["message", "payload"]}}
266
- Completed 200 OK in 139ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 774087)
267
-  (0.0ms) rollback transaction
268
-  (0.0ms) begin transaction
269
-  (0.1ms) rollback transaction
270
-  (0.1ms) begin transaction
271
-  (0.1ms) rollback transaction
272
-  (0.1ms) begin transaction
273
-  (0.0ms) rollback transaction
274
-  (0.0ms) begin transaction
275
-  (0.0ms) rollback transaction
276
-  (0.0ms) begin transaction
277
-  (0.0ms) rollback transaction
278
-  (0.0ms) begin transaction
279
-  (0.0ms) rollback transaction
280
-  (0.0ms) begin transaction
281
-  (0.0ms) rollback transaction
282
-  (0.0ms) begin transaction
283
-  (0.1ms) rollback transaction
284
-  (0.1ms) begin transaction
285
-  (0.1ms) rollback transaction
286
-  (0.0ms) begin transaction
287
-  (0.1ms) rollback transaction