buildpack-support 1.0.0

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 (122) hide show
  1. data/LICENSE +202 -0
  2. data/NOTICE +2 -0
  3. data/docs/cache.md +77 -0
  4. data/docs/component.md +1 -0
  5. data/docs/configuration.md +27 -0
  6. data/docs/logging.md +54 -0
  7. data/docs/other.md +1 -0
  8. data/docs/rake.md +1 -0
  9. data/docs/repository.md +116 -0
  10. data/docs/test.md +1 -0
  11. data/lib/buildpack_support.rb +18 -0
  12. data/lib/buildpack_support/base_buildpack.rb +166 -0
  13. data/lib/buildpack_support/buildpack_version.rb +124 -0
  14. data/lib/buildpack_support/cache.rb +24 -0
  15. data/lib/buildpack_support/cache/application_cache.rb +41 -0
  16. data/lib/buildpack_support/cache/cached_file.rb +103 -0
  17. data/lib/buildpack_support/cache/download_cache.rb +280 -0
  18. data/lib/buildpack_support/cache/inferred_network_failure.rb +26 -0
  19. data/lib/buildpack_support/cache/internet_availability.rb +64 -0
  20. data/lib/buildpack_support/component.rb +24 -0
  21. data/lib/buildpack_support/component/application.rb +76 -0
  22. data/lib/buildpack_support/component/base_component.rb +78 -0
  23. data/lib/buildpack_support/component/base_droplet.rb +96 -0
  24. data/lib/buildpack_support/component/downloads.rb +88 -0
  25. data/lib/buildpack_support/component/services.rb +84 -0
  26. data/lib/buildpack_support/component/versioned_dependency_component.rb +71 -0
  27. data/lib/buildpack_support/component/versioned_downloads.rb +57 -0
  28. data/lib/buildpack_support/component/with_timing.rb +40 -0
  29. data/lib/buildpack_support/configuration_utils.rb +58 -0
  30. data/lib/buildpack_support/constantize.rb +46 -0
  31. data/lib/buildpack_support/dash_case.rb +29 -0
  32. data/lib/buildpack_support/directory_finder.rb +45 -0
  33. data/lib/buildpack_support/filtering_pathname.rb +227 -0
  34. data/lib/buildpack_support/format_duration.rb +57 -0
  35. data/lib/buildpack_support/logging.rb +22 -0
  36. data/lib/buildpack_support/logging/delegating_logger.rb +48 -0
  37. data/lib/buildpack_support/logging/logger_factory.rb +148 -0
  38. data/lib/buildpack_support/qualify_path.rb +36 -0
  39. data/lib/buildpack_support/rake.rb +22 -0
  40. data/lib/buildpack_support/rake/buildpack_stage_task.rb +86 -0
  41. data/lib/buildpack_support/rake/cached_artifact_finder.rb +99 -0
  42. data/lib/buildpack_support/rake/check_api_doc_task.rb +70 -0
  43. data/lib/buildpack_support/rake/dependency_cache_task.rb +87 -0
  44. data/lib/buildpack_support/rake/disable_remote_downloads_task.rb +80 -0
  45. data/lib/buildpack_support/rake/package_task.rb +133 -0
  46. data/lib/buildpack_support/rake/package_zip_task.rb +80 -0
  47. data/lib/buildpack_support/rake/repository_configuration_finder.rb +66 -0
  48. data/lib/buildpack_support/rake/write_version_file_task.rb +82 -0
  49. data/lib/buildpack_support/repository.rb +24 -0
  50. data/lib/buildpack_support/repository/configured_item.rb +81 -0
  51. data/lib/buildpack_support/repository/repository_index.rb +98 -0
  52. data/lib/buildpack_support/repository/wildcard_version_resolver.rb +75 -0
  53. data/lib/buildpack_support/shell.rb +41 -0
  54. data/lib/buildpack_support/snake_case.rb +30 -0
  55. data/lib/buildpack_support/space_case.rb +29 -0
  56. data/lib/buildpack_support/test/application_helper.rb +41 -0
  57. data/lib/buildpack_support/test/base_component_helper.rb +59 -0
  58. data/lib/buildpack_support/test/base_droplet_helper.rb +36 -0
  59. data/lib/buildpack_support/test/console_helper.rb +57 -0
  60. data/lib/buildpack_support/test/environment_helper.rb +32 -0
  61. data/lib/buildpack_support/test/internet_availability_helper.rb +29 -0
  62. data/lib/buildpack_support/test/logging_helper.rb +50 -0
  63. data/lib/buildpack_support/test/scratch_helper.rb +32 -0
  64. data/lib/buildpack_support/test/versioned_dependency_component_helper.rb +32 -0
  65. data/lib/buildpack_support/test/with_load_path_helper.rb +27 -0
  66. data/lib/buildpack_support/to_b.rb +38 -0
  67. data/lib/buildpack_support/tokenized_version.rb +157 -0
  68. data/lib/buildpack_support/version.rb +23 -0
  69. data/spec/buildpack_support/base_buildpack_spec.rb +112 -0
  70. data/spec/buildpack_support/buildpack_version_spec.rb +122 -0
  71. data/spec/buildpack_support/cache/application_cache_spec.rb +56 -0
  72. data/spec/buildpack_support/cache/cached_file_spec.rb +94 -0
  73. data/spec/buildpack_support/cache/download_cache_spec.rb +293 -0
  74. data/spec/buildpack_support/cache/internet_availability_spec.rb +57 -0
  75. data/spec/buildpack_support/cache/yield_file_with_content.rb +30 -0
  76. data/spec/buildpack_support/component/application_spec.rb +81 -0
  77. data/spec/buildpack_support/component/base_component_spec.rb +81 -0
  78. data/spec/buildpack_support/component/base_droplet_spec.rb +72 -0
  79. data/spec/buildpack_support/component/downloads_spec.rb +63 -0
  80. data/spec/buildpack_support/component/services_spec.rb +80 -0
  81. data/spec/buildpack_support/component/versioned_dependency_component_spec.rb +58 -0
  82. data/spec/buildpack_support/component/versioned_downloads_spec.rb +58 -0
  83. data/spec/buildpack_support/component/with_timing_spec.rb +30 -0
  84. data/spec/buildpack_support/configuration_utils_spec.rb +39 -0
  85. data/spec/buildpack_support/constantize_spec.rb +34 -0
  86. data/spec/buildpack_support/dash_case_spec.rb +41 -0
  87. data/spec/buildpack_support/directory_finder_spec.rb +41 -0
  88. data/spec/buildpack_support/filtering_pathname_spec.rb +443 -0
  89. data/spec/buildpack_support/format_duration_spec.rb +60 -0
  90. data/spec/buildpack_support/logging/delegating_logger_spec.rb +62 -0
  91. data/spec/buildpack_support/logging/logger_factory_spec.rb +262 -0
  92. data/spec/buildpack_support/qualify_path_spec.rb +42 -0
  93. data/spec/buildpack_support/rake/buildpack_stage_task_spec.rb +88 -0
  94. data/spec/buildpack_support/rake/cached_artifact_finder_spec.rb +73 -0
  95. data/spec/buildpack_support/rake/check_api_doc_task_spec.rb +69 -0
  96. data/spec/buildpack_support/rake/dependency_cache_task_spec.rb +133 -0
  97. data/spec/buildpack_support/rake/disable_remote_downloads_task_spec.rb +91 -0
  98. data/spec/buildpack_support/rake/package_task_spec.rb +335 -0
  99. data/spec/buildpack_support/rake/package_zip_task_spec.rb +91 -0
  100. data/spec/buildpack_support/rake/repository_configuration_finder_spec.rb +61 -0
  101. data/spec/buildpack_support/rake/write_version_file_task_spec.rb +96 -0
  102. data/spec/buildpack_support/repository/configured_item_spec.rb +78 -0
  103. data/spec/buildpack_support/repository/repository_index_spec.rb +118 -0
  104. data/spec/buildpack_support/repository/wildcard_version_resolver_spec.rb +73 -0
  105. data/spec/buildpack_support/shell_spec.rb +32 -0
  106. data/spec/buildpack_support/snake_case_spec.rb +45 -0
  107. data/spec/buildpack_support/space_case_spec.rb +41 -0
  108. data/spec/buildpack_support/to_b_spec.rb +41 -0
  109. data/spec/buildpack_support/tokenized_version_spec.rb +132 -0
  110. data/spec/fixtures/application/test-file +0 -0
  111. data/spec/fixtures/config/found-config.yml +2 -0
  112. data/spec/fixtures/droplet-resources/droplet-resource +0 -0
  113. data/spec/fixtures/stub-download-with-top-level.zip +0 -0
  114. data/spec/fixtures/stub-download.tar.gz +0 -0
  115. data/spec/fixtures/stub-download.zip +0 -0
  116. data/spec/fixtures/test-cache.yml +18 -0
  117. data/spec/fixtures/test-index.yml +2 -0
  118. data/spec/fixtures/test_component.rb +0 -0
  119. data/spec/fixtures/zip-contents/test-directory/test-deep-file +0 -0
  120. data/spec/fixtures/zip-contents/test-file +0 -0
  121. data/spec/spec_helper.rb +30 -0
  122. metadata +416 -0
