bookie_accounting 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,20 +19,32 @@ module Helpers
19
19
  summaries
20
20
  end
21
21
 
22
- def test_relations(job, relations)
22
+ def test_job_relations(job, relations)
23
+ #Make sure all relations with the same value have the same object_id:
23
24
  rels = [job.user, job.user.group, job.system, job.system.system_type]
25
+ unbound_object_id = Object.instance_method(:object_id)
24
26
  rels.each do |r|
25
27
  if relations.include?(r)
26
- old_r = relations[r]
27
- old_r.should eql r
28
+ relations[r].should eql unbound_object_id.bind(r).call
29
+ else
30
+ relations[r] = unbound_object_id.bind(r).call
28
31
  end
29
- relations[r] = r
30
32
  end
31
33
  end
34
+
35
+ def test_system_relations(system, relations)
36
+ t = system.system_type
37
+ unbound_object_id = Object.instance_method(:object_id)
38
+ if relations.include?(t)
39
+ relations[t].should eql unbound_object_id.bind(t).call
40
+ else
41
+ relations[t] = unbound_object_id.bind(t).call
42
+ end
43
+ end
44
+
32
45
 
33
46
  def check_job_sums(js_sum, j_sum)
34
- js_sum[:num_jobs].should eql j_sum[:jobs].length
35
- [:cpu_time, :memory_time, :successful].each do |field|
47
+ [:cpu_time, :memory_time].each do |field|
36
48
  js_sum[field].should eql j_sum[field]
37
49
  end
38
50
  true
@@ -94,7 +106,6 @@ describe Bookie::Database do
94
106
  describe Bookie::Database::Job do
95
107
  before(:each) do
96
108
  @jobs = Bookie::Database::Job
97
- @base_time = @jobs.first.start_time
98
109
  end
99
110
 
100
111
  it "correctly sets end times" do
@@ -184,18 +195,18 @@ describe Bookie::Database do
184
195
  end
185
196
 
186
197
  it "correctly filters by start time" do
187
- jobs = @jobs.by_start_time_range(@base_time ... @base_time + 3600 * 2 + 1)
198
+ jobs = @jobs.by_start_time_range(base_time ... base_time + 3600 * 2 + 1)
188
199
  jobs.length.should eql 3
189
- jobs = @jobs.by_start_time_range(@base_time + 1 ... @base_time + 3600 * 2)
200
+ jobs = @jobs.by_start_time_range(base_time + 1 ... base_time + 3600 * 2)
190
201
  jobs.length.should eql 1
191
202
  jobs = @jobs.by_start_time_range(Time.at(0) ... Time.at(3))
192
203
  jobs.length.should eql 0
193
204
  end
194
205
 
195
206
  it "correctly filters by end time" do
196
- jobs = @jobs.by_end_time_range(@base_time ... @base_time + 3600 * 2 + 1)
207
+ jobs = @jobs.by_end_time_range(base_time ... base_time + 3600 * 2 + 1)
197
208
  jobs.length.should eql 2
198
- jobs = @jobs.by_end_time_range(@base_time + 1 ... @base_time + 3600 * 2)
209
+ jobs = @jobs.by_end_time_range(base_time + 1 ... base_time + 3600 * 2)
199
210
  jobs.length.should eql 1
200
211
  jobs = @jobs.by_end_time_range(Time.at(0) ... Time.at(3))
201
212
  jobs.length.should eql 0
@@ -203,24 +214,30 @@ describe Bookie::Database do
203
214
 
204
215
  describe "#by_time_range_inclusive" do
205
216
  it "correctly filters by inclusive time range" do
206
- jobs = @jobs.by_time_range_inclusive(@base_time ... @base_time + 3600 * 2 + 1)
207
- jobs.length.should eql 3
208
- jobs = @jobs.by_time_range_inclusive(@base_time + 1 ... @base_time + 3600 * 2 - 1)
209
- jobs.length.should eql 2
210
- jobs = @jobs.by_time_range_inclusive(Time.at(0) ... Time.at(3))
217
+ jobs = @jobs.by_time_range_inclusive(base_time ... base_time + 3600 * 2 + 1)
218
+ jobs.count.should eql 3
219
+ jobs = @jobs.by_time_range_inclusive(base_time + 1 ... base_time + 3600 * 2)
220
+ jobs.count.should eql 2
221
+ jobs = @jobs.by_time_range_inclusive(base_time ... base_time)
211
222
  jobs.length.should eql 0
223
+ jobs = @jobs.by_time_range_inclusive(base_time .. base_time + 3600 * 2)
224
+ jobs.count.should eql 3
225
+ jobs = @jobs.by_time_range_inclusive(base_time .. base_time)
226
+ jobs.count.should eql 1
212
227
  end
213
228
 
214
- it "correctly handles inverted ranges" do
215
- t = Date.new(2012).to_time
216
- jobs = @jobs.by_time_range_inclusive(t ... t - 1)
217
- jobs.count.should eql 0
229
+ it "correctly handles empty/inverted ranges" do
230
+ t = base_time
231
+ (-1 .. 0).each do |offset|
232
+ jobs = @jobs.by_time_range_inclusive(t ... t + offset)
233
+ jobs.count.should eql 0
234
+ end
218
235
  end
219
236
  end
220
237
 
221
238
  it "correctly chains filters" do
222
239
  jobs = @jobs.by_user_name("test")
223
- jobs = jobs.by_start_time_range(@base_time + 3600 ... @base_time + 3601)
240
+ jobs = jobs.by_start_time_range(base_time + 3600 ... base_time + 3601)
224
241
  jobs.length.should eql 1
225
242
  jobs[0].user.group.name.should eql "default"
226
243
  end
@@ -229,19 +246,23 @@ describe Bookie::Database do
229
246
  it "loads all relations" do
230
247
  jobs = Bookie::Database::Job.limit(5)
231
248
  relations = {}
232
- jobs.all_with_relations.each do |job|
233
- test_relations(job, relations)
249
+ jobs = jobs.all_with_relations
250
+ Bookie::Database::User.expects(:new).never
251
+ Bookie::Database::Group.expects(:new).never
252
+ Bookie::Database::System.expects(:new).never
253
+ Bookie::Database::SystemType.expects(:new).never
254
+ jobs.each do |job|
255
+ test_job_relations(job, relations)
234
256
  end
235
257
  end
236
258
  end
237
259
 
238
260
  describe "#summary" do
239
261
  before(:all) do
240
- Time.expects(:now).returns(Time.local(2012) + 36000 * 4).at_least_once
241
- @base_time = Time.local(2012)
262
+ Time.expects(:now).returns(base_time + 36000 * 4).at_least_once
242
263
  @jobs = Bookie::Database::Job
243
264
  @length = @jobs.all.length
244
- @summary = Helpers::create_summaries(@jobs, Time.local(2012))
265
+ @summary = Helpers::create_summaries(@jobs, base_time)
245
266
  end
246
267
 
247
268
  it "produces correct summary totals" do
@@ -259,8 +280,7 @@ describe Bookie::Database do
259
280
  clipped_jobs.should eql 25
260
281
  @summary[:clipped][:cpu_time].should eql clipped_jobs * 100 - 50
261
282
  @summary[:clipped][:memory_time].should eql clipped_jobs * 200 * 3600 - 100 * 3600
262
- #Luckily for us, rounding down gives us the right answer. This is a bit fragile, though.
263
- @summary[:clipped][:successful].should eql clipped_jobs / 2
283
+ @summary[:clipped][:successful].should eql clipped_jobs / 2 + 1
264
284
  end
265
285
 
266
286
  it "correctly handles summaries of empty sets" do
@@ -285,29 +305,17 @@ describe Bookie::Database do
285
305
  end
286
306
  end
287
307
 
288
- it "only considers finished jobs to be successful" do
289
- begin
290
- job = Bookie::Database::Job.create!(
291
- :user => Bookie::Database::User.first,
292
- :system => Bookie::Database::System.first,
293
- :command_name => '',
294
- :cpu_time => 100,
295
- :start_time => Time.local(2013),
296
- :wall_time => 3600 * 24 * 2,
297
- :memory => 10000,
298
- :exit_code => 0
299
- )
300
- @jobs.summary(job.start_time ... job.start_time + 3600 * 24)[:successful].should eql 0
301
- ensure
302
- job.delete if job
303
- end
304
- end
305
-
306
-
307
308
  it "correctly handles inverted ranges" do
