Class: Cutlass::CleanTestEnv
- Inherits:
-
Object
- Object
- Cutlass::CleanTestEnv
- Defined in:
- lib/cutlass/clean_test_env.rb
Overview
Ensure that your environment variables and docker images aren’t leaking in tests
Docker image leaking is disabled by default in development. Set CUTLASS_CHECK_DOCKER in CI.
CleanTestEnv.record
CleanTestEnv.check(docker: true)
# => nil
BashResult.run("docker build .")
CleanTestEnv.check(docker: true)
# => Error: Docker images have leaked
The common practice is to use this in rspec hooks
config.before(:suite) do
Cutlass::CleanTestEnv.record
end
config.after(:suite) do
Cutlass::CleanTestEnv.check
end
Class Method Summary collapse
- .check(docker: ) ⇒ Object
- .check_env ⇒ Object
- .check_images ⇒ Object
- .record(docker: ) ⇒ Object
- .skip_key(key) ⇒ Object
Class Method Details
.check(docker: ) ⇒ Object
43 44 45 46 |
# File 'lib/cutlass/clean_test_env.rb', line 43 def self.check(docker: ENV["CUTLASS_CHECK_DOCKER"]) check_env check_images if docker end |
.check_env ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/cutlass/clean_test_env.rb', line 48 def self.check_env raise "Must call `record` first" if @env_diff.nil? return if @env_diff.same? raise " Something mutated the environment on accident\n\n Diff:\n \#{@env_diff}\n EOM\nend\n" |
.check_images ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/cutlass/clean_test_env.rb', line 60 def self.check_images diff = @docker_diff.call return if diff.same? raise " Docker images have leaked\n\n Your tests are generating docker images that were not cleaned up\n\n \#{diff}\n\n EOM\nend\n" |
.record(docker: ) ⇒ Object
38 39 40 41 |
# File 'lib/cutlass/clean_test_env.rb', line 38 def self.record(docker: ENV["CUTLASS_CHECK_DOCKER"]) @env_diff = EnvDiff.new(skip_keys: @skip_keys) @docker_diff = DockerDiff.new if docker end |
.skip_key(key) ⇒ Object
34 35 36 |
# File 'lib/cutlass/clean_test_env.rb', line 34 def self.skip_key(key) @skip_keys << key end |