@@ -0,0 +1,60 @@
1
+ # Encoding: utf-8
2
+ # Copyright 2013-2014 the original author or authors.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require 'spec_helper'
17
+ require 'buildpack_support/format_duration'
18
+
19
+ describe 'format duration' do
20
+
21
+ it 'should display seconds' do
22
+ expect_time_string '0.0s', MILLISECOND
23
+ expect_time_string '0.1s', TENTH
24
+ expect_time_string '1.0s', SECOND
25
+ expect_time_string '1.1s', SECOND + TENTH
26
+ expect_time_string '1.1s', SECOND + TENTH + MILLISECOND
27
+ end
28
+
29
+ it 'should display minutes' do
30
+ expect_time_string '1m 0s', MINUTE
31
+ expect_time_string '1m 1s', MINUTE + SECOND
32
+ expect_time_string '1m 1s', MINUTE + SECOND + TENTH
33
+ expect_time_string '1m 1s', MINUTE + SECOND + TENTH + MILLISECOND
34
+ end
35
+
36
+ it 'should display hours' do
37
+ expect_time_string '1h 0m', HOUR
38
+ expect_time_string '1h 1m', HOUR + MINUTE
39
+ expect_time_string '1h 1m', HOUR + MINUTE + SECOND
40
+ expect_time_string '1h 1m', HOUR + MINUTE + SECOND + TENTH
41
+ expect_time_string '1h 1m', HOUR + MINUTE + SECOND + TENTH + MILLISECOND
42
+ end
43
+
44
+ private
45
+
46
+ MILLISECOND = 0.001.freeze
47
+
48
+ TENTH = (100 * MILLISECOND).freeze
49
+
50
+ SECOND = (10 * TENTH).freeze
51
+
52
+ MINUTE = (60 * SECOND).freeze
53
+
54
+ HOUR = (60 * MINUTE).freeze
55
+
56
+ def expect_time_string(expected, time)
57
+ expect(time.duration).to eq(expected)
58
+ end
59
+
60
+ end
@@ -0,0 +1,62 @@
1
+ # Encoding: utf-8
2
+ # Copyright 2013-2014 the original author or authors.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require 'spec_helper'
17
+ require 'buildpack_support/logging/delegating_logger'
18
+ require 'logger'
19
+
20
+ describe BuildpackSupport::Logging::DelegatingLogger do
21
+
22
+ let(:block) { ->() { 'test-message' } }
23
+ let(:delegate1) { double('delegate1') }
24
+ let(:delegate2) { double('delegate2') }
25
+ let(:delegating_logger) { described_class.new('test-klass', [delegate1, delegate2]) }
26
+
27
+ it 'should delegate FATAL calls' do
28
+ expect(delegate1).to receive(:add).with(Logger::FATAL, nil, 'test-klass')
29
+ expect(delegate2).to receive(:add).with(Logger::FATAL, nil, 'test-klass')
30
+
31
+ delegating_logger.fatal
32
+ end
33
+
34
+ it 'should delegate ERROR calls' do
35
+ expect(delegate1).to receive(:add).with(Logger::ERROR, nil, 'test-klass')
36
+ expect(delegate2).to receive(:add).with(Logger::ERROR, nil, 'test-klass')
37
+
38
+ delegating_logger.error
39
+ end
40
+
41
+ it 'should delegate WARN calls' do
42
+ expect(delegate1).to receive(:add).with(Logger::WARN, nil, 'test-klass')
43
+ expect(delegate2).to receive(:add).with(Logger::WARN, nil, 'test-klass')
44
+
45
+ delegating_logger.warn
46
+ end
47
+
48
+ it 'should delegate INFO calls' do
49
+ expect(delegate1).to receive(:add).with(Logger::INFO, nil, 'test-klass')
50
+ expect(delegate2).to receive(:add).with(Logger::INFO, nil, 'test-klass')
51
+
52
+ delegating_logger.info
53
+ end
54
+
55
+ it 'should delegate DEBUG calls' do
56
+ expect(delegate1).to receive(:add).with(Logger::DEBUG, nil, 'test-klass')
57
+ expect(delegate2).to receive(:add).with(Logger::DEBUG, nil, 'test-klass')
58
+
59
+ delegating_logger.debug
60
+ end
61
+
62
+ end
@@ -0,0 +1,262 @@
1
+ # Encoding: utf-8
2
+ # Copyright 2013-2014 the original author or authors.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require 'spec_helper'
17
+ require 'buildpack_support/configuration_utils'
18
+ require 'buildpack_support/logging/logger_factory'
19
+ require 'buildpack_support/test/console_helper'
20
+ require 'buildpack_support/test/logging_helper'
21
+
22
+ describe BuildpackSupport::Logging::LoggerFactory do
23
+ include_context 'console_helper'
24
+ include_context 'logging_helper'
25
+
26
+ let(:logger) { described_class.instance.get_logger String }
27
+
28
+ it 'should maintain backwards compatibility' do
29
+ expect(described_class.get_logger String).to be
30
+ end
31
+
32
+ it 'should log all levels to file',
33
+ log_level: 'FATAL' do
34
+
35
+ trigger
36
+
37
+ expect(log_contents).to match(/DEBUG block-debug-message/)
38
+ expect(log_contents).to match(/INFO block-info-message/)
39
+ expect(log_contents).to match(/WARN block-warn-message/)
40
+ expect(log_contents).to match(/ERROR block-error-message/)
41
+ expect(log_contents).to match(/FATAL block-fatal-message/)
42
+
43
+ expect(log_contents).to match(/DEBUG param-debug-message/)
44
+ expect(log_contents).to match(/INFO param-info-message/)
45
+ expect(log_contents).to match(/WARN param-warn-message/)
46
+ expect(log_contents).to match(/ERROR param-error-message/)
47
+ expect(log_contents).to match(/FATAL param-fatal-message/)
48
+ end
49
+
50
+ it 'should log all levels to console when BP_LOG_LEVEL set to DEBUG',
51
+ log_level: 'DEBUG' do
52
+
53
+ trigger
54
+
55
+ expect(stderr.string).to match(/DEBUG block-debug-message/)
56
+ expect(stderr.string).to match(/INFO block-info-message/)
57
+ expect(stderr.string).to match(/WARN block-warn-message/)
58
+ expect(stderr.string).to match(/ERROR block-error-message/)
59
+ expect(stderr.string).to match(/FATAL block-fatal-message/)
60
+
61
+ expect(stderr.string).to match(/DEBUG param-debug-message/)
62
+ expect(stderr.string).to match(/INFO param-info-message/)
63
+ expect(stderr.string).to match(/WARN param-warn-message/)
64
+ expect(stderr.string).to match(/ERROR param-error-message/)
65
+ expect(stderr.string).to match(/FATAL param-fatal-message/)
66
+ end
67
+
68
+ it 'should log all levels above INFO to console when BP_LOG_LEVEL set to INFO',
69
+ log_level: 'INFO' do
70
+
71
+ trigger
72
+
73
+ expect(stderr.string).not_to match(/DEBUG block-debug-message/)
74
+ expect(stderr.string).to match(/INFO block-info-message/)
75
+ expect(stderr.string).to match(/WARN block-warn-message/)
76
+ expect(stderr.string).to match(/ERROR block-error-message/)
77
+ expect(stderr.string).to match(/FATAL block-fatal-message/)
78
+
79
+ expect(stderr.string).not_to match(/DEBUG param-debug-message/)
80
+ expect(stderr.string).to match(/INFO param-info-message/)
81
+ expect(stderr.string).to match(/WARN param-warn-message/)
82
+ expect(stderr.string).to match(/ERROR param-error-message/)
83
+ expect(stderr.string).to match(/FATAL param-fatal-message/)
84
+ end
85
+
86
+ it 'should log all levels above WARN to console when BP_LOG_LEVEL set to WARN',
87
+ log_level: 'WARN' do
88
+
89
+ trigger
90
+
91
+ expect(stderr.string).not_to match(/DEBUG block-debug-message/)
92
+ expect(stderr.string).not_to match(/INFO block-info-message/)
93
+ expect(stderr.string).to match(/WARN block-warn-message/)
94
+ expect(stderr.string).to match(/ERROR block-error-message/)
95
+ expect(stderr.string).to match(/FATAL block-fatal-message/)
96
+
97
+ expect(stderr.string).not_to match(/DEBUG param-debug-message/)
98
+ expect(stderr.string).not_to match(/INFO param-info-message/)
99
+ expect(stderr.string).to match(/WARN param-warn-message/)
100
+ expect(stderr.string).to match(/ERROR param-error-message/)
101
+ expect(stderr.string).to match(/FATAL param-fatal-message/)
102
+ end
103
+
104
+ it 'should log all levels above ERROR to console when BP_LOG_LEVEL set to ERROR',
105
+ log_level: 'ERROR' do
106
+
107
+ trigger
108
+
109
+ expect(stderr.string).not_to match(/DEBUG block-debug-message/)
110
+ expect(stderr.string).not_to match(/INFO block-info-message/)
111
+ expect(stderr.string).not_to match(/WARN block-warn-message/)
112
+ expect(stderr.string).to match(/ERROR block-error-message/)
113
+ expect(stderr.string).to match(/FATAL block-fatal-message/)
114
+
115
+ expect(stderr.string).not_to match(/DEBUG param-debug-message/)
116
+ expect(stderr.string).not_to match(/INFO param-info-message/)
117
+ expect(stderr.string).not_to match(/WARN param-warn-message/)
118
+ expect(stderr.string).to match(/ERROR param-error-message/)
119
+ expect(stderr.string).to match(/FATAL param-fatal-message/)
120
+ end
121
+
122
+ it 'should log FATAL to console when BP_LOG_LEVEL set to FATAL',
123
+ log_level: 'FATAL' do
124
+
125
+ trigger
126
+
127
+ expect(stderr.string).not_to match(/DEBUG block-debug-message/)
128
+ expect(stderr.string).not_to match(/INFO block-info-message/)
129
+ expect(stderr.string).not_to match(/WARN block-warn-message/)
130
+ expect(stderr.string).not_to match(/ERROR block-error-message/)
131
+ expect(stderr.string).to match(/FATAL block-fatal-message/)
132
+
133
+ expect(stderr.string).not_to match(/DEBUG param-debug-message/)
134
+ expect(stderr.string).not_to match(/INFO param-info-message/)
135
+ expect(stderr.string).not_to match(/WARN param-warn-message/)
136
+ expect(stderr.string).not_to match(/ERROR param-error-message/)
137
+ expect(stderr.string).to match(/FATAL param-fatal-message/)
138
+ end
139
+
140
+ it 'should log all levels to console when $DEBUG set',
141
+ :debug do
142
+
143
+ trigger
144
+
145
+ expect(stderr.string).to match(/DEBUG block-debug-message/)
146
+ expect(stderr.string).to match(/INFO block-info-message/)
147
+ expect(stderr.string).to match(/WARN block-warn-message/)
148
+ expect(stderr.string).to match(/ERROR block-error-message/)
149
+ expect(stderr.string).to match(/FATAL block-fatal-message/)
150
+
151
+ expect(stderr.string).to match(/DEBUG param-debug-message/)
152
+ expect(stderr.string).to match(/INFO param-info-message/)
153
+ expect(stderr.string).to match(/WARN param-warn-message/)
154
+ expect(stderr.string).to match(/ERROR param-error-message/)
155
+ expect(stderr.string).to match(/FATAL param-fatal-message/)
156
+
157
+ end
158
+
159
+ it 'should log all levels to console when $VERBOSE set',
160
+ :verbose do
161
+
162
+ trigger
163
+
164
+ expect(stderr.string).to match(/DEBUG block-debug-message/)
165
+ expect(stderr.string).to match(/INFO block-info-message/)
166
+ expect(stderr.string).to match(/WARN block-warn-message/)
167
+ expect(stderr.string).to match(/ERROR block-error-message/)
168
+ expect(stderr.string).to match(/FATAL block-fatal-message/)
169
+
170
+ expect(stderr.string).to match(/DEBUG param-debug-message/)
171
+ expect(stderr.string).to match(/INFO param-info-message/)
172
+ expect(stderr.string).to match(/WARN param-warn-message/)
173
+ expect(stderr.string).to match(/ERROR param-error-message/)
174
+ expect(stderr.string).to match(/FATAL param-fatal-message/)
175
+
176
+ end
177
+
178
+ it 'should return the log file' do
179
+ expect(described_class.instance.log_file).to eq(scratch_dir + '.buildpack.log')
180
+ end
181
+
182
+ context do
183
+
184
+ before do
185
+ allow_any_instance_of(BuildpackSupport::ConfigurationUtils).to receive(:load).with('logging')
186
+ .and_return('default_log_level' => 'DEBUG')
187
+ described_class.instance.setup scratch_dir
188
+ end
189
+
190
+ it 'should log all levels to console when default_log_level set to DEBUG in configuration file' do
191
+ trigger
192
+
193
+ expect(stderr.string).to match(/DEBUG block-debug-message/)
194
+ expect(stderr.string).to match(/INFO block-info-message/)
195
+ expect(stderr.string).to match(/WARN block-warn-message/)
196
+ expect(stderr.string).to match(/ERROR block-error-message/)
197
+ expect(stderr.string).to match(/FATAL block-fatal-message/)
198
+
199
+ expect(stderr.string).to match(/DEBUG param-debug-message/)
200
+ expect(stderr.string).to match(/INFO param-info-message/)
201
+ expect(stderr.string).to match(/WARN param-warn-message/)
202
+ expect(stderr.string).to match(/ERROR param-error-message/)
203
+ expect(stderr.string).to match(/FATAL param-fatal-message/)
204
+ end
205
+ end
206
+
207
+ context do
208
+
209
+ before do
210
+ allow_any_instance_of(BuildpackSupport::ConfigurationUtils).to receive(:load).with('logging').and_return({})
211
+ described_class.instance.setup scratch_dir
212
+ end
213
+
214
+ it 'should log all levels above INFO to console when no configuration has been set' do
215
+ trigger
216
+
217
+ expect(stderr.string).not_to match(/DEBUG block-debug-message/)
218
+ expect(stderr.string).to match(/INFO block-info-message/)
219
+ expect(stderr.string).to match(/WARN block-warn-message/)
220
+ expect(stderr.string).to match(/ERROR block-error-message/)
221
+ expect(stderr.string).to match(/FATAL block-fatal-message/)
222
+
223
+ expect(stderr.string).not_to match(/DEBUG param-debug-message/)
224
+ expect(stderr.string).to match(/INFO param-info-message/)
225
+ expect(stderr.string).to match(/WARN param-warn-message/)
226
+ expect(stderr.string).to match(/ERROR param-error-message/)
227
+ expect(stderr.string).to match(/FATAL param-fatal-message/)
228
+ end
229
+ end
230
+
231
+ context do
232
+
233
+ before do
234
+ described_class.instance.reset
235
+ end
236
+
237
+ it 'should raise an error if get_logger called and not yet initialized' do
238
+ expect { described_class.instance.get_logger String }
239
+ .to raise_error 'Attempted to get Logger for String before initialization'
240
+ end
241
+
242
+ it 'should raise an error if log_file called and not yet initialized' do
243
+ expect { described_class.instance.log_file }
244
+ .to raise_error 'Attempted to get log file before initialization'
245
+ end
246
+ end
247
+
248
+ def trigger
249
+ logger.debug { 'block-debug-message' }
250
+ logger.info { 'block-info-message' }
251
+ logger.warn { 'block-warn-message' }
252
+ logger.error { 'block-error-message' }
253
+ logger.fatal { 'block-fatal-message' }
254
+
255
+ logger.debug 'param-debug-message'
256
+ logger.info 'param-info-message'
257
+ logger.warn 'param-warn-message'
258
+ logger.error 'param-error-message'
259
+ logger.fatal 'param-fatal-message'
260
+ end
261
+
262
+ end
@@ -0,0 +1,42 @@
1
+ # Encoding: utf-8
2
+ # Copyright 2013-2014 the original author or authors.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require 'spec_helper'
17
+ require 'buildpack_support/qualify_path'
18
+
19
+ describe 'qualify_path' do
20
+
21
+ let(:pathQualifier) { StubPathQualifierClass.new }
22
+
23
+ it 'should return a path relative to the provided path' do
24
+ foo = Pathname.new('/foo')
25
+ bar = Pathname.new('/bar/bam')
26
+ expect(pathQualifier.qualify_path(foo, bar)).to eq('$PWD/../../foo')
27
+ end
28
+
29
+ it 'should return a path relative to the droplet root' do
30
+ foo = Pathname.new('/droplet/foo')
31
+ expect(pathQualifier.qualify_path(foo)).to eq('$PWD/foo')
32
+ end
33
+
34
+ end
35
+
36
+ class StubPathQualifierClass
37
+ include BuildpackSupport::QualifyPath
38
+
39
+ def initialize
40
+ @droplet_root = Pathname.new('/droplet')
41
+ end
42
+ end
@@ -0,0 +1,88 @@
1
+ # Encoding: utf-8
2
+ # Copyright 2013-2014 the original author or authors.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require 'spec_helper'
17
+ require 'buildpack_support/rake/buildpack_stage_task'
18
+ require 'buildpack_support/test/console_helper'
19
+ require 'buildpack_support/test/scratch_helper'
20
+ require 'rake'
21
+ require 'rake/clean'
22
+
23
+ describe BuildpackSupport::Rake::BuildpackStageTask do
24
+ include_context 'console_helper'
25
+ include_context 'scratch_helper'
26
+
27
+ before { Rake::Task.clear }
28
+
29
+ let(:task) do
30
+ described_class.new do |t|
31
+ t.files = Dir['spec/fixtures/zip-contents/**/*']
32
+ t.package_name = 'test-package-name'
33
+ t.staging_dir = scratch_dir
34
+ end
35
+ end
36
+
37
+ it 'should raise an error if files is not specified' do
38
+ expect { described_class.new }.to raise_error('files must be configured')
39
+ end
40
+
41
+ it 'should raise an error if package_name is not specified' do
42
+ expect do
43
+ described_class.new do |t|
44
+ t.files = []
45
+ end
46
+ end.to raise_error('package_name must be configured')
47
+ end
48
+
49
+ it 'should raise an error if staging_dir is not specified' do
50
+ expect do
51
+ described_class.new do |t|
52
+ t.files = []
53
+ t.package_name = 'test-package-name'
54
+ end
55
+ end.to raise_error('staging_dir must be configured')
56
+ end
57
+
58
+ it 'should call block if provided' do
59
+ called = false
60
+
61
+ described_class.new do |t|
62
+ t.files = []
63
+ t.package_name = 'test-package-name'
64
+ t.staging_dir = ''
65
+ called = true
66
+ end
67
+
68
+ expect(called).to be
69
+ end
70
+
71
+ it 'should create staging_dir tasks for all files and no directories' do
72
+ task
73
+
74
+ expect(Rake::Task.task_defined?(scratch_dir + 'spec/fixtures/zip-contents/test-file')).to be
75
+ expect(Rake::Task.task_defined?(scratch_dir + 'spec/fixtures/zip-contents/test-directory')).not_to be
76
+ expect(Rake::Task.task_defined?(scratch_dir + 'spec/fixtures/zip-contents/test-directory/test-deep-file')).to be
77
+ end
78
+
79
+ it 'should copy files' do
80
+ task
81
+
82
+ target = scratch_dir + 'spec/fixtures/zip-contents/test-directory/test-deep-file'
83
+ Rake::Task[target].invoke
84
+
85
+ expect(target).to exist
86
+ end
87
+
88
+ end