File: 301-miner-resource-removal.py

package info (click to toggle)
tracker-miners 2.1.6-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 16,048 kB
  • sloc: ansic: 33,842; sh: 4,765; python: 3,696; makefile: 1,411; xml: 181; perl: 106
file content (115 lines) | stat: -rwxr-xr-x 4,404 bytes parent folder | download
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/python

# Copyright (C) 2010, Nokia (ivan.frade@nokia.com)
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA  02110-1301, USA.

"""
Test that resource removal does not leave debris or clobber too much,
especially in the case where nie:InformationElement != nie:DataObject
"""

from common.utils import configuration as cfg
from common.utils.minertest import CommonTrackerMinerTest

from gi.repository import GLib

import os
import unittest2 as ut


NFO_DOCUMENT = 'http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#Document'
NMM_MUSIC_PIECE = 'http://www.tracker-project.org/temp/nmm#MusicPiece'


class MinerResourceRemovalTest (CommonTrackerMinerTest):

    def prepare_directories (self):
        # Override content from the base class
        pass

    def create_test_content (self, file_urn, title):
        sparql = "INSERT { \
                    _:ie a nmm:MusicPiece ; \
                         nie:title \"%s\" ; \
                         nie:isStoredAs <%s> \
                  } " % (title, file_urn)

        self.tracker.update (sparql)

        return self.tracker.await_resource_inserted (rdf_class = NMM_MUSIC_PIECE,
                                                     title = title)

    def create_test_file (self, file_name):
        file_path = self.path(file_name)

        file = open (file_path, 'w')
        file.write ("Test")
        file.close ()

        return self.tracker.await_resource_inserted (rdf_class = NFO_DOCUMENT,
                                                     url = self.uri(file_name))

    def test_01_file_deletion (self):
        """
        Ensure every logical resource (nie:InformationElement) contained with
        in a file is deleted when the file is deleted.
        """

        (file_1_id, file_1_urn) = self.create_test_file ("test-monitored/test_1.txt")
        (file_2_id, file_2_urn) = self.create_test_file ("test-monitored/test_2.txt")
        (ie_1_id, ie_1_urn) = self.create_test_content (file_1_urn, "Test resource 1")
        (ie_2_id, ie_2_urn) = self.create_test_content (file_2_urn, "Test resource 2")

        os.unlink (self.path ("test-monitored/test_1.txt"))

        self.tracker.await_resource_deleted (NFO_DOCUMENT, file_1_id)
        self.tracker.await_resource_deleted (NFO_DOCUMENT, ie_1_id,
                                             "Associated logical resource failed to be deleted " \
                                             "when its containing file was removed.")

        self.assertResourceMissing (file_1_urn)
        self.assertResourceMissing (ie_1_urn)
        self.assertResourceExists (file_2_urn)
        self.assertResourceExists (ie_2_urn)

    #def test_02_removable_device_data (self):
    #    """
    #    Tracker does periodic cleanups of data on removable volumes that haven't
    #    been seen since 'removable-days-threshold', and will also remove all data
    #    from removable volumes if 'index-removable-devices' is disabled.
    #
    #    FIXME: not yet possible to test this - we need some way of mounting
    #    a fake removable volume: https://bugzilla.gnome.org/show_bug.cgi?id=659739
    #    """

        #dconf = DConfClient ()
        #dconf.write (cfg.DCONF_MINER_SCHEMA, 'index-removable-devices', 'true')

        #self.mount_test_removable_volume ()

        #self.add_test_resource ("urn:test:1", test_volume_urn)
        #self.add_test_resource ("urn:test:2", None)

        # Trigger removal of all resources from removable devices
        #dconf.write (cfg.DCONF_MINER_SCHEMA, 'index-removable-devices', 'false')

        # Check that only the data on the removable volume was deleted
        #self.await_updates (2)


if __name__ == "__main__":
    ut.main(failfast=True)