dpl-connect 1.8.43

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +8 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +36 -0
  6. data/Gemfile +100 -0
  7. data/LICENSE +22 -0
  8. data/README.md +934 -0
  9. data/Rakefile +1 -0
  10. data/TESTING.md +29 -0
  11. data/bin/dpl +5 -0
  12. data/dpl.gemspec +32 -0
  13. data/lib/dpl/cli.rb +66 -0
  14. data/lib/dpl/error.rb +3 -0
  15. data/lib/dpl/provider.rb +264 -0
  16. data/lib/dpl/provider/anynines.rb +13 -0
  17. data/lib/dpl/provider/appfog.rb +21 -0
  18. data/lib/dpl/provider/atlas.rb +108 -0
  19. data/lib/dpl/provider/azure_webapps.rb +48 -0
  20. data/lib/dpl/provider/bintray.rb +509 -0
  21. data/lib/dpl/provider/bitballoon.rb +22 -0
  22. data/lib/dpl/provider/bluemix_cloud_foundry.rb +23 -0
  23. data/lib/dpl/provider/boxfuse.rb +57 -0
  24. data/lib/dpl/provider/catalyze.rb +49 -0
  25. data/lib/dpl/provider/chef_supermarket.rb +85 -0
  26. data/lib/dpl/provider/cloud66.rb +38 -0
  27. data/lib/dpl/provider/cloud_files.rb +38 -0
  28. data/lib/dpl/provider/cloud_foundry.rb +43 -0
  29. data/lib/dpl/provider/code_deploy.rb +123 -0
  30. data/lib/dpl/provider/deis.rb +119 -0
  31. data/lib/dpl/provider/divshot.rb +23 -0
  32. data/lib/dpl/provider/elastic_beanstalk.rb +195 -0
  33. data/lib/dpl/provider/engine_yard.rb +90 -0
  34. data/lib/dpl/provider/firebase.rb +27 -0
  35. data/lib/dpl/provider/gae.rb +97 -0
  36. data/lib/dpl/provider/gcs.rb +59 -0
  37. data/lib/dpl/provider/hackage.rb +29 -0
  38. data/lib/dpl/provider/heroku.rb +18 -0
  39. data/lib/dpl/provider/heroku/api.rb +98 -0
  40. data/lib/dpl/provider/heroku/generic.rb +94 -0
  41. data/lib/dpl/provider/heroku/git.rb +28 -0
  42. data/lib/dpl/provider/lambda.rb +236 -0
  43. data/lib/dpl/provider/launchpad.rb +48 -0
  44. data/lib/dpl/provider/modulus.rb +23 -0
  45. data/lib/dpl/provider/npm.rb +64 -0
  46. data/lib/dpl/provider/openshift.rb +59 -0
  47. data/lib/dpl/provider/ops_works.rb +132 -0
  48. data/lib/dpl/provider/packagecloud.rb +144 -0
  49. data/lib/dpl/provider/pages.rb +79 -0
  50. data/lib/dpl/provider/puppet_forge.rb +43 -0
  51. data/lib/dpl/provider/pypi.rb +111 -0
  52. data/lib/dpl/provider/releases.rb +139 -0
  53. data/lib/dpl/provider/rubygems.rb +51 -0
  54. data/lib/dpl/provider/s3.rb +123 -0
  55. data/lib/dpl/provider/scalingo.rb +97 -0
  56. data/lib/dpl/provider/script.rb +29 -0
  57. data/lib/dpl/provider/surge.rb +33 -0
  58. data/lib/dpl/provider/testfairy.rb +190 -0
  59. data/lib/dpl/provider/transifex.rb +45 -0
  60. data/lib/dpl/version.rb +3 -0
  61. data/notes/engine_yard.md +1 -0
  62. data/notes/heroku.md +3 -0
  63. data/spec/cli_spec.rb +36 -0
  64. data/spec/provider/anynines_spec.rb +20 -0
  65. data/spec/provider/appfog_spec.rb +35 -0
  66. data/spec/provider/atlas_spec.rb +99 -0
  67. data/spec/provider/azure_webapps_spec.rb +95 -0
  68. data/spec/provider/bintray_spec.rb +259 -0
  69. data/spec/provider/bitballoon_spec.rb +32 -0
  70. data/spec/provider/bluemixcloudfoundry_spec.rb +23 -0
  71. data/spec/provider/boxfuse_spec.rb +16 -0
  72. data/spec/provider/catalyze_spec.rb +39 -0
  73. data/spec/provider/chef_supermarket_spec.rb +51 -0
  74. data/spec/provider/cloud66_spec.rb +44 -0
  75. data/spec/provider/cloud_files_spec.rb +88 -0
  76. data/spec/provider/cloudfoundry_spec.rb +71 -0
  77. data/spec/provider/code_deploy_spec.rb +360 -0
  78. data/spec/provider/deis_spec.rb +116 -0
  79. data/spec/provider/divshot_spec.rb +28 -0
  80. data/spec/provider/elastic_beanstalk_spec.rb +209 -0
  81. data/spec/provider/firebase_spec.rb +40 -0
  82. data/spec/provider/gae_spec.rb +26 -0
  83. data/spec/provider/gcs_spec.rb +115 -0
  84. data/spec/provider/hackage_spec.rb +47 -0
  85. data/spec/provider/heroku_spec.rb +357 -0
  86. data/spec/provider/lambda_spec.rb +432 -0
  87. data/spec/provider/launchpad_spec.rb +33 -0
  88. data/spec/provider/modulus_spec.rb +29 -0
  89. data/spec/provider/npm_spec.rb +95 -0
  90. data/spec/provider/openshift_spec.rb +91 -0
  91. data/spec/provider/ops_works_spec.rb +127 -0
  92. data/spec/provider/packagecloud_spec.rb +56 -0
  93. data/spec/provider/puppet_forge_spec.rb +60 -0
  94. data/spec/provider/pypi_spec.rb +103 -0
  95. data/spec/provider/releases_spec.rb +303 -0
  96. data/spec/provider/rubygems_spec.rb +106 -0
  97. data/spec/provider/s3_spec.rb +174 -0
  98. data/spec/provider/scalingo_spec.rb +64 -0
  99. data/spec/provider/script_spec.rb +26 -0
  100. data/spec/provider/surge_spec.rb +15 -0
  101. data/spec/provider/testfairy_spec.rb +86 -0
  102. data/spec/provider/transifex_spec.rb +110 -0
  103. data/spec/provider_spec.rb +210 -0
  104. data/spec/spec_helper.rb +20 -0
  105. metadata +279 -0
