Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
2f765e2a
Commit
2f765e2a
authored
Feb 10, 2021
by
Quang-Minh Nguyen
Committed by
Kamil Trzciński
Feb 10, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Conver hashy query to query string
Issue
https://gitlab.com/gitlab-org/gitlab/-/issues/301009
parent
0015e540
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
118 additions
and
90 deletions
+118
-90
lib/peek/views/external_http.rb
lib/peek/views/external_http.rb
+6
-2
spec/lib/peek/views/external_http_spec.rb
spec/lib/peek/views/external_http_spec.rb
+112
-88
No files found.
lib/peek/views/external_http.rb
View file @
2f765e2a
...
...
@@ -86,12 +86,16 @@ module Peek
uri
.
hostname
=
call
[
:host
]
uri
.
port
=
call
[
:port
]
uri
.
path
=
call
[
:path
]
uri
.
query
=
call
[
:query
]
uri
.
query
=
generate_query
(
call
[
:query
])
uri
.
to_s
rescue
URI
::
Error
rescue
Standard
Error
'unknown'
end
def
generate_query
(
query_string
)
query_string
.
is_a?
(
Hash
)
?
query_string
.
to_query
:
query_string
.
to_s
end
end
end
end
spec/lib/peek/views/external_http_spec.rb
View file @
2f765e2a
...
...
@@ -12,29 +12,29 @@ RSpec.describe Peek::Views::ExternalHttp, :request_store do
end
let
(
:event_1
)
do
double
(
:event
,
payload:
{
{
method:
'POST'
,
code:
"200"
,
duration:
0.03
,
scheme:
'https'
,
host:
'gitlab.com'
,
port:
80
,
path:
'/api/v4/projects'
,
query:
'current=true'
}
)
}
end
let
(
:event_2
)
do
double
(
:event
,
payload:
{
{
method:
'POST'
,
duration:
1.3
,
scheme:
'http'
,
host:
'gitlab.com'
,
port:
80
,
path:
'/api/v4/projects/2/issues'
,
query:
'current=true'
,
exception_object:
Net
::
ReadTimeout
.
new
}
)
}
end
let
(
:event_3
)
do
double
(
:event
,
payload:
{
{
method:
'GET'
,
code:
"301"
,
duration:
0.005
,
scheme:
'http'
,
host:
'gitlab.com'
,
port:
80
,
path:
'/api/v4/projects/2'
,
query:
'current=true'
,
proxy_host:
'proxy.gitlab.com'
,
proxy_port:
8080
}
)
}
end
it
'returns no results'
do
...
...
@@ -44,9 +44,9 @@ RSpec.describe Peek::Views::ExternalHttp, :request_store do
end
it
'returns aggregated results'
do
subscriber
.
request
(
event_1
)
subscriber
.
request
(
event_2
)
subscriber
.
request
(
event_3
)
subscriber
.
request
(
double
(
:event
,
payload:
event_1
)
)
subscriber
.
request
(
double
(
:event
,
payload:
event_2
)
)
subscriber
.
request
(
double
(
:event
,
payload:
event_3
)
)
results
=
subject
.
results
expect
(
results
[
:calls
]).
to
eq
(
3
)
...
...
@@ -86,105 +86,129 @@ RSpec.describe Peek::Views::ExternalHttp, :request_store do
end
context
'when the host is in IPv4 format'
do
before
do
event_1
[
:host
]
=
'1.2.3.4'
end
it
'displays IPv4 in the label'
do
subscriber
.
request
(
double
(
:event
,
payload:
{
method:
'POST'
,
code:
"200"
,
duration:
0.03
,
scheme:
'https'
,
host:
'1.2.3.4'
,
port:
80
,
path:
'/api/v4/projects'
,
query:
'current=true'
})
)
expect
(
subject
.
results
[
:details
].
map
{
|
data
|
data
.
slice
(
:duration
,
:label
,
:code
,
:proxy
,
:error
,
:warnings
)
}
).
to
match_array
(
[
{
duration:
30.0
,
label:
"POST https://1.2.3.4:80/api/v4/projects?current=true"
,
code:
"Response status: 200"
,
proxy:
nil
,
error:
nil
,
warnings:
[]
}
]
subscriber
.
request
(
double
(
:event
,
payload:
event_1
))
expect
(
subject
.
results
[
:details
]).
to
contain_exactly
(
a_hash_including
(
duration:
30.0
,
label:
"POST https://1.2.3.4:80/api/v4/projects?current=true"
,
code:
"Response status: 200"
,
proxy:
nil
,
error:
nil
,
warnings:
[]
)
)
end
end
context
'when the host is in IPv6 foramat'
do
before
do
event_1
[
:host
]
=
'2606:4700:90:0:f22e:fbec:5bed:a9b9'
end
it
'displays IPv6 in the label'
do
subscriber
.
request
(
double
(
:event
,
payload:
{
method:
'POST'
,
code:
"200"
,
duration:
0.03
,
scheme:
'https'
,
host:
'2606:4700:90:0:f22e:fbec:5bed:a9b9'
,
port:
80
,
path:
'/api/v4/projects'
,
query:
'current=true'
})
subscriber
.
request
(
double
(
:event
,
payload:
event_1
))
expect
(
subject
.
results
[
:details
]).
to
contain_exactly
(
a_hash_including
(
duration:
30.0
,
label:
"POST https://[2606:4700:90:0:f22e:fbec:5bed:a9b9]:80/api/v4/projects?current=true"
,
code:
"Response status: 200"
,
proxy:
nil
,
error:
nil
,
warnings:
[]
)
)
expect
(
subject
.
results
[
:details
].
map
{
|
data
|
data
.
slice
(
:duration
,
:label
,
:code
,
:proxy
,
:error
,
:warnings
)
}
).
to
match_array
(
[
{
duration:
30.0
,
label:
"POST https://[2606:4700:90:0:f22e:fbec:5bed:a9b9]:80/api/v4/projects?current=true"
,
code:
"Response status: 200"
,
proxy:
nil
,
error:
nil
,
warnings:
[]
}
]
end
end
context
'when the query is a hash'
do
before
do
event_1
[
:query
]
=
{
current:
true
,
'item1'
=>
'string'
,
'item2'
=>
[
1
,
2
]
}
end
it
'converts query hash into a query string'
do
subscriber
.
request
(
double
(
:event
,
payload:
event_1
))
expect
(
subject
.
results
[
:details
]).
to
contain_exactly
(
a_hash_including
(
duration:
30.0
,
label:
"POST https://gitlab.com:80/api/v4/projects?current=true&item1=string&item2%5B%5D=1&item2%5B%5D=2"
,
code:
"Response status: 200"
,
proxy:
nil
,
error:
nil
,
warnings:
[]
)
)
end
end
context
'when the host is invalid'
do
before
do
event_1
[
:host
]
=
'!@#%!@#%!@#%'
end
it
'displays unknown in the label'
do
subscriber
.
request
(
double
(
:event
,
payload:
{
method:
'POST'
,
code:
"200"
,
duration:
0.03
,
scheme:
'https'
,
host:
'!@#%!@#%!@#%'
,
port:
80
,
path:
'/api/v4/projects'
,
query:
'current=true'
})
)
expect
(
subject
.
results
[
:details
].
map
{
|
data
|
data
.
slice
(
:duration
,
:label
,
:code
,
:proxy
,
:error
,
:warnings
)
}
).
to
match_array
(
[
{
duration:
30.0
,
label:
"POST unknown"
,
code:
"Response status: 200"
,
proxy:
nil
,
error:
nil
,
warnings:
[]
}
]
subscriber
.
request
(
double
(
:event
,
payload:
event_1
))
expect
(
subject
.
results
[
:details
]).
to
contain_exactly
(
a_hash_including
(
duration:
30.0
,
label:
"POST unknown"
,
code:
"Response status: 200"
,
proxy:
nil
,
error:
nil
,
warnings:
[]
)
)
end
end
context
'when another URI component is invalid'
do
context
'when URI creation raises an URI::Error'
do
before
do
# This raises an URI::Error exception
event_1
[
:port
]
=
'invalid'
end
it
'displays unknown in the label'
do
subscriber
.
request
(
double
(
:event
,
payload:
{
method:
'POST'
,
code:
"200"
,
duration:
0.03
,
scheme:
'https'
,
host:
'invalid'
,
port:
'invalid'
,
path:
'/api/v4/projects'
,
query:
'current=true'
})
subscriber
.
request
(
double
(
:event
,
payload:
event_1
))
expect
(
subject
.
results
[
:details
]).
to
contain_exactly
(
a_hash_including
(
duration:
30.0
,
label:
"POST unknown"
,
code:
"Response status: 200"
,
proxy:
nil
,
error:
nil
,
warnings:
[]
)
)
expect
(
subject
.
results
[
:details
].
map
{
|
data
|
data
.
slice
(
:duration
,
:label
,
:code
,
:proxy
,
:error
,
:warnings
)
}
).
to
match_array
(
[
{
duration:
30.0
,
label:
"POST unknown"
,
code:
"Response status: 200"
,
proxy:
nil
,
error:
nil
,
warnings:
[]
}
]
end
end
context
'when URI creation raises a StandardError exception'
do
before
do
# This raises a TypeError exception
event_1
[
:scheme
]
=
1234
end
it
'displays unknown in the label'
do
subscriber
.
request
(
double
(
:event
,
payload:
event_1
))
expect
(
subject
.
results
[
:details
]).
to
contain_exactly
(
a_hash_including
(
duration:
30.0
,
label:
"POST unknown"
,
code:
"Response status: 200"
,
proxy:
nil
,
error:
nil
,
warnings:
[]
)
)
end
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment