|
@@ -36,21 +36,21 @@ from grass.lib.imagery import (
|
|
|
I_signatures_rename,
|
|
|
I_signatures_list_by_type,
|
|
|
I_free_signatures_list,
|
|
|
- I__get_signatures_element,
|
|
|
- I__make_signatures_element,
|
|
|
+ I_get_signatures_dir,
|
|
|
+ I_make_signatures_dir,
|
|
|
)
|
|
|
|
|
|
|
|
|
class GetSignaturesElementTestCase(TestCase):
|
|
|
def test_get_sig(self):
|
|
|
- elem = ctypes.create_string_buffer(GNAME_MAX)
|
|
|
- I__get_signatures_element(elem, I_SIGFILE_TYPE_SIG)
|
|
|
- self.assertEqual(utils.decode(elem.value), f"signatures{HOST_DIRSEP}sig")
|
|
|
+ cdir = ctypes.create_string_buffer(GNAME_MAX)
|
|
|
+ I_get_signatures_dir(cdir, I_SIGFILE_TYPE_SIG)
|
|
|
+ self.assertEqual(utils.decode(cdir.value), f"signatures{HOST_DIRSEP}sig")
|
|
|
|
|
|
def test_get_sigset(self):
|
|
|
- elem = ctypes.create_string_buffer(GNAME_MAX)
|
|
|
- I__get_signatures_element(elem, I_SIGFILE_TYPE_SIGSET)
|
|
|
- self.assertEqual(utils.decode(elem.value), f"signatures{HOST_DIRSEP}sigset")
|
|
|
+ cdir = ctypes.create_string_buffer(GNAME_MAX)
|
|
|
+ I_get_signatures_dir(cdir, I_SIGFILE_TYPE_SIGSET)
|
|
|
+ self.assertEqual(utils.decode(cdir.value), f"signatures{HOST_DIRSEP}sigset")
|
|
|
|
|
|
|
|
|
class MakeSignaturesElementTestCase(TestCase):
|
|
@@ -69,23 +69,23 @@ class MakeSignaturesElementTestCase(TestCase):
|
|
|
shutil.rmtree(cls.tmp_mapset_path, ignore_errors=True)
|
|
|
|
|
|
def test_make_sig(self):
|
|
|
- I__make_signatures_element(I_SIGFILE_TYPE_SIG)
|
|
|
+ I_make_signatures_dir(I_SIGFILE_TYPE_SIG)
|
|
|
self.assertTrue(
|
|
|
os.path.isdir(os.path.join(self.tmp_mapset_path, "signatures", "sig"))
|
|
|
)
|
|
|
# There should not be any side effects of calling function multiple times
|
|
|
- I__make_signatures_element(I_SIGFILE_TYPE_SIG)
|
|
|
+ I_make_signatures_dir(I_SIGFILE_TYPE_SIG)
|
|
|
self.assertTrue(
|
|
|
os.path.isdir(os.path.join(self.tmp_mapset_path, "signatures", "sig"))
|
|
|
)
|
|
|
|
|
|
def test_make_sigset(self):
|
|
|
- I__make_signatures_element(I_SIGFILE_TYPE_SIGSET)
|
|
|
+ I_make_signatures_dir(I_SIGFILE_TYPE_SIGSET)
|
|
|
self.assertTrue(
|
|
|
os.path.isdir(os.path.join(self.tmp_mapset_path, "signatures", "sigset"))
|
|
|
)
|
|
|
# There should not be any side effects of calling function multiple times
|
|
|
- I__make_signatures_element(I_SIGFILE_TYPE_SIGSET)
|
|
|
+ I_make_signatures_dir(I_SIGFILE_TYPE_SIGSET)
|
|
|
self.assertTrue(
|
|
|
os.path.isdir(os.path.join(self.tmp_mapset_path, "signatures", "sigset"))
|
|
|
)
|
|
@@ -96,7 +96,7 @@ class SignaturesRemoveTestCase(TestCase):
|
|
|
def setUpClass(cls):
|
|
|
cls.mpath = utils.decode(G_mapset_path())
|
|
|
cls.mapset_name = Mapset().name
|
|
|
- cls.sigfiles = []
|
|
|
+ cls.sigdirs = []
|
|
|
# As signatures are created directly not via signature creation
|
|
|
# tools, we must ensure signature directories exist
|
|
|
os.makedirs(f"{cls.mpath}/signatures/sig/", exist_ok=True)
|
|
@@ -104,27 +104,30 @@ class SignaturesRemoveTestCase(TestCase):
|
|
|
|
|
|
@classmethod
|
|
|
def tearDownClass(cls):
|
|
|
- for f in cls.sigfiles:
|
|
|
- try:
|
|
|
- os.remove(f)
|
|
|
- except OSError:
|
|
|
- pass
|
|
|
+ for d in cls.sigdirs:
|
|
|
+ shutil.rmtree(d, ignore_errors=True)
|
|
|
|
|
|
def test_remove_existing_sig(self):
|
|
|
# This test will fail if run in PERMANENT!
|
|
|
# Set up files and mark for clean-up
|
|
|
sig_name1 = tempname(10)
|
|
|
- sigfile_name1 = f"{self.mpath}/signatures/sigset/{sig_name1}"
|
|
|
+ sig_dir1 = f"{self.mpath}/signatures/sigset/{sig_name1}"
|
|
|
+ os.makedirs(sig_dir1)
|
|
|
+ self.sigdirs.append(sig_dir1)
|
|
|
+ sigfile_name1 = f"{sig_dir1}/sig"
|
|
|
open(sigfile_name1, "a").close()
|
|
|
- self.sigfiles.append(sigfile_name1)
|
|
|
sig_name2 = tempname(10)
|
|
|
- sigfile_name2 = f"{self.mpath}/signatures/sig/{sig_name2}"
|
|
|
+ sig_dir2 = f"{self.mpath}/signatures/sig/{sig_name2}"
|
|
|
+ os.makedirs(sig_dir2)
|
|
|
+ self.sigdirs.append(sig_dir2)
|
|
|
+ sigfile_name2 = f"{sig_dir2}/sig"
|
|
|
open(sigfile_name2, "a").close()
|
|
|
- self.sigfiles.append(sigfile_name2)
|
|
|
sig_name3 = tempname(10)
|
|
|
- sigfile_name3 = f"{self.mpath}/signatures/sig/{sig_name3}"
|
|
|
+ sig_dir3 = f"{self.mpath}/signatures/sig/{sig_name3}"
|
|
|
+ os.makedirs(sig_dir3)
|
|
|
+ self.sigdirs.append(sig_dir3)
|
|
|
+ sigfile_name3 = f"{sig_dir3}/sig"
|
|
|
open(sigfile_name3, "a").close()
|
|
|
- self.sigfiles.append(sigfile_name3)
|
|
|
# Try to remove with wrong type
|
|
|
ret = I_signatures_remove(I_SIGFILE_TYPE_SIGSET, sig_name2)
|
|
|
self.assertEqual(ret, 1)
|
|
@@ -155,15 +158,19 @@ class SignaturesRemoveTestCase(TestCase):
|
|
|
def test_remove_nonexisting_sig(self):
|
|
|
# Set up files and mark for clean-up
|
|
|
sig_name1 = tempname(10)
|
|
|
- sigfile_name1 = f"{self.mpath}/signatures/sigset/{sig_name1}"
|
|
|
+ sig_dir1 = f"{self.mpath}/signatures/sigset/{sig_name1}"
|
|
|
+ os.makedirs(sig_dir1)
|
|
|
+ self.sigdirs.append(sig_dir1)
|
|
|
+ sigfile_name1 = f"{sig_dir1}/sig"
|
|
|
open(sigfile_name1, "a").close()
|
|
|
- self.sigfiles.append(sigfile_name1)
|
|
|
sig_name2 = tempname(10)
|
|
|
# Do not create sig_name2 matching file
|
|
|
sig_name3 = tempname(10)
|
|
|
- sigfile_name3 = f"{self.mpath}/signatures/sig/{sig_name3}"
|
|
|
+ sig_dir3 = f"{self.mpath}/signatures/sig/{sig_name3}"
|
|
|
+ os.makedirs(sig_dir3)
|
|
|
+ self.sigdirs.append(sig_dir3)
|
|
|
+ sigfile_name3 = f"{sig_dir3}/sig"
|
|
|
open(sigfile_name3, "a").close()
|
|
|
- self.sigfiles.append(sigfile_name3)
|
|
|
# Now remove one (should fail as file is absent)
|
|
|
ret = I_signatures_remove(I_SIGFILE_TYPE_SIG, sig_name2)
|
|
|
self.assertEqual(ret, 1)
|
|
@@ -183,17 +190,23 @@ class SignaturesRemoveTestCase(TestCase):
|
|
|
def test_remove_existing_sigset(self):
|
|
|
# Set up files and mark for clean-up
|
|
|
sig_name1 = tempname(10)
|
|
|
- sigfile_name1 = f"{self.mpath}/signatures/sigset/{sig_name1}"
|
|
|
+ sig_dir1 = f"{self.mpath}/signatures/sigset/{sig_name1}"
|
|
|
+ os.makedirs(sig_dir1)
|
|
|
+ self.sigdirs.append(sig_dir1)
|
|
|
+ sigfile_name1 = f"{sig_dir1}/sig"
|
|
|
open(sigfile_name1, "a").close()
|
|
|
- self.sigfiles.append(sigfile_name1)
|
|
|
sig_name2 = tempname(10)
|
|
|
- sigfile_name2 = f"{self.mpath}/signatures/sigset/{sig_name2}"
|
|
|
+ sig_dir2 = f"{self.mpath}/signatures/sigset/{sig_name2}"
|
|
|
+ os.makedirs(sig_dir2)
|
|
|
+ self.sigdirs.append(sig_dir2)
|
|
|
+ sigfile_name2 = f"{sig_dir2}/sig"
|
|
|
open(sigfile_name2, "a").close()
|
|
|
- self.sigfiles.append(sigfile_name2)
|
|
|
sig_name3 = tempname(10)
|
|
|
- sigfile_name3 = f"{self.mpath}/signatures/sig/{sig_name3}"
|
|
|
+ sig_dir3 = f"{self.mpath}/signatures/sig/{sig_name3}"
|
|
|
+ os.makedirs(sig_dir3)
|
|
|
+ self.sigdirs.append(sig_dir3)
|
|
|
+ sigfile_name3 = f"{sig_dir3}/sig"
|
|
|
open(sigfile_name3, "a").close()
|
|
|
- self.sigfiles.append(sigfile_name3)
|
|
|
# Try to remove with wrong type
|
|
|
ret = I_signatures_remove(I_SIGFILE_TYPE_SIG, sig_name2)
|
|
|
self.assertEqual(ret, 1)
|
|
@@ -224,15 +237,19 @@ class SignaturesRemoveTestCase(TestCase):
|
|
|
def test_remove_nonexisting_sigset(self):
|
|
|
# Set up files and mark for clean-up
|
|
|
sig_name1 = tempname(10)
|
|
|
- sigfile_name1 = f"{self.mpath}/signatures/sigset/{sig_name1}"
|
|
|
+ sig_dir1 = f"{self.mpath}/signatures/sigset/{sig_name1}"
|
|
|
+ os.makedirs(sig_dir1)
|
|
|
+ self.sigdirs.append(sig_dir1)
|
|
|
+ sigfile_name1 = f"{sig_dir1}/sig"
|
|
|
open(sigfile_name1, "a").close()
|
|
|
- self.sigfiles.append(sigfile_name1)
|
|
|
sig_name2 = tempname(10)
|
|
|
# Do not create sig_name2 matching file
|
|
|
sig_name3 = tempname(10)
|
|
|
- sigfile_name3 = f"{self.mpath}/signatures/sig/{sig_name3}"
|
|
|
+ sig_dir3 = f"{self.mpath}/signatures/sig/{sig_name3}"
|
|
|
+ os.makedirs(sig_dir3)
|
|
|
+ self.sigdirs.append(sig_dir3)
|
|
|
+ sigfile_name3 = f"{sig_dir3}/sig"
|
|
|
open(sigfile_name3, "a").close()
|
|
|
- self.sigfiles.append(sigfile_name3)
|
|
|
# Now remove one (should fail as file doesn't exist)
|
|
|
ret = I_signatures_remove(I_SIGFILE_TYPE_SIGSET, sig_name2)
|
|
|
self.assertEqual(ret, 1)
|
|
@@ -255,7 +272,7 @@ class SignaturesCopyTestCase(TestCase):
|
|
|
def setUpClass(cls):
|
|
|
cls.mpath = utils.decode(G_mapset_path())
|
|
|
cls.mapset_name = Mapset().name
|
|
|
- cls.sigfiles = []
|
|
|
+ cls.sigdirs = []
|
|
|
# As signatures are created directly not via signature creation
|
|
|
# tools, we must ensure signature directories exist
|
|
|
os.makedirs(f"{cls.mpath}/signatures/sig/", exist_ok=True)
|
|
@@ -266,16 +283,21 @@ class SignaturesCopyTestCase(TestCase):
|
|
|
cls.src_mapset_path = (
|
|
|
cls.mpath.rsplit("/", maxsplit=1)[0] + "/" + cls.src_mapset_name
|
|
|
)
|
|
|
+ # Create fake signature files
|
|
|
os.makedirs(f"{cls.src_mapset_path}/signatures/sig/")
|
|
|
cls.src_sig = tempname(10)
|
|
|
- cls.sigfiles.append(f"{cls.src_mapset_path}/signatures/sig/{cls.src_sig}")
|
|
|
- f = open(cls.sigfiles[0], "w")
|
|
|
+ cls.src_sig_dir = f"{cls.src_mapset_path}/signatures/sig/{cls.src_sig}"
|
|
|
+ os.makedirs(cls.src_sig_dir)
|
|
|
+ cls.sigdirs.append(cls.src_sig_dir)
|
|
|
+ f = open(f"{cls.src_sig_dir}/sig", "w")
|
|
|
f.write("A sig file")
|
|
|
f.close()
|
|
|
os.makedirs(f"{cls.src_mapset_path}/signatures/sigset/")
|
|
|
cls.src_sigset = tempname(10)
|
|
|
- cls.sigfiles.append(f"{cls.src_mapset_path}/signatures/sigset/{cls.src_sigset}")
|
|
|
- f = open(cls.sigfiles[1], "w")
|
|
|
+ cls.src_sigset_dir = f"{cls.src_mapset_path}/signatures/sigset/{cls.src_sigset}"
|
|
|
+ os.makedirs(cls.src_sigset_dir)
|
|
|
+ cls.sigdirs.append(cls.src_sigset_dir)
|
|
|
+ f = open(f"{cls.src_sigset_dir}/sig", "w")
|
|
|
f.write("A sigset file")
|
|
|
f.close()
|
|
|
|
|
@@ -283,11 +305,8 @@ class SignaturesCopyTestCase(TestCase):
|
|
|
def tearDownClass(cls):
|
|
|
# Remove random mapset created during setup
|
|
|
shutil.rmtree(cls.src_mapset_path, ignore_errors=True)
|
|
|
- for f in cls.sigfiles:
|
|
|
- try:
|
|
|
- os.remove(f)
|
|
|
- except OSError:
|
|
|
- pass
|
|
|
+ for d in cls.sigdirs:
|
|
|
+ shutil.rmtree(d, ignore_errors=True)
|
|
|
|
|
|
def test_copy_to_wrong_mapset(self):
|
|
|
rnd_name = "{0}@{0}".format(tempname(10))
|
|
@@ -317,17 +336,18 @@ class SignaturesCopyTestCase(TestCase):
|
|
|
ret = I_signatures_copy(
|
|
|
I_SIGFILE_TYPE_SIG, self.src_sig, self.src_mapset_name, dst
|
|
|
)
|
|
|
- self.sigfiles.append(f"{self.mpath}/signatures/sig/{dst}")
|
|
|
+ self.sigdirs.append(f"{self.mpath}/signatures/sig/{dst}")
|
|
|
self.assertEqual(ret, 0)
|
|
|
ret = I_find_signature(I_SIGFILE_TYPE_SIG, dst, self.mapset_name)
|
|
|
self.assertTrue(ret)
|
|
|
ms = utils.decode(ret)
|
|
|
self.assertEqual(ms, self.mapset_name)
|
|
|
+ self.assertTrue(os.path.isfile(f"{self.mpath}/signatures/sig/{dst}/sig"))
|
|
|
|
|
|
def test_success_fq_sig(self):
|
|
|
- dst = tempname(10)
|
|
|
- self.sigfiles.append(f"{self.mpath}/signatures/sig/{dst}")
|
|
|
- dst = dst + "@" + self.mapset_name
|
|
|
+ dst_name = tempname(10)
|
|
|
+ self.sigdirs.append(f"{self.mpath}/signatures/sig/{dst_name}")
|
|
|
+ dst = dst_name + "@" + self.mapset_name
|
|
|
ret = I_find_signature(I_SIGFILE_TYPE_SIG, dst, self.mapset_name)
|
|
|
self.assertFalse(ret)
|
|
|
ret = I_find_signature(I_SIGFILE_TYPE_SIG, self.src_sig, self.src_mapset_name)
|
|
@@ -343,6 +363,7 @@ class SignaturesCopyTestCase(TestCase):
|
|
|
self.assertTrue(ret)
|
|
|
ms = utils.decode(ret)
|
|
|
self.assertEqual(ms, self.mapset_name)
|
|
|
+ self.assertTrue(os.path.isfile(f"{self.mpath}/signatures/sig/{dst_name}/sig"))
|
|
|
|
|
|
def test_success_unqualified_sigset(self):
|
|
|
dst = tempname(10)
|
|
@@ -355,17 +376,18 @@ class SignaturesCopyTestCase(TestCase):
|
|
|
ret = I_signatures_copy(
|
|
|
I_SIGFILE_TYPE_SIGSET, self.src_sigset, self.src_mapset_name, dst
|
|
|
)
|
|
|
- self.sigfiles.append(f"{self.mpath}/signatures/sigset/{dst}")
|
|
|
+ self.sigdirs.append(f"{self.mpath}/signatures/sigset/{dst}")
|
|
|
self.assertEqual(ret, 0)
|
|
|
ret = I_find_signature(I_SIGFILE_TYPE_SIGSET, dst, self.mapset_name)
|
|
|
self.assertTrue(ret)
|
|
|
ms = utils.decode(ret)
|
|
|
self.assertEqual(ms, self.mapset_name)
|
|
|
+ self.assertTrue(os.path.isfile(f"{self.mpath}/signatures/sigset/{dst}/sig"))
|
|
|
|
|
|
def test_success_fq_sigset(self):
|
|
|
- dst = tempname(10)
|
|
|
- self.sigfiles.append(f"{self.mpath}/signatures/sigset/{dst}")
|
|
|
- dst = dst + "@" + self.mapset_name
|
|
|
+ dst_name = tempname(10)
|
|
|
+ self.sigdirs.append(f"{self.mpath}/signatures/sigset/{dst_name}")
|
|
|
+ dst = dst_name + "@" + self.mapset_name
|
|
|
ret = I_find_signature(I_SIGFILE_TYPE_SIGSET, dst, self.mapset_name)
|
|
|
self.assertFalse(ret)
|
|
|
ret = I_find_signature(
|
|
@@ -383,6 +405,9 @@ class SignaturesCopyTestCase(TestCase):
|
|
|
self.assertTrue(ret)
|
|
|
ms = utils.decode(ret)
|
|
|
self.assertEqual(ms, self.mapset_name)
|
|
|
+ self.assertTrue(
|
|
|
+ os.path.isfile(f"{self.mpath}/signatures/sigset/{dst_name}/sig")
|
|
|
+ )
|
|
|
|
|
|
|
|
|
class SignaturesRenameTestCase(TestCase):
|
|
@@ -390,7 +415,7 @@ class SignaturesRenameTestCase(TestCase):
|
|
|
def setUpClass(cls):
|
|
|
cls.mpath = utils.decode(G_mapset_path())
|
|
|
cls.mapset_name = Mapset().name
|
|
|
- cls.sigfiles = []
|
|
|
+ cls.sigdirs = []
|
|
|
# As signatures are created directly not via signature creation
|
|
|
# tools, we must ensure signature directories exist
|
|
|
os.makedirs(f"{cls.mpath}/signatures/sig/", exist_ok=True)
|
|
@@ -398,11 +423,8 @@ class SignaturesRenameTestCase(TestCase):
|
|
|
|
|
|
@classmethod
|
|
|
def tearDownClass(cls):
|
|
|
- for f in cls.sigfiles:
|
|
|
- try:
|
|
|
- os.remove(f)
|
|
|
- except OSError:
|
|
|
- pass
|
|
|
+ for d in cls.sigdirs:
|
|
|
+ shutil.rmtree(d, ignore_errors=True)
|
|
|
|
|
|
def test_rename_from_wrong_mapset(self):
|
|
|
rnd_name = "{0}@{0}".format(tempname(10))
|
|
@@ -424,13 +446,14 @@ class SignaturesRenameTestCase(TestCase):
|
|
|
|
|
|
def test_success_unqualified_sig(self):
|
|
|
src_sig = tempname(10)
|
|
|
- sig_file = f"{self.mpath}/signatures/sig/{src_sig}"
|
|
|
- self.sigfiles.append(sig_file)
|
|
|
- f = open(sig_file, "w")
|
|
|
+ sig_dir = f"{self.mpath}/signatures/sig/{src_sig}"
|
|
|
+ os.makedirs(sig_dir)
|
|
|
+ self.sigdirs.append(sig_dir)
|
|
|
+ f = open(f"{sig_dir}/sig", "w")
|
|
|
f.write("A sig file")
|
|
|
f.close()
|
|
|
dst = tempname(10)
|
|
|
- self.sigfiles.append(f"{self.mpath}/signatures/sig/{dst}")
|
|
|
+ self.sigdirs.append(f"{self.mpath}/signatures/sig/{dst}")
|
|
|
ret = I_find_signature(I_SIGFILE_TYPE_SIG, dst, self.mapset_name)
|
|
|
self.assertFalse(ret)
|
|
|
ret = I_find_signature(I_SIGFILE_TYPE_SIG, src_sig, self.mapset_name)
|
|
@@ -441,17 +464,19 @@ class SignaturesRenameTestCase(TestCase):
|
|
|
self.assertTrue(ret)
|
|
|
ms = utils.decode(ret)
|
|
|
self.assertEqual(ms, self.mapset_name)
|
|
|
+ self.assertTrue(os.path.isfile(f"{self.mpath}/signatures/sig/{dst}/sig"))
|
|
|
|
|
|
def test_success_fq_sig(self):
|
|
|
src_sig = tempname(10)
|
|
|
- sig_file = f"{self.mpath}/signatures/sig/{src_sig}"
|
|
|
- self.sigfiles.append(sig_file)
|
|
|
- f = open(sig_file, "w")
|
|
|
+ sig_dir = f"{self.mpath}/signatures/sig/{src_sig}"
|
|
|
+ os.makedirs(sig_dir)
|
|
|
+ self.sigdirs.append(sig_dir)
|
|
|
+ f = open(f"{sig_dir}/sig", "w")
|
|
|
f.write("A sig file")
|
|
|
f.close()
|
|
|
- dst = tempname(10)
|
|
|
- self.sigfiles.append(f"{self.mpath}/signatures/sig/{dst}")
|
|
|
- dst = dst + "@" + self.mapset_name
|
|
|
+ dst_name = tempname(10)
|
|
|
+ self.sigdirs.append(f"{self.mpath}/signatures/sig/{dst_name}")
|
|
|
+ dst = dst_name + "@" + self.mapset_name
|
|
|
ret = I_find_signature(I_SIGFILE_TYPE_SIG, dst, self.mapset_name)
|
|
|
self.assertFalse(ret)
|
|
|
ret = I_find_signature(I_SIGFILE_TYPE_SIG, src_sig, self.mapset_name)
|
|
@@ -466,16 +491,18 @@ class SignaturesRenameTestCase(TestCase):
|
|
|
self.assertTrue(ret)
|
|
|
ms = utils.decode(ret)
|
|
|
self.assertEqual(ms, self.mapset_name)
|
|
|
+ self.assertTrue(os.path.isfile(f"{self.mpath}/signatures/sig/{dst_name}/sig"))
|
|
|
|
|
|
def test_success_unqualified_sigset(self):
|
|
|
src_sigset = tempname(10)
|
|
|
- sigset_file = f"{self.mpath}/signatures/sigset/{src_sigset}"
|
|
|
- self.sigfiles.append(sigset_file)
|
|
|
- f = open(sigset_file, "w")
|
|
|
+ sig_dir = f"{self.mpath}/signatures/sigset/{src_sigset}"
|
|
|
+ os.makedirs(sig_dir)
|
|
|
+ self.sigdirs.append(sig_dir)
|
|
|
+ f = open(f"{sig_dir}/sig", "w")
|
|
|
f.write("A sigset file")
|
|
|
f.close()
|
|
|
dst = tempname(10)
|
|
|
- self.sigfiles.append(f"{self.mpath}/signatures/sigset/{dst}")
|
|
|
+ self.sigdirs.append(f"{self.mpath}/signatures/sigset/{dst}")
|
|
|
ret = I_find_signature(I_SIGFILE_TYPE_SIGSET, dst, self.mapset_name)
|
|
|
self.assertFalse(ret)
|
|
|
ret = I_find_signature(I_SIGFILE_TYPE_SIGSET, src_sigset, self.mapset_name)
|
|
@@ -486,17 +513,19 @@ class SignaturesRenameTestCase(TestCase):
|
|
|
self.assertTrue(ret)
|
|
|
ms = utils.decode(ret)
|
|
|
self.assertEqual(ms, self.mapset_name)
|
|
|
+ self.assertTrue(os.path.isfile(f"{self.mpath}/signatures/sigset/{dst}/sig"))
|
|
|
|
|
|
def test_success_fq_sigset(self):
|
|
|
src_sigset = tempname(10)
|
|
|
- sigset_file = f"{self.mpath}/signatures/sigset/{src_sigset}"
|
|
|
- self.sigfiles.append(sigset_file)
|
|
|
- f = open(sigset_file, "w")
|
|
|
+ sig_dir = f"{self.mpath}/signatures/sigset/{src_sigset}"
|
|
|
+ os.makedirs(sig_dir)
|
|
|
+ self.sigdirs.append(sig_dir)
|
|
|
+ f = open(f"{sig_dir}/sig", "w")
|
|
|
f.write("A sigset file")
|
|
|
f.close()
|
|
|
- dst = tempname(10)
|
|
|
- self.sigfiles.append(f"{self.mpath}/signatures/sigset/{dst}")
|
|
|
- dst = dst + "@" + self.mapset_name
|
|
|
+ dst_name = tempname(10)
|
|
|
+ self.sigdirs.append(f"{self.mpath}/signatures/sigset/{dst_name}")
|
|
|
+ dst = dst_name + "@" + self.mapset_name
|
|
|
ret = I_find_signature(I_SIGFILE_TYPE_SIGSET, dst, self.mapset_name)
|
|
|
self.assertFalse(ret)
|
|
|
ret = I_find_signature(I_SIGFILE_TYPE_SIGSET, src_sigset, self.mapset_name)
|
|
@@ -511,6 +540,9 @@ class SignaturesRenameTestCase(TestCase):
|
|
|
self.assertTrue(ret)
|
|
|
ms = utils.decode(ret)
|
|
|
self.assertEqual(ms, self.mapset_name)
|
|
|
+ self.assertTrue(
|
|
|
+ os.path.isfile(f"{self.mpath}/signatures/sigset/{dst_name}/sig")
|
|
|
+ )
|
|
|
|
|
|
|
|
|
class SignaturesListByTypeTestCase(TestCase):
|
|
@@ -519,7 +551,7 @@ class SignaturesListByTypeTestCase(TestCase):
|
|
|
cls.list_ptr = ctypes.POINTER(ctypes.c_char_p)
|
|
|
cls.mpath = utils.decode(G_mapset_path())
|
|
|
cls.mapset_name = Mapset().name
|
|
|
- cls.sigfiles = []
|
|
|
+ cls.sigdirs = []
|
|
|
# As signatures are created directly not via signature creation
|
|
|
# tools, we must ensure signature directories exist
|
|
|
os.makedirs(f"{cls.mpath}/signatures/sig/", exist_ok=True)
|
|
@@ -537,11 +569,8 @@ class SignaturesListByTypeTestCase(TestCase):
|
|
|
def tearDownClass(cls):
|
|
|
# Remove random mapset created during setup
|
|
|
shutil.rmtree(cls.rnd_mapset_path, ignore_errors=True)
|
|
|
- for f in cls.sigfiles:
|
|
|
- try:
|
|
|
- os.remove(f)
|
|
|
- except OSError:
|
|
|
- pass
|
|
|
+ for d in cls.sigdirs:
|
|
|
+ shutil.rmtree(d, ignore_errors=True)
|
|
|
|
|
|
def test_no_sigs_at_all(self):
|
|
|
# There should be no signatures in the mapset with random
|
|
@@ -552,63 +581,78 @@ class SignaturesListByTypeTestCase(TestCase):
|
|
|
)
|
|
|
self.assertEqual(ret, 0)
|
|
|
I_free_signatures_list(ret, ctypes.byref(sig_list))
|
|
|
+ ret = I_signatures_list_by_type(
|
|
|
+ I_SIGFILE_TYPE_SIGSET, self.rnd_mapset_name, ctypes.byref(sig_list)
|
|
|
+ )
|
|
|
+ self.assertEqual(ret, 0)
|
|
|
+ I_free_signatures_list(ret, ctypes.byref(sig_list))
|
|
|
|
|
|
def test_sig_in_different_mapset(self):
|
|
|
# Should return 0 signatures from a different mapset
|
|
|
+ # Sig type
|
|
|
local_sig = tempname(10)
|
|
|
- sig_file = f"{self.mpath}/signatures/sig/{local_sig}"
|
|
|
- self.sigfiles.append(sig_file)
|
|
|
- f = open(sig_file, "w")
|
|
|
+ sig_dir = f"{self.mpath}/signatures/sig/{local_sig}"
|
|
|
+ os.makedirs(sig_dir)
|
|
|
+ self.sigdirs.append(sig_dir)
|
|
|
+ f = open(f"{sig_dir}/sig", "w")
|
|
|
f.write("A sig file")
|
|
|
f.close()
|
|
|
sig_list = self.list_ptr()
|
|
|
ret = I_signatures_list_by_type(
|
|
|
I_SIGFILE_TYPE_SIG, self.rnd_mapset_name, ctypes.byref(sig_list)
|
|
|
)
|
|
|
- os.remove(sig_file)
|
|
|
+ shutil.rmtree(sig_dir)
|
|
|
self.assertEqual(ret, 0)
|
|
|
I_free_signatures_list(ret, ctypes.byref(sig_list))
|
|
|
+ # SigSet type
|
|
|
local_sigset = tempname(10)
|
|
|
- sigset_file = f"{self.mpath}/signatures/sigset/{local_sigset}"
|
|
|
- self.sigfiles.append(sigset_file)
|
|
|
- f = open(sigset_file, "w")
|
|
|
+ sig_dir = f"{self.mpath}/signatures/sigset/{local_sigset}"
|
|
|
+ os.makedirs(sig_dir)
|
|
|
+ self.sigdirs.append(sig_dir)
|
|
|
+ f = open(f"{sig_dir}/sig", "w")
|
|
|
f.write("A sigset file")
|
|
|
f.close()
|
|
|
sig_list = self.list_ptr()
|
|
|
ret = I_signatures_list_by_type(
|
|
|
I_SIGFILE_TYPE_SIGSET, self.rnd_mapset_name, ctypes.byref(sig_list)
|
|
|
)
|
|
|
- os.remove(sigset_file)
|
|
|
+ shutil.rmtree(sig_dir)
|
|
|
self.assertEqual(ret, 0)
|
|
|
I_free_signatures_list(ret, ctypes.byref(sig_list))
|
|
|
|
|
|
def test_single_sig(self):
|
|
|
# Case when only a single signature file is present
|
|
|
+ # Sig type
|
|
|
rnd_sig = tempname(10)
|
|
|
- sig_file = f"{self.rnd_mapset_path}/signatures/sig/{rnd_sig}"
|
|
|
- f = open(sig_file, "w")
|
|
|
+ sig_dir = f"{self.rnd_mapset_path}/signatures/sig/{rnd_sig}"
|
|
|
+ os.makedirs(sig_dir)
|
|
|
+ self.sigdirs.append(sig_dir)
|
|
|
+ f = open(f"{sig_dir}/sig", "w")
|
|
|
f.write("A sig file")
|
|
|
f.close()
|
|
|
sig_list = self.list_ptr()
|
|
|
ret = I_signatures_list_by_type(
|
|
|
I_SIGFILE_TYPE_SIG, self.rnd_mapset_name, ctypes.byref(sig_list)
|
|
|
)
|
|
|
- os.remove(sig_file)
|
|
|
+ shutil.rmtree(sig_dir)
|
|
|
self.assertEqual(ret, 1)
|
|
|
val = utils.decode(sig_list[0])
|
|
|
self.assertEqual(val, f"{rnd_sig}@{self.rnd_mapset_name}")
|
|
|
I_free_signatures_list(ret, ctypes.byref(sig_list))
|
|
|
+ # SigSet type
|
|
|
# SigSet equals sig. Just testing branching inside.
|
|
|
rnd_sigset = tempname(10)
|
|
|
- sigset_file = f"{self.rnd_mapset_path}/signatures/sigset/{rnd_sigset}"
|
|
|
- f = open(sigset_file, "w")
|
|
|
+ sig_dir = f"{self.rnd_mapset_path}/signatures/sigset/{rnd_sigset}"
|
|
|
+ os.makedirs(sig_dir)
|
|
|
+ self.sigdirs.append(sig_dir)
|
|
|
+ f = open(f"{sig_dir}/sig", "w")
|
|
|
f.write("A sigset file")
|
|
|
f.close()
|
|
|
sigset_list = self.list_ptr()
|
|
|
ret = I_signatures_list_by_type(
|
|
|
I_SIGFILE_TYPE_SIGSET, self.rnd_mapset_name, ctypes.byref(sigset_list)
|
|
|
)
|
|
|
- os.remove(sigset_file)
|
|
|
+ shutil.rmtree(sig_dir)
|
|
|
self.assertEqual(ret, 1)
|
|
|
val = utils.decode(sigset_list[0])
|
|
|
self.assertEqual(val, f"{rnd_sigset}@{self.rnd_mapset_name}")
|
|
@@ -616,14 +660,19 @@ class SignaturesListByTypeTestCase(TestCase):
|
|
|
|
|
|
def test_multiple_sigs(self):
|
|
|
# Should result into a multiple sigs returned
|
|
|
+ # Sig type
|
|
|
rnd_sig1 = tempname(10)
|
|
|
- sig_file1 = f"{self.rnd_mapset_path}/signatures/sig/{rnd_sig1}"
|
|
|
- f = open(sig_file1, "w")
|
|
|
+ sig_dir1 = f"{self.rnd_mapset_path}/signatures/sig/{rnd_sig1}"
|
|
|
+ os.makedirs(sig_dir1)
|
|
|
+ self.sigdirs.append(sig_dir1)
|
|
|
+ f = open(f"{sig_dir1}/sig", "w")
|
|
|
f.write("A sig file")
|
|
|
f.close()
|
|
|
rnd_sig2 = tempname(10)
|
|
|
- sig_file2 = f"{self.rnd_mapset_path}/signatures/sig/{rnd_sig2}"
|
|
|
- f = open(sig_file2, "w")
|
|
|
+ sig_dir2 = f"{self.rnd_mapset_path}/signatures/sig/{rnd_sig2}"
|
|
|
+ os.makedirs(sig_dir2)
|
|
|
+ self.sigdirs.append(sig_dir2)
|
|
|
+ f = open(f"{sig_dir2}/sig", "w")
|
|
|
f.write("A sig file")
|
|
|
f.close()
|
|
|
# POINTER(POINTER(c_char))
|
|
@@ -631,8 +680,8 @@ class SignaturesListByTypeTestCase(TestCase):
|
|
|
ret = I_signatures_list_by_type(
|
|
|
I_SIGFILE_TYPE_SIG, self.rnd_mapset_name, ctypes.byref(sig_list)
|
|
|
)
|
|
|
- os.remove(sig_file1)
|
|
|
- os.remove(sig_file2)
|
|
|
+ shutil.rmtree(sig_dir1)
|
|
|
+ shutil.rmtree(sig_dir2)
|
|
|
self.assertEqual(ret, 2)
|
|
|
golden = (
|
|
|
f"{rnd_sig1}@{self.rnd_mapset_name}",
|
|
@@ -641,23 +690,27 @@ class SignaturesListByTypeTestCase(TestCase):
|
|
|
self.assertIn(utils.decode(sig_list[0]), golden)
|
|
|
self.assertIn(utils.decode(sig_list[1]), golden)
|
|
|
I_free_signatures_list(ret, ctypes.byref(sig_list))
|
|
|
- # Ditto for sigset
|
|
|
+ # SigSet type
|
|
|
rnd_sigset1 = tempname(10)
|
|
|
- sigset_file1 = f"{self.rnd_mapset_path}/signatures/sigset/{rnd_sigset1}"
|
|
|
- f = open(sigset_file1, "w")
|
|
|
+ sig_dir1 = f"{self.rnd_mapset_path}/signatures/sigset/{rnd_sigset1}"
|
|
|
+ os.makedirs(sig_dir1)
|
|
|
+ self.sigdirs.append(sig_dir1)
|
|
|
+ f = open(f"{sig_dir1}/sig", "w")
|
|
|
f.write("A sigset file")
|
|
|
f.close()
|
|
|
rnd_sigset2 = tempname(10)
|
|
|
- sigset_file2 = f"{self.rnd_mapset_path}/signatures/sigset/{rnd_sigset2}"
|
|
|
- f = open(sigset_file2, "w")
|
|
|
+ sig_dir2 = f"{self.rnd_mapset_path}/signatures/sigset/{rnd_sigset2}"
|
|
|
+ os.makedirs(sig_dir2)
|
|
|
+ self.sigdirs.append(sig_dir2)
|
|
|
+ f = open(f"{sig_dir2}/sig", "w")
|
|
|
f.write("A sigset file")
|
|
|
f.close()
|
|
|
sigset_list = self.list_ptr()
|
|
|
ret = I_signatures_list_by_type(
|
|
|
I_SIGFILE_TYPE_SIGSET, self.rnd_mapset_name, ctypes.byref(sigset_list)
|
|
|
)
|
|
|
- os.remove(sigset_file1)
|
|
|
- os.remove(sigset_file2)
|
|
|
+ shutil.rmtree(sig_dir1)
|
|
|
+ shutil.rmtree(sig_dir2)
|
|
|
self.assertEqual(ret, 2)
|
|
|
golden = (
|
|
|
f"{rnd_sigset1}@{self.rnd_mapset_name}",
|
|
@@ -670,16 +723,19 @@ class SignaturesListByTypeTestCase(TestCase):
|
|
|
def test_multiple_sigs_multiple_mapsets(self):
|
|
|
# Test searching in multiple mapsets. Identical to SIGSET case
|
|
|
rnd_sig1 = tempname(10)
|
|
|
- sig_file1 = f"{self.rnd_mapset_path}/signatures/sig/{rnd_sig1}"
|
|
|
- f = open(sig_file1, "w")
|
|
|
+ sig_dir1 = f"{self.rnd_mapset_path}/signatures/sig/{rnd_sig1}"
|
|
|
+ os.makedirs(sig_dir1)
|
|
|
+ self.sigdirs.append(sig_dir1)
|
|
|
+ f = open(f"{sig_dir1}/sig", "w")
|
|
|
f.write("A sig file")
|
|
|
f.close()
|
|
|
rnd_sig2 = tempname(10)
|
|
|
- sig_file2 = f"{self.mpath}/signatures/sig/{rnd_sig2}"
|
|
|
- f = open(sig_file2, "w")
|
|
|
+ sig_dir2 = f"{self.mpath}/signatures/sig/{rnd_sig2}"
|
|
|
+ os.makedirs(sig_dir2)
|
|
|
+ self.sigdirs.append(sig_dir2)
|
|
|
+ f = open(f"{sig_dir2}/sig", "w")
|
|
|
f.write("A sig file")
|
|
|
f.close()
|
|
|
- self.sigfiles.append(sig_file2)
|
|
|
sig_list = self.list_ptr()
|
|
|
ret = I_signatures_list_by_type(
|
|
|
I_SIGFILE_TYPE_SIG, None, ctypes.byref(sig_list)
|
|
@@ -706,8 +762,8 @@ class SignaturesListByTypeTestCase(TestCase):
|
|
|
)
|
|
|
grass.run_command("g.mapsets", mapset=self.rnd_mapset_name, operation="remove")
|
|
|
G_reset_mapsets()
|
|
|
- os.remove(sig_file1)
|
|
|
- os.remove(sig_file2)
|
|
|
+ shutil.rmtree(sig_dir1)
|
|
|
+ shutil.rmtree(sig_dir2)
|
|
|
# There could be more sigs if this is not an empty mapset
|
|
|
self.assertTrue(ret >= 2)
|
|
|
ret_list = list(map(utils.decode, sig_list[:ret]))
|
|
@@ -718,16 +774,19 @@ class SignaturesListByTypeTestCase(TestCase):
|
|
|
def test_multiple_sigsets_multiple_mapsets(self):
|
|
|
# Test searching in multiple mapsets. Identical to SIG case
|
|
|
rnd_sig1 = tempname(10)
|
|
|
- sig_file1 = f"{self.rnd_mapset_path}/signatures/sigset/{rnd_sig1}"
|
|
|
- f = open(sig_file1, "w")
|
|
|
+ sig_dir1 = f"{self.rnd_mapset_path}/signatures/sigset/{rnd_sig1}"
|
|
|
+ os.makedirs(sig_dir1)
|
|
|
+ self.sigdirs.append(sig_dir1)
|
|
|
+ f = open(f"{sig_dir1}/sig", "w")
|
|
|
f.write("A sigset file")
|
|
|
f.close()
|
|
|
rnd_sig2 = tempname(10)
|
|
|
- sig_file2 = f"{self.mpath}/signatures/sigset/{rnd_sig2}"
|
|
|
- f = open(sig_file2, "w")
|
|
|
+ sig_dir2 = f"{self.mpath}/signatures/sigset/{rnd_sig2}"
|
|
|
+ os.makedirs(sig_dir2)
|
|
|
+ self.sigdirs.append(sig_dir2)
|
|
|
+ f = open(f"{sig_dir2}/sig", "w")
|
|
|
f.write("A sigset file")
|
|
|
f.close()
|
|
|
- self.sigfiles.append(sig_file2)
|
|
|
sig_list = self.list_ptr()
|
|
|
ret = I_signatures_list_by_type(
|
|
|
I_SIGFILE_TYPE_SIGSET, None, ctypes.byref(sig_list)
|
|
@@ -754,8 +813,8 @@ class SignaturesListByTypeTestCase(TestCase):
|
|
|
)
|
|
|
grass.run_command("g.mapsets", mapset=self.rnd_mapset_name, operation="remove")
|
|
|
G_reset_mapsets()
|
|
|
- os.remove(sig_file1)
|
|
|
- os.remove(sig_file2)
|
|
|
+ shutil.rmtree(sig_dir1)
|
|
|
+ shutil.rmtree(sig_dir2)
|
|
|
# There could be more sigs if this is not an empty mapset
|
|
|
self.assertTrue(ret >= 2)
|
|
|
ret_list = list(map(utils.decode, sig_list[:ret]))
|