@@ -0,0 +1,116 @@
1
+ require 'spec_helper'
2
+ require 'dpl/provider/deis'
3
+
4
+ describe DPL::Provider::Deis do
5
+ let(:options) do
6
+ {
7
+ :app => 'example',
8
+ :key_name => 'key',
9
+ :controller => 'https://deis.deisapps.com',
10
+ :username => 'travis',
11
+ :password => 'secret',
12
+ :cli_version => 'v2.0.0'
13
+ }
14
+ end
15
+
16
+ subject :provider do
17
+ described_class.new(DummyContext.new, options)
18
+ end
19
+
20
+ describe "#install_deploy_dependencies" do
21
+ example do
22
+ expect(provider.context).to receive(:shell).with(
23
+ 'curl -sSL http://deis.io/deis-cli/install-v2.sh | bash -x -s v2.0.0'
24
+ ).and_return(true)
25
+ provider.install_deploy_dependencies
26
+ end
27
+ end
28
+
29
+ describe "#needs_key?" do
30
+ example do
31
+ expect(provider.needs_key?).to eq(true)
32
+ end
33
+ end
34
+
35
+ describe "#check_auth" do
36
+ example do
37
+ expect(provider.context).to receive(:shell).with(
38
+ './deis login https://deis.deisapps.com --username=travis --password=secret'
39
+ ).and_return(true)
40
+ provider.check_auth
41
+ end
42
+ end
43
+
44
+ describe "#check_app" do
45
+ example do
46
+ expect(provider.context).to receive(:shell).with(
47
+ './deis apps:info --app=example'
48
+ ).and_return(true)
49
+ provider.check_app
50
+ end
51
+ end
52
+
53
+ describe "#setup_key" do
54
+ let(:ssh_config_handle) { double 'ssh_config_handle' }
55
+ let(:ssh_config) { File.join(Dir.home, '.ssh', 'config') }
56
+ let(:identity_file) { File.join(Dir.pwd, 'key_file') }
57
+ example do
58
+ expect(provider.context).to receive(:shell).with(
59
+ './deis keys:add key_file'
60
+ ).and_return(true)
61
+ provider.setup_key('key_file')
62
+ end
63
+ end
64
+
65
+ describe "#setup_git_ssh" do
66
+ example do
67
+ expect(provider.context).to receive(:shell).with(
68
+ /grep -c 'PTY allocation request failed'/
69
+ ).and_return(false)
70
+
71
+ expect(provider.context).to receive(:shell).with(
72
+ /grep -c 'PTY allocation request failed'/
73
+ ).and_return(true)
74
+
75
+ provider.setup_git_ssh('foo', 'key_file')
76
+ end
77
+ end
78
+
79
+ describe "#remove_key" do
80
+ example do
81
+ expect(provider.context).to receive(:shell).with(
82
+ './deis keys:remove key'
83
+ ).and_return(true)
84
+ provider.remove_key
85
+ end
86
+ end
87
+
88
+ describe "#push_app" do
89
+ example do
90
+ expect(provider.context).to receive(:shell).with(
91
+ "bash -c 'git push ssh://git@deis-builder.deisapps.com:2222/example.git HEAD:refs/heads/master -f 2>&1 | tr -dc \"[:alnum:][:space:][:punct:]\" | sed -E \"s/remote: (\\[1G)+//\" | sed \"s/\\[K$//\"; exit ${PIPESTATUS[0]}'"
92
+ ).and_return(true)
93
+ provider.push_app
94
+ end
95
+ end
96
+
97
+ describe "#run" do
98
+ example do
99
+ expect(provider.context).to receive(:shell).with(
100
+ './deis run -a example -- shell command'
101
+ ).and_return(true)
102
+ provider.run('shell command')
103
+ end
104
+ end
105
+
106
+ describe "#cleanup" do
107
+ example do
108
+ expect(provider.context).to receive(:shell).with('mv deis ~/deis')
109
+ expect(provider.context).to receive(:shell).with('mv .dpl ~/dpl')
110
+ expect(provider.context).to receive(:shell).with('git stash --all')
111
+ expect(provider.context).to receive(:shell).with('mv ~/dpl .dpl')
112
+ expect(provider.context).to receive(:shell).with('mv ~/deis deis')
113
+ provider.cleanup
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'dpl/provider/divshot'
3
+
4
+ describe DPL::Provider::Divshot do
5
+ subject :provider do
6
+ described_class.new DummyContext.new, :api_key => 'abc123'
7
+ end
8
+
9
+ describe "#check_auth" do
10
+ it 'should require an api key' do
11
+ provider.options.update(:api_key => nil)
12
+ expect{ provider.check_auth }.to raise_error("must supply an api key")
13
+ end
14
+ end
15
+
16
+ describe "#push_app" do
17
+ it 'should include the environment specified' do
18
+ provider.options.update(:environment => 'development')
19
+ expect(provider.context).to receive(:shell).with("divshot push development --token=abc123")
20
+ provider.push_app
21
+ end
22
+
23
+ it 'should default to production' do
24
+ expect(provider.context).to receive(:shell).with("divshot push production --token=abc123")
25
+ provider.push_app
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,209 @@
1
+ require 'spec_helper'
2
+ require 'aws-sdk'
3
+ require 'dpl/provider'
4
+ require 'dpl/provider/elastic_beanstalk'
5
+
6
+ describe DPL::Provider::ElasticBeanstalk do
7
+
8
+ let(:access_key_id) { 'qwertyuiopasdfghjklz' }
9
+ let(:secret_access_key) { 'qwertyuiopasdfghjklzqwertyuiopasdfghjklz' }
10
+ let(:region) { 'us-west-2' }
11
+ let(:app) { 'example-app' }
12
+ let(:env) { 'live' }
13
+ let(:bucket_name) { "travis-elasticbeanstalk-test-builds-#{region}" }
14
+ let(:bucket_path) { "some/app"}
15
+ let(:only_create_app_version) { nil }
16
+ let(:wait_until_deployed) { nil }
17
+
18
+ let(:bucket_mock) do
19
+ dbl = double("bucket mock", write: nil)
20
+ allow(dbl).to receive(:objects).and_return(double("Hash", :[] => dbl))
21
+ dbl
22
+ end
23
+
24
+ let(:s3_mock) do
25
+ hash_dbl = double("Hash", :[] => bucket_mock, :map => [])
26
+ double("Aws::S3", bucket: hash_dbl, config: hash_dbl)
27
+ end
28
+
29
+ let(:io_double) do
30
+ double('IO', open: Object.new)
31
+ end
32
+
33
+ let(:s3_obj_double) do
34
+ double("Aws::S3::Object", put: Object.new)
35
+ end
36
+
37
+ subject :provider do
38
+ described_class.new(
39
+ DummyContext.new, :access_key_id => access_key_id, :secret_access_key => secret_access_key,
40
+ :region => region, :app => app, :env => env, :bucket_name => bucket_name, :bucket_path => bucket_path,
41
+ :only_create_app_version => only_create_app_version,
42
+ :wait_until_deployed => wait_until_deployed
43
+ )
44
+ end
45
+
46
+ subject :provider_without_bucket_path do
47
+ described_class.new(
48
+ DummyContext.new, :access_key_id => access_key_id, :secret_access_key => secret_access_key,
49
+ :region => region, :app => app, :env => env, :bucket_name => bucket_name
50
+ )
51
+ end
52
+
53
+ describe "#check_auth" do
54
+ example do
55
+ expect(Aws.config).to receive(:update)
56
+ provider.check_auth
57
+ end
58
+ end
59
+
60
+ describe "#push_app" do
61
+
62
+ let(:app_version) { Object.new }
63
+
64
+ before :each do
65
+ allow(io_double).to receive(:open)
66
+ allow(s3_obj_double).to receive(:put).with(anything).and_return(Object.new)
67
+ allow(s3_mock).to receive(:bucket).with(bucket_name).and_return(bucket_mock)
68
+ expect(Pathname).to receive(:new).and_return(io_double)
69
+ end
70
+
71
+ example 'bucket exists already' do
72
+ allow(s3_mock).to receive(:bucket).with(bucket_name).and_return(bucket_mock)
73
+ allow(bucket_mock).to receive(:exists?).and_return(true)
74
+ allow(bucket_mock).to receive(:object).with("some/app/file.zip").and_return(s3_obj_double)
75
+
76
+ expect(provider).to receive(:s3).and_return(s3_mock).twice
77
+ expect(provider).not_to receive(:create_bucket)
78
+ expect(provider).to receive(:create_zip).and_return('/path/to/file.zip')
79
+ expect(provider).to receive(:archive_name).and_return('file.zip')
80
+ expect(provider).to receive(:upload).with('file.zip', '/path/to/file.zip').and_call_original
81
+ expect(provider).to receive(:sleep).with(5)
82
+ expect(provider).to receive(:create_app_version).with(s3_obj_double).and_return(app_version)
83
+ expect(provider).to receive(:update_app).with(app_version)
84
+
85
+ provider.push_app
86
+ end
87
+
88
+ example 'bucket doesnt exist yet' do
89
+ allow(s3_mock).to receive(:bucket).with(bucket_name).and_return(bucket_mock)
90
+ allow(bucket_mock).to receive(:exists?).and_return(false)
91
+ allow(bucket_mock).to receive(:object).with("some/app/file.zip").and_return(s3_obj_double)
92
+
93
+ expect(provider).to receive(:s3).and_return(s3_mock).twice
94
+ expect(provider).to receive(:create_bucket)
95
+ expect(provider).to receive(:create_zip).and_return('/path/to/file.zip')
96
+ expect(provider).to receive(:archive_name).and_return('file.zip')
97
+ expect(provider).to receive(:upload).with('file.zip', '/path/to/file.zip').and_call_original
98
+ expect(provider).to receive(:sleep).with(5)
99
+ expect(provider).to receive(:create_app_version).with(s3_obj_double).and_return(app_version)
100
+ expect(provider).to receive(:update_app).with(app_version)
101
+
102
+ provider.push_app
103
+ end
104
+
105
+ context 'only creates app version' do
106
+ let(:only_create_app_version) { true }
107
+
108
+ example 'verify the app is not updated' do
109
+ allow(s3_mock).to receive(:bucket).with(bucket_name).and_return(bucket_mock)
110
+ allow(bucket_mock).to receive(:exists?).and_return(false)
111
+ allow(bucket_mock).to receive(:create)
112
+ allow(bucket_mock).to receive(:object).with("some/app/file.zip").and_return(s3_obj_double)
113
+
114
+ expect(provider).to receive(:s3).and_return(s3_mock).at_least(3).times
115
+ expect(provider).to receive(:create_zip).and_return('/path/to/file.zip')
116
+ expect(provider).to receive(:archive_name).and_return('file.zip')
117
+ expect(provider).to receive(:upload).with('file.zip', '/path/to/file.zip').and_call_original
118
+ expect(provider).to receive(:sleep).with(5)
119
+ expect(provider).to receive(:create_app_version).with(s3_obj_double).and_return(app_version)
120
+ expect(provider).not_to receive(:update_app).with(app_version)
121
+
122
+ provider.push_app
123
+ end
124
+ end
125
+
126
+ context 'When the bucket_path option is not set' do
127
+ example 'Does not prepend bucket_path to the s3 bucket' do
128
+ allow(s3_mock).to receive(:bucket).with(bucket_name).and_return(bucket_mock)
129
+ allow(bucket_mock).to receive(:object).with("file.zip").and_return(s3_obj_double)
130
+ allow(bucket_mock).to receive(:exists?).and_return(false)
131
+ allow(bucket_mock).to receive(:create)
132
+
133
+ expect(provider_without_bucket_path).to receive(:s3).and_return(s3_mock).at_least(3).times
134
+ expect(provider_without_bucket_path).to receive(:create_zip).and_return('/path/to/file.zip')
135
+ expect(provider_without_bucket_path).to receive(:archive_name).and_return('file.zip')
136
+ expect(provider_without_bucket_path).to receive(:bucket_path).and_return(nil)
137
+ expect(provider_without_bucket_path).to receive(:upload).with('file.zip', '/path/to/file.zip').and_call_original
138
+ expect(provider_without_bucket_path).to receive(:sleep).with(5)
139
+ expect(provider_without_bucket_path).to receive(:create_app_version).with(s3_obj_double).and_return(app_version)
140
+ expect(provider_without_bucket_path).to receive(:update_app).with(app_version)
141
+
142
+ provider_without_bucket_path.push_app
143
+ end
144
+ end
145
+
146
+ context 'When wait_until_deployed option is set' do
147
+ let(:wait_until_deployed) { true }
148
+
149
+ example 'Waits until deployment completes' do
150
+ allow(bucket_mock).to receive(:exists?).and_return(false)
151
+ allow(bucket_mock).to receive(:create)
152
+ allow(bucket_mock).to receive(:object).with("some/app/file.zip").and_return(s3_obj_double)
153
+
154
+ expect(provider).to receive(:s3).and_return(s3_mock).at_least(3).times
155
+ expect(provider).to receive(:create_zip).and_return('/path/to/file.zip')
156
+ expect(provider).to receive(:archive_name).and_return('file.zip')
157
+ expect(provider).to receive(:upload).with('file.zip', '/path/to/file.zip').and_call_original
158
+ expect(provider).to receive(:sleep).with(5)
159
+ expect(provider).to receive(:create_app_version).with(s3_obj_double).and_return(app_version)
160
+ expect(provider).to receive(:update_app).with(app_version)
161
+ expect(provider).to receive(:wait_until_deployed)
162
+
163
+ provider.push_app
164
+ end
165
+ end
166
+
167
+ context "when zip_file option is given" do
168
+ before :each do
169
+ allow(bucket_mock).to receive(:object).with("some/app/file.zip").and_return(s3_obj_double)
170
+ allow(bucket_mock).to receive(:exists?).and_return(false)
171
+ allow(bucket_mock).to receive(:create)
172
+ expect(provider).to receive(:s3).and_return(s3_mock).at_least(3).times
173
+ expect(provider).to receive(:archive_name).and_return('file.zip')
174
+ expect(provider).to receive(:sleep).with(5)
175
+ expect(provider).to receive(:create_app_version).with(s3_obj_double).and_return(app_version)
176
+ expect(provider).to receive(:update_app).with(app_version)
177
+ end
178
+
179
+ example 'zip_file is an absolute path' do
180
+ provider.options.update(:zip_file => '/absolute/path/to/file.zip')
181
+ expect(provider).to receive(:upload).with('file.zip', '/absolute/path/to/file.zip').and_call_original
182
+
183
+ provider.push_app
184
+ end
185
+
186
+ example 'zip_file is an relative path' do
187
+ provider.options.update(:zip_file => 'relative/path/to/file.zip')
188
+ expect(provider).to receive(:upload).with('file.zip', File.join(Dir.pwd, 'relative/path/to/file.zip')).and_call_original
189
+
190
+ provider.push_app
191
+ end
192
+
193
+ example 'zip_file is a path with ~/' do
194
+ provider.options.update(:zip_file => '~/file.zip')
195
+ expect(provider).to receive(:upload).with('file.zip', File.join(ENV['HOME'], 'file.zip')).and_call_original
196
+
197
+ provider.push_app
198
+ end
199
+
200
+ example 'zip_file is has no path' do
201
+ provider.options.update(:zip_file => 'file.zip')
202
+ expect(provider).to receive(:upload).with('file.zip', File.join(Dir.pwd, 'file.zip')).and_call_original
203
+
204
+ provider.push_app
205
+ end
206
+
207
+ end
208
+ end
209
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ require 'dpl/provider/firebase'
3
+
4
+ describe DPL::Provider::Firebase do
5
+ subject :provider do
6
+ described_class.new DummyContext.new, :token => 'abc123'
7
+ end
8
+
9
+ describe "#check_auth" do
10
+ it 'should require a token if no FIREBASE_TOKEN is set' do
11
+ provider.options.update(:token => nil)
12
+ expect{ provider.check_auth }.to raise_error("must supply token option or FIREBASE_TOKEN environment variable")
13
+ end
14
+
15
+ it 'should allow no token if FIREBASE_TOKEN is set' do
16
+ provider.options.update(:token => nil)
17
+ provider.context.env['FIREBASE_TOKEN'] = 'abc123'
18
+ expect{ provider.check_auth }.not_to raise_error
19
+ end
20
+ end
21
+
22
+ describe "#push_app" do
23
+ it 'should include the project specified' do
24
+ provider.options.update(:project => 'myapp-dev')
25
+ expect(provider.context).to receive(:shell).with("firebase deploy --non-interactive --project myapp-dev --token 'abc123'")
26
+ provider.push_app
27
+ end
28
+
29
+ it 'should include the message specified' do
30
+ provider.options.update(:message => 'test message')
31
+ expect(provider.context).to receive(:shell).with("firebase deploy --non-interactive --message 'test message' --token 'abc123'")
32
+ provider.push_app
33
+ end
34
+
35
+ it 'should default to no project override' do
36
+ expect(provider.context).to receive(:shell).with("firebase deploy --non-interactive --token 'abc123'")
37
+ provider.push_app
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ require 'dpl/provider/gae'
3
+
4
+ describe DPL::Provider::GAE do
5
+ subject :provider do
6
+ described_class.new(DummyContext.new, project: 'test')
7
+ end
8
+
9
+
10
+ describe '#push_app' do
11
+ example 'with defaults' do
12
+ expect(provider.context.env).to receive(:[]).with('HOME').and_return('/home/travis')
13
+ allow(provider.context).to receive(:shell).with("bash -c 'source /home/travis/virtualenv/python2.7/bin/activate; #{DPL::Provider::GAE::GCLOUD} --quiet --verbosity \"warning\" --project \"test\" app deploy \"app.yaml\" --promote'").and_return(true)
14
+ provider.push_app
15
+ end
16
+ end
17
+
18
+
19
+ describe '#with_python_2_7' do
20
+ example 'with apostrophe' do
21
+ expect(provider.context.env).to receive(:[]).with('HOME').and_return('/home/travis')
22
+ allow(provider.context).to receive(:shell).with("bash -c 'source /home/travis/virtualenv/python2.7/bin/activate; python -c '\\''import sys; print(sys.version)'\\'''").and_return(true)
23
+ provider.with_python_2_7("python -c 'import sys; print(sys.version)'")
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,115 @@
1
+ require 'spec_helper'
2
+ require 'dpl/provider/gcs'
3
+
4
+ describe DPL::Provider::GCS do
5
+
6
+ subject :provider do
7
+ described_class.new(DummyContext.new, :access_key_id => 'qwertyuiopasdfghjklz', :secret_access_key => 'qwertyuiopasdfghjklzqwertyuiopasdfghjklz', :bucket => 'my-bucket')
8
+ end
9
+
10
+ describe "#check_auth" do
11
+ example do
12
+ expect(provider).to receive(:log).with("Logging in with Access Key: ****************jklz")
13
+ provider.check_auth
14
+ end
15
+ end
16
+
17
+ describe "#needs_key?" do
18
+ example do
19
+ expect(provider.needs_key?).to eq(false)
20
+ end
21
+ end
22
+
23
+ describe "#upload_path" do
24
+ example "Without: :upload_dir" do
25
+ filename = "testfile.file"
26
+
27
+ expect(provider.upload_path(filename)).to eq("testfile.file")
28
+ end
29
+
30
+ example "With :upload_dir" do
31
+ provider.options.update(:upload_dir => 'BUILD3')
32
+ filename = "testfile.file"
33
+
34
+ expect(provider.upload_path(filename)).to eq("BUILD3/testfile.file")
35
+ end
36
+ end
37
+
38
+ describe "#push_app" do
39
+ example "Without local_dir" do
40
+ expect(Dir).to receive(:chdir).with(Dir.pwd)
41
+ provider.push_app
42
+ end
43
+
44
+ example "With local_dir" do
45
+ provider.options.update(:local_dir => 'BUILD')
46
+
47
+ expect(Dir).to receive(:chdir).with('BUILD')
48
+ provider.push_app
49
+ end
50
+
51
+ example "Sends MIME type" do
52
+ expect(Dir).to receive(:glob).and_yield(__FILE__)
53
+ expect_any_instance_of(GStore::Client).to receive(:put_object).with(
54
+ anything(),
55
+ anything(),
56
+ hash_including(:headers => {:"Content-Type" => 'application/x-ruby'})
57
+ )
58
+ provider.push_app
59
+ end
60
+
61
+ example "Sets Cache" do
62
+ provider.options.update(:cache_control => "max-age=99999999")
63
+ expect(Dir).to receive(:glob).and_yield(__FILE__)
64
+ expect_any_instance_of(GStore::Client).to receive(:put_object).with(
65
+ anything(),
66
+ anything(),
67
+ hash_including(:headers => hash_including("Cache-Control" => 'max-age=99999999'))
68
+ )
69
+ provider.push_app
70
+ end
71
+
72
+ example "Sets ACL" do
73
+ provider.options.update(:acl => "public-read")
74
+ expect(Dir).to receive(:glob).and_yield(__FILE__)
75
+ expect_any_instance_of(GStore::Client).to receive(:put_object).with(
76
+ anything(),
77
+ anything(),
78
+ hash_including(:headers => hash_including("x-goog-acl" => 'public-read'))
79
+ )
80
+ provider.push_app
81
+ end
82
+
83
+ example "when detect_encoding is set" do
84
+ path = 'foo.js'
85
+ provider.options.update(:detect_encoding => true)
86
+ expect(Dir).to receive(:glob).and_yield(path)
87
+ expect(provider).to receive(:`).at_least(1).times.with("file '#{path}'").and_return('gzip compressed')
88
+ expect(File).to receive(:read).with(path).and_return("")
89
+ expect_any_instance_of(GStore::Client).to receive(:put_object).with(
90
+ anything(),
91
+ anything(),
92
+ hash_including(:headers => hash_including("Content-Encoding" => 'gzip'))
93
+ )
94
+ provider.push_app
95
+ end
96
+
97
+ example "With dot_match" do
98
+ provider.options.update(:dot_match => true)
99
+
100
+ expect(Dir).to receive(:glob).with('**/*', File::FNM_DOTMATCH)
101
+ provider.push_app
102
+ end
103
+
104
+ end
105
+
106
+ describe '#client' do
107
+ example do
108
+ expect(GStore::Client).to receive(:new).with(
109
+ :access_key => 'qwertyuiopasdfghjklz',
110
+ :secret_key => 'qwertyuiopasdfghjklzqwertyuiopasdfghjklz'
111
+ )
112
+ provider.client
113
+ end
114
+ end
115
+ end