1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
module IntegrationTestHelper
class Report
attr_reader :report
def initialize(raw)
@report = JSON.parse(raw, symbolize_names: true)
end
def [](key)
report[key]
end
def dependency_names
report[:dependencies].map { |x| x[:name] }
end
def licenses_for(name)
find(name)[:licenses]
end
def find(name)
report[:dependencies].find do |dependency|
dependency[:name] == name
end
end
def nil?
report.nil?
end
def to_hash
to_h
end
def to_h
report
end
end
class IntegrationTestRunner
attr_reader :project_path
def initialize(project_path = File.join(Dir.pwd, 'tmp', SecureRandom.uuid))
FileUtils.mkdir_p(project_path)
@project_path = project_path
end
def add_file(name, content = nil)
full_path = Pathname.new(File.join(project_path, name))
FileUtils.mkdir_p(full_path.dirname)
IO.write(full_path, block_given? ? yield : content)
end
def mount(dir:)
FileUtils.cp_r("#{dir}/.", project_path)
end
def clone(repo, branch: 'master')
if branch.match?(/\b[0-9a-f]{5,40}\b/)
execute({}, 'git', 'clone', '--quiet', repo, project_path)
Dir.chdir project_path do
execute({}, 'git', 'checkout', branch)
end
else
execute({}, 'git', 'clone', '--quiet', '--depth=1', '--single-branch', '--branch', branch, repo, project_path)
end
end
def scan(env: {})
return {} unless execute(env, './bin/docker-test', project_path)
report_path = "#{project_path}/gl-license-management-report.json"
return {} unless File.exist?(report_path)
Report.new(IO.read(report_path))
end
def execute(env = {}, *args)
Bundler.with_unbundled_env do
system(env, *args, exception: true)
end
end
def cleanup
FileUtils.rm_rf(project_path) if Dir.exist?(project_path)
end
end
def runner(*args)
@runner ||= IntegrationTestRunner.new(*args)
end
def add_host(name, ip)
return unless ENV['LM_HOME']
return if system("grep #{name} /etc/hosts")
system("echo '#{ip} #{name}' >> /etc/hosts")
end
end
|