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
8341b2ea
Commit
8341b2ea
authored
Aug 14, 2020
by
alinamihaila
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improve tests using let
parent
45182200
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
68 additions
and
30 deletions
+68
-30
spec/lib/gitlab/redis/hll_spec.rb
spec/lib/gitlab/redis/hll_spec.rb
+68
-30
No files found.
spec/lib/gitlab/redis/hll_spec.rb
View file @
8341b2ea
...
...
@@ -3,66 +3,104 @@
require
'spec_helper'
RSpec
.
describe
Gitlab
::
Redis
::
HLL
,
:clean_gitlab_redis_shared_state
do
using
RSpec
::
Parameterized
::
TableSyntax
let
(
:expiry
)
{
1
.
day
}
describe
'.add'
do
context
'when checking key format'
do
it
'raise an error when using an invalid key format'
do
[
'test'
,
'test-{metric'
,
'test-{metric}}'
].
each
do
|
key
|
expect
{
described_class
.
add
(
key:
key
,
value:
1
,
expiry:
1
.
day
)
}.
to
raise_error
(
Gitlab
::
Redis
::
HLL
::
KeyFormatError
)
context
'for invalid keys'
do
where
(
:metric_key
,
:value
)
do
'test'
|
1
'test-{metric'
|
1
'test-{metric}}'
|
1
end
with_them
do
it
'raise an error when using an invalid key format'
do
expect
{
described_class
.
add
(
key:
metric_key
,
value:
value
,
expiry:
expiry
)
}.
to
raise_error
(
Gitlab
::
Redis
::
HLL
::
KeyFormatError
)
end
end
end
it
"doesn't raise error when having correct format"
do
[
'test-{metric}'
,
'test-{metric}-1'
,
'test:{metric}-1'
,
'2020-216-{project_action}'
,
'i_{analytics}_dev_ops_score-2020-32'
].
each
do
|
key
|
expect
{
described_class
.
add
(
key:
key
,
value:
1
,
expiry:
1
.
day
)
}.
not_to
raise_error
context
'for valid keys'
do
where
(
:metric_key
,
:value
)
do
'test-{metric}'
|
1
'test-{metric}-1'
|
1
'test:{metric}-1'
|
1
'2020-216-{project_action}'
|
1
'i_{analytics}_dev_ops_score-2020-32'
|
1
end
with_them
do
it
"doesn't raise error when having correct format"
do
expect
{
described_class
.
add
(
key:
metric_key
,
value:
value
,
expiry:
expiry
)
}.
not_to
raise_error
end
end
end
end
end
describe
'.count'
do
let
(
:event_2020_32
)
{
'2020-32-{expand_vulnerabilities}'
}
let
(
:event_2020_33
)
{
'2020-33-{expand_vulnerabilities}'
}
let
(
:event_2020_34
)
{
'2020-34-{expand_vulnerabilities}'
}
let
(
:entity1
)
{
'user_id_1'
}
let
(
:entity2
)
{
'user_id_2'
}
let
(
:entity3
)
{
'user_id_3'
}
let
(
:entity4
)
{
'user_id_4'
}
before
do
described_class
.
add
(
key:
'2020-32-{expand_vulnerabilities}'
,
value:
"user_id_1"
,
expiry:
1
.
day
)
described_class
.
add
(
key:
'2020-32-{expand_vulnerabilities}'
,
value:
"user_id_1"
,
expiry:
1
.
day
)
described_class
.
add
(
key:
'2020-32-{expand_vulnerabilities}'
,
value:
"user_id_2"
,
expiry:
1
.
day
)
described_class
.
add
(
key:
'2020-32-{expand_vulnerabilities}'
,
value:
"user_id_3"
,
expiry:
1
.
day
)
track_event
(
event_2020_32
,
entity1
)
track_event
(
event_2020_32
,
entity1
)
track_event
(
event_2020_32
,
entity2
)
track_event
(
event_2020_32
,
entity3
)
described_class
.
add
(
key:
'2020-33-{expand_vulnerabilities}'
,
value:
"user_id_3"
,
expiry:
1
.
day
)
described_class
.
add
(
key:
'2020-33-{expand_vulnerabilities}'
,
value:
"user_id_3"
,
expiry:
1
.
day
)
track_event
(
event_2020_33
,
entity3
)
track_event
(
event_2020_33
,
entity3
)
described_class
.
add
(
key:
'2020-34-{expand_vulnerabilities}'
,
value:
"user_id_3"
,
expiry:
1
.
day
)
described_class
.
add
(
key:
'2020-34-{expand_vulnerabilities}'
,
value:
"user_id_2"
,
expiry:
1
.
day
)
track_event
(
event_2020_34
,
entity3
)
track_event
(
event_2020_34
,
entity2
)
end
it
'has 3 distinct users for weeks 32, 33, 34'
do
expect
(
described_class
.
count
(
keys:
[
'2020-32-{expand_vulnerabilities}'
,
'2020-33-{expand_vulnerabilities}'
,
'2020-34-{expand_vulnerabilities}'
])).
to
eq
(
3
)
unique_counts
=
count_unique_events
([
event_2020_32
,
event_2020_33
,
event_2020_34
])
expect
(
unique_counts
).
to
eq
(
3
)
end
it
'has 3 distinct users for weeks 32, 33'
do
expect
(
described_class
.
count
(
keys:
[
'2020-32-{expand_vulnerabilities}'
,
'2020-33-{expand_vulnerabilities}'
])).
to
eq
(
3
)
unique_counts
=
count_unique_events
([
event_2020_32
,
event_2020_33
])
expect
(
unique_counts
).
to
eq
(
3
)
end
it
'has 2 distinct users for weeks 33, 34'
do
expect
(
described_class
.
count
(
keys:
[
'2020-33-{expand_vulnerabilities}'
,
'2020-34-{expand_vulnerabilities}'
])).
to
eq
(
2
)
unique_counts
=
count_unique_events
([
event_2020_33
,
event_2020_34
])
expect
(
unique_counts
).
to
eq
(
2
)
end
it
'has one distinct user for week 33'
do
expect
(
described_class
.
count
(
keys:
[
'2020-33-{expand_vulnerabilities}'
])).
to
eq
(
1
)
unique_counts
=
count_unique_events
([
event_2020_33
])
expect
(
unique_counts
).
to
eq
(
1
)
end
it
'has 4 distinct users when one different user has an action on week 34'
do
described_class
.
add
(
key:
'2020-34-{expand_vulnerabilities}'
,
value:
"user_id_4"
,
expiry:
29
.
days
)
track_event
(
event_2020_34
,
entity4
,
29
.
days
)
unique_counts
=
count_unique_events
([
event_2020_32
,
event_2020_33
,
event_2020_34
])
expect
(
unique_counts
).
to
eq
(
4
)
end
def
track_event
(
key
,
value
,
expiry
=
1
.
day
)
described_class
.
add
(
key:
key
,
value:
value
,
expiry:
expiry
)
end
expect
(
described_class
.
count
(
keys:
[
'2020-32-{expand_vulnerabilities}'
,
'2020-33-{expand_vulnerabilities}'
,
'2020-34-{expand_vulnerabilities}'
])).
to
eq
(
4
)
def
count_unique_events
(
keys
)
described_class
.
count
(
keys:
keys
)
end
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