rspeed 0.1.0 → 0.5.1
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 +34 -0
- data/README.md +11 -7
- data/lib/generators/rspeed/install_generator.rb +1 -1
- data/lib/rspeed.rb +9 -5
- data/lib/rspeed/env.rb +43 -0
- data/lib/rspeed/extension.rb +6 -37
- data/lib/rspeed/logger.rb +11 -0
- data/lib/rspeed/observer.rb +43 -0
- data/lib/rspeed/redis.rb +55 -0
- data/lib/rspeed/runner.rb +4 -17
- data/lib/rspeed/splitter.rb +65 -73
- 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/env/tmp_spec.rb +19 -0
- data/spec/models/rspeed/observer/after_spec.rb +16 -0
- data/spec/models/rspeed/observer/after_suite_spec.rb +70 -0
- data/spec/models/rspeed/observer/before_spec.rb +15 -0
- data/spec/models/rspeed/observer/before_suite_spec.rb +37 -0
- data/spec/models/rspeed/redis/clean_spec.rb +12 -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 +47 -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 +6 -3
- 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 +7 -9
- 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 +3 -5
- data/spec/models/rspeed/splitter/split_spec.rb +72 -36
- data/spec/models/rspeed/variable/append_name_spec.rb +19 -0
- data/spec/models/rspeed/variable/csv_spec.rb +5 -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/pipes_pattern_spec.rb +5 -0
- data/spec/models/rspeed/variable/result_spec.rb +19 -0
- data/spec/models/rspeed/variable/tmp_spec.rb +15 -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 +155 -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 -24
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSpeed
|
4
|
+
module Variable
|
5
|
+
module_function
|
6
|
+
|
7
|
+
CSV = 'rspeed.csv'
|
8
|
+
DEFAULT_PATTERN = 'rspeed_*'
|
9
|
+
PIPES_PATTERN = 'rspeed_pipe_*'
|
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 tmp
|
24
|
+
append_name('rspeed_tmp')
|
25
|
+
end
|
26
|
+
|
27
|
+
def pipe_name
|
28
|
+
append_name('rspeed_pipe', 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
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'support/env_mock'
|
4
|
+
|
5
|
+
RSpec.describe RSpeed::Env, '.tmp_key' do
|
6
|
+
context 'when key is not setted on env' do
|
7
|
+
it 'returns default value' do
|
8
|
+
expect(described_class.tmp_key).to eq 'rspeed_tmp'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'when key is setted on env' do
|
13
|
+
it 'returns env value' do
|
14
|
+
EnvMock.mock(respeed_tmp_key: 'result_customer') do
|
15
|
+
expect(described_class.tmp_key).to eq 'result_customer'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RSpeed::Observer, '.after' do
|
4
|
+
let!(:now) { Time.local(2020, 1, 1, 0, 0, 1) }
|
5
|
+
let!(:clock) { class_double(RSpec::Core::Time, now: now) }
|
6
|
+
let!(:metadata) { { file_path: 'file_path', line_number: 7, start_at: now - 1 } }
|
7
|
+
let!(:example) { instance_double(RSpec::Core::Example, clock: clock, metadata: metadata) }
|
8
|
+
|
9
|
+
before { truncate_file }
|
10
|
+
|
11
|
+
it 'appends the time of example on csv file' do
|
12
|
+
described_class.after(example)
|
13
|
+
|
14
|
+
expect(File.open('rspeed.csv').read).to eq "1.0,file_path:7\n"
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,70 @@
|
|
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 true' do
|
12
|
+
before do
|
13
|
+
allow(splitter).to receive(:append?).and_return(true)
|
14
|
+
allow(splitter).to receive(:rename)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'appends the time result on tmp key' do
|
18
|
+
described_class.after_suite
|
19
|
+
|
20
|
+
expect(splitter).to have_received(:append)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when append? returns false' do
|
25
|
+
before do
|
26
|
+
allow(splitter).to receive(:append?).and_return(false)
|
27
|
+
allow(splitter).to receive(:rename)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'does not append the time result on tmp key' do
|
31
|
+
described_class.after_suite
|
32
|
+
|
33
|
+
expect(splitter).not_to have_received(:append)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when all specs is not finished' do
|
38
|
+
before do
|
39
|
+
allow(splitter).to receive(:append?)
|
40
|
+
allow(RSpeed::Redis).to receive(:specs_finished?).and_return(false)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'sets true on pipe key to indicates that its finished' do
|
44
|
+
described_class.after_suite
|
45
|
+
|
46
|
+
expect(RSpeed::Redis.get('rspeed_pipe_1')).to eq('true')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'when all specs finished' do
|
51
|
+
before do
|
52
|
+
allow(splitter).to receive(:append?)
|
53
|
+
allow(RSpeed::Redis).to receive(:specs_finished?).and_return(true)
|
54
|
+
allow(splitter).to receive(:rename)
|
55
|
+
allow(RSpeed::Redis).to receive(:clean)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'renames the tmp data to the permanent key result' do
|
59
|
+
described_class.after_suite
|
60
|
+
|
61
|
+
expect(splitter).to have_received(:rename)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'destroyes pipe finished flag keys' do
|
65
|
+
described_class.after_suite
|
66
|
+
|
67
|
+
expect(RSpeed::Redis).to have_received(:clean)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RSpeed::Observer, '.before' do
|
4
|
+
let!(:now) { Time.local(2020) }
|
5
|
+
let!(:clock) { class_double(RSpec::Core::Time, now: now) }
|
6
|
+
let!(:example) { instance_double(RSpec::Core::Example, clock: clock) }
|
7
|
+
|
8
|
+
it 'saves the current time' do
|
9
|
+
allow(example).to receive(:update_inherited_metadata)
|
10
|
+
|
11
|
+
described_class.before(example)
|
12
|
+
|
13
|
+
expect(example).to have_received(:update_inherited_metadata).with(start_at: now)
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RSpeed::Observer, '.before_suite' do
|
4
|
+
before { truncate_file }
|
5
|
+
|
6
|
+
it 'cleans the csv file' do
|
7
|
+
File.open('rspeed.csv', 'a') { |file| file.write('content') }
|
8
|
+
|
9
|
+
described_class.before_suite
|
10
|
+
|
11
|
+
expect(File.open('rspeed.csv').read).to eq ''
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'when specs are not initiated yet' do
|
15
|
+
before { allow(RSpeed::Redis).to receive(:specs_initiated?).and_return(false) }
|
16
|
+
|
17
|
+
it 'destroyes the tmp result key' do
|
18
|
+
RSpeed::Redis.client.lpush(RSpeed::Env.tmp_key, { file: 'file', time: 1.0 }.to_json)
|
19
|
+
|
20
|
+
described_class.before_suite
|
21
|
+
|
22
|
+
expect(RSpeed::Splitter.new.get(RSpeed::Variable.tmp)).to eq([])
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when specs are already initiated' do
|
27
|
+
before { allow(RSpeed::Redis).to receive(:specs_initiated?).and_return(true) }
|
28
|
+
|
29
|
+
it 'does not destroy the tmp result key' do
|
30
|
+
RSpeed::Redis.client.lpush(RSpeed::Env.tmp_key, { file: 'file', time: 1.0 }.to_json)
|
31
|
+
|
32
|
+
described_class.before_suite
|
33
|
+
|
34
|
+
expect(RSpeed::Splitter.new.get(RSpeed::Variable.tmp)).to eq(['{"file":"file","time":1.0}'])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,12 @@
|
|
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
|
+
end
|