moose-inventory 0.1.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.
- checksums.yaml +7 -0
- data/.coveralls.yml +0 -0
- data/.gitignore +17 -0
- data/.rubocop.yml +793 -0
- data/Gemfile +3 -0
- data/Guardfile +38 -0
- data/LICENSE.txt +22 -0
- data/README.md +31 -0
- data/README.md.orig +35 -0
- data/Rakefile +1 -0
- data/bin/moose_inventory +10 -0
- data/config/dotfiles/coveralls.yml +0 -0
- data/config/dotfiles/gitignore +17 -0
- data/config/dotfiles/rubocop.yml +793 -0
- data/lib/moose/inventory/cli/application.rb +30 -0
- data/lib/moose/inventory/cli/formatter.rb +92 -0
- data/lib/moose/inventory/cli/group.rb +23 -0
- data/lib/moose/inventory/cli/group_add.rb +98 -0
- data/lib/moose/inventory/cli/group_addchild.rb +21 -0
- data/lib/moose/inventory/cli/group_addhost.rb +97 -0
- data/lib/moose/inventory/cli/group_addvar.rb +72 -0
- data/lib/moose/inventory/cli/group_get.rb +52 -0
- data/lib/moose/inventory/cli/group_list.rb +41 -0
- data/lib/moose/inventory/cli/group_rm.rb +77 -0
- data/lib/moose/inventory/cli/group_rmchild.rb +20 -0
- data/lib/moose/inventory/cli/group_rmhost.rb +89 -0
- data/lib/moose/inventory/cli/group_rmvar.rb +65 -0
- data/lib/moose/inventory/cli/host.rb +24 -0
- data/lib/moose/inventory/cli/host_add.rb +93 -0
- data/lib/moose/inventory/cli/host_addgroup.rb +88 -0
- data/lib/moose/inventory/cli/host_addvar.rb +76 -0
- data/lib/moose/inventory/cli/host_get.rb +59 -0
- data/lib/moose/inventory/cli/host_list.rb +40 -0
- data/lib/moose/inventory/cli/host_rm.rb +62 -0
- data/lib/moose/inventory/cli/host_rmgroup.rb +80 -0
- data/lib/moose/inventory/cli/host_rmvar.rb +69 -0
- data/lib/moose/inventory/config/config.rb +169 -0
- data/lib/moose/inventory/db/db.rb +249 -0
- data/lib/moose/inventory/db/exceptions.rb +14 -0
- data/lib/moose/inventory/db/models.rb +32 -0
- data/lib/moose/inventory/moose_inventory_cli.rb +25 -0
- data/lib/moose/inventory/version.rb +7 -0
- data/moose-inventory.gemspec +45 -0
- data/scripts/guard_quality.sh +3 -0
- data/scripts/guard_test.sh +2 -0
- data/scripts/reports.sh +4 -0
- data/spec/config/config.yml +12 -0
- data/spec/lib/moose/inventory/cli/application_spec.rb +15 -0
- data/spec/lib/moose/inventory/cli/cli_spec.rb +26 -0
- data/spec/lib/moose/inventory/cli/formatter_spec.rb +63 -0
- data/spec/lib/moose/inventory/cli/group_add_spec.rb +398 -0
- data/spec/lib/moose/inventory/cli/group_addhost_spec.rb +251 -0
- data/spec/lib/moose/inventory/cli/group_addvar_spec.rb +235 -0
- data/spec/lib/moose/inventory/cli/group_get_spec.rb +107 -0
- data/spec/lib/moose/inventory/cli/group_list_spec.rb +79 -0
- data/spec/lib/moose/inventory/cli/group_rm_spec.rb +191 -0
- data/spec/lib/moose/inventory/cli/group_rmhost_spec.rb +215 -0
- data/spec/lib/moose/inventory/cli/group_rmvar_spec.rb +202 -0
- data/spec/lib/moose/inventory/cli/group_spec.rb +15 -0
- data/spec/lib/moose/inventory/cli/host_add_spec.rb +330 -0
- data/spec/lib/moose/inventory/cli/host_addgroup_spec.rb +248 -0
- data/spec/lib/moose/inventory/cli/host_addvar_spec.rb +233 -0
- data/spec/lib/moose/inventory/cli/host_get_spec.rb +106 -0
- data/spec/lib/moose/inventory/cli/host_list_spec.rb +83 -0
- data/spec/lib/moose/inventory/cli/host_rm_spec.rb +132 -0
- data/spec/lib/moose/inventory/cli/host_rmgroup_spec.rb +245 -0
- data/spec/lib/moose/inventory/cli/host_rmvar_spec.rb +206 -0
- data/spec/lib/moose/inventory/cli/host_spec.rb +12 -0
- data/spec/lib/moose/inventory/config/config_spec.rb +80 -0
- data/spec/lib/moose/inventory/db/db_spec.rb +184 -0
- data/spec/lib/moose/inventory/db/models_spec.rb +150 -0
- data/spec/shared/shared_config_setup.rb +21 -0
- data/spec/spec_helper.rb +110 -0
- metadata +386 -0
@@ -0,0 +1,206 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
# TODO: the usual respond_to? method doesn't seem to work on Thor objects.
|
4
|
+
# Why not? For now, we'll check against instance_methods.
|
5
|
+
|
6
|
+
RSpec.describe Moose::Inventory::Cli::Host do
|
7
|
+
before(:all) do
|
8
|
+
# Set up the configuration object
|
9
|
+
@mockarg_parts = {
|
10
|
+
config: File.join(spec_root, 'config/config.yml'),
|
11
|
+
format: 'yaml',
|
12
|
+
env: 'test'
|
13
|
+
}
|
14
|
+
|
15
|
+
@mockargs = []
|
16
|
+
@mockarg_parts.each do |key, val|
|
17
|
+
@mockargs << "--#{key}"
|
18
|
+
@mockargs << val
|
19
|
+
end
|
20
|
+
|
21
|
+
@config = Moose::Inventory::Config
|
22
|
+
@config.init(@mockargs)
|
23
|
+
|
24
|
+
@db = Moose::Inventory::DB
|
25
|
+
@db.init if @db.db.nil?
|
26
|
+
|
27
|
+
@console = Moose::Inventory::Cli::Formatter
|
28
|
+
@host = Moose::Inventory::Cli::Host
|
29
|
+
@app = Moose::Inventory::Cli::Application
|
30
|
+
end
|
31
|
+
|
32
|
+
before(:each) do
|
33
|
+
@db.reset
|
34
|
+
end
|
35
|
+
|
36
|
+
describe 'rmvar' do
|
37
|
+
it 'should be responsive' do
|
38
|
+
result = @host.instance_methods(false).include?(:rmvar)
|
39
|
+
expect(result).to eq(true)
|
40
|
+
end
|
41
|
+
|
42
|
+
#-----------------
|
43
|
+
it '<missing args> ... should abort with an error' do
|
44
|
+
actual = runner do
|
45
|
+
@app.start(%w(host rmvar)) # <- no group given
|
46
|
+
end
|
47
|
+
|
48
|
+
# Check output
|
49
|
+
desired = { aborted: true}
|
50
|
+
desired[:STDERR] = "ERROR: Wrong number of arguments, 0 for 2 or more.\n"
|
51
|
+
expected(actual, desired)
|
52
|
+
end
|
53
|
+
|
54
|
+
#------------------------
|
55
|
+
it 'HOST key=value ... should abort if the host does not exist' do
|
56
|
+
host_name = "not-a-host"
|
57
|
+
var_name = "foo=bar"
|
58
|
+
actual = runner do
|
59
|
+
@app.start(%W(host rmvar #{host_name} #{var_name}))
|
60
|
+
end
|
61
|
+
|
62
|
+
# Check output
|
63
|
+
desired = { aborted: true}
|
64
|
+
desired[:STDOUT] =
|
65
|
+
"Remove variable(s) '#{var_name}' from host '#{host_name}':\n"\
|
66
|
+
" - retrieve host '#{host_name}'...\n"
|
67
|
+
desired[:STDERR] =
|
68
|
+
"An error occurred during a transaction, any changes have been rolled back.\n"\
|
69
|
+
"ERROR: The host '#{host_name}' does not exist.\n"
|
70
|
+
expected(actual, desired)
|
71
|
+
end
|
72
|
+
|
73
|
+
#------------------------
|
74
|
+
it 'HOST <malformed> ... should abort with an error' do
|
75
|
+
# 1. Should add the var to the db
|
76
|
+
# 2. Should associate the host with the var
|
77
|
+
|
78
|
+
host_name = 'test1'
|
79
|
+
@db.models[:host].create(name: host_name)
|
80
|
+
|
81
|
+
var = {name: 'foo', value: "bar"}
|
82
|
+
cases = %W(
|
83
|
+
=bar
|
84
|
+
foo=bar=
|
85
|
+
=foo=bar
|
86
|
+
foo=bar=extra
|
87
|
+
)
|
88
|
+
|
89
|
+
cases.each do |args|
|
90
|
+
actual = runner do
|
91
|
+
@app.start(%W(host rmvar #{host_name} #{args} ))
|
92
|
+
end
|
93
|
+
#@console.out(actual,'p')
|
94
|
+
|
95
|
+
desired = { aborted: true}
|
96
|
+
desired[:STDOUT] =
|
97
|
+
"Remove variable(s) '#{args}' from host '#{host_name}':\n"\
|
98
|
+
" - retrieve host '#{host_name}'...\n"\
|
99
|
+
" - OK\n"\
|
100
|
+
" - remove variable '#{args}'...\n"
|
101
|
+
desired[:STDERR] =
|
102
|
+
"An error occurred during a transaction, any changes have been rolled back.\n"\
|
103
|
+
"ERROR: Incorrect format in {#{args}}. Expected 'key' or 'key=value'.\n"
|
104
|
+
|
105
|
+
expected(actual, desired)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
#------------------------
|
110
|
+
it 'host rmvar HOST <valid args> ... should remove the host variable' do
|
111
|
+
# 1. Should add the var to the db
|
112
|
+
# 2. Should associate the host with the var
|
113
|
+
|
114
|
+
host_name = 'test1'
|
115
|
+
|
116
|
+
var = {name: 'foo', value: "bar"}
|
117
|
+
cases = %W(
|
118
|
+
#{var[:name]}
|
119
|
+
#{var[:name]}=
|
120
|
+
#{var[:name]}=#{var[:value]}
|
121
|
+
)
|
122
|
+
cases.each do |example|
|
123
|
+
# reset the db
|
124
|
+
@db.reset
|
125
|
+
|
126
|
+
# Add an initial host and hostvar
|
127
|
+
@db.models[:host].create(name: host_name)
|
128
|
+
runner do
|
129
|
+
@app.start(%W(host addvar #{host_name} #{var[:name]}=#{var[:value]} ))
|
130
|
+
end
|
131
|
+
|
132
|
+
# Try to remove the hostvar using the case example valid args
|
133
|
+
actual = runner do
|
134
|
+
@app.start(%W(host rmvar #{host_name} #{example}))
|
135
|
+
end
|
136
|
+
#@console.out(actual,'p')
|
137
|
+
|
138
|
+
# Check the output
|
139
|
+
desired = { aborted: false}
|
140
|
+
desired[:STDOUT] =
|
141
|
+
"Remove variable(s) '#{example}' from host '#{host_name}':\n"\
|
142
|
+
" - retrieve host '#{host_name}'...\n"\
|
143
|
+
" - OK\n"\
|
144
|
+
" - remove variable '#{example}'...\n"\
|
145
|
+
" - OK\n"\
|
146
|
+
" - all OK\n"\
|
147
|
+
"Succeeded.\n"
|
148
|
+
|
149
|
+
#@console.out(desired,'p')
|
150
|
+
expected(actual, desired)
|
151
|
+
|
152
|
+
# Check the db
|
153
|
+
host = @db.models[:host].find(name: host_name)
|
154
|
+
hostvars = host.hostvars_dataset
|
155
|
+
expect(hostvars.count).to eq(0)
|
156
|
+
|
157
|
+
hostvars = @db.models[:hostvar].all
|
158
|
+
expect(hostvars.count).to eq(0)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
#------------------------
|
163
|
+
it 'HOST key1=value1 key2=value2 ... should remove multiple key/value pairs' do
|
164
|
+
host_name = 'test1'
|
165
|
+
varsarray = [
|
166
|
+
{name: 'var1', value: "val1"},
|
167
|
+
{name: 'var2', value: "val2"}
|
168
|
+
]
|
169
|
+
|
170
|
+
vars = []
|
171
|
+
varsarray.each do |var|
|
172
|
+
vars << "#{var[:name]}=#{var[:value]}"
|
173
|
+
end
|
174
|
+
|
175
|
+
@db.models[:host].create(name: host_name)
|
176
|
+
actual = runner do
|
177
|
+
@app.start(%W(host addvar #{host_name}) + vars )
|
178
|
+
end
|
179
|
+
|
180
|
+
actual = runner do
|
181
|
+
@app.start(%W(host rmvar #{host_name}) + vars )
|
182
|
+
end
|
183
|
+
#@console.out(actual,'p')
|
184
|
+
|
185
|
+
desired = { aborted: false}
|
186
|
+
desired[:STDOUT] =
|
187
|
+
"Remove variable(s) '#{vars.join(',')}' from host '#{host_name}':\n"\
|
188
|
+
" - retrieve host '#{host_name}'...\n"\
|
189
|
+
" - OK\n"
|
190
|
+
vars.each do |var|
|
191
|
+
desired[:STDOUT] = desired[:STDOUT] +
|
192
|
+
" - remove variable '#{var}'...\n"\
|
193
|
+
" - OK\n"
|
194
|
+
end
|
195
|
+
desired[:STDOUT] = desired[:STDOUT] +
|
196
|
+
" - all OK\n"\
|
197
|
+
"Succeeded.\n"
|
198
|
+
expected(actual, desired)
|
199
|
+
|
200
|
+
# We should have the correct hostvar associations
|
201
|
+
host = @db.models[:host].find(name: host_name)
|
202
|
+
hostvars = host.hostvars_dataset
|
203
|
+
expect(hostvars.count).to eq(0)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require_relative 'host_add_spec'
|
4
|
+
require_relative 'host_get_spec'
|
5
|
+
require_relative 'host_list_spec'
|
6
|
+
require_relative 'host_rm_spec'
|
7
|
+
|
8
|
+
require_relative 'host_addgroup_spec'
|
9
|
+
require_relative 'host_rmgroup_spec'
|
10
|
+
|
11
|
+
require_relative 'host_addvar_spec'
|
12
|
+
require_relative 'host_rmvar_spec'
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Moose::Inventory::Config' do
|
4
|
+
before(:all) do
|
5
|
+
# Set up the configuration object
|
6
|
+
@mockarg_parts = {
|
7
|
+
config: File.join(spec_root, 'config/config.yml'),
|
8
|
+
format: 'yaml',
|
9
|
+
env: 'test'
|
10
|
+
}
|
11
|
+
|
12
|
+
@mockargs = []
|
13
|
+
@mockarg_parts.each do |key, val|
|
14
|
+
@mockargs << "--#{key}"
|
15
|
+
@mockargs << val
|
16
|
+
end
|
17
|
+
|
18
|
+
@config = Moose::Inventory::Config
|
19
|
+
end
|
20
|
+
|
21
|
+
# .init()
|
22
|
+
describe '.init()' do
|
23
|
+
it 'should be responsive' do
|
24
|
+
result = @config.respond_to?(:init)
|
25
|
+
expect(result).to eq(true)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# ._configopts
|
30
|
+
describe '._configopts' do
|
31
|
+
it 'should be responsive' do
|
32
|
+
result = @config.respond_to?(:_confopts)
|
33
|
+
expect(result).to eq(true)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should not be nil' do
|
37
|
+
@config.init(@mockargs)
|
38
|
+
expect(@config._confopts).not_to be_nil
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should default "--format" to json' do
|
42
|
+
@config.init([])
|
43
|
+
expect(@config._confopts[:format]).to eq('json')
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should pick up "--format" from its argument list' do
|
47
|
+
@config.init(@mockargs)
|
48
|
+
expect(@config._confopts[:format]).to eq('yaml')
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should default "--env" to ""' do
|
52
|
+
@config.init([])
|
53
|
+
expect(@config._confopts[:env]).to eq('')
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should pick up "--env" from its argument list' do
|
57
|
+
tmpargs = ['--env', 'rspectest', '--config', @mockarg_parts[:config]]
|
58
|
+
@config.init(tmpargs)
|
59
|
+
expect(@config._confopts[:env]).to eq('rspectest')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# ._settings
|
64
|
+
describe '._settings' do
|
65
|
+
it 'should be responsive' do
|
66
|
+
result = @config.respond_to?(:_settings)
|
67
|
+
expect(result).to eq(true)
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should not be nil' do
|
71
|
+
@config.init(@mockargs)
|
72
|
+
expect(@config._confopts).not_to be_nil
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'should pick up "config.db" from the configuration file' do
|
76
|
+
@config.init(@mockargs)
|
77
|
+
expect(@config._settings[:config][:db]).not_to be_nil
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,184 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Moose::Inventory::DB' do
|
4
|
+
#=============================
|
5
|
+
# Initialization
|
6
|
+
#
|
7
|
+
|
8
|
+
before(:all) do
|
9
|
+
# Set up the configuration object
|
10
|
+
@mockarg_parts = {
|
11
|
+
config: File.join(spec_root, 'config/config.yml'),
|
12
|
+
format: 'yaml',
|
13
|
+
env: 'test'
|
14
|
+
}
|
15
|
+
|
16
|
+
@mockargs = []
|
17
|
+
@mockarg_parts.each do |key, val|
|
18
|
+
@mockargs << "--#{key}"
|
19
|
+
@mockargs << val
|
20
|
+
end
|
21
|
+
|
22
|
+
@config = Moose::Inventory::Config
|
23
|
+
@config.init(@mockargs)
|
24
|
+
|
25
|
+
@db = Moose::Inventory::DB
|
26
|
+
end
|
27
|
+
|
28
|
+
#=============================
|
29
|
+
# Tests
|
30
|
+
#
|
31
|
+
|
32
|
+
describe '.init()' do
|
33
|
+
it 'should be responsive' do
|
34
|
+
expect(@db.respond_to?(:init)).to eq(true)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'shouldn\'t throw an error' do
|
38
|
+
failed = false
|
39
|
+
# rubocop:disable Lint/RescueException
|
40
|
+
begin
|
41
|
+
@db.init
|
42
|
+
rescue Exception => e
|
43
|
+
p e
|
44
|
+
failed = true
|
45
|
+
end
|
46
|
+
# rubocop:enable Lint/RescueException
|
47
|
+
|
48
|
+
expect(failed).to eq(false)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '.db' do
|
53
|
+
it 'should be responsive' do
|
54
|
+
expect(@db.respond_to?(:db)).to eq(true)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should not be nil' do
|
58
|
+
expect(@db.db).not_to be_nil
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe '.models' do
|
63
|
+
it 'should be responsive' do
|
64
|
+
expect(@db.respond_to?(:models)).to eq(true)
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should not be nil' do
|
68
|
+
expect(@db.models).not_to be_nil
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe '.exceptions' do
|
73
|
+
it 'should be responsive' do
|
74
|
+
expect(@db.respond_to?(:exceptions)).to eq(true)
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should not be nil' do
|
78
|
+
expect(@db.exceptions).not_to be_nil
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe 'tables' do
|
83
|
+
it 'should have a hosts table' do
|
84
|
+
schema = @db.db.schema(:hosts)
|
85
|
+
expect(schema).not_to be_nil
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should have a hostsvars table' do
|
89
|
+
schema = @db.db.schema(:hostvars)
|
90
|
+
expect(schema).not_to be_nil
|
91
|
+
end
|
92
|
+
it 'should have a groups table' do
|
93
|
+
schema = @db.db.schema(:groups)
|
94
|
+
expect(schema).not_to be_nil
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'should have a groupvars table' do
|
98
|
+
schema = @db.db.schema(:groupvars)
|
99
|
+
expect(schema).not_to be_nil
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'should have a groups_hosts table' do
|
103
|
+
schema = @db.db.schema(:groups_hosts)
|
104
|
+
expect(schema).not_to be_nil
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe '.reset()' do
|
109
|
+
it 'should be responsive' do
|
110
|
+
result = @db.respond_to?(:reset)
|
111
|
+
expect(result).to eq(true)
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'should purge the database of contents' do
|
115
|
+
# Put at least one host and one group into the database
|
116
|
+
@db.models[:host].create(name: 'reset-host')
|
117
|
+
@db.models[:group].create(name: 'reset-group')
|
118
|
+
|
119
|
+
# Reset the DB
|
120
|
+
@db.reset
|
121
|
+
|
122
|
+
#
|
123
|
+
hosts = @db.models[:host].all
|
124
|
+
expect(hosts.count).to eq(0)
|
125
|
+
|
126
|
+
group = @db.models[:group].all
|
127
|
+
expect(group.count).to eq(0)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
describe '.transaction()' do
|
132
|
+
before(:each) do
|
133
|
+
@db.reset
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'should be responsive' do
|
137
|
+
result = @db.respond_to?(:transaction)
|
138
|
+
expect(result).to eq(true)
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'should perform transactions' do
|
142
|
+
hosts = @db.models[:host].all
|
143
|
+
count = { initial: hosts.count, items: 0 }
|
144
|
+
|
145
|
+
@db.transaction do
|
146
|
+
# @db.transaction('should perform transactions') do
|
147
|
+
(1..3).each do |_n|
|
148
|
+
count[:items] = count[:items] + 1
|
149
|
+
@db.models[:host].create(name: "transaction-#{count[:items]}")
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
hosts = @db.models[:host].all
|
154
|
+
count[:final] = hosts.count
|
155
|
+
|
156
|
+
# puts "\n#{ JSON.pretty_generate(@db.debug) }"
|
157
|
+
# puts "#{ JSON.pretty_generate(count) }"
|
158
|
+
|
159
|
+
expect(count[:final]).to eq(count[:initial] + count[:items])
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'should roll back failed transactions' do
|
163
|
+
hosts = @db.models[:host].all
|
164
|
+
count = { initial: hosts.count, items: 0 }
|
165
|
+
|
166
|
+
@db.transaction do
|
167
|
+
# @db.transaction('should roll back failed transactions') do
|
168
|
+
(1..3).each do |_n|
|
169
|
+
count[:items] = count[:items] + 1
|
170
|
+
@db.models[:host].create(name: "rollback-#{count[:items]}")
|
171
|
+
end
|
172
|
+
fail Sequel::Rollback, 'Test error' #
|
173
|
+
end
|
174
|
+
|
175
|
+
hosts = @db.models[:host].all
|
176
|
+
count[:final] = hosts.count
|
177
|
+
|
178
|
+
# puts "\n#{ JSON.pretty_generate(@db.debug) }"
|
179
|
+
# puts "#{ JSON.pretty_generate(count) }"
|
180
|
+
|
181
|
+
expect(count[:final]).to eq(count[:initial])
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|