aboutsummaryrefslogtreecommitdiff
blob: b68e9a043f452cdd1e746cf2c9c9e9815caec800 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# Copyright 2020-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

import argparse
import os
import shutil
import tempfile
import time

from portage.tests import TestCase
from portage.util.shelve import dump, open_shelve, restore


class ShelveUtilsTestCase(TestCase):

    TEST_DATA = (
        # distfiles_db
        {
            "portage-2.3.89.tar.bz2": "sys-apps/portage-2.3.89",
            "portage-2.3.99.tar.bz2": "sys-apps/portage-2.3.99",
        },
        # deletion_db
        {
            "portage-2.3.89.tar.bz2": time.time(),
            "portage-2.3.99.tar.bz2": time.time(),
        },
        # recycle_db
        {
            "portage-2.3.89.tar.bz2": (0, time.time()),
            "portage-2.3.99.tar.bz2": (0, time.time()),
        },
    )

    def test_dump_restore(self):
        for data in self.TEST_DATA:
            tmpdir = tempfile.mkdtemp()
            try:
                dump_args = argparse.Namespace(
                    src=os.path.join(tmpdir, "shelve_file"),
                    dest=os.path.join(tmpdir, "pickle_file"),
                )
                db = open_shelve(dump_args.src, flag="c")
                for k, v in data.items():
                    db[k] = v
                db.close()
                dump(dump_args)

                os.unlink(dump_args.src)
                restore_args = argparse.Namespace(
                    dest=dump_args.src,
                    src=dump_args.dest,
                )
                restore(restore_args)

                db = open_shelve(restore_args.dest, flag="r")
                for k, v in data.items():
                    self.assertEqual(db[k], v)
                db.close()
            finally:
                shutil.rmtree(tmpdir)