aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Harder <radhermit@gmail.com>2021-03-04 13:32:55 -0700
committerTim Harder <radhermit@gmail.com>2021-03-04 13:44:12 -0700
commit69eb509bf9dad811fa7060807c2be4d0570bc7cc (patch)
tree2a33eda132f5300ee3d20bbc5a3e12bb69abd6df /tests/test_version.py
parentvarious tox and github testing updates (diff)
downloadsnakeoil-69eb509bf9dad811fa7060807c2be4d0570bc7cc.tar.gz
snakeoil-69eb509bf9dad811fa7060807c2be4d0570bc7cc.tar.bz2
snakeoil-69eb509bf9dad811fa7060807c2be4d0570bc7cc.zip
tests: move to main repo root dir
Diffstat (limited to 'tests/test_version.py')
-rw-r--r--tests/test_version.py142
1 files changed, 142 insertions, 0 deletions
diff --git a/tests/test_version.py b/tests/test_version.py
new file mode 100644
index 00000000..ab74e57d
--- /dev/null
+++ b/tests/test_version.py
@@ -0,0 +1,142 @@
+import errno
+from importlib import reload
+from unittest import mock
+
+import pytest
+
+from snakeoil import __version__
+from snakeoil import version
+
+
+class TestVersion:
+
+ def setup_method(self, method):
+ # reset the cached version in the module
+ reload(version)
+
+ def test_get_version_release(self):
+ pass
+
+ def test_get_version_unknown(self):
+ with pytest.raises(ValueError):
+ version.get_version('snakeoilfoo', __file__)
+
+ def test_get_version_api(self):
+ v = version.get_version('snakeoil', __file__, '9.9.9')
+ assert v.startswith('snakeoil 9.9.9')
+
+ def test_get_version_git_dev(self):
+ with mock.patch('snakeoil.version.import_module') as import_module, \
+ mock.patch('snakeoil.version.get_git_version') as get_git_version:
+ import_module.side_effect = ImportError
+ verinfo = {
+ 'rev': '1ff76b021d208f7df38ac524537b6419404f1c64',
+ 'date': 'Mon Sep 25 13:50:24 2017 -0400',
+ 'tag': None
+ }
+ get_git_version.return_value = verinfo
+
+ result = version.get_version('snakeoil', __file__, __version__)
+ assert result == f"snakeoil {__version__}-g{verinfo['rev'][:7]} -- {verinfo['date']}"
+
+ def test_get_version_git_release(self):
+ verinfo = {
+ 'rev': 'ab38751890efa8be96b7f95938d6b868b769bab6',
+ 'date': 'Thu Sep 21 15:57:38 2017 -0400',
+ 'tag': '2.3.4',
+ }
+
+ # fake snakeoil._verinfo module object
+ class Verinfo:
+ version_info = verinfo
+
+ with mock.patch('snakeoil.version.import_module') as import_module:
+ import_module.return_value = Verinfo()
+ result = version.get_version('snakeoil', __file__, verinfo['tag'])
+ assert result == f"snakeoil {verinfo['tag']} -- released {verinfo['date']}"
+
+ def test_get_version_no_git_version(self):
+ with mock.patch('snakeoil.version.import_module') as import_module, \
+ mock.patch('snakeoil.version.get_git_version') as get_git_version:
+ import_module.side_effect = ImportError
+ get_git_version.return_value = None
+ result = version.get_version('snakeoil', 'nonexistent', __version__)
+ assert result == f'snakeoil {__version__}'
+
+ def test_get_version_caching(self):
+ # retrieved version info is cached in a module attr
+ v = version.get_version('snakeoil', __file__)
+ assert v.startswith(f'snakeoil {__version__}')
+
+ # re-running get_version returns the cached attr instead of reprocessing
+ with mock.patch('snakeoil.version.import_module') as import_module:
+ v = version.get_version('snakeoil', __file__)
+ assert not import_module.called
+
+
+class TestGitVersion:
+
+ def test_get_git_version_not_available(self):
+ with mock.patch('snakeoil.version._run_git') as run_git:
+ run_git.side_effect = EnvironmentError(errno.ENOENT, 'git not found')
+ assert version.get_git_version('nonexistent') is None
+
+ def test_get_git_version_error(self):
+ with mock.patch('snakeoil.version._run_git') as run_git:
+ run_git.return_value = (b'foo', 1)
+ assert version.get_git_version('nonexistent') is None
+
+ def test_get_git_version_non_repo(self, tmpdir):
+ assert version.get_git_version(str(tmpdir)) is None
+
+ def test_get_git_version_exc(self):
+ with pytest.raises(OSError):
+ with mock.patch('snakeoil.version._run_git') as run_git:
+ run_git.side_effect = OSError(errno.EIO, 'Input/output error')
+ version.get_git_version('nonexistent')
+
+ def test_get_git_version_good_dev(self):
+ with mock.patch('snakeoil.version._run_git') as run_git:
+ # dev version
+ run_git.return_value = (
+ b'1ff76b021d208f7df38ac524537b6419404f1c64\nMon Sep 25 13:50:24 2017 -0400', 0)
+ result = version.get_git_version('nonexistent')
+ expected = {
+ 'rev': '1ff76b021d208f7df38ac524537b6419404f1c64',
+ 'date': 'Mon Sep 25 13:50:24 2017 -0400',
+ 'tag': None,
+ 'commits': 2,
+ }
+ assert result == expected
+
+ def test_get_git_version_good_tag(self):
+ with mock.patch('snakeoil.version._run_git') as run_git, \
+ mock.patch('snakeoil.version._get_git_tag') as get_git_tag:
+ # tagged, release version
+ run_git.return_value = (
+ b'1ff76b021d208f7df38ac524537b6419404f1c64\nMon Sep 25 13:50:24 2017 -0400', 0)
+ get_git_tag.return_value = '1.1.1'
+ result = version.get_git_version('nonexistent')
+ expected = {
+ 'rev': '1ff76b021d208f7df38ac524537b6419404f1c64',
+ 'date': 'Mon Sep 25 13:50:24 2017 -0400',
+ 'tag': '1.1.1',
+ 'commits': 2,
+ }
+ assert result == expected
+
+ def test_get_git_tag_bad_output(self):
+ with mock.patch('snakeoil.version._run_git') as run_git:
+ # unknown git tag rev output
+ run_git.return_value = (b'a', 1)
+ assert version._get_git_tag('foo', 'bar') is None
+ run_git.return_value = (b'a foo/v0.7.2', 0)
+ assert version._get_git_tag('foo', 'bar') is None
+
+ # expected output formats
+ run_git.return_value = (b'ab38751890efa8be96b7f95938d6b868b769bab6 tags/v1.1.1^0', 0)
+ assert version._get_git_tag('foo', 'bar') == '1.1.1'
+ run_git.return_value = (b'ab38751890efa8be96b7f95938d6b868b769bab6 tags/v1.1.1', 0)
+ assert version._get_git_tag('foo', 'bar') == '1.1.1'
+ run_git.return_value = (b'ab38751890efa8be96b7f95938d6b868b769bab6 tags/1.1.1', 0)
+ assert version._get_git_tag('foo', 'bar') == '1.1.1'