308
309
  @jobs.summary(Time.now() ... Time.now() - 1).should eql @summary[:empty]
309
310
  @jobs.summary(Time.now() .. Time.now() - 1).should eql @summary[:empty]
310
311
  end
312
+
313
+ it "distinguishes between inclusive and exclusive ranges" do
314
+ sum = @jobs.summary(base_time ... base_time + 3600)
315
+ sum[:jobs].length.should eql 1
316
+ sum = @jobs.summary(base_time .. base_time + 3600)
317
+ sum[:jobs].length.should eql 2
318
+ end
311
319
  end
312
320
 
313
321
  it "validates fields" do
@@ -316,7 +324,7 @@ describe Bookie::Database do
316
324
  :system => Bookie::Database::System.first,
317
325
  :command_name => '',
318
326
  :cpu_time => 100,
319
- :start_time => Time.local(2012),
327
+ :start_time => base_time,
320
328
  :wall_time => 1000,
321
329
  :memory => 10000,
322
330
  :exit_code => 0
@@ -356,7 +364,6 @@ describe Bookie::Database do
356
364
  :system => system,
357
365
  :command_name => command_name,
358
366
  :date => date,
359
- :num_jobs => 0,
360
367
  :cpu_time => 0,
361
368
  :memory_time => 0,
362
369
  :successful => 0
@@ -375,6 +382,16 @@ describe Bookie::Database do
375
382
  sum.date.should eql d
376
383
  end
377
384
  end
385
+
386
+ it "correctly filters by date range" do
387
+ d = Date.new(2012)
388
+ sums = Bookie::Database::JobSummary
389
+ sums.by_date_range(d .. d).count.should eql sums.by_date(d).count
390
+ sums.by_date_range(d ... d).count.should eql 0
391
+ sums.by_date_range(d + 1 .. d).count.should eql 0
392
+ sums.by_date_range(d .. d + 1).count.should eql sums.by_date(d).count + sums.by_date(d + 1).count
393
+ sums.by_date_range(d ... d + 1).count.should eql sums.by_date(d).count
394
+ end
378
395
 
379
396
  it "correctly filters by user" do
380
397
  u = Bookie::Database::User.first
@@ -450,14 +467,13 @@ describe Bookie::Database do
450
467
  Bookie::Database::JobSummary.delete_all
451
468
  s = Bookie::Database::JobSummary.find_or_new(Date.new(2012), 1, 1, 'vi')
452
469
  s.persisted?.should eql false
453
- s.num_jobs = 0
454
470
  s.cpu_time = 0
455
471
  s.memory_time = 0
456
- s.successful = 0
457
472
  s.save!
458
473
  end
459
474
 
460
475
  it "uses the old summary if present" do
476
+ #Uses the JobSummary created in the previous test
461
477
  s = Bookie::Database::JobSummary.find_or_new(Date.new(2012), 1, 1, 'vi')
462
478
  s.persisted?.should eql true
463
479
  end
@@ -470,7 +486,7 @@ describe Bookie::Database do
470
486
 
471
487
  it "produces correct summaries" do
472
488
  d = Date.new(2012)
473
- range = d.to_time ... (d + 1).to_time
489
+ range = base_time ... base_time + 1.days
474
490
  Bookie::Database::JobSummary.summarize(d)
475
491
  sums = Bookie::Database::JobSummary.all
476
492
  found_sums = Set.new
@@ -481,74 +497,106 @@ describe Bookie::Database do
481
497
  check_job_sums(sum, sum_2)
482
498
  found_sums.add([sum.user.id, sum.system.id, sum.command_name])
483
499
  end
484
- #Is it producing all of the values needed?
500
+ #Is it catching all of the combinations of categories?
485
501
  Bookie::Database::Job.by_time_range_inclusive(range).select('user_id, system_id, command_name').uniq.all.each do |values|
486
502
  values = [values.user_id, values.system_id, values.command_name]
487
503
  found_sums.include?(values).should eql true
488
504
  end
489
505
  end
