rspec-terraspace 0.0.0 → 0.2.3
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +20 -0
- data/Gemfile +4 -0
- data/lib/rspec/terraspace.rb +6 -1
- data/lib/rspec/terraspace/helpers.rb +7 -0
- data/lib/rspec/terraspace/project.rb +80 -12
- data/lib/rspec/terraspace/ts.rb +17 -11
- data/lib/rspec/terraspace/version.rb +1 -1
- data/lib/templates/bootstrap/.rspec +3 -0
- data/lib/templates/bootstrap/spec/spec_helper.rb +13 -0
- data/lib/templates/module/test/.rspec +3 -0
- data/lib/templates/module/test/Gemfile.tt +9 -0
- data/lib/templates/module/test/spec/main_spec.rb.tt +25 -0
- data/lib/templates/module/test/spec/spec_helper.rb +18 -0
- data/lib/templates/project/spec/%test_name%_spec.rb.tt +5 -0
- data/lib/templates/stack/test/.rspec +3 -0
- data/lib/templates/stack/test/Gemfile.tt +9 -0
- data/lib/templates/stack/test/spec/fixtures/config/app.rb +4 -0
- data/lib/templates/stack/test/spec/fixtures/config/terraform/provider.tf.tt +5 -0
- data/lib/templates/stack/test/spec/fixtures/tfvars/%name%.tfvars +1 -0
- data/lib/templates/stack/test/spec/main_spec.rb.tt +30 -0
- data/lib/templates/stack/test/spec/spec_helper.rb +18 -0
- metadata +18 -4
- data/Gemfile.lock +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 42c4017e3ddd5cd3cfd9cdf4d6e59582ecaadbe6f1cf34df7d2c56c8180a9e8f
|
4
|
+
data.tar.gz: f9fba8a8ffa4d70071a04f487fadf519d174dff1665572d6dbf86652048d7eca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8296689a8b23250cd37e2e9823b761a3529063adddffc45d7a76f685769702eafbb4d38d6df1911565c2c6a4a457b297bc8417d1de273afa67382a321df6c7d
|
7
|
+
data.tar.gz: 1e835b72584ba6a459555645b5791f8f3f63782c48d01639caf3487c31129da149463ae69f3c3f352bafe27f054c0c5e2795126390e5bbd3dc92f05ee9c89da7
|
data/.gitignore
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
This project *tries* to adhere to [Semantic Versioning](http://semver.org/).
|
5
|
+
|
6
|
+
## [0.2.3] - 2021-05-31
|
7
|
+
- [#4](https://github.com/boltops-tools/rspec-terraspace/pull/4) fix module test generator
|
8
|
+
|
9
|
+
## [0.2.2] - 2020-11-17
|
10
|
+
- fix outputs helper and templates
|
11
|
+
|
12
|
+
## [0.2.1] - 2020-11-16
|
13
|
+
- [#3](https://github.com/boltops-tools/rspec-terraspace/pull/3) add config terraform provider template for azure test
|
14
|
+
|
15
|
+
## [0.2.0] - 2020-11-15
|
16
|
+
- [#2](https://github.com/boltops-tools/rspec-terraspace/pull/2) stack test like module test template, reconfigure logger
|
17
|
+
- stack test like module test template, reconfigure logger
|
18
|
+
|
19
|
+
## [0.1.0]
|
20
|
+
- Initial release
|
data/Gemfile
CHANGED
data/lib/rspec/terraspace.rb
CHANGED
@@ -12,6 +12,11 @@ RSpec::Terraspace::Autoloader.setup
|
|
12
12
|
module Rspec
|
13
13
|
module Terraspace
|
14
14
|
class Error < StandardError; end
|
15
|
-
# Your code goes here...
|
16
15
|
end
|
17
16
|
end
|
17
|
+
|
18
|
+
require "terraspace"
|
19
|
+
|
20
|
+
Terraspace::Tester.register("rspec",
|
21
|
+
root: File.expand_path("../..", __dir__)
|
22
|
+
)
|
@@ -2,6 +2,13 @@ module RSpec::Terraspace
|
|
2
2
|
module Helpers
|
3
3
|
extend Memoist
|
4
4
|
|
5
|
+
def reconfigure_logging(level="info")
|
6
|
+
path = "/tmp/terraspace/log/test.log"
|
7
|
+
FileUtils.mkdir_p(File.dirname(path))
|
8
|
+
Terraspace.logger = Terraspace::Logger.new(path)
|
9
|
+
puts "Terraspace.logger has been reconfigured to #{path}"
|
10
|
+
end
|
11
|
+
|
5
12
|
def ts
|
6
13
|
Ts.new
|
7
14
|
end
|
@@ -5,41 +5,105 @@ module RSpec::Terraspace
|
|
5
5
|
class Project
|
6
6
|
def initialize(options={})
|
7
7
|
@options = options
|
8
|
-
@name = options[:name]
|
8
|
+
@name = options[:name]
|
9
|
+
@config = options[:config]
|
9
10
|
@modules = options[:modules]
|
10
11
|
@stacks = options[:stacks]
|
12
|
+
@tfvars = options[:tfvars]
|
13
|
+
@folders = options[:folders]
|
11
14
|
|
12
15
|
@remove_test_folder = options[:remove_test_folder].nil? ? true : options[:remove_test_folder]
|
13
16
|
end
|
14
17
|
|
15
18
|
def create
|
19
|
+
puts "Building test harness at: #{build_dir}"
|
16
20
|
clean
|
17
21
|
build_project
|
22
|
+
build_config
|
18
23
|
build_modules
|
19
24
|
build_stacks
|
20
|
-
|
25
|
+
build_tfvars
|
26
|
+
build_folders
|
27
|
+
puts "Test harness built."
|
21
28
|
build_dir
|
22
29
|
end
|
23
30
|
|
31
|
+
# folders at any-level, including top-level can be copied with the folders option
|
32
|
+
def build_folders
|
33
|
+
return unless @folders
|
34
|
+
|
35
|
+
@folders.each do |folder|
|
36
|
+
dest = "#{build_dir}/#{folder}"
|
37
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
38
|
+
FileUtils.cp_r(folder, dest)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
24
42
|
def build_project
|
25
43
|
parent_dir = File.dirname(build_dir)
|
26
44
|
FileUtils.mkdir_p(parent_dir)
|
27
45
|
Dir.chdir(parent_dir) do
|
28
46
|
project_name = File.basename(build_dir)
|
29
|
-
::Terraspace::CLI::New::Project.start([project_name])
|
47
|
+
::Terraspace::CLI::New::Project.start([project_name, "--no-config", "--quiet"])
|
30
48
|
end
|
49
|
+
end
|
31
50
|
|
32
|
-
|
33
|
-
|
34
|
-
|
51
|
+
def build_config
|
52
|
+
return unless @config
|
53
|
+
|
54
|
+
config_folder = "#{build_dir}/config"
|
55
|
+
FileUtils.rm_rf(config_folder) # wipe current config folder
|
56
|
+
FileUtils.mkdir_p(File.dirname(config_folder))
|
57
|
+
src = @config
|
58
|
+
FileUtils.cp_r(src, config_folder)
|
35
59
|
end
|
36
60
|
|
37
61
|
def build_modules
|
38
|
-
|
62
|
+
return unless @modules
|
63
|
+
build_type_folder("modules", @modules)
|
39
64
|
end
|
40
65
|
|
41
66
|
def build_stacks
|
42
|
-
|
67
|
+
return unless @stacks
|
68
|
+
build_type_folder("stacks", @stacks)
|
69
|
+
end
|
70
|
+
|
71
|
+
# If a file has been supplied, then it gets copied over.
|
72
|
+
#
|
73
|
+
# # File
|
74
|
+
# terraspace.build_test_harness(
|
75
|
+
# tfvars: {demo: "spec/fixtures/tfvars/demo.tfvars"},
|
76
|
+
# end
|
77
|
+
#
|
78
|
+
# # Results in:
|
79
|
+
# app/stacks/#{stack}/tfvars/test.tfvars
|
80
|
+
#
|
81
|
+
# If a directory has been supplied, then the folder fully gets copied over.
|
82
|
+
#
|
83
|
+
# # Directory
|
84
|
+
# terraspace.build_test_harness(
|
85
|
+
# tfvars: {demo: "spec/fixtures/tfvars/demo"},
|
86
|
+
# end
|
87
|
+
#
|
88
|
+
# # Results in (whatever is in the folder):
|
89
|
+
# app/stacks/#{stack}/tfvars/base.tfvars
|
90
|
+
# app/stacks/#{stack}/tfvars/test.tfvars
|
91
|
+
#
|
92
|
+
def build_tfvars
|
93
|
+
return unless @tfvars
|
94
|
+
@tfvars.each do |stack, src|
|
95
|
+
tfvars_folder = "#{build_dir}/app/stacks/#{stack}/tfvars"
|
96
|
+
FileUtils.rm_rf(tfvars_folder) # wipe current tfvars folder. dont use any of the live values
|
97
|
+
|
98
|
+
if File.directory?(src)
|
99
|
+
FileUtils.mkdir_p(File.dirname(tfvars_folder))
|
100
|
+
FileUtils.cp_r(src, tfvars_folder)
|
101
|
+
else # if only a single file, then generate a test.tfvars since this runs under TS_ENV=test
|
102
|
+
dest = "#{tfvars_folder}/test.tfvars"
|
103
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
104
|
+
FileUtils.cp(src, dest)
|
105
|
+
end
|
106
|
+
end
|
43
107
|
end
|
44
108
|
|
45
109
|
# Inputs:
|
@@ -58,7 +122,7 @@ module RSpec::Terraspace
|
|
58
122
|
# If provide a String, it should be a path to folder containing all modules or stacks.
|
59
123
|
# This provides less fine-grain control but is easier to use and shorter.
|
60
124
|
#
|
61
|
-
def
|
125
|
+
def build_type_folder(type_dir, list)
|
62
126
|
case list
|
63
127
|
when Hash
|
64
128
|
list.each do |name, src|
|
@@ -89,11 +153,15 @@ module RSpec::Terraspace
|
|
89
153
|
end
|
90
154
|
|
91
155
|
def build_dir
|
92
|
-
"#{
|
156
|
+
"#{tmp_root}/#{@name}"
|
157
|
+
end
|
158
|
+
|
159
|
+
def tmp_root
|
160
|
+
self.class.tmp_root
|
93
161
|
end
|
94
162
|
|
95
|
-
def
|
96
|
-
|
163
|
+
def self.tmp_root
|
164
|
+
"#{Terraspace.tmp_root}/test-harnesses"
|
97
165
|
end
|
98
166
|
end
|
99
167
|
end
|
data/lib/rspec/terraspace/ts.rb
CHANGED
@@ -7,14 +7,16 @@ module RSpec::Terraspace
|
|
7
7
|
CLI = ::Terraspace::CLI
|
8
8
|
|
9
9
|
def build_test_harness(options={})
|
10
|
-
puts "Building test harness..."
|
11
10
|
project = Project.new(options)
|
12
|
-
|
13
|
-
|
11
|
+
root = project.create
|
12
|
+
Terraspace.root = root # switch root to the generated test harness
|
14
13
|
end
|
15
14
|
|
16
15
|
def up(args)
|
17
16
|
run("up #{args} -y")
|
17
|
+
mod = args.split(' ').first
|
18
|
+
@mod = ::Terraspace::Mod.new(mod)
|
19
|
+
save_output
|
18
20
|
end
|
19
21
|
|
20
22
|
def down(args)
|
@@ -22,23 +24,27 @@ module RSpec::Terraspace
|
|
22
24
|
end
|
23
25
|
|
24
26
|
def run(command)
|
27
|
+
puts "=> terraspace #{command}".color(:green)
|
25
28
|
args = command.split(' ')
|
26
29
|
CLI.start(args)
|
27
30
|
end
|
28
31
|
|
29
|
-
|
30
|
-
|
32
|
+
# Note: a terraspace.down will remove the output.json since it does a clean
|
33
|
+
def save_output
|
34
|
+
FileUtils.mkdir_p(File.dirname(out_path))
|
35
|
+
run("output #{@mod.name} --format json --out #{out_path}")
|
31
36
|
end
|
32
|
-
memoize :save_output
|
33
37
|
|
34
38
|
def output(mod, name)
|
35
|
-
|
36
|
-
data = JSON.load(IO.read(saved_output_path))
|
37
|
-
data.dig(name, "value")
|
39
|
+
outputs.dig(name, "value")
|
38
40
|
end
|
39
41
|
|
40
|
-
def
|
41
|
-
|
42
|
+
def outputs
|
43
|
+
JSON.load(IO.read(out_path))
|
44
|
+
end
|
45
|
+
|
46
|
+
def out_path
|
47
|
+
"#{Terraspace.tmp_root}/rspec/output.json"
|
42
48
|
end
|
43
49
|
end
|
44
50
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
describe "main" do
|
2
|
+
before(:all) do
|
3
|
+
reconfigure_logging # reconfigure Terraspace.logger to a file
|
4
|
+
mod_path = File.expand_path("../..", __dir__) # the source of the module to test is 2 levels up
|
5
|
+
# Build terraspace project to use as a test harness
|
6
|
+
# Will be located at: /tmp/terraspace/test-harnesses/<%= name %>-harness
|
7
|
+
terraspace.build_test_harness(
|
8
|
+
name: "<%= name %>-harness",
|
9
|
+
modules: {<%= name %>: mod_path},
|
10
|
+
)
|
11
|
+
terraspace.up("<%= name %>")
|
12
|
+
end
|
13
|
+
after(:all) do
|
14
|
+
terraspace.down("<%= name %>")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "successful deploy" do
|
18
|
+
# Replace with your own test
|
19
|
+
expect(true).to be true
|
20
|
+
# Example
|
21
|
+
# pp terraspace.outputs
|
22
|
+
# output_value = terraspace.output("<%= name %>", "some-output")
|
23
|
+
# expect(output_value).to include("some-value")
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
ENV["TS_ENV"] = "test"
|
2
|
+
|
3
|
+
require "terraspace"
|
4
|
+
require "rspec/terraspace"
|
5
|
+
|
6
|
+
module Helper
|
7
|
+
def execute(cmd)
|
8
|
+
puts "Running: #{cmd}" if ENV['SHOW_COMMAND']
|
9
|
+
out = `#{cmd}`
|
10
|
+
puts out if ENV['SHOW_COMMAND']
|
11
|
+
out
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
RSpec.configure do |c|
|
16
|
+
c.include Helper
|
17
|
+
c.include RSpec::Terraspace::Helpers
|
18
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
# This is where you put your tfvars
|
@@ -0,0 +1,30 @@
|
|
1
|
+
describe "main" do
|
2
|
+
before(:all) do
|
3
|
+
reconfigure_logging # reconfigure Terraspace.logger to a file
|
4
|
+
stack_path = File.expand_path("../..", __dir__) # the source of the stack to test is 2 levels up
|
5
|
+
ts_root = File.expand_path("../../..", stack_path) # original Terraspace.root
|
6
|
+
# Build terraspace project to use as a test harness
|
7
|
+
# Will be located at: /tmp/terraspace/test-harnesses/<%= name %>-harness
|
8
|
+
terraspace.build_test_harness(
|
9
|
+
name: "<%= name %>-harness",
|
10
|
+
modules: "#{ts_root}/app/modules", # include all modules in folder
|
11
|
+
stacks: {<%= name %>: stack_path},
|
12
|
+
# override demo stack tfvars for testing
|
13
|
+
tfvars: {demo: "#{stack_path}/test/spec/fixtures/tfvars/demo.tfvars"},
|
14
|
+
config: "#{stack_path}/test/spec/fixtures/config",
|
15
|
+
)
|
16
|
+
terraspace.up("<%= name %>")
|
17
|
+
end
|
18
|
+
after(:all) do
|
19
|
+
terraspace.down("<%= name %>")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "successful deploy" do
|
23
|
+
# Replace with your own test
|
24
|
+
expect(true).to be true
|
25
|
+
# Example
|
26
|
+
# pp terraspace.outputs
|
27
|
+
# output_value = terraspace.output("<%= name %>", "some-output")
|
28
|
+
# expect(output_value).to include("some-value")
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
ENV["TS_ENV"] = "test"
|
2
|
+
|
3
|
+
require "terraspace"
|
4
|
+
require "rspec/terraspace"
|
5
|
+
|
6
|
+
module Helper
|
7
|
+
def execute(cmd)
|
8
|
+
puts "Running: #{cmd}" if ENV['SHOW_COMMAND']
|
9
|
+
out = `#{cmd}`
|
10
|
+
puts out if ENV['SHOW_COMMAND']
|
11
|
+
out
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
RSpec.configure do |c|
|
16
|
+
c.include Helper
|
17
|
+
c.include RSpec::Terraspace::Helpers
|
18
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-terraspace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -89,8 +89,8 @@ extra_rdoc_files: []
|
|
89
89
|
files:
|
90
90
|
- ".gitignore"
|
91
91
|
- ".rspec"
|
92
|
+
- CHANGELOG.md
|
92
93
|
- Gemfile
|
93
|
-
- Gemfile.lock
|
94
94
|
- LICENSE.txt
|
95
95
|
- README.md
|
96
96
|
- Rakefile
|
@@ -102,6 +102,20 @@ files:
|
|
102
102
|
- lib/rspec/terraspace/project.rb
|
103
103
|
- lib/rspec/terraspace/ts.rb
|
104
104
|
- lib/rspec/terraspace/version.rb
|
105
|
+
- lib/templates/bootstrap/.rspec
|
106
|
+
- lib/templates/bootstrap/spec/spec_helper.rb
|
107
|
+
- lib/templates/module/test/.rspec
|
108
|
+
- lib/templates/module/test/Gemfile.tt
|
109
|
+
- lib/templates/module/test/spec/main_spec.rb.tt
|
110
|
+
- lib/templates/module/test/spec/spec_helper.rb
|
111
|
+
- lib/templates/project/spec/%test_name%_spec.rb.tt
|
112
|
+
- lib/templates/stack/test/.rspec
|
113
|
+
- lib/templates/stack/test/Gemfile.tt
|
114
|
+
- lib/templates/stack/test/spec/fixtures/config/app.rb
|
115
|
+
- lib/templates/stack/test/spec/fixtures/config/terraform/provider.tf.tt
|
116
|
+
- lib/templates/stack/test/spec/fixtures/tfvars/%name%.tfvars
|
117
|
+
- lib/templates/stack/test/spec/main_spec.rb.tt
|
118
|
+
- lib/templates/stack/test/spec/spec_helper.rb
|
105
119
|
- rspec-terraspace.gemspec
|
106
120
|
homepage: https://github.com/boltops-tools/rspec-terraspace
|
107
121
|
licenses:
|
@@ -122,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
136
|
- !ruby/object:Gem::Version
|
123
137
|
version: '0'
|
124
138
|
requirements: []
|
125
|
-
rubygems_version: 3.
|
139
|
+
rubygems_version: 3.2.5
|
126
140
|
signing_key:
|
127
141
|
specification_version: 4
|
128
142
|
summary: Terraspace RSpec support
|
data/Gemfile.lock
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
rspec-terraspace (0.1.0)
|
5
|
-
activesupport
|
6
|
-
memoist
|
7
|
-
rainbow
|
8
|
-
zeitwerk
|
9
|
-
|
10
|
-
GEM
|
11
|
-
remote: https://rubygems.org/
|
12
|
-
specs:
|
13
|
-
activesupport (6.0.3.1)
|
14
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
15
|
-
i18n (>= 0.7, < 2)
|
16
|
-
minitest (~> 5.1)
|
17
|
-
tzinfo (~> 1.1)
|
18
|
-
zeitwerk (~> 2.2, >= 2.2.2)
|
19
|
-
concurrent-ruby (1.1.6)
|
20
|
-
diff-lcs (1.3)
|
21
|
-
i18n (1.8.2)
|
22
|
-
concurrent-ruby (~> 1.0)
|
23
|
-
memoist (0.16.2)
|
24
|
-
minitest (5.14.1)
|
25
|
-
rainbow (3.0.0)
|
26
|
-
rake (12.3.3)
|
27
|
-
rspec (3.9.0)
|
28
|
-
rspec-core (~> 3.9.0)
|
29
|
-
rspec-expectations (~> 3.9.0)
|
30
|
-
rspec-mocks (~> 3.9.0)
|
31
|
-
rspec-core (3.9.2)
|
32
|
-
rspec-support (~> 3.9.3)
|
33
|
-
rspec-expectations (3.9.2)
|
34
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
35
|
-
rspec-support (~> 3.9.0)
|
36
|
-
rspec-mocks (3.9.1)
|
37
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
38
|
-
rspec-support (~> 3.9.0)
|
39
|
-
rspec-support (3.9.3)
|
40
|
-
thread_safe (0.3.6)
|
41
|
-
tzinfo (1.2.7)
|
42
|
-
thread_safe (~> 0.1)
|
43
|
-
zeitwerk (2.3.0)
|
44
|
-
|
45
|
-
PLATFORMS
|
46
|
-
ruby
|
47
|
-
|
48
|
-
DEPENDENCIES
|
49
|
-
rake (~> 12.0)
|
50
|
-
rspec (~> 3.0)
|
51
|
-
rspec-terraspace!
|
52
|
-
|
53
|
-
BUNDLED WITH
|
54
|
-
2.1.4
|