diff options
| author | Gavin Mak <gavinmak@google.com> | 2023-07-22 02:56:44 +0000 |
|---|---|---|
| committer | LUCI <gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-07-28 18:55:04 +0000 |
| commit | 1d2e99d0289a36e8c2a53ff3bf5690f0f780ba63 (patch) | |
| tree | 2df20c20871fa0dceb8d545e76b75ff76b9e755d /tests/test_subcmds_sync.py | |
| parent | c657844efe40b97700c3654989bdbe3a33e409d7 (diff) | |
| download | git-repo-1d2e99d0289a36e8c2a53ff3bf5690f0f780ba63.tar.gz git-repo-1d2e99d0289a36e8c2a53ff3bf5690f0f780ba63.zip | |
sync: Track last completed fetch/checkout
Save the latest time any project is fetched and checked out. This will
be used to detect partial checkouts.
Bug: b/286126621
Change-Id: I53b264dc70ba168d506076dbd693ef79a696b61d
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/380514
Commit-Queue: Gavin Mak <gavinmak@google.com>
Reviewed-by: Joanna Wang <jojwang@google.com>
Tested-by: Gavin Mak <gavinmak@google.com>
Diffstat (limited to 'tests/test_subcmds_sync.py')
| -rw-r--r-- | tests/test_subcmds_sync.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/tests/test_subcmds_sync.py b/tests/test_subcmds_sync.py index 5c8e606ee..057478efa 100644 --- a/tests/test_subcmds_sync.py +++ b/tests/test_subcmds_sync.py @@ -14,6 +14,8 @@ """Unittests for the subcmds/sync.py module.""" import os +import shutil +import tempfile import unittest from unittest import mock @@ -104,6 +106,79 @@ def test_cli_jobs(argv, jobs_manifest, jobs, jobs_net, jobs_check): assert opts.jobs_checkout == jobs_check +class LocalSyncState(unittest.TestCase): + """Tests for _LocalSyncState.""" + + _TIME = 10 + + def setUp(self): + """Common setup.""" + self.repodir = tempfile.mkdtemp(".repo") + self.manifest = mock.MagicMock( + repodir=self.repodir, + ) + self.state = self._new_state() + + def tearDown(self): + """Common teardown.""" + shutil.rmtree(self.repodir) + + def _new_state(self): + with mock.patch("time.time", return_value=self._TIME): + return sync._LocalSyncState(self.manifest) + + def test_set(self): + """Times are set.""" + p = mock.MagicMock(relpath="projA") + self.state.SetFetchTime(p) + self.state.SetCheckoutTime(p) + self.assertEqual(self.state.GetFetchTime(p), self._TIME) + self.assertEqual(self.state.GetCheckoutTime(p), self._TIME) + + def test_update(self): + """Times are updated.""" + with open(self.state._path, "w") as f: + f.write( + """ + { + "projB": { + "last_fetch": 5, + "last_checkout": 7 + } + } + """ + ) + + # Initialize state to read from the new file. + self.state = self._new_state() + projA = mock.MagicMock(relpath="projA") + projB = mock.MagicMock(relpath="projB") + self.assertEqual(self.state.GetFetchTime(projA), None) + self.assertEqual(self.state.GetFetchTime(projB), 5) + self.assertEqual(self.state.GetCheckoutTime(projB), 7) + + self.state.SetFetchTime(projA) + self.state.SetFetchTime(projB) + self.assertEqual(self.state.GetFetchTime(projA), self._TIME) + self.assertEqual(self.state.GetFetchTime(projB), self._TIME) + self.assertEqual(self.state.GetCheckoutTime(projB), 7) + + def test_save_to_file(self): + """Data is saved under repodir.""" + p = mock.MagicMock(relpath="projA") + self.state.SetFetchTime(p) + self.state.Save() + self.assertEqual( + os.listdir(self.repodir), [".repo_localsyncstate.json"] + ) + + def test_nonexistent_project(self): + """Unsaved projects don't have data.""" + p = mock.MagicMock(relpath="projC") + self.assertEqual(self.state.GetFetchTime(p), None) + self.assertEqual(self.state.GetCheckoutTime(p), None) + + class GetPreciousObjectsState(unittest.TestCase): """Tests for _GetPreciousObjectsState.""" |
