| |
@@ -40,6 +40,7 @@
|
| |
'end_event': None,
|
| |
'id': 2385,
|
| |
'opts': {'debuginfo': False, 'separate_src': False, 'src': False},
|
| |
+ 'custom_opts': {},
|
| |
'state': 1,
|
| |
'state_ts': 1710705227.166751,
|
| |
'tag_id': 50,
|
| |
@@ -126,4 +127,134 @@
|
| |
self.session.repo.setState.assert_called_once_with(self.repo.id, koji.REPO_DELETED)
|
| |
self.mgr.rmtree.assert_called_once_with(path)
|
| |
|
| |
+ def test_expire_check_recent(self):
|
| |
+ self.options.repo_lifetime = 3600 * 24
|
| |
+ self.options.recheck_period = 3600
|
| |
+ base_ts = 444888888
|
| |
+ now = base_ts + 100
|
| |
+
|
| |
+ self.repo.data['state'] = koji.REPO_READY
|
| |
+ self.repo.data['state_ts'] = base_ts
|
| |
+ self.repo.data['end_event'] = 999
|
| |
+
|
| |
+ with mock.patch('time.time') as _time:
|
| |
+ _time.return_value = now
|
| |
+ self.repo.expire_check()
|
| |
+
|
| |
+ # we should have stopped at the age check
|
| |
+ self.session.getBuildTargets.assert_not_called()
|
| |
+ self.session.repoExpire.assert_not_called()
|
| |
+
|
| |
+ def test_expire_check_recheck(self):
|
| |
+ self.options.repo_lifetime = 3600 * 24
|
| |
+ self.options.recheck_period = 3600
|
| |
+ base_ts = 444888888
|
| |
+ now = base_ts + self.options.repo_lifetime + 100
|
| |
+
|
| |
+ # recheck period still in effect
|
| |
+ self.repo.expire_check_ts = now - 3500
|
| |
+ # otherwise eligible to expire
|
| |
+ self.repo.data['state'] = koji.REPO_READY
|
| |
+ self.repo.data['state_ts'] = base_ts
|
| |
+ self.repo.data['end_event'] = 999
|
| |
+
|
| |
+ with mock.patch('time.time') as _time:
|
| |
+ _time.return_value = now
|
| |
+ self.repo.expire_check()
|
| |
+
|
| |
+ self.session.getBuildTargets.assert_not_called()
|
| |
+ self.session.repo.query.assert_not_called()
|
| |
+ self.session.repoExpire.assert_not_called()
|
| |
+
|
| |
+ def test_expire_check_latest(self):
|
| |
+ self.options.repo_lifetime = 3600 * 24
|
| |
+ self.options.recheck_period = 3600
|
| |
+ base_ts = 444888888
|
| |
+ now = base_ts + self.options.repo_lifetime + 100
|
| |
+
|
| |
+ self.repo.data['state'] = koji.REPO_READY
|
| |
+ self.repo.data['state_ts'] = base_ts
|
| |
+ self.repo.data['end_event'] = 999
|
| |
+ # latest for a target, should not get expired
|
| |
+ self.session.getBuildTargets.return_value = ['TARGET']
|
| |
+ self.session.repo.query.return_value = []
|
| |
+
|
| |
+ with mock.patch('time.time') as _time:
|
| |
+ _time.return_value = now
|
| |
+ self.repo.expire_check()
|
| |
+
|
| |
+ self.session.getBuildTargets.assert_called_once()
|
| |
+ self.session.repo.query.assert_called_once()
|
| |
+ self.session.repoExpire.assert_not_called()
|
| |
+
|
| |
+ def test_expire_check_latest_dist(self):
|
| |
+ self.options.dist_repo_lifetime = 3600 * 24
|
| |
+ self.options.recheck_period = 3600
|
| |
+ base_ts = 444888888
|
| |
+ now = base_ts + self.options.dist_repo_lifetime + 100
|
| |
+
|
| |
+ self.repo.data['dist'] = True
|
| |
+ self.repo.dist = True
|
| |
+ self.repo.data['state'] = koji.REPO_READY
|
| |
+ self.repo.data['state_ts'] = base_ts
|
| |
+ self.repo.data['end_event'] = 999
|
| |
+ # latest for a target, should not get expired
|
| |
+ self.session.getBuildTargets.return_value = ['TARGET']
|
| |
+ self.session.repo.query.return_value = []
|
| |
+
|
| |
+ with mock.patch('time.time') as _time:
|
| |
+ _time.return_value = now
|
| |
+ self.repo.expire_check()
|
| |
+
|
| |
+ self.session.getBuildTargets.assert_not_called()
|
| |
+ # no target check for dist repos
|
| |
+ self.session.repo.query.assert_called_once()
|
| |
+ self.session.repoExpire.assert_not_called()
|
| |
+
|
| |
+ def test_expire_check_expire(self):
|
| |
+ self.options.repo_lifetime = 3600 * 24
|
| |
+ self.options.recheck_period = 3600
|
| |
+ base_ts = 444888888
|
| |
+ now = base_ts + self.options.repo_lifetime + 100
|
| |
+
|
| |
+ self.repo.data['state'] = koji.REPO_READY
|
| |
+ self.repo.data['state_ts'] = base_ts
|
| |
+ self.repo.data['end_event'] = 999
|
| |
+ # not latest
|
| |
+ self.session.getBuildTargets.return_value = ['TARGET']
|
| |
+ self.session.repo.query.return_value = ['NEWER_REPO']
|
| |
+
|
| |
+ with mock.patch('time.time') as _time:
|
| |
+ _time.return_value = now
|
| |
+ self.repo.expire_check()
|
| |
+
|
| |
+ self.session.getBuildTargets.assert_called_once()
|
| |
+ self.session.repo.query.assert_called_once()
|
| |
+ self.session.repoExpire.assert_called_once()
|
| |
+
|
| |
+ def test_expire_check_expire_dist(self):
|
| |
+ self.options.dist_repo_lifetime = 3600 * 24
|
| |
+ self.options.recheck_period = 3600
|
| |
+ base_ts = 444888888
|
| |
+ now = base_ts + self.options.dist_repo_lifetime + 100
|
| |
+
|
| |
+ self.repo.data['dist'] = True
|
| |
+ self.repo.dist = True
|
| |
+ self.repo.data['state'] = koji.REPO_READY
|
| |
+ self.repo.data['state_ts'] = base_ts
|
| |
+ self.repo.data['end_event'] = 999
|
| |
+ # not latest
|
| |
+ self.session.getBuildTargets.return_value = ['TARGET']
|
| |
+ self.session.repo.query.return_value = ['NEWER_REPO']
|
| |
+
|
| |
+ with mock.patch('time.time') as _time:
|
| |
+ _time.return_value = now
|
| |
+ self.repo.expire_check()
|
| |
+
|
| |
+ self.session.getBuildTargets.assert_not_called()
|
| |
+ # no target check for dist repos
|
| |
+ self.session.repo.query.assert_called_once()
|
| |
+ self.session.repoExpire.assert_called_once()
|
| |
+
|
| |
+
|
| |
# the end
|
| |
If a build target is not used for building for longer than the total repo lifetime, then we could end up with no repo. This change causes kojira to keep the latest repo for build tags, even if they are no longer current.
Fixes https://pagure.io/koji/issue/4276