Class: Cutlass::CleanTestEnv

Inherits:
Object
  • Object
show all
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

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_envObject



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_imagesObject



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