dpl-connect 1.8.43

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.
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