masamune 0.17.12 → 0.17.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +3 -3
- data/bin/masamune-aws-emr +1 -1
- data/bin/masamune-dump +1 -1
- data/bin/masamune-hive +1 -1
- data/bin/masamune-psql +1 -1
- data/bin/masamune-shell +1 -1
- data/lib/masamune.rb +1 -1
- data/lib/masamune/actions/aws_emr.rb +2 -2
- data/lib/masamune/actions/data_flow.rb +10 -10
- data/lib/masamune/actions/date_parse.rb +4 -6
- data/lib/masamune/actions/execute.rb +3 -3
- data/lib/masamune/actions/filesystem.rb +1 -1
- data/lib/masamune/actions/hadoop_filesystem.rb +2 -2
- data/lib/masamune/actions/hive.rb +5 -5
- data/lib/masamune/actions/invoke_parallel.rb +5 -5
- data/lib/masamune/actions/postgres.rb +6 -6
- data/lib/masamune/actions/postgres_admin.rb +1 -1
- data/lib/masamune/actions/s3cmd.rb +3 -3
- data/lib/masamune/actions/transform.rb +4 -4
- data/lib/masamune/after_initialize_callbacks.rb +4 -4
- data/lib/masamune/cached_filesystem.rb +7 -11
- data/lib/masamune/commands/aws_emr.rb +12 -12
- data/lib/masamune/commands/hadoop_filesystem.rb +8 -8
- data/lib/masamune/commands/hadoop_streaming.rb +16 -16
- data/lib/masamune/commands/hive.rb +31 -35
- data/lib/masamune/commands/postgres.rb +30 -32
- data/lib/masamune/commands/postgres_admin.rb +17 -16
- data/lib/masamune/commands/postgres_common.rb +1 -1
- data/lib/masamune/commands/retry_with_backoff.rb +19 -19
- data/lib/masamune/commands/s3cmd.rb +7 -7
- data/lib/masamune/commands/shell.rb +25 -38
- data/lib/masamune/configuration.rb +8 -9
- data/lib/masamune/data_plan/builder.rb +5 -5
- data/lib/masamune/data_plan/elem.rb +7 -7
- data/lib/masamune/data_plan/engine.rb +12 -15
- data/lib/masamune/data_plan/rule.rb +14 -12
- data/lib/masamune/data_plan/set.rb +13 -13
- data/lib/masamune/environment.rb +3 -3
- data/lib/masamune/filesystem.rb +29 -28
- data/lib/masamune/helpers/postgres.rb +8 -5
- data/lib/masamune/io.rb +2 -2
- data/lib/masamune/last_element.rb +3 -3
- data/lib/masamune/method_logger.rb +1 -1
- data/lib/masamune/schema/catalog.rb +9 -12
- data/lib/masamune/schema/column.rb +12 -10
- data/lib/masamune/schema/dimension.rb +5 -4
- data/lib/masamune/schema/fact.rb +2 -2
- data/lib/masamune/schema/map.rb +9 -13
- data/lib/masamune/schema/row.rb +3 -2
- data/lib/masamune/schema/store.rb +13 -14
- data/lib/masamune/schema/table.rb +24 -28
- data/lib/masamune/schema/table_reference.rb +7 -7
- data/lib/masamune/spec_helper.rb +1 -1
- data/lib/masamune/string_format.rb +1 -1
- data/lib/masamune/tasks/aws_emr_thor.rb +9 -9
- data/lib/masamune/tasks/dump_thor.rb +5 -5
- data/lib/masamune/tasks/hive_thor.rb +13 -13
- data/lib/masamune/tasks/postgres_thor.rb +8 -8
- data/lib/masamune/tasks/shell_thor.rb +3 -3
- data/lib/masamune/template.rb +4 -4
- data/lib/masamune/thor.rb +26 -25
- data/lib/masamune/transform/common/denormalize_table.rb +6 -6
- data/lib/masamune/transform/define_table.rb +1 -1
- data/lib/masamune/transform/hive/define_table.rb +0 -2
- data/lib/masamune/transform/insert_reference_values.rb +1 -1
- data/lib/masamune/transform/operator.rb +3 -2
- data/lib/masamune/transform/postgres/bulk_upsert.rb +0 -3
- data/lib/masamune/transform/postgres/deduplicate_dimension.rb +4 -6
- data/lib/masamune/transform/postgres/define_table.rb +2 -2
- data/lib/masamune/transform/postgres/insert_reference_values.rb +1 -4
- data/lib/masamune/transform/postgres/relabel_dimension.rb +1 -3
- data/lib/masamune/transform/postgres/rollup_fact.rb +3 -5
- data/lib/masamune/transform/postgres/snapshot_dimension.rb +1 -4
- data/lib/masamune/transform/postgres/stage_dimension.rb +8 -10
- data/lib/masamune/transform/postgres/stage_fact.rb +15 -14
- data/lib/masamune/version.rb +1 -1
- data/spec/masamune/actions/aws_emr_spec.rb +8 -8
- data/spec/masamune/actions/execute_spec.rb +6 -6
- data/spec/masamune/actions/hive_spec.rb +20 -15
- data/spec/masamune/actions/postgres_spec.rb +17 -10
- data/spec/masamune/after_initialization_callbacks_spec.rb +13 -7
- data/spec/masamune/commands/aws_emr_spec.rb +10 -10
- data/spec/masamune/commands/hadoop_filesystem_spec.rb +3 -3
- data/spec/masamune/commands/hadoop_streaming_spec.rb +4 -4
- data/spec/masamune/commands/hive_spec.rb +11 -11
- data/spec/masamune/commands/postgres_admin_spec.rb +9 -9
- data/spec/masamune/commands/postgres_spec.rb +15 -15
- data/spec/masamune/commands/retry_with_backoff_spec.rb +10 -7
- data/spec/masamune/commands/s3cmd_spec.rb +3 -3
- data/spec/masamune/commands/shell_spec.rb +16 -16
- data/spec/masamune/data_plan/builder_spec.rb +22 -19
- data/spec/masamune/data_plan/elem_spec.rb +20 -20
- data/spec/masamune/data_plan/engine_spec.rb +41 -33
- data/spec/masamune/data_plan/rule_spec.rb +19 -19
- data/spec/masamune/data_plan/set_spec.rb +8 -6
- data/spec/masamune/environment_spec.rb +5 -5
- data/spec/masamune/filesystem_spec.rb +87 -87
- data/spec/masamune/helpers/postgres_spec.rb +1 -1
- data/spec/masamune/rspec/job_fixture_spec.rb +0 -1
- data/spec/masamune/schema/catalog_spec.rb +16 -16
- data/spec/masamune/schema/column_spec.rb +19 -19
- data/spec/masamune/schema/dimension_spec.rb +2 -2
- data/spec/masamune/schema/fact_spec.rb +3 -3
- data/spec/masamune/schema/map_spec.rb +41 -41
- data/spec/masamune/schema/table_spec.rb +16 -16
- data/spec/masamune/string_format_spec.rb +7 -7
- data/spec/masamune/tasks/dump_thor_spec.rb +6 -6
- data/spec/masamune/tasks/hive_thor_spec.rb +2 -2
- data/spec/masamune/template_spec.rb +3 -2
- data/spec/masamune/thor_spec.rb +8 -8
- data/spec/masamune/transform/bulk_upsert.dimension_spec.rb +3 -3
- data/spec/masamune/transform/define_table.dimension_spec.rb +3 -3
- data/spec/masamune/transform/define_table.fact_spec.rb +5 -5
- data/spec/masamune/transform/define_table.table_spec.rb +6 -6
- data/spec/masamune/transform/denormalize_table_spec.rb +15 -15
- data/spec/masamune/transform/insert_reference_values.dimension_spec.rb +1 -1
- data/spec/masamune/transform/load_dimension_spec.rb +1 -1
- data/spec/masamune/transform/load_fact_spec.rb +1 -1
- data/spec/masamune/transform/rollup_fact_spec.rb +4 -4
- data/spec/masamune/transform/stage_dimension_spec.rb +3 -3
- data/spec/masamune/transform/stage_fact_spec.rb +4 -4
- data/spec/spec_helper.rb +1 -1
- data/spec/support/masamune/example_group.rb +2 -2
- data/spec/support/masamune/job_example_group.rb +3 -3
- data/spec/support/masamune/job_fixture.rb +4 -4
- data/spec/support/masamune/mock_command.rb +10 -10
- data/spec/support/masamune/mock_delegate.rb +2 -2
- data/spec/support/masamune/mock_filesystem.rb +3 -3
- data/spec/support/masamune/shared_example_group.rb +14 -16
- data/spec/support/masamune/step_example_group.rb +4 -4
- data/spec/support/masamune/step_fixture.rb +1 -1
- data/spec/support/masamune/task_example_group.rb +1 -1
- data/spec/support/masamune/thor_mute.rb +3 -2
- data/spec/support/rspec/example/action_example_group.rb +1 -1
- data/spec/support/rspec/example/task_example_group.rb +7 -4
- data/spec/support/rspec/example/transform_example_group.rb +1 -1
- data/spec/support/shared_examples/postgres_common_examples.rb +2 -2
- metadata +16 -2
@@ -35,16 +35,14 @@ module Masamune::Transform::Postgres
|
|
35
35
|
TargetPresenter.new(@target)
|
36
36
|
end
|
37
37
|
|
38
|
-
private
|
39
|
-
|
40
38
|
class TargetPresenter < SimpleDelegator
|
41
39
|
include Masamune::LastElement
|
42
40
|
|
43
41
|
def insert_columns(source)
|
44
42
|
shared_columns(source).values.map do |columns|
|
45
43
|
column = columns.first
|
46
|
-
if
|
47
|
-
reference.foreign_key_name
|
44
|
+
if column.reference
|
45
|
+
column.reference.foreign_key_name
|
48
46
|
else
|
49
47
|
column.name
|
50
48
|
end
|
@@ -54,8 +52,8 @@ module Masamune::Transform::Postgres
|
|
54
52
|
def insert_values(source)
|
55
53
|
shared_columns(source).values.map do |columns|
|
56
54
|
column = columns.first
|
57
|
-
if
|
58
|
-
reference.surrogate_key.qualified_name(reference.label)
|
55
|
+
if column.reference
|
56
|
+
column.reference.surrogate_key.qualified_name(column.reference.label)
|
59
57
|
elsif column.type == :json || column.type == :yaml || column.type == :key_value
|
60
58
|
"json_to_hstore(#{column.qualified_name})"
|
61
59
|
else
|
@@ -67,10 +65,10 @@ module Masamune::Transform::Postgres
|
|
67
65
|
|
68
66
|
def join_conditions(source)
|
69
67
|
join_columns = shared_columns(source).values.flatten
|
70
|
-
join_columns = join_columns.select
|
71
|
-
join_columns = join_columns.group_by
|
68
|
+
join_columns = join_columns.select(&:reference)
|
69
|
+
join_columns = join_columns.group_by(&:reference)
|
72
70
|
|
73
|
-
conditions = Hash.new { |h,k| h[k] = Set.new }
|
71
|
+
conditions = Hash.new { |h, k| h[k] = Set.new }
|
74
72
|
join_columns.each do |reference, columns|
|
75
73
|
left_uniq = Set.new
|
76
74
|
(columns + lateral_references(source, reference)).each do |column|
|
@@ -83,7 +81,7 @@ module Masamune::Transform::Postgres
|
|
83
81
|
end
|
84
82
|
|
85
83
|
def lateral_references(source, reference)
|
86
|
-
source.shared_columns(reference).keys.reject
|
84
|
+
source.shared_columns(reference).keys.reject(&:auto_reference)
|
87
85
|
end
|
88
86
|
end
|
89
87
|
end
|
@@ -36,16 +36,14 @@ module Masamune::Transform::Postgres
|
|
36
36
|
TargetPresenter.new(@target)
|
37
37
|
end
|
38
38
|
|
39
|
-
private
|
40
|
-
|
41
39
|
class TargetPresenter < SimpleDelegator
|
42
40
|
include Masamune::LastElement
|
43
41
|
|
44
42
|
def insert_columns(source)
|
45
43
|
shared_columns(source).values.map do |columns|
|
46
44
|
column = columns.first
|
47
|
-
if
|
48
|
-
reference.foreign_key_name
|
45
|
+
if column.reference
|
46
|
+
column.reference.foreign_key_name
|
49
47
|
else
|
50
48
|
column.name
|
51
49
|
end
|
@@ -55,8 +53,8 @@ module Masamune::Transform::Postgres
|
|
55
53
|
def insert_values(source)
|
56
54
|
shared_columns(source).values.map do |columns|
|
57
55
|
column = columns.first
|
58
|
-
if !column.degenerate? &&
|
59
|
-
value = reference.surrogate_key.qualified_name(column.reference.label)
|
56
|
+
if !column.degenerate? && column.reference
|
57
|
+
value = column.reference.surrogate_key.qualified_name(column.reference.label)
|
60
58
|
column.reference.unknown ? "COALESCE(#{value}, #{column.reference.unknown})" : value
|
61
59
|
else
|
62
60
|
column.qualified_name
|
@@ -71,11 +69,11 @@ module Masamune::Transform::Postgres
|
|
71
69
|
|
72
70
|
def join_conditions(source)
|
73
71
|
join_columns = shared_columns(source).values.flatten
|
74
|
-
join_columns = join_columns.select
|
75
|
-
join_columns = join_columns.group_by
|
72
|
+
join_columns = join_columns.select(&:reference)
|
73
|
+
join_columns = join_columns.group_by(&:reference)
|
76
74
|
|
77
75
|
dependencies = Masamune::TopologicalHash.new
|
78
|
-
conditions = Hash.new { |h,k| h[k] = OpenStruct.new(type: 'INNER', conditions: []) }
|
76
|
+
conditions = Hash.new { |h, k| h[k] = OpenStruct.new(type: 'INNER', conditions: []) }
|
79
77
|
join_columns.each do |reference, columns|
|
80
78
|
reference_name = join_alias(reference)
|
81
79
|
columns.each do |column|
|
@@ -86,8 +84,8 @@ module Masamune::Transform::Postgres
|
|
86
84
|
coalesce_values = []
|
87
85
|
|
88
86
|
if cross_references.any?
|
89
|
-
dependencies[reference_name] += cross_references.map { |
|
90
|
-
coalesce_values << cross_references.map { |
|
87
|
+
dependencies[reference_name] += cross_references.map { |cross_reference, _| join_alias(cross_reference) }
|
88
|
+
coalesce_values << cross_references.map { |cross_reference, cross_column| cross_column.qualified_name(cross_reference.label) }
|
91
89
|
end
|
92
90
|
|
93
91
|
column.reference.auto_surrogate_keys.each do |auto_surrogate_key|
|
@@ -101,9 +99,12 @@ module Masamune::Transform::Postgres
|
|
101
99
|
coalesce_values << column.adjacent.sql_value(column.adjacent.default)
|
102
100
|
end
|
103
101
|
|
104
|
-
conditions[reference_name].conditions <<
|
105
|
-
|
106
|
-
"#{column.foreign_key_name} = #{column.qualified_name}"
|
102
|
+
conditions[reference_name].conditions <<
|
103
|
+
if coalesce_values.any?
|
104
|
+
"#{column.foreign_key_name} = COALESCE(#{column.qualified_name}, #{coalesce_values.join(', ')})"
|
105
|
+
else
|
106
|
+
"#{column.foreign_key_name} = #{column.qualified_name}"
|
107
|
+
end
|
107
108
|
end
|
108
109
|
|
109
110
|
if reference.type == :two || reference.type == :four
|
data/lib/masamune/version.rb
CHANGED
@@ -56,7 +56,7 @@ describe Masamune::Actions::AwsEmr do
|
|
56
56
|
end
|
57
57
|
|
58
58
|
describe '.after_initialize' do
|
59
|
-
let(:options) { {initialize: true} }
|
59
|
+
let(:options) { { initialize: true } }
|
60
60
|
|
61
61
|
subject(:after_initialize_invoke) do
|
62
62
|
instance.after_initialize_invoke(options)
|
@@ -67,13 +67,13 @@ describe Masamune::Actions::AwsEmr do
|
|
67
67
|
end
|
68
68
|
|
69
69
|
context 'when cluster_id is missing' do
|
70
|
-
let(:configuration) { {enabled: true} }
|
70
|
+
let(:configuration) { { enabled: true } }
|
71
71
|
it { expect { subject }.to raise_error Thor::RequiredArgumentMissingError, /No value provided for required options '--cluster-id'/ }
|
72
72
|
end
|
73
73
|
|
74
74
|
context 'when cluster_id is present without initialize' do
|
75
|
-
let(:configuration) { {enabled: true} }
|
76
|
-
let(:options) { {cluster_id: 'j-XYZ'} }
|
75
|
+
let(:configuration) { { enabled: true } }
|
76
|
+
let(:options) { { cluster_id: 'j-XYZ' } }
|
77
77
|
before do
|
78
78
|
expect(instance).to_not receive(:aws_emr)
|
79
79
|
end
|
@@ -84,8 +84,8 @@ describe Masamune::Actions::AwsEmr do
|
|
84
84
|
end
|
85
85
|
|
86
86
|
context 'when cluster_id does not exist' do
|
87
|
-
let(:configuration) { {enabled: true} }
|
88
|
-
let(:options) { {initialize: true, cluster_id: 'j-XYZ'} }
|
87
|
+
let(:configuration) { { enabled: true } }
|
88
|
+
let(:options) { { initialize: true, cluster_id: 'j-XYZ' } }
|
89
89
|
before do
|
90
90
|
mock_command(/\Aaws emr/, mock_failure)
|
91
91
|
end
|
@@ -93,8 +93,8 @@ describe Masamune::Actions::AwsEmr do
|
|
93
93
|
end
|
94
94
|
|
95
95
|
context 'when cluster_id exists' do
|
96
|
-
let(:configuration) { {enabled: true} }
|
97
|
-
let(:options) { {initialize: true, cluster_id: 'j-XYZ'} }
|
96
|
+
let(:configuration) { { enabled: true } }
|
97
|
+
let(:options) { { initialize: true, cluster_id: 'j-XYZ' } }
|
98
98
|
before do
|
99
99
|
mock_command(/\Aaws emr/, mock_success)
|
100
100
|
end
|
@@ -27,11 +27,11 @@ describe Masamune::Actions::Execute do
|
|
27
27
|
include Masamune::Actions::Execute
|
28
28
|
|
29
29
|
def before_execute
|
30
|
-
|
30
|
+
raise
|
31
31
|
end
|
32
32
|
|
33
33
|
def after_execute
|
34
|
-
|
34
|
+
raise
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -45,21 +45,21 @@ describe Masamune::Actions::Execute do
|
|
45
45
|
|
46
46
|
context 'with a simple command' do
|
47
47
|
let(:command) { %w(echo ping) }
|
48
|
-
let(:options) { {fail_fast: true} }
|
48
|
+
let(:options) { { fail_fast: true } }
|
49
49
|
|
50
50
|
it { expect { |b| instance.execute(*command, options, &b) }.to yield_with_args('ping', 0) }
|
51
51
|
end
|
52
52
|
|
53
53
|
context 'with a simple command with input' do
|
54
54
|
let(:command) { %w(cat) }
|
55
|
-
let(:options) { {input: 'pong', fail_fast: true} }
|
55
|
+
let(:options) { { input: 'pong', fail_fast: true } }
|
56
56
|
|
57
57
|
it { expect { |b| instance.execute(*command, options, &b) }.to yield_with_args('pong', 0) }
|
58
58
|
end
|
59
59
|
|
60
60
|
context 'with a simple command with env' do
|
61
|
-
let(:command) { %
|
62
|
-
let(:options) { {env: { 'MESSAGE' => 'pong' }, fail_fast: true} }
|
61
|
+
let(:command) { %(bash -c "echo $MESSAGE") }
|
62
|
+
let(:options) { { env: { 'MESSAGE' => 'pong' }, fail_fast: true } }
|
63
63
|
|
64
64
|
it { expect { |b| instance.execute(*command, options, &b) }.to yield_with_args('pong', 0) }
|
65
65
|
end
|
@@ -31,7 +31,7 @@ describe Masamune::Actions::Hive do
|
|
31
31
|
|
32
32
|
let(:filesystem) { Masamune::MockFilesystem.new }
|
33
33
|
let(:instance) { klass.new }
|
34
|
-
let(:configuration) { {database: 'test'} }
|
34
|
+
let(:configuration) { { database: 'test' } }
|
35
35
|
|
36
36
|
before do
|
37
37
|
filesystem.add_path(:tmp_dir, File.join(Dir.tmpdir, SecureRandom.hex))
|
@@ -53,7 +53,7 @@ describe Masamune::Actions::Hive do
|
|
53
53
|
|
54
54
|
context 'with cluster_id' do
|
55
55
|
before do
|
56
|
-
allow(instance).to receive_message_chain(:configuration, :aws_emr).and_return(
|
56
|
+
allow(instance).to receive_message_chain(:configuration, :aws_emr).and_return(cluster_id: 'j-XYZ')
|
57
57
|
mock_command(/\Ahive/, mock_failure)
|
58
58
|
mock_command(/\Aaws emr/, mock_success, StringIO.new('ssh fakehost exit'))
|
59
59
|
mock_command(/\Assh fakehost hive/, mock_success)
|
@@ -75,8 +75,8 @@ describe Masamune::Actions::Hive do
|
|
75
75
|
end
|
76
76
|
|
77
77
|
describe '.after_initialize' do
|
78
|
-
let(:options) { {initialize: true} }
|
79
|
-
let(:configuration) { {database: 'test'} }
|
78
|
+
let(:options) { { initialize: true } }
|
79
|
+
let(:configuration) { { database: 'test' } }
|
80
80
|
|
81
81
|
subject(:after_initialize_invoke) do
|
82
82
|
instance.after_initialize_invoke(options)
|
@@ -88,46 +88,51 @@ describe Masamune::Actions::Hive do
|
|
88
88
|
expect(instance).to_not receive(:hive)
|
89
89
|
after_initialize_invoke
|
90
90
|
end
|
91
|
-
it 'should not call hive' do
|
91
|
+
it 'should not call hive' do
|
92
|
+
end
|
92
93
|
end
|
93
94
|
|
94
95
|
context 'with default database' do
|
95
|
-
let(:configuration) { {database: 'default'} }
|
96
|
+
let(:configuration) { { database: 'default' } }
|
96
97
|
before do
|
97
98
|
expect(instance).to receive(:hive).with(exec: an_instance_of(String)).never
|
98
99
|
after_initialize_invoke
|
99
100
|
end
|
100
|
-
it 'should not call hive with create database' do
|
101
|
+
it 'should not call hive with create database' do
|
102
|
+
end
|
101
103
|
end
|
102
104
|
|
103
105
|
context 'with database' do
|
104
106
|
before do
|
105
|
-
expect(instance).to receive(:hive).with(exec: 'CREATE DATABASE IF NOT EXISTS test;', :
|
107
|
+
expect(instance).to receive(:hive).with(exec: 'CREATE DATABASE IF NOT EXISTS test;', database: nil).once.and_return(mock_success)
|
106
108
|
expect(instance).to receive(:hive).with(file: an_instance_of(String)).once.and_return(mock_success)
|
107
109
|
after_initialize_invoke
|
108
110
|
end
|
109
|
-
it 'should call hive with create database' do
|
111
|
+
it 'should call hive with create database' do
|
112
|
+
end
|
110
113
|
end
|
111
114
|
|
112
115
|
context 'with location' do
|
113
|
-
let(:configuration) { {database: 'test', location: '/tmp'} }
|
116
|
+
let(:configuration) { { database: 'test', location: '/tmp' } }
|
114
117
|
before do
|
115
|
-
expect(instance).to receive(:hive).with(exec: 'CREATE DATABASE IF NOT EXISTS test LOCATION "/tmp";', :
|
118
|
+
expect(instance).to receive(:hive).with(exec: 'CREATE DATABASE IF NOT EXISTS test LOCATION "/tmp";', database: nil).once.and_return(mock_success)
|
116
119
|
expect(instance).to receive(:hive).with(file: an_instance_of(String)).once.and_return(mock_success)
|
117
120
|
after_initialize_invoke
|
118
121
|
end
|
119
|
-
it 'should call hive with create database' do
|
122
|
+
it 'should call hive with create database' do
|
123
|
+
end
|
120
124
|
end
|
121
125
|
|
122
126
|
context 'with dry_run' do
|
123
|
-
let(:options) { {initialize: true, dry_run: true} }
|
127
|
+
let(:options) { { initialize: true, dry_run: true } }
|
124
128
|
before do
|
125
|
-
expect(instance).to receive(:hive).with(exec: 'CREATE DATABASE IF NOT EXISTS test;', :
|
129
|
+
expect(instance).to receive(:hive).with(exec: 'CREATE DATABASE IF NOT EXISTS test;', database: nil).once.and_return(mock_success)
|
126
130
|
expect(instance).to receive(:hive).with(file: an_instance_of(String)).once.and_return(mock_success)
|
127
131
|
expect(instance).to receive(:hive).with(exec: 'SHOW TABLES;', safe: true, fail_fast: false).once.and_return(mock_success)
|
128
132
|
after_initialize_invoke
|
129
133
|
end
|
130
|
-
it 'should call hive with show tables' do
|
134
|
+
it 'should call hive with show tables' do
|
135
|
+
end
|
131
136
|
end
|
132
137
|
end
|
133
138
|
end
|
@@ -32,7 +32,7 @@ describe Masamune::Actions::Postgres do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
let(:instance) { klass.new }
|
35
|
-
let(:configuration) { {database: 'test'} }
|
35
|
+
let(:configuration) { { database: 'test' } }
|
36
36
|
let(:postgres_helper) { double }
|
37
37
|
let(:catalog) { double }
|
38
38
|
|
@@ -65,10 +65,10 @@ describe Masamune::Actions::Postgres do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
describe '.after_initialize' do
|
68
|
-
let(:options) { {initialize: true} }
|
68
|
+
let(:options) { { initialize: true } }
|
69
69
|
let(:setup_files) { [] }
|
70
70
|
let(:schema_files) { [] }
|
71
|
-
let(:configuration) { {database: 'test', setup_files: setup_files, schema_files: schema_files} }
|
71
|
+
let(:configuration) { { database: 'test', setup_files: setup_files, schema_files: schema_files } }
|
72
72
|
|
73
73
|
subject(:after_initialize_invoke) do
|
74
74
|
instance.after_initialize_invoke(options)
|
@@ -81,7 +81,8 @@ describe Masamune::Actions::Postgres do
|
|
81
81
|
expect(instance).to_not receive(:postgres)
|
82
82
|
after_initialize_invoke
|
83
83
|
end
|
84
|
-
it 'should not call postgres_admin or postgres' do
|
84
|
+
it 'should not call postgres_admin or postgres' do
|
85
|
+
end
|
85
86
|
end
|
86
87
|
|
87
88
|
context 'when database does not exist' do
|
@@ -91,7 +92,8 @@ describe Masamune::Actions::Postgres do
|
|
91
92
|
expect(instance).to receive(:postgres).with(file: 'catalog.psql', retries: 0).once
|
92
93
|
after_initialize_invoke
|
93
94
|
end
|
94
|
-
it 'should call posgres_admin once' do
|
95
|
+
it 'should call posgres_admin once' do
|
96
|
+
end
|
95
97
|
end
|
96
98
|
|
97
99
|
context 'when database exists' do
|
@@ -101,7 +103,8 @@ describe Masamune::Actions::Postgres do
|
|
101
103
|
expect(instance).to receive(:postgres).with(file: 'catalog.psql', retries: 0).once
|
102
104
|
after_initialize_invoke
|
103
105
|
end
|
104
|
-
it 'should not call postgres_admin' do
|
106
|
+
it 'should not call postgres_admin' do
|
107
|
+
end
|
105
108
|
end
|
106
109
|
|
107
110
|
context 'when setup_files are configured' do
|
@@ -112,7 +115,8 @@ describe Masamune::Actions::Postgres do
|
|
112
115
|
expect(instance).to receive(:postgres).with(file: 'catalog.psql', retries: 0).once
|
113
116
|
after_initialize_invoke
|
114
117
|
end
|
115
|
-
it 'should call postgres with setup_files' do
|
118
|
+
it 'should call postgres with setup_files' do
|
119
|
+
end
|
116
120
|
end
|
117
121
|
|
118
122
|
context 'when schema_files are configured' do
|
@@ -123,7 +127,8 @@ describe Masamune::Actions::Postgres do
|
|
123
127
|
expect(instance).to receive(:postgres).once
|
124
128
|
after_initialize_invoke
|
125
129
|
end
|
126
|
-
it 'should call postgres with schema_files' do
|
130
|
+
it 'should call postgres with schema_files' do
|
131
|
+
end
|
127
132
|
end
|
128
133
|
|
129
134
|
context 'when schema_files that are globs are configured' do
|
@@ -134,7 +139,8 @@ describe Masamune::Actions::Postgres do
|
|
134
139
|
expect(instance).to receive(:postgres).with(file: 'catalog.psql', retries: 0).once
|
135
140
|
after_initialize_invoke
|
136
141
|
end
|
137
|
-
it 'should call postgres with schema_files' do
|
142
|
+
it 'should call postgres with schema_files' do
|
143
|
+
end
|
138
144
|
end
|
139
145
|
|
140
146
|
context 'when ruby schema_files configured' do
|
@@ -145,7 +151,8 @@ describe Masamune::Actions::Postgres do
|
|
145
151
|
expect(instance).to receive(:postgres).with(file: 'catalog.psql', retries: 0).once
|
146
152
|
after_initialize_invoke
|
147
153
|
end
|
148
|
-
it 'should call postgres with schema_files' do
|
154
|
+
it 'should call postgres with schema_files' do
|
155
|
+
end
|
149
156
|
end
|
150
157
|
end
|
151
158
|
end
|
@@ -26,18 +26,23 @@ describe Masamune::AfterInitializeCallbacks do
|
|
26
26
|
include Masamune::AfterInitializeCallbacks
|
27
27
|
|
28
28
|
def first_callback; end
|
29
|
+
|
29
30
|
def early_callback; end
|
31
|
+
|
30
32
|
def default_callback; end
|
33
|
+
|
31
34
|
def unknown_callback; end
|
35
|
+
|
32
36
|
def later_callback; end
|
37
|
+
|
33
38
|
def final_callback; end
|
34
39
|
|
35
|
-
after_initialize(:first
|
36
|
-
after_initialize(:early
|
37
|
-
after_initialize(:default
|
38
|
-
after_initialize(:unknown
|
39
|
-
after_initialize(:later
|
40
|
-
after_initialize(:final
|
40
|
+
after_initialize(:first, &:first_callback)
|
41
|
+
after_initialize(:early, &:early_callback)
|
42
|
+
after_initialize(:default, &:default_callback)
|
43
|
+
after_initialize(:unknown, &:unknown_callback)
|
44
|
+
after_initialize(:later, &:later_callback)
|
45
|
+
after_initialize(:final, &:final_callback)
|
41
46
|
end
|
42
47
|
end
|
43
48
|
|
@@ -54,6 +59,7 @@ describe Masamune::AfterInitializeCallbacks do
|
|
54
59
|
instance.after_initialize_invoke
|
55
60
|
end
|
56
61
|
|
57
|
-
it 'should call callbacks in priority order' do
|
62
|
+
it 'should call callbacks in priority order' do
|
63
|
+
end
|
58
64
|
end
|
59
65
|
end
|
@@ -37,43 +37,43 @@ describe Masamune::Commands::AwsEmr do
|
|
37
37
|
it { is_expected.to be_empty }
|
38
38
|
|
39
39
|
context 'with config file' do
|
40
|
-
let(:configuration) { {config_file: '/etc/aws/config'} }
|
41
|
-
it { is_expected.to eq(
|
40
|
+
let(:configuration) { { config_file: '/etc/aws/config' } }
|
41
|
+
it { is_expected.to eq('AWS_CONFIG_FILE' => '/etc/aws/config') }
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
describe '#command_args' do
|
46
46
|
subject { instance.command_args }
|
47
47
|
|
48
|
-
it { is_expected.to eq(
|
48
|
+
it { is_expected.to eq(%w(aws emr ssh)) }
|
49
49
|
|
50
50
|
context 'with --cluster-id j-XYZ' do
|
51
51
|
let(:delegate) { double(command_args: ['hive', '-e', "'show tables;'"]) }
|
52
52
|
let(:attrs) { { config_file: '/etc/aws_config', cluster_id: 'j-XYZ' } }
|
53
53
|
|
54
54
|
before do
|
55
|
-
expect(instance).to receive(:execute).with('aws', 'emr', 'ssh', '--cluster-id', 'j-XYZ', '--command', 'exit',
|
56
|
-
and_yield('ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=10 -i /etc/ssh/aws.key hadoop@ec2-10.0.0.1.compute-1.amazonaws.com exit')
|
57
|
-
and_yield("Warning: Permanently added 'ec2-10.0.0.1.compute-1.amazonaws.com,10.0.0.1' (ECDSA) to the list of known hosts.")
|
55
|
+
expect(instance).to receive(:execute).with('aws', 'emr', 'ssh', '--cluster-id', 'j-XYZ', '--command', 'exit', env: { 'AWS_CONFIG_FILE' => '/etc/aws_config' }, fail_fast: true, safe: true)
|
56
|
+
.and_yield('ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=10 -i /etc/ssh/aws.key hadoop@ec2-10.0.0.1.compute-1.amazonaws.com exit')
|
57
|
+
.and_yield("Warning: Permanently added 'ec2-10.0.0.1.compute-1.amazonaws.com,10.0.0.1' (ECDSA) to the list of known hosts.")
|
58
58
|
end
|
59
59
|
|
60
|
-
it { is_expected.to eq(['ssh', '-o', 'StrictHostKeyChecking=no', '-o', 'ServerAliveInterval=10', '-i', '/etc/ssh/aws.key', 'hadoop@ec2-10.0.0.1.compute-1.amazonaws.com', 'hive'
|
60
|
+
it { is_expected.to eq(['ssh', '-o', 'StrictHostKeyChecking=no', '-o', 'ServerAliveInterval=10', '-i', '/etc/ssh/aws.key', 'hadoop@ec2-10.0.0.1.compute-1.amazonaws.com', 'hive', '-e', "'show tables;'"]) }
|
61
61
|
end
|
62
62
|
|
63
63
|
context 'with action' do
|
64
|
-
let(:configuration) { { create_cluster: { options: {'--ami-version' =>
|
64
|
+
let(:configuration) { { create_cluster: { options: { '--ami-version' => '3.5.0' } } } }
|
65
65
|
let(:attrs) { { action: 'create-cluster', extra: ['--instance-type', 'm1.large'] } }
|
66
66
|
it { is_expected.to eq(['aws', 'emr', 'create-cluster', '--ami-version', '3.5.0', '--instance-type', 'm1.large']) }
|
67
67
|
end
|
68
68
|
|
69
69
|
context 'with action and option override (symbolized)' do
|
70
|
-
let(:configuration) { { create_cluster: { options: {:'--ami-version' => '3.5.0'} } } }
|
70
|
+
let(:configuration) { { create_cluster: { options: { :'--ami-version' => '3.5.0' } } } }
|
71
71
|
let(:attrs) { { action: 'create-cluster', extra: ['--ami-version', '4.0.0', '--instance-type', 'm1.large'] } }
|
72
72
|
it { is_expected.to eq(['aws', 'emr', 'create-cluster', '--ami-version', '4.0.0', '--instance-type', 'm1.large']) }
|
73
73
|
end
|
74
74
|
|
75
75
|
context 'with action and option override (stringified)' do
|
76
|
-
let(:configuration) { { 'create_cluster' => { 'options' => {'--ami-version' =>
|
76
|
+
let(:configuration) { { 'create_cluster' => { 'options' => { '--ami-version' => '3.5.0' } } } }
|
77
77
|
let(:attrs) { { action: 'create-cluster', extra: ['--ami-version', '4.0.0', '--instance-type', 'm1.large'] } }
|
78
78
|
it { is_expected.to eq(['aws', 'emr', 'create-cluster', '--ami-version', '4.0.0', '--instance-type', 'm1.large']) }
|
79
79
|
end
|