|
3 | 3 |
|
4 | 4 | RSpec.describe Database::OldRecordCleanup do |
5 | 5 | describe '#delete' do |
6 | | - let!(:stale_event1) { VCAP::CloudController::Event.make(created_at: 1.day.ago - 1.minute) } |
7 | | - let!(:stale_event2) { VCAP::CloudController::Event.make(created_at: 2.days.ago) } |
| 6 | + it 'deletes records older than specified days' do |
| 7 | + stale_event1 = VCAP::CloudController::Event.make(created_at: 1.day.ago - 1.minute) |
| 8 | + stale_event2 = VCAP::CloudController::Event.make(created_at: 2.days.ago) |
8 | 9 |
|
9 | | - let!(:fresh_event) { VCAP::CloudController::Event.make(created_at: 1.day.ago + 1.minute) } |
| 10 | + fresh_event = VCAP::CloudController::Event.make(created_at: 1.day.ago + 1.minute) |
10 | 11 |
|
11 | | - it 'deletes records older than specified days' do |
12 | 12 | record_cleanup = Database::OldRecordCleanup.new(VCAP::CloudController::Event, cutoff_age_in_days: 1) |
13 | 13 |
|
14 | 14 | expect do |
|
22 | 22 |
|
23 | 23 | context "when there are no records at all but you're trying to keep at least one" do |
24 | 24 | it "doesn't keep one because there aren't any to keep" do |
25 | | - record_cleanup = Database::OldRecordCleanup.new(VCAP::CloudController::ServiceUsageEvent, cutoff_age_in_days: 1, keep_at_least_one_record: true) |
| 25 | + record_cleanup = Database::OldRecordCleanup.new(VCAP::CloudController::AppEvent, cutoff_age_in_days: 1, keep_at_least_one_record: true, keep_running_records: true) |
26 | 26 |
|
27 | 27 | expect { record_cleanup.delete }.not_to raise_error |
28 | | - expect(VCAP::CloudController::ServiceUsageEvent.count).to eq(0) |
| 28 | + expect(VCAP::CloudController::AppEvent.count).to eq(0) |
29 | 29 | end |
30 | 30 | end |
31 | 31 |
|
|
36 | 36 | end |
37 | 37 |
|
38 | 38 | it 'keeps the last row when :keep_at_least_one_record is true even if it is older than the cutoff date' do |
39 | | - record_cleanup = Database::OldRecordCleanup.new(VCAP::CloudController::Event, cutoff_age_in_days: 0, keep_at_least_one_record: true) |
| 39 | + stale_event1 = VCAP::CloudController::Event.make(created_at: 1.day.ago - 1.minute) |
| 40 | + stale_event2 = VCAP::CloudController::Event.make(created_at: 2.days.ago) |
| 41 | + |
| 42 | + fresh_event = VCAP::CloudController::Event.make(created_at: 1.day.ago + 1.minute) |
| 43 | + |
| 44 | + record_cleanup = Database::OldRecordCleanup.new(VCAP::CloudController::Event, cutoff_age_in_days: 0, keep_at_least_one_record: true, keep_running_records: true) |
40 | 45 |
|
41 | 46 | expect do |
42 | 47 | record_cleanup.delete |
|
46 | 51 | expect { stale_event1.reload }.to raise_error(Sequel::NoExistingObject) |
47 | 52 | expect { stale_event2.reload }.to raise_error(Sequel::NoExistingObject) |
48 | 53 | end |
| 54 | + |
| 55 | + # Testing keep_running_records feature |
| 56 | + it 'keeps AppUsageEvent start record when there is no corresponding stop record' do |
| 57 | + stale_app_usage_event_start = VCAP::CloudController::AppUsageEvent.make(created_at: 2.days.ago, state: 'STARTED', app_guid: 'guid1') |
| 58 | + |
| 59 | + record_cleanup = Database::OldRecordCleanup.new(VCAP::CloudController::AppUsageEvent, cutoff_age_in_days: 1, keep_at_least_one_record: false, keep_running_records: true) |
| 60 | + record_cleanup.delete |
| 61 | + expect(stale_app_usage_event_start.reload).to be_present |
| 62 | + end |
| 63 | + |
| 64 | + it 'keeps AppUsageEvent start record when stop record is fresh' do |
| 65 | + stale_app_usage_event_start = VCAP::CloudController::AppUsageEvent.make(created_at: 2.days.ago, state: 'STARTED', app_guid: 'guid1') |
| 66 | + fresh_app_usage_event_stop = VCAP::CloudController::AppUsageEvent.make(created_at: 1.day.ago + 1.minute, state: 'STOPPED', app_guid: 'guid1') |
| 67 | + |
| 68 | + record_cleanup = Database::OldRecordCleanup.new(VCAP::CloudController::AppUsageEvent, cutoff_age_in_days: 1, keep_at_least_one_record: false, keep_running_records: true) |
| 69 | + record_cleanup.delete |
| 70 | + expect(stale_app_usage_event_start.reload).to be_present |
| 71 | + expect(fresh_app_usage_event_stop.reload).to be_present |
| 72 | + end |
| 73 | + |
| 74 | + it 'keeps AppUsageEvent start record when stop record is newer' do |
| 75 | + stale_app_usage_event_stop = VCAP::CloudController::AppUsageEvent.make(created_at: 3.days.ago, state: 'STOPPED', app_guid: 'guid1') |
| 76 | + stale_app_usage_event_start = VCAP::CloudController::AppUsageEvent.make(created_at: 2.days.ago, state: 'STARTED', app_guid: 'guid1') |
| 77 | + |
| 78 | + record_cleanup = Database::OldRecordCleanup.new(VCAP::CloudController::AppUsageEvent, cutoff_age_in_days: 1, keep_at_least_one_record: false, keep_running_records: true) |
| 79 | + record_cleanup.delete |
| 80 | + expect(stale_app_usage_event_start.reload).to be_present |
| 81 | + expect { stale_app_usage_event_stop.reload }.to raise_error(Sequel::NoExistingObject) |
| 82 | + end |
| 83 | + |
| 84 | + it 'keeps ServiceUsageEvent create record when there is no corresponding delete record' do |
| 85 | + stale_service_usage_event_create = VCAP::CloudController::ServiceUsageEvent.make(created_at: 2.days.ago, state: 'CREATED', service_instance_guid: 'guid1') |
| 86 | + |
| 87 | + record_cleanup = Database::OldRecordCleanup.new(VCAP::CloudController::ServiceUsageEvent, cutoff_age_in_days: 1, keep_at_least_one_record: false, keep_running_records: true) |
| 88 | + record_cleanup.delete |
| 89 | + expect(stale_service_usage_event_create.reload).to be_present |
| 90 | + end |
| 91 | + |
| 92 | + it 'keeps ServiceUsageEvent create record when delete record is fresh' do |
| 93 | + stale_service_usage_event_create = VCAP::CloudController::ServiceUsageEvent.make(created_at: 2.days.ago, state: 'CREATED', service_instance_guid: 'guid1') |
| 94 | + fresh_service_usage_event_delete = VCAP::CloudController::ServiceUsageEvent.make(created_at: 1.day.ago + 1.minute, state: 'DELETED', service_instance_guid: 'guid1') |
| 95 | + |
| 96 | + record_cleanup = Database::OldRecordCleanup.new(VCAP::CloudController::ServiceUsageEvent, cutoff_age_in_days: 1, keep_at_least_one_record: false, keep_running_records: true) |
| 97 | + record_cleanup.delete |
| 98 | + expect(stale_service_usage_event_create.reload).to be_present |
| 99 | + expect(fresh_service_usage_event_delete.reload).to be_present |
| 100 | + end |
| 101 | + |
| 102 | + it 'keeps ServiceUsageEvent create record when delete record is newer' do |
| 103 | + stale_service_usage_event_delete = VCAP::CloudController::ServiceUsageEvent.make(created_at: 3.days.ago, state: 'DELETED', service_instance_guid: 'guid1') |
| 104 | + stale_service_usage_event_create = VCAP::CloudController::ServiceUsageEvent.make(created_at: 2.days.ago, state: 'CREATED', service_instance_guid: 'guid1') |
| 105 | + |
| 106 | + record_cleanup = Database::OldRecordCleanup.new(VCAP::CloudController::ServiceUsageEvent, cutoff_age_in_days: 1, keep_at_least_one_record: false, keep_running_records: true) |
| 107 | + record_cleanup.delete |
| 108 | + expect(stale_service_usage_event_create.reload).to be_present |
| 109 | + expect { stale_service_usage_event_delete.reload }.to raise_error(Sequel::NoExistingObject) |
| 110 | + end |
49 | 111 | end |
50 | 112 | end |
0 commit comments