506
+
507
+ it "creates dummy summaries when there are no jobs" do
508
+ d = Date.new(2012) + 5
509
+ Bookie::Database::JobSummary.summarize(d)
510
+ sums = Bookie::Database::JobSummary.by_date(d).all
511
+ sums.length.should eql 1
512
+ sum = sums[0]
513
+ sum.cpu_time.should eql 0
514
+ sum.memory_time.should eql 0
515
+
516
+ #Check the case where there are no users or no systems:
517
+ Bookie::Database::JobSummary.delete_all
518
+ [Bookie::Database::User, Bookie::Database::System].each do |klass|
519
+ #This will cause nested transactions, but we *should* be OK.
520
+ Bookie::Database::JobSummary.transaction do
521
+ klass.delete_all
522
+ Bookie::Database::JobSummary.summarize(d)
523
+ Bookie::Database::JobSummary.by_date(d).count.should eql 0
524
+ raise ActiveRecord::Rollback
525
+ end
526
+ end
527
+ end
490
528
  end
491
529
 
492
530
  describe "#summary" do
493
531
  before(:each) do
494
532
  Bookie::Database::JobSummary.delete_all
495
- t = (Date.new(2012) + 3).to_time
533
+ t = base_time + 2.days
496
534
  Time.expects(:now).at_least(0).returns(t)
497
535
  end
498
536
 
499
- #To do: test inclusive ranges?
500
537
  it "produces correct summaries" do
501
538
  #To consider: flesh out some more?
502
- date_start = Date.new(2012)
503
- date_end = date_start
504
- date_bound = date_start + 3
505
- while date_start < date_bound
506
- while date_end < date_bound
507
- range = date_start ... date_end
508
- time_range = date_start.to_time ... date_end.to_time
509
- sum1 = Bookie::Database::JobSummary.summary(:range => range)
510
- sum2 = Bookie::Database::Job.summary(time_range)
511
- check_job_sums(sum1, sum2)
512
- Bookie::Database::JobSummary.summary(:range => time_range).should eql sum1
513
- date_end += 1
539
+ time_start = base_time
540
+ time_end = time_start
541
+ time_bound = time_start + 3.days
542
+ while time_start < time_bound
543
+ while time_end < time_bound
544
+ [true, false].each do |exclude_end|
545
+ time_range = Range.new(time_start, time_end, exclude_end)
546
+ sum1 = Bookie::Database::JobSummary.summary(:range => time_range)
547
+ sum2 = Bookie::Database::Job.summary(time_range)
548
+ check_job_sums(sum1, sum2)
549
+ end
550
+ time_end += 1.days
514
551
  end
515
- date_start += 1
552
+ time_start += 1.days
516
553
  end
517
- date_start = Date.new(2012)
518
- time_start = date_start.to_time
519
- time_end = (date_start + 1).to_time
554
+ time_start = base_time
555
+ time_end = time_start + 1.days
520
556
  [0, -7200, 7200].each do |offset_begin|
521
557
  [0, -7200, 7200].each do |offset_end|
522
- range_offset = time_start + offset_end ... time_end + offset_end
523
- sum1 = Bookie::Database::JobSummary.summary(:range => range_offset)
524
- sum2 = Bookie::Database::Job.summary(range_offset)
525
- check_job_sums(sum1, sum2)
558
+ [true, false].each do |exclude_end|
559
+ range_offset = Range.new(time_start + offset_end, time_end + offset_end, exclude_end)
560
+ sum1 = Bookie::Database::JobSummary.summary(:range => range_offset)
561
+ sum2 = Bookie::Database::Job.summary(range_offset)
562
+ check_job_sums(sum1, sum2)
563
+ end
526
564
  end
527
565
  end
528
566
  end
529
-
530
- def check_time_bounds
531
- date_min = Date.new(2012)
532
- date_max = date_min + 1
567
+
568
+ it "distinguishes between inclusive and exclusive ranges" do
569
+ Summary = Bookie::Database::JobSummary
570
+ sum = Summary.summary(:range => (base_time ... base_time + 3600 * 2))
571
+ sum[:num_jobs].should eql 2
572
+ sum = Summary.summary(:range => (base_time .. base_time + 3600 * 2))
573
+ sum[:num_jobs].should eql 3
574
+ end
575
+
576
+ def check_time_bounds(time_max = base_time + 1.days)
577
+ time_min = base_time
533
578
  check_job_sums(Bookie::Database::JobSummary.summary, Bookie::Database::Job.summary)
534
- Bookie::Database::JobSummary.order(:date).first.date.should eql date_min
535
- Bookie::Database::JobSummary.order('date DESC').first.date.should eql date_max
579
+ Bookie::Database::JobSummary.order(:date).first.date.should eql time_min.to_date
580
+ Bookie::Database::JobSummary.order('date DESC').first.date.should eql time_max.utc.to_date
536
581
  end
537
582
 
538
583
  it "correctly finds the default time bounds" do
584
+ #The last daily summary in this range isn't cached because Time.now could be partway through a day.
539
585
  check_time_bounds
540
586
  systems = Bookie::Database::System.active_systems
541
587
  Bookie::Database::JobSummary.delete_all
542
588
  #Check the case where all systems are decommissioned.
589
+ end_times = {}
543
590
  begin
544
591
  systems.each do |sys|
545
- sys.end_time = Time.now
592
+ end_times[sys.id] = sys.end_time
593
+ sys.end_time = base_time + 2.days
546
594
  sys.save!
547
595
  end
548
596
  check_time_bounds
549
597
  ensure
550
598
  systems.each do |sys|
551
- sys.end_time = nil
599
+ sys.end_time = end_times[sys.id]
552
600
  sys.save!
553
601
  end
554
602
  end
@@ -570,8 +618,8 @@ describe Bookie::Database do
570
618
 
571
619
  it "correctly handles filtered summaries" do
572
620
  filters = {
573
- :user_name => 'blm',
574
- :group_name => 'blm',
621
+ :user_name => 'test',
622
+ :group_name => 'admin',
575
623
  :command_name => 'vi',
576
624
  }
577
625
  filters.each do |filter, value|
@@ -584,7 +632,7 @@ describe Bookie::Database do
584
632
  end
585
633
 
586
634
  it "correctly handles inverted ranges" do
587
- t = Date.new(2012).to_time
635
+ t = base_time
588
636
  Bookie::Database::JobSummary.summary(:range => t .. t - 1).should eql({
589
637
  :num_jobs => 0,
590
638
  :cpu_time => 0,
@@ -594,9 +642,16 @@ describe Bookie::Database do
594
642
  end
595
643
 
596
644
  it "caches summaries" do
645
+ Bookie::Database::JobSummary.summary
646
+ Bookie::Database::JobSummary.expects(:summarize).never
647
+ range = base_time ... base_time + 1.days
648
+ Bookie::Database::JobSummary.summary(:range => range)
649
+ end
650
+
651
+ it "uses the cached summaries" do
597
652
  Bookie::Database::JobSummary.summary
598
653
  Bookie::Database::Job.expects(:summary).never
599
- range = Date.new(2012) ... Date.new(2012) + 1
654
+ range = base_time ... base_time + 1.days
600
655
  Bookie::Database::JobSummary.summary(:range => range)
601
656
  end
602
657
  end
@@ -607,12 +662,10 @@ describe Bookie::Database do
607
662
  :system => Bookie::Database::System.first,
608
663
  :command_name => '',
609
664
  :date => Date.new(2012),
610
- :num_jobs => 1,
611
665
  :cpu_time => 100,
612
666
  :memory_time => 1000000,
613
- :successful => 1,
614
667
  }
615
-
668
+
616
669
  sum = Bookie::Database::JobSummary.new(fields)
617
670
  sum.valid?.should eql true
618
671
 
@@ -622,7 +675,7 @@ describe Bookie::Database do
622
675
  job.valid?.should eql false
623
676
  end
624
677
 
625
- [:cpu_time, :memory_time, :successful].each do |field|
678
+ [:cpu_time, :memory_time].each do |field|
626
679
  job = Bookie::Database::JobSummary.new(fields)
627
680
  m = job.method("#{field}=".intern)
628
681
  m.call(-1)
@@ -725,6 +778,10 @@ describe Bookie::Database do
725
778
  end
726
779
 
727
780
  describe Bookie::Database::System do
781
+ before(:each) do
782
+ @systems = Bookie::Database::System
783
+ end
784
+
728
785
  it "correctly finds active systems" do
729
786
  Bookie::Database::System.active_systems.length.should eql 3
730
787
  end
@@ -741,14 +798,47 @@ describe Bookie::Database do
741
798
  Bookie::Database::System.by_system_type(t).length.should eql 2
742
799
  end
743
800
  end
744
-
801
+
802
+ describe "#all_with_relations" do
803
+ it "loads all relations" do
804
+ systems = Bookie::Database::System.limit(5)
805
+ relations = {}
806
+ systems = systems.all_with_relations
807
+ Bookie::Database::SystemType.expects(:new).never
808
+ systems.each do |system|
809
+ test_system_relations(system, relations)
810
+ end
811
+ end
812
+ end
813
+
814
+ describe "#by_time_range_inclusive" do
815
+ it "correctly filters by inclusive time range" do
816
+ systems = @systems.by_time_range_inclusive(base_time ... base_time + 36000 * 2 + 1)
817
+ systems.count.should eql 3
818
+ systems = @systems.by_time_range_inclusive(base_time + 1 ... base_time + 36000 * 2)
819
+ systems.count.should eql 2
820
+ systems = @systems.by_time_range_inclusive(base_time ... base_time)
821
+ systems.length.should eql 0
822
+ systems = @systems.by_time_range_inclusive(base_time .. base_time + 36000 * 2)
823
+ systems.count.should eql 3
824
+ systems = @systems.by_time_range_inclusive(base_time .. base_time)
825
+ systems.count.should eql 1
826
+ end
827
+
828
+ it "correctly handles empty/inverted ranges" do
829
+ (-1 .. 0).each do |offset|
830
+ systems = @systems.by_time_range_inclusive(base_time ... base_time + offset)
831
+ systems.count.should eql 0
832
+ end
833
+ end
834
+ end
835
+
745
836
  describe "#summary" do
746
837
  before(:all) do
747
- Time.expects(:now).returns(Time.local(2012) + 3600 * 40).at_least_once
748
- @base_time = Time.local(2012)
838
+ Time.expects(:now).returns(base_time + 3600 * 40).at_least_once
749
839
  @systems = Bookie::Database::System
750
- @summary = Helpers::create_summaries(@systems, Time.local(2012))
751
- @summary_wide = @systems.summary(Time.local(2012) - 3600 ... Time.local(2012) + 3600 * 40 + 3600)
840
+ @summary = Helpers::create_summaries(@systems, base_time)
841
+ @summary_wide = @systems.summary(base_time - 3600 ... base_time + 3600 * 40 + 3600)
752
842
  end
753
843
 
754
844
  it "produces correct summaries" do
@@ -761,18 +851,23 @@ describe Bookie::Database do
761
851
  avg_mem = Float(1000000 * system_total_wall_time / (3600 * 40))
762
852
  clipped_avg_mem = Float(1000000 * system_clipped_wall_time) / (3600 * 25 - 1800)
763
853
  wide_avg_mem = Float(1000000 * system_wide_wall_time) / (3600 * 42)
854
+ @summary[:all][:systems].length.should eql 4
764
855
  @summary[:all][:avail_cpu_time].should eql system_total_cpu_time
765
856
  @summary[:all][:avail_memory_time].should eql 1000000 * system_total_wall_time
766
857
  @summary[:all][:avail_memory_avg].should eql avg_mem
858
+ @summary[:all_constrained][:systems].length.should eql 4
767
859
  @summary[:all_constrained][:avail_cpu_time].should eql system_total_cpu_time
768
860
  @summary[:all_constrained][:avail_memory_time].should eql 1000000 * system_total_wall_time
769
861
  @summary[:all_constrained][:avail_memory_avg].should eql avg_mem
862
+ @summary[:clipped][:systems].length.should eql 3
770
863
  @summary[:clipped][:avail_cpu_time].should eql clipped_cpu_time
771
864
  @summary[:clipped][:avail_memory_time].should eql system_clipped_wall_time * 1000000
772
865
  @summary[:clipped][:avail_memory_avg].should eql clipped_avg_mem
866
+ @summary_wide[:systems].length.should eql 4
773
867
  @summary_wide[:avail_cpu_time].should eql system_wide_cpu_time
774
868
  @summary_wide[:avail_memory_time].should eql 1000000 * system_wide_wall_time
775
869
  @summary_wide[:avail_memory_avg].should eql wide_avg_mem
870
+ @summary[:empty][:systems].length.should eql 0
776
871
  @summary[:empty][:avail_cpu_time].should eql 0
777
872
  @summary[:empty][:avail_memory_time].should eql 0
778
873
  @summary[:empty][:avail_memory_avg].should eql 0.0
@@ -785,7 +880,7 @@ describe Bookie::Database do
785
880
  end
786
881
  summary_all_systems_ended = @systems.summary()
787
882
  summary_all_systems_ended.should eql @summary[:all]
788
- summary_all_systems_ended = @systems.summary(Time.local(2012) ... Time.now + 3600)
883
+ summary_all_systems_ended = @systems.summary(base_time ... Time.now + 3600)
789
884
  s2 = @summary[:all].dup
790
885
  s2[:avail_memory_avg] = Float(1000000 * system_total_wall_time) / (3600 * 41)
791
886
  summary_all_systems_ended.should eql s2
@@ -800,7 +895,7 @@ describe Bookie::Database do
800
895
  end
801
896
 
802
897
  it "correctly handles inverted ranges" do
803
- t = Date.new(2012).to_time
898
+ t = base_time
804
899
  @systems.summary(t ... t - 1).should eql @summary[:empty]
805
900
  @systems.summary(t .. t - 1).should eql @summary[:empty]
806
901
  end
@@ -825,16 +920,16 @@ describe Bookie::Database do
825
920
  it "finds the correct system" do
826
921
  Bookie::Database::System.find_current(@sender_2).id.should eql 2
827
922
  Bookie::Database::System.find_current(@sender_2, Time.now).id.should eql 2
828
- Bookie::Database::System.find_current(@sender_1, Date.new(2012, 1, 1).to_time).id.should eql 1
923
+ Bookie::Database::System.find_current(@sender_1, base_time).id.should eql 1
829
924
  end
830
925
 
831
926
  it "correctly detects the lack of a matching system" do
832
927
  expect {
833
- Bookie::Database::System.find_current(@sender_1, Date.new(2011, 1, 1).to_time)
928
+ Bookie::Database::System.find_current(@sender_1, base_time - 1.years)
834
929
  }.to raise_error(/^There is no system with hostname 'test1' in the database at /)
835
930
  @config_t1.expects(:hostname).at_least_once.returns('test1000')
836
931
  expect {
837
- Bookie::Database::System.find_current(@sender_1, Date.new(2012, 1, 1).to_time)
932
+ Bookie::Database::System.find_current(@sender_1, base_time)
838
933
  }.to raise_error(/^There is no system with hostname 'test1000' in the database at /)
839
934
  end
840
935
 
@@ -876,7 +971,7 @@ describe Bookie::Database do
876
971
  :cores => 2,
877
972
  :memory => 1000000,
878
973
  :system_type => Bookie::Database::SystemType.first,
879
- :start_time => Time.local(2012)
974
+ :start_time => base_time
880
975
  }
881
976
 
882
977
  Bookie::Database::System.new(fields).valid?.should eql true
@@ -901,7 +996,7 @@ describe Bookie::Database do
901
996
  end
902
997
 
903
998
  system = Bookie::Database::System.new(fields)
904
- system.end_time = Time.local(2012)
999
+ system.end_time = base_time
905
1000
  system.valid?.should eql true
906
1001
  system.end_time += 5
907
1002
  system.valid?.should eql true
@@ -970,3 +1065,4 @@ describe Bookie::Database do
970
1065
  end
971
1066
  end
972
1067
  end
1068
+
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Range do
4
+ describe "#normalized" do
5
+ it "correctly normalizes" do
6
+ (1 .. 2).normalized.should eql(1 .. 2)
7
+ (1 .. 1).normalized.should eql(1 .. 1)
8
+ (1 ... 1).normalized.should eql(1 ... 1)
9
+ (1 .. 0).normalized.should eql(1 ... 1)
10
+ (1 ... 0).normalized.should eql( 1 ... 1 )
11
+ end
12
+ end
13
+
14
+ describe "empty?" do
15
+ it "correctly determines emptiness" do
16
+ (1 .. 2).empty?.should eql false
17
+ (1 .. 1).empty?.should eql false
18
+ (1 ... 2).empty?.should eql false
19
+ (1 ... 1).empty?.should eql true
20
+ (1 .. 0).empty?.should eql true
21
+ (1 ... 0).empty?.should eql true
22
+ end
23
+ end
24
+ end
25
+