bookie_accounting 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/Rakefile +0 -7
- data/TODO +13 -0
- data/bookie_accounting.gemspec +1 -9
- data/lib/bookie/database.rb +17 -19
- data/lib/bookie/database/group.rb +3 -3
- data/lib/bookie/database/job.rb +21 -18
- data/lib/bookie/database/job_summary.rb +26 -29
- data/lib/bookie/database/lock.rb +4 -4
- data/lib/bookie/database/system_type.rb +6 -6
- data/lib/bookie/database/user.rb +5 -5
- data/lib/bookie/formatters/stdout.rb +9 -7
- data/lib/bookie/version.rb +1 -1
- data/spec/config_spec.rb +21 -21
- data/spec/database/group_spec.rb +13 -14
- data/spec/database/job_spec.rb +62 -63
- data/spec/database/job_summary_spec.rb +60 -62
- data/spec/database/lock_spec.rb +11 -12
- data/spec/database/system_spec.rb +49 -50
- data/spec/database/system_type_spec.rb +14 -15
- data/spec/database/user_spec.rb +25 -26
- data/spec/extensions_spec.rb +11 -11
- data/spec/formatter_spec.rb +15 -15
- data/spec/formatters/comma_dump_spec.rb +8 -8
- data/spec/formatters/spreadsheet_spec.rb +9 -9
- data/spec/formatters/stdout_spec.rb +8 -8
- data/spec/sender_spec.rb +44 -46
- data/spec/senders/standalone_spec.rb +9 -11
- data/spec/senders/torque_cluster_spec.rb +31 -31
- metadata +14 -43
- data/todo.txt +0 -13
@@ -18,8 +18,7 @@ describe Bookie::Database::JobSummary do
|
|
18
18
|
:command_name => command_name,
|
19
19
|
:date => date,
|
20
20
|
:cpu_time => 0,
|
21
|
-
:memory_time => 0
|
22
|
-
:successful => 0
|
21
|
+
:memory_time => 0
|
23
22
|
)
|
24
23
|
end
|
25
24
|
end
|
@@ -39,79 +38,79 @@ describe Bookie::Database::JobSummary do
|
|
39
38
|
it "correctly filters by date range" do
|
40
39
|
d = Date.new(2012)
|
41
40
|
sums = JobSummary
|
42
|
-
sums.by_date_range(d .. d).count.
|
43
|
-
sums.by_date_range(d ... d).count.
|
44
|
-
sums.by_date_range(d + 1 .. d).count.
|
45
|
-
sums.by_date_range(d .. d + 1).count.
|
46
|
-
sums.by_date_range(d ... d + 1).count.
|
41
|
+
expect(sums.by_date_range(d .. d).count).to eql sums.by_date(d).count
|
42
|
+
expect(sums.by_date_range(d ... d).count).to eql 0
|
43
|
+
expect(sums.by_date_range(d + 1 .. d).count).to eql 0
|
44
|
+
expect(sums.by_date_range(d .. d + 1).count).to eql sums.by_date(d).count + sums.by_date(d + 1).count
|
45
|
+
expect(sums.by_date_range(d ... d + 1).count).to eql sums.by_date(d).count
|
47
46
|
end
|
48
|
-
|
47
|
+
|
49
48
|
it "correctly filters by user" do
|
50
49
|
u = User.first
|
51
50
|
sums = JobSummary.by_user(u).to_a
|
52
|
-
sums.length.
|
51
|
+
expect(sums.length).to eql 16
|
53
52
|
sums.each do |sum|
|
54
|
-
sum.user.
|
53
|
+
expect(sum.user).to eql u
|
55
54
|
end
|
56
55
|
end
|
57
|
-
|
56
|
+
|
58
57
|
it "correctly filters by user name" do
|
59
58
|
sums = JobSummary.by_user_name('test').to_a
|
60
|
-
sums.length.
|
59
|
+
expect(sums.length).to eql 32
|
61
60
|
sums.each do |sum|
|
62
|
-
sum.user.name.
|
61
|
+
expect(sum.user.name).to eql 'test'
|
63
62
|
end
|
64
63
|
end
|
65
|
-
|
64
|
+
|
66
65
|
it "correctly filters by group" do
|
67
|
-
g = Group.
|
66
|
+
g = Group.find_by(name: 'admin')
|
68
67
|
sums = JobSummary.by_group(g).to_a
|
69
|
-
sums.length.
|
68
|
+
expect(sums.length).to eql 32
|
70
69
|
sums.each do |sum|
|
71
|
-
sum.user.group.
|
70
|
+
expect(sum.user.group).to eql g
|
72
71
|
end
|
73
72
|
end
|
74
|
-
|
73
|
+
|
75
74
|
it "correctly filters by group name" do
|
76
75
|
sums = JobSummary.by_group_name('admin').to_a
|
77
|
-
sums.length.
|
76
|
+
expect(sums.length).to eql 32
|
78
77
|
sums.each do |sum|
|
79
|
-
sum.user.group.name.
|
78
|
+
expect(sum.user.group.name).to eql 'admin'
|
80
79
|
end
|
81
|
-
JobSummary.by_group_name('fake_group').count.
|
80
|
+
expect(JobSummary.by_group_name('fake_group').count).to eql 0
|
82
81
|
end
|
83
|
-
|
82
|
+
|
84
83
|
it "correctly filters by system" do
|
85
84
|
s = System.first
|
86
85
|
sums = JobSummary.by_system(s).to_a
|
87
|
-
sums.length.
|
86
|
+
expect(sums.length).to eql 16
|
88
87
|
sums.each do |sum|
|
89
|
-
sum.system.
|
88
|
+
expect(sum.system).to eql s
|
90
89
|
end
|
91
90
|
end
|
92
|
-
|
91
|
+
|
93
92
|
it "correctly filters by system name" do
|
94
93
|
sums = JobSummary.by_system_name('test1').to_a
|
95
|
-
sums.length.
|
94
|
+
expect(sums.length).to eql 32
|
96
95
|
sums.each do |sum|
|
97
|
-
sum.system.name.
|
96
|
+
expect(sum.system.name).to eql 'test1'
|
98
97
|
end
|
99
98
|
end
|
100
|
-
|
99
|
+
|
101
100
|
it "correctly filters by system type" do
|
102
101
|
s = SystemType.first
|
103
102
|
sums = JobSummary.by_system_type(s).to_a
|
104
|
-
sums.length.
|
103
|
+
expect(sums.length).to eql 32
|
105
104
|
sums.each do |sum|
|
106
|
-
sum.system.system_type.
|
105
|
+
expect(sum.system.system_type).to eql s
|
107
106
|
end
|
108
107
|
end
|
109
|
-
|
108
|
+
|
110
109
|
it "correctly filters by command name" do
|
111
110
|
sums = JobSummary.by_command_name('vi').to_a
|
112
|
-
sums.length.
|
111
|
+
expect(sums.length).to eql 32
|
113
112
|
sums.each do |sum|
|
114
|
-
sum.command_name.
|
113
|
+
expect(sum.command_name).to eql 'vi'
|
115
114
|
end
|
116
115
|
end
|
117
116
|
|
@@ -119,7 +118,7 @@ describe Bookie::Database::JobSummary do
|
|
119
118
|
before(:each) do
|
120
119
|
JobSummary.delete_all
|
121
120
|
end
|
122
|
-
|
121
|
+
|
123
122
|
it "produces correct summaries" do
|
124
123
|
d = Date.new(2012)
|
125
124
|
range = base_time ... base_time + 1.days
|
@@ -127,7 +126,7 @@ describe Bookie::Database::JobSummary do
|
|
127
126
|
sums = JobSummary.all.to_a
|
128
127
|
found_sums = Set.new
|
129
128
|
sums.each do |sum|
|
130
|
-
sum.date.
|
129
|
+
expect(sum.date).to eql Date.new(2012)
|
131
130
|
jobs = Job.by_user(sum.user).by_system(sum.system).by_command_name(sum.command_name)
|
132
131
|
sum_2 = jobs.summary(range)
|
133
132
|
[:cpu_time, :memory_time].each do |field|
|
@@ -136,20 +135,19 @@ describe Bookie::Database::JobSummary do
|
|
136
135
|
found_sums.add([sum.user.id, sum.system.id, sum.command_name])
|
137
136
|
end
|
138
137
|
#Is it catching all of the combinations of categories?
|
139
|
-
Job.by_time_range(range).
|
140
|
-
|
141
|
-
found_sums.include?(values).should eql true
|
138
|
+
Job.by_time_range(range).uniq.pluck(:user_id, :system_id, :command_name).each do |values|
|
139
|
+
expect(found_sums.include?(values)).to eql true
|
142
140
|
end
|
143
141
|
end
|
144
|
-
|
142
|
+
|
145
143
|
it "creates dummy summaries when there are no jobs" do
|
146
144
|
d = Date.new(2012) + 5
|
147
145
|
JobSummary.summarize(d)
|
148
146
|
sums = JobSummary.by_date(d).to_a
|
149
|
-
sums.length.
|
147
|
+
expect(sums.length).to eql 1
|
150
148
|
sum = sums[0]
|
151
|
-
sum.cpu_time.
|
152
|
-
sum.memory_time.
|
149
|
+
expect(sum.cpu_time).to eql 0
|
150
|
+
expect(sum.memory_time).to eql 0
|
153
151
|
|
154
152
|
#Check the case where there are no users or no systems:
|
155
153
|
JobSummary.delete_all
|
@@ -157,7 +155,7 @@ describe Bookie::Database::JobSummary do
|
|
157
155
|
JobSummary.transaction(:requires_new => true) do
|
158
156
|
klass.delete_all
|
159
157
|
JobSummary.summarize(d)
|
160
|
-
JobSummary.by_date(d).count.
|
158
|
+
expect(JobSummary.by_date(d).count).to eql 0
|
161
159
|
raise ActiveRecord::Rollback
|
162
160
|
end
|
163
161
|
end
|
@@ -176,7 +174,7 @@ describe Bookie::Database::JobSummary do
|
|
176
174
|
:memory_time => 0,
|
177
175
|
}
|
178
176
|
end
|
179
|
-
|
177
|
+
|
180
178
|
it "produces correct summaries" do
|
181
179
|
1.upto(3) do |num_days|
|
182
180
|
[0, -2.hours, 2.hours, 3.minutes].each do |offset_begin|
|
@@ -196,11 +194,11 @@ describe Bookie::Database::JobSummary do
|
|
196
194
|
it "distinguishes between inclusive and exclusive ranges" do
|
197
195
|
Summary = JobSummary
|
198
196
|
sum = Summary.summary(:range => (base_time ... base_time + 1.days + 2.hours))
|
199
|
-
sum[:num_jobs].
|
200
|
-
sum[:successful].
|
197
|
+
expect(sum[:num_jobs]).to eql 26
|
198
|
+
expect(sum[:successful]).to eql 13
|
201
199
|
sum = Summary.summary(:range => (base_time .. base_time + 1.days + 2.hours))
|
202
|
-
sum[:num_jobs].
|
203
|
-
sum[:successful].
|
200
|
+
expect(sum[:num_jobs]).to eql 27
|
201
|
+
expect(sum[:successful]).to eql 14
|
204
202
|
end
|
205
203
|
|
206
204
|
def check_time_bounds
|
@@ -208,7 +206,7 @@ describe Bookie::Database::JobSummary do
|
|
208
206
|
expect(JobSummary.minimum(:date)).to eql(base_time.to_date)
|
209
207
|
expect(JobSummary.maximum(:date)).to eql(Time.now.utc.to_date - 1)
|
210
208
|
end
|
211
|
-
|
209
|
+
|
212
210
|
it "correctly finds the default time bounds" do
|
213
211
|
Time.expects(:now).at_least(0).returns(base_time + 2.days)
|
214
212
|
job = Job.order('end_time DESC').first
|
@@ -216,7 +214,7 @@ describe Bookie::Database::JobSummary do
|
|
216
214
|
job.save!
|
217
215
|
check_time_bounds
|
218
216
|
JobSummary.delete_all
|
219
|
-
|
217
|
+
|
220
218
|
#Check the case where all systems are decommissioned.
|
221
219
|
#TODO: split into a context?
|
222
220
|
JobSummary.transaction(:requires_new => true) do
|
@@ -232,10 +230,10 @@ describe Bookie::Database::JobSummary do
|
|
232
230
|
#TODO: split into a context?
|
233
231
|
Job.delete_all
|
234
232
|
sum = JobSummary.summary
|
235
|
-
sum.
|
236
|
-
JobSummary.any
|
233
|
+
expect(sum).to eql(@empty_summary)
|
234
|
+
expect(JobSummary.any?).to eql false
|
237
235
|
end
|
238
|
-
|
236
|
+
|
239
237
|
it "correctly handles filtered summaries" do
|
240
238
|
filters = {
|
241
239
|
:user_name => 'test',
|
@@ -250,12 +248,12 @@ describe Bookie::Database::JobSummary do
|
|
250
248
|
expect(sum1).to eql(sum2)
|
251
249
|
end
|
252
250
|
end
|
253
|
-
|
251
|
+
|
254
252
|
it "correctly handles inverted ranges" do
|
255
253
|
t = base_time
|
256
|
-
JobSummary.summary(:range => t .. t - 1).
|
254
|
+
expect(JobSummary.summary(:range => t .. t - 1)).to eql(@empty_summary)
|
257
255
|
end
|
258
|
-
|
256
|
+
|
259
257
|
it "caches summaries" do
|
260
258
|
JobSummary.expects(:summarize)
|
261
259
|
range = base_time ... base_time + 1.days
|
@@ -281,21 +279,21 @@ describe Bookie::Database::JobSummary do
|
|
281
279
|
}
|
282
280
|
|
283
281
|
sum = JobSummary.new(fields)
|
284
|
-
sum.valid
|
285
|
-
|
282
|
+
expect(sum.valid?).to eql true
|
283
|
+
|
286
284
|
fields.each_key do |field|
|
287
285
|
job = JobSummary.new(fields)
|
288
286
|
job.method("#{field}=".intern).call(nil)
|
289
|
-
job.valid
|
287
|
+
expect(job.valid?).to eql false
|
290
288
|
end
|
291
|
-
|
289
|
+
|
292
290
|
[:cpu_time, :memory_time].each do |field|
|
293
291
|
job = JobSummary.new(fields)
|
294
292
|
method = job.method("#{field}=".intern)
|
295
293
|
method.call(-1)
|
296
|
-
job.valid
|
294
|
+
expect(job.valid?).to eql false
|
297
295
|
method.call(0)
|
298
|
-
job.valid
|
296
|
+
expect(job.valid?).to eql true
|
299
297
|
end
|
300
298
|
end
|
301
299
|
end
|
data/spec/database/lock_spec.rb
CHANGED
@@ -3,13 +3,13 @@ require 'spec_helper'
|
|
3
3
|
describe Bookie::Database::Lock do
|
4
4
|
it "finds locks" do
|
5
5
|
Lock = Bookie::Database::Lock
|
6
|
-
Lock[:users].
|
7
|
-
Lock[:users].name.
|
8
|
-
Lock[:groups].
|
9
|
-
Lock[:groups].name.
|
10
|
-
expect { Lock[:dummy] }.to raise_error(
|
6
|
+
expect(Lock[:users]).to_not eql nil
|
7
|
+
expect(Lock[:users].name).to eql 'users'
|
8
|
+
expect(Lock[:groups]).to_not eql nil
|
9
|
+
expect(Lock[:groups].name).to eql 'groups'
|
10
|
+
expect { Lock[:dummy] }.to raise_error(ActiveRecord::RecordNotFound)
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
it "locks records (will probably fail if the testing DB doesn't support row locks)" #do
|
14
14
|
#lock = Bookie::Database::Lock[:users]
|
15
15
|
#thread = nil
|
@@ -21,21 +21,20 @@ describe Bookie::Database::Lock do
|
|
21
21
|
# Bookie::Database::User.first
|
22
22
|
# end
|
23
23
|
# end
|
24
|
-
# (Time.now - t).
|
24
|
+
# expect(Time.now - t).to >= 0.5
|
25
25
|
# }
|
26
26
|
# sleep(1)
|
27
27
|
#end
|
28
28
|
#thread.join
|
29
29
|
#end
|
30
|
-
|
30
|
+
|
31
31
|
it "validates fields" do
|
32
32
|
lock = Bookie::Database::Lock.new
|
33
33
|
lock.name = nil
|
34
|
-
lock.valid
|
34
|
+
expect(lock.valid?).to eql false
|
35
35
|
lock.name = ''
|
36
|
-
lock.valid
|
36
|
+
expect(lock.valid?).to eql false
|
37
37
|
lock.name = 'test'
|
38
|
-
lock.valid
|
38
|
+
expect(lock.valid?).to eql true
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
@@ -4,43 +4,43 @@ include Bookie::Database
|
|
4
4
|
|
5
5
|
describe Bookie::Database::System do
|
6
6
|
describe "#active" do
|
7
|
-
it { System.active.length.
|
7
|
+
it { expect(System.active.length).to eql 3 }
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
it "correctly filters by name" do
|
11
|
-
System.by_name('test1').length.
|
12
|
-
System.by_name('test2').length.
|
13
|
-
System.by_name('test3').length.
|
11
|
+
expect(System.by_name('test1').length).to eql 2
|
12
|
+
expect(System.by_name('test2').length).to eql 1
|
13
|
+
expect(System.by_name('test3').length).to eql 1
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
it "correctly filters by system type" do
|
17
17
|
['Standalone', 'TORQUE cluster'].each do |type|
|
18
|
-
t = SystemType.
|
19
|
-
System.by_system_type(t).length.
|
18
|
+
t = SystemType.find_by(name: type)
|
19
|
+
expect(System.by_system_type(t).length).to eql 2
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
#TODO: create a common example.
|
24
24
|
describe "#by_time_range" do
|
25
25
|
it "correctly filters by time range" do
|
26
|
-
systems = System.by_time_range(base_time ... base_time +
|
27
|
-
systems.count.
|
28
|
-
systems = System.by_time_range(base_time + 1 ... base_time +
|
29
|
-
systems.count.
|
26
|
+
systems = System.by_time_range(base_time ... base_time + 20.hours + 1)
|
27
|
+
expect(systems.count).to eql 3
|
28
|
+
systems = System.by_time_range(base_time + 1 ... base_time + 20.hours)
|
29
|
+
expect(systems.count).to eql 2
|
30
30
|
systems = System.by_time_range(base_time ... base_time)
|
31
|
-
systems.length.
|
32
|
-
systems = System.by_time_range(base_time .. base_time +
|
33
|
-
systems.count.
|
31
|
+
expect(systems.length).to eql 0
|
32
|
+
systems = System.by_time_range(base_time .. base_time + 20.hours)
|
33
|
+
expect(systems.count).to eql 3
|
34
34
|
systems = System.by_time_range(base_time .. base_time)
|
35
|
-
systems.count.
|
35
|
+
expect(systems.count).to eql 1
|
36
36
|
end
|
37
37
|
|
38
38
|
#TODO: split inclusive/exclusive range tests
|
39
|
-
|
39
|
+
|
40
40
|
it "correctly handles empty/inverted ranges" do
|
41
41
|
(-1 .. 0).each do |offset|
|
42
42
|
systems = System.by_time_range(base_time ... base_time + offset)
|
43
|
-
systems.count.
|
43
|
+
expect(systems.count).to eql 0
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -54,7 +54,7 @@ describe Bookie::Database::System do
|
|
54
54
|
|
55
55
|
let(:summary) { create_summaries(System, base_time) }
|
56
56
|
let(:summary_wide) { System.summary(base_time - 1.hours ... Time.now + 1.hours) }
|
57
|
-
|
57
|
+
|
58
58
|
#All systems should have the same amount of memory.
|
59
59
|
let(:memory_per_system) { System.first.memory }
|
60
60
|
let(:cores_per_system) { System.first.cores }
|
@@ -110,44 +110,44 @@ describe Bookie::Database::System do
|
|
110
110
|
end
|
111
111
|
|
112
112
|
s1 = System.summary()
|
113
|
-
s1.
|
113
|
+
expect(s1).to eql summary[:all]
|
114
114
|
|
115
115
|
s1 = System.summary(base_time ... Time.now + 1.hour)
|
116
116
|
s2 = summary[:all].dup
|
117
117
|
s2[:avail_memory_avg] = Float(total_memory_time) / 41.hours
|
118
|
-
s1.
|
118
|
+
expect(s1).to eql s2
|
119
119
|
end
|
120
120
|
end
|
121
|
-
|
121
|
+
|
122
122
|
it "correctly handles inverted ranges" do
|
123
123
|
t = base_time
|
124
|
-
System.summary(t ... t - 1).
|
125
|
-
System.summary(t .. t - 1).
|
124
|
+
expect(System.summary(t ... t - 1)).to eql summary[:empty]
|
125
|
+
expect(System.summary(t .. t - 1)).to eql summary[:empty]
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
129
|
describe "#find_current" do
|
130
130
|
before(:all) do
|
131
131
|
@config_t1 = test_config.clone
|
132
|
-
|
132
|
+
|
133
133
|
@config_t1.hostname = 'test1'
|
134
134
|
@config_t1.system_type = 'standalone'
|
135
135
|
@config_t1.cores = 2
|
136
136
|
@config_t1.memory = 1000000
|
137
|
-
|
137
|
+
|
138
138
|
@config_t2 = @config_t1.clone
|
139
139
|
@config_t2.system_type = 'torque_cluster'
|
140
|
-
|
140
|
+
|
141
141
|
@sender_1 = Bookie::Sender.new(@config_t1)
|
142
142
|
@sender_2 = Bookie::Sender.new(@config_t2)
|
143
143
|
end
|
144
144
|
|
145
145
|
it "finds the correct system" do
|
146
|
-
System.find_current(@sender_2).id.
|
147
|
-
System.find_current(@sender_2, Time.now).id.
|
148
|
-
System.find_current(@sender_1, base_time).id.
|
146
|
+
expect(System.find_current(@sender_2).id).to eql 2
|
147
|
+
expect(System.find_current(@sender_2, Time.now).id).to eql 2
|
148
|
+
expect(System.find_current(@sender_1, base_time).id).to eql 1
|
149
149
|
end
|
150
|
-
|
150
|
+
|
151
151
|
it "correctly detects the lack of a matching system" do
|
152
152
|
expect {
|
153
153
|
System.find_current(@sender_1, base_time - 1.years)
|
@@ -157,7 +157,7 @@ describe Bookie::Database::System do
|
|
157
157
|
System.find_current(@sender_1, base_time)
|
158
158
|
}.to raise_error(/^There is no system with hostname 'test1000' that was recorded as active at /)
|
159
159
|
end
|
160
|
-
|
160
|
+
|
161
161
|
it "correctly detects conflicts" do
|
162
162
|
config = test_config.clone
|
163
163
|
config.hostname = 'test1'
|
@@ -172,7 +172,7 @@ describe Bookie::Database::System do
|
|
172
172
|
}.to raise_error(System::SystemConflictError)
|
173
173
|
config.unstub(field)
|
174
174
|
end
|
175
|
-
sender.expects(:system_type).returns(SystemType.
|
175
|
+
sender.expects(:system_type).returns(SystemType.find_by(name: "Standalone"))
|
176
176
|
expect {
|
177
177
|
System.find_current(sender)
|
178
178
|
}.to raise_error(System::SystemConflictError)
|
@@ -180,16 +180,16 @@ describe Bookie::Database::System do
|
|
180
180
|
end
|
181
181
|
|
182
182
|
it "correctly decommissions" do
|
183
|
-
sys = System.active.
|
183
|
+
sys = System.active.find_by(name: 'test1')
|
184
184
|
begin
|
185
185
|
sys.decommission(sys.start_time + 3)
|
186
|
-
sys.end_time.
|
186
|
+
expect(sys.end_time).to eql sys.start_time + 3
|
187
187
|
ensure
|
188
188
|
sys.end_time = nil
|
189
189
|
sys.save!
|
190
190
|
end
|
191
191
|
end
|
192
|
-
|
192
|
+
|
193
193
|
it "validates fields" do
|
194
194
|
fields = {
|
195
195
|
:name => 'test',
|
@@ -198,35 +198,34 @@ describe Bookie::Database::System do
|
|
198
198
|
:system_type => SystemType.first,
|
199
199
|
:start_time => base_time
|
200
200
|
}
|
201
|
-
|
202
|
-
System.new(fields).valid
|
203
|
-
|
201
|
+
|
202
|
+
expect(System.new(fields).valid?).to eql true
|
203
|
+
|
204
204
|
fields.each_key do |field|
|
205
205
|
system = System.new(fields)
|
206
206
|
system.method("#{field}=".intern).call(nil)
|
207
|
-
system.valid
|
207
|
+
expect(system.valid?).to eql false
|
208
208
|
end
|
209
|
-
|
209
|
+
|
210
210
|
system = System.new(fields)
|
211
211
|
system.name = ''
|
212
|
-
system.valid
|
213
|
-
|
212
|
+
expect(system.valid?).to eql false
|
213
|
+
|
214
214
|
[:cores, :memory].each do |field|
|
215
215
|
system = System.new(fields)
|
216
216
|
m = system.method("#{field}=".intern)
|
217
217
|
m.call(-1)
|
218
|
-
system.valid
|
218
|
+
expect(system.valid?).to eql false
|
219
219
|
m.call(0)
|
220
|
-
system.valid
|
220
|
+
expect(system.valid?).to eql true
|
221
221
|
end
|
222
|
-
|
222
|
+
|
223
223
|
system = System.new(fields)
|
224
224
|
system.end_time = base_time
|
225
|
-
system.valid
|
225
|
+
expect(system.valid?).to eql true
|
226
226
|
system.end_time += 5
|
227
|
-
system.valid
|
227
|
+
expect(system.valid?).to eql true
|
228
228
|
system.end_time -= 10
|
229
|
-
system.valid
|
229
|
+
expect(system.valid?).to eql false
|
230
230
|
end
|
231
231
|
end
|
232
|
-
|