rspeed 0.2.0 → 0.5.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -0
- data/README.md +10 -7
- data/lib/generators/rspeed/install_generator.rb +1 -1
- data/lib/rspeed.rb +8 -7
- data/lib/rspeed/env.rb +39 -0
- data/lib/rspeed/extension.rb +3 -2
- data/lib/rspeed/logger.rb +11 -0
- data/lib/rspeed/observer.rb +21 -6
- data/lib/rspeed/redis.rb +64 -0
- data/lib/rspeed/runner.rb +5 -16
- data/lib/rspeed/splitter.rb +66 -71
- data/lib/rspeed/variable.rb +31 -0
- data/lib/rspeed/version.rb +1 -1
- data/spec/common_helper.rb +10 -0
- data/spec/fixtures/1_spec.rb +9 -0
- data/spec/fixtures/2_spec.rb +5 -0
- data/spec/fixtures/empty.rb +4 -0
- data/spec/fixtures/new_spec.rb.csv +1 -0
- data/spec/models/rspeed/env/db_spec.rb +17 -0
- data/spec/models/rspeed/env/host_spec.rb +17 -0
- data/spec/models/rspeed/env/name_spec.rb +17 -0
- data/spec/models/rspeed/env/pipe_spec.rb +19 -0
- data/spec/models/rspeed/env/pipes_spec.rb +19 -0
- data/spec/models/rspeed/env/port_spec.rb +17 -0
- data/spec/models/rspeed/env/result_key_spec.rb +19 -0
- data/spec/models/rspeed/env/rspeed_spec.rb +43 -0
- data/spec/models/rspeed/observer/after_spec.rb +5 -5
- data/spec/models/rspeed/observer/after_suite_spec.rb +57 -0
- data/spec/models/rspeed/observer/before_spec.rb +0 -2
- data/spec/models/rspeed/observer/before_suite_spec.rb +17 -6
- data/spec/models/rspeed/redis/clean_spec.rb +20 -0
- data/spec/models/rspeed/redis/client_spec.rb +7 -0
- data/spec/models/rspeed/redis/destroy_spec.rb +29 -0
- data/spec/models/rspeed/redis/get_spec.rb +9 -0
- data/spec/models/rspeed/redis/keys_spec.rb +29 -0
- data/spec/models/rspeed/redis/result_spec.rb +13 -0
- data/spec/models/rspeed/redis/set_spec.rb +9 -0
- data/spec/models/rspeed/redis/specs_finished_spec.rb +19 -0
- data/spec/models/rspeed/redis/specs_initiated_spec.rb +13 -0
- data/spec/models/rspeed/runner/run_spec.rb +77 -0
- data/spec/models/rspeed/splitter/actual_examples_spec.rb +26 -0
- data/spec/models/rspeed/splitter/append_question_spec.rb +37 -0
- data/spec/models/rspeed/splitter/append_spec.rb +9 -27
- data/spec/models/rspeed/splitter/diff_spec.rb +15 -14
- data/spec/models/rspeed/splitter/first_pipe_spec.rb +2 -4
- data/spec/models/rspeed/splitter/get_spec.rb +6 -22
- data/spec/models/rspeed/splitter/need_warm_question_spec.rb +37 -0
- data/spec/models/rspeed/splitter/pipe_files_spec.rb +26 -0
- data/spec/models/rspeed/splitter/rename_spec.rb +13 -6
- data/spec/models/rspeed/splitter/split_spec.rb +70 -34
- data/spec/models/rspeed/variable/append_name_spec.rb +19 -0
- data/spec/models/rspeed/variable/default_partner_spec.rb +5 -0
- data/spec/models/rspeed/variable/key_spec.rb +15 -0
- data/spec/models/rspeed/variable/pipe_name_spec.rb +15 -0
- data/spec/models/rspeed/variable/pipe_profile_spec.rb +15 -0
- data/spec/models/rspeed/variable/pipes_pattern_spec.rb +5 -0
- data/spec/models/rspeed/variable/profile_pattern_spec.rb +5 -0
- data/spec/models/rspeed/variable/result_spec.rb +19 -0
- data/spec/spec_helper.rb +27 -0
- data/spec/support/common.rb +13 -0
- data/spec/support/coverage.rb +14 -0
- data/spec/support/env_mock.rb +3 -0
- data/spec/support/fakeredis.rb +3 -0
- metadata +146 -20
- data/spec/models/rspeed/splitter/destroy_spec.rb +0 -33
- data/spec/models/rspeed/splitter/keys_spec.rb +0 -33
- data/spec/models/rspeed/splitter/last_pipe_spec.rb +0 -21
- data/spec/models/rspeed/splitter/pipe_spec.rb +0 -21
- data/spec/models/rspeed/splitter/pipes_spec.rb +0 -27
- data/spec/models/rspeed/splitter/result_spec.rb +0 -19
- data/spec/models/rspeed/splitter/save_spec.rb +0 -55
- data/spec/rails_helper.rb +0 -43
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RSpeed
|
|
4
|
+
module Variable
|
|
5
|
+
module_function
|
|
6
|
+
|
|
7
|
+
DEFAULT_PATTERN = 'rspeed_*'
|
|
8
|
+
PIPES_PATTERN = 'rspeed_pipe_*'
|
|
9
|
+
PROFILE_PATTERN = 'rspeed_profile_*'
|
|
10
|
+
|
|
11
|
+
def append_name(value, suffix = nil)
|
|
12
|
+
[value, RSpeed::Env.name, suffix].compact.join('_')
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def key(number)
|
|
16
|
+
append_name('rspeed', number).to_sym
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def result
|
|
20
|
+
append_name('rspeed')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def pipe_name
|
|
24
|
+
append_name('rspeed_pipe', RSpeed::Env.pipe)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def profile
|
|
28
|
+
append_name('rspeed_profile', RSpeed::Env.pipe)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
data/lib/rspeed/version.rb
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
10,./spec/fixtures/new_spec.rb.csv:1010,./spec/fixtures/new_spec.rb.csv:10
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'support/env_mock'
|
|
4
|
+
|
|
5
|
+
RSpec.describe RSpeed::Env, '.db' do
|
|
6
|
+
context 'when key is not setted on env' do
|
|
7
|
+
it { expect(described_class.db).to be(nil) }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
context 'when key is setted on env' do
|
|
11
|
+
it 'returns env value as integer' do
|
|
12
|
+
EnvMock.mock(rspeed_db: '10') do
|
|
13
|
+
expect(described_class.db).to be(10)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'support/env_mock'
|
|
4
|
+
|
|
5
|
+
RSpec.describe RSpeed::Env, '.host' do
|
|
6
|
+
context 'when key is not setted on env' do
|
|
7
|
+
it { expect(described_class.host).to be(nil) }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
context 'when key is setted on env' do
|
|
11
|
+
it 'returns env value' do
|
|
12
|
+
EnvMock.mock(rspeed_host: 'localhost') do
|
|
13
|
+
expect(described_class.host).to eq('localhost')
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'support/env_mock'
|
|
4
|
+
|
|
5
|
+
RSpec.describe RSpeed::Env, '.name' do
|
|
6
|
+
context 'when env is given' do
|
|
7
|
+
it 'returns the env value' do
|
|
8
|
+
EnvMock.mock(rspeed_name: 'name') do
|
|
9
|
+
expect(described_class.name).to eq('name')
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context 'when env is not given' do
|
|
15
|
+
it { expect(described_class.name).to be(nil) }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'support/env_mock'
|
|
4
|
+
|
|
5
|
+
RSpec.describe RSpeed::Env, '.pipe' do
|
|
6
|
+
context 'when pipe env is given' do
|
|
7
|
+
it 'returns the number of the current pipe as integer' do
|
|
8
|
+
EnvMock.mock(rspeed_pipe: '2') do
|
|
9
|
+
expect(described_class.pipe).to be(2)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context 'when pipe env is not given' do
|
|
15
|
+
it 'returns 1' do
|
|
16
|
+
expect(described_class.pipe).to be(1)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'support/env_mock'
|
|
4
|
+
|
|
5
|
+
RSpec.describe RSpeed::Env, '.pipes' do
|
|
6
|
+
context 'when env is setted' do
|
|
7
|
+
it 'returns the env value' do
|
|
8
|
+
EnvMock.mock(rspeed_pipes: '2') do
|
|
9
|
+
expect(described_class.pipes).to be(2)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context 'when env is not setted' do
|
|
15
|
+
it 'returns number 1' do
|
|
16
|
+
expect(described_class.pipes).to be(1)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'support/env_mock'
|
|
4
|
+
|
|
5
|
+
RSpec.describe RSpeed::Env, '.port' do
|
|
6
|
+
context 'when key is not setted on env' do
|
|
7
|
+
it { expect(described_class.port).to be(nil) }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
context 'when key is setted on env' do
|
|
11
|
+
it 'returns env value as integer' do
|
|
12
|
+
EnvMock.mock(rspeed_port: '6379') do
|
|
13
|
+
expect(described_class.port).to be(6379)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'support/env_mock'
|
|
4
|
+
|
|
5
|
+
RSpec.describe RSpeed::Env, '.result_key' do
|
|
6
|
+
context 'when key is not setted on env' do
|
|
7
|
+
it 'returns default value' do
|
|
8
|
+
expect(described_class.result_key).to eq 'rspeed'
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
context 'when key is setted on env' do
|
|
13
|
+
it 'returns env value' do
|
|
14
|
+
EnvMock.mock(respeed_result_key: 'result_customer') do
|
|
15
|
+
expect(described_class.result_key).to eq 'result_customer'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'support/env_mock'
|
|
4
|
+
|
|
5
|
+
RSpec.describe RSpeed::Env, '.rspeed' do
|
|
6
|
+
context 'when env is given' do
|
|
7
|
+
context 'when true as string' do
|
|
8
|
+
it 'true' do
|
|
9
|
+
EnvMock.mock(rspeed: 'true') do
|
|
10
|
+
expect(described_class.rspeed).to be(true)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
context 'when true' do
|
|
16
|
+
it 'true' do
|
|
17
|
+
EnvMock.mock(rspeed: true) do
|
|
18
|
+
expect(described_class.rspeed).to be(true)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context 'when false as string' do
|
|
24
|
+
it 'false' do
|
|
25
|
+
EnvMock.mock(rspeed: 'false') do
|
|
26
|
+
expect(described_class.rspeed).to be(false)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context 'when false' do
|
|
32
|
+
it 'false' do
|
|
33
|
+
EnvMock.mock(rspeed: false) do
|
|
34
|
+
expect(described_class.rspeed).to be(false)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context 'when env is not given' do
|
|
41
|
+
it { expect(described_class.rspeed).to be(false) }
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'rails_helper'
|
|
4
|
-
|
|
5
3
|
RSpec.describe RSpeed::Observer, '.after' do
|
|
6
4
|
let!(:now) { Time.local(2020, 1, 1, 0, 0, 1) }
|
|
7
5
|
let!(:clock) { class_double(RSpec::Core::Time, now: now) }
|
|
8
6
|
let!(:metadata) { { file_path: 'file_path', line_number: 7, start_at: now - 1 } }
|
|
9
7
|
let!(:example) { instance_double(RSpec::Core::Example, clock: clock, metadata: metadata) }
|
|
10
8
|
|
|
11
|
-
before {
|
|
9
|
+
before { truncate_profiles }
|
|
12
10
|
|
|
13
|
-
it 'appends the
|
|
11
|
+
it 'appends the file and time on pipe profile key' do
|
|
14
12
|
described_class.after(example)
|
|
15
13
|
|
|
16
|
-
expect(
|
|
14
|
+
expect(RSpeed::Redis.client.lrange(RSpeed::Variable.profile, 0, -1)).to eq [
|
|
15
|
+
{ file: 'file_path:7', time: 1.0 }.to_json,
|
|
16
|
+
]
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.describe RSpeed::Observer, '.after_suite' do
|
|
4
|
+
let!(:splitter) { instance_double('RSpeed::Splitter') }
|
|
5
|
+
|
|
6
|
+
before do
|
|
7
|
+
allow(RSpeed::Splitter).to receive(:new).and_return(splitter)
|
|
8
|
+
allow(splitter).to receive(:append)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
context 'when append? returns false' do
|
|
12
|
+
before do
|
|
13
|
+
allow(splitter).to receive(:append?).and_return(false)
|
|
14
|
+
allow(splitter).to receive(:rename)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'does not append the time result' do
|
|
18
|
+
described_class.after_suite
|
|
19
|
+
|
|
20
|
+
expect(splitter).not_to have_received(:append)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context 'when all specs is not finished' do
|
|
25
|
+
before do
|
|
26
|
+
allow(splitter).to receive(:append?)
|
|
27
|
+
allow(RSpeed::Redis).to receive(:specs_finished?).and_return(false)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'sets true on pipe key to indicates that its finished' do
|
|
31
|
+
described_class.after_suite
|
|
32
|
+
|
|
33
|
+
expect(RSpeed::Redis.get('rspeed_pipe_1')).to eq('true')
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context 'when all specs finished' do
|
|
38
|
+
before do
|
|
39
|
+
allow(splitter).to receive(:append?)
|
|
40
|
+
allow(RSpeed::Redis).to receive(:specs_finished?).and_return(true)
|
|
41
|
+
allow(splitter).to receive(:rename)
|
|
42
|
+
allow(RSpeed::Redis).to receive(:clean)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'consolidates profiles' do
|
|
46
|
+
described_class.after_suite
|
|
47
|
+
|
|
48
|
+
expect(splitter).to have_received(:rename)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'destroyes pipe finished flag keys' do
|
|
52
|
+
described_class.after_suite
|
|
53
|
+
|
|
54
|
+
expect(RSpeed::Redis).to have_received(:clean)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'rails_helper'
|
|
4
|
-
|
|
5
3
|
RSpec.describe RSpeed::Observer, '.before_suite' do
|
|
6
|
-
|
|
4
|
+
let!(:redis) { redis_object }
|
|
5
|
+
|
|
6
|
+
before { truncate_profiles }
|
|
7
|
+
after { truncate_profiles }
|
|
8
|
+
|
|
9
|
+
it 'cleans only the current pipe profile' do
|
|
10
|
+
redis.lpush('rspeed_profile_1', { file: '1_spec.rb', time: 1 }.to_json)
|
|
11
|
+
redis.lpush('rspeed_profile_2', { file: '2_spec.rb', time: 2 }.to_json)
|
|
12
|
+
|
|
13
|
+
described_class.before_suite
|
|
14
|
+
|
|
15
|
+
expect(redis.keys).to eq ['rspeed_profile_2']
|
|
16
|
+
end
|
|
7
17
|
|
|
8
|
-
it 'cleans the
|
|
9
|
-
|
|
18
|
+
it 'cleans the pipe flag' do
|
|
19
|
+
redis.set('rspeed_pipe_1', true)
|
|
20
|
+
redis.set('rspeed_pipe_2', true)
|
|
10
21
|
|
|
11
22
|
described_class.before_suite
|
|
12
23
|
|
|
13
|
-
expect(
|
|
24
|
+
expect(redis.keys).to eq ['rspeed_pipe_2']
|
|
14
25
|
end
|
|
15
26
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.describe RSpeed::Redis, '.clean' do
|
|
4
|
+
it 'destroys all keys that keeps the pipe finished info' do
|
|
5
|
+
described_class.set('rspeed_pipe_1', true)
|
|
6
|
+
described_class.set('rspeed_pipe_2', true)
|
|
7
|
+
|
|
8
|
+
described_class.clean
|
|
9
|
+
|
|
10
|
+
expect(described_class.keys('*')).to eq([])
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'destroys the pipe profiles' do
|
|
14
|
+
described_class.set('rspeed_profile_1', true)
|
|
15
|
+
|
|
16
|
+
described_class.clean
|
|
17
|
+
|
|
18
|
+
expect(described_class.keys('*')).to eq([])
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.describe RSpeed::Redis, '#destroy' do
|
|
4
|
+
let!(:redis) { described_class }
|
|
5
|
+
|
|
6
|
+
before do
|
|
7
|
+
redis.set('rspeed', '{}')
|
|
8
|
+
redis.set('rspeed_1', '{}')
|
|
9
|
+
redis.set('rspeed_2', '{}')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'destroys via wildcard' do
|
|
13
|
+
redis.destroy('rspeed_*')
|
|
14
|
+
|
|
15
|
+
expect(redis.keys('*')).to eq %w[rspeed]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'destroys via single name' do
|
|
19
|
+
redis.destroy('rspeed')
|
|
20
|
+
|
|
21
|
+
expect(redis.keys('*')).to eq %w[rspeed_1 rspeed_2]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'destroys default partner when no pattern is given' do
|
|
25
|
+
redis.destroy
|
|
26
|
+
|
|
27
|
+
expect(redis.keys('*')).to eq %w[rspeed]
|
|
28
|
+
end
|
|
29
|
+
end
|