6
from mocker import MockerTestCase, expect
6
from mocker import MockerTestCase, expect, ANY
8
from smart.backends.rpm.header import RPMHeaderPackageInfo
8
from smart.backends.rpm.header import (
9
RPMHeaderPackageInfo, get_header_filenames,
10
RPMDirLoader, RPMHeaderListLoader)
9
11
from smart.backends.rpm.yast2 import YaST2PackageInfo
12
from smart.searcher import Searcher
13
from smart.cache import Cache
15
from tests import TESTDATADIR
12
18
class RPMHeaderPackageInfoTest(MockerTestCase):
90
96
self.assertEquals(info.getURLs(),
91
97
[u"http://baseurl11/datadir/arch/fname"])
100
class HeaderFilenamesTest(MockerTestCase):
102
def test_header_with_old_filenames(self):
103
header = {rpm.RPMTAG_OLDFILENAMES: ["/foo"]}
104
self.assertEquals(get_header_filenames(header), ["/foo"])
106
def test_header_with_old_filenames_with_one_element(self):
107
header = {rpm.RPMTAG_OLDFILENAMES: "/foo"}
108
self.assertEquals(get_header_filenames(header), ["/foo"])
110
def test_header_with_index(self):
111
header = {rpm.RPMTAG_OLDFILENAMES: [],
112
rpm.RPMTAG_BASENAMES: ["foo", "bar", "baz"],
113
rpm.RPMTAG_DIRINDEXES: [0, 1, 0],
114
rpm.RPMTAG_DIRNAMES: ["/dir1/", "/dir2/"]}
115
self.assertEquals(get_header_filenames(header),
116
["/dir1/foo", "/dir2/bar", "/dir1/baz"])
118
def test_header_with_index_containing_one_entry(self):
119
header = {rpm.RPMTAG_OLDFILENAMES: [],
120
rpm.RPMTAG_BASENAMES: "foo",
121
rpm.RPMTAG_DIRINDEXES: 0,
122
rpm.RPMTAG_DIRNAMES: "/dir/"}
123
self.assertEquals(get_header_filenames(header), ["/dir/foo"])
125
def test_RPMHeaderPackageInfo_getPathList(self):
127
Ensure getPathList is working correctly with indexes.
129
header = {rpm.RPMTAG_OLDFILENAMES: [],
130
rpm.RPMTAG_BASENAMES: "foo",
131
rpm.RPMTAG_DIRINDEXES: 0,
132
rpm.RPMTAG_DIRNAMES: "/dir/",
133
rpm.RPMTAG_FILEMODES: 0644}
135
package = self.mocker.mock()
136
loader = self.mocker.mock()
137
loader.getHeader(package)
138
self.mocker.result(header)
140
# Just assert it's called at all.
141
mock_func = self.mocker.replace(get_header_filenames)
143
self.mocker.passthrough()
147
info = RPMHeaderPackageInfo(package, loader)
148
self.assertEquals(info.getPathList(), ["/dir/foo"])
150
def test_RPMHeaderListLoader_searcher(self):
152
Ensure getPathList is working correctly with indexes.
154
# Just assert it's called at all.
155
get_header_filenames_mock = self.mocker.replace(get_header_filenames)
156
get_header_filenames_mock(ANY)
157
self.mocker.passthrough()
161
searcher = Searcher()
162
searcher.addPath("/tmp/file1")
166
loader = RPMDirLoader(TESTDATADIR + "/rpm",
167
"name1-version1-release1.noarch.rpm")
168
loader.setCache(cache)
170
loader.search(searcher)
172
results = searcher.getResults()
174
self.assertEquals(len(results), 1)
175
self.assertEquals(results[0][0], 1.0)
176
self.assertEquals(results[0][1].name, "name1")
178
def test_RPMHeaderListLoader_loadFileProvides(self):
179
get_header_filenames_mock = self.mocker.replace(get_header_filenames)
180
get_header_filenames_mock(ANY)
181
self.mocker.passthrough()
188
loader = RPMHeaderListLoader("%s/aptrpm/base/pkglist.main" %
189
TESTDATADIR, "http://base.url")
190
loader.setCache(cache)
193
loader.loadFileProvides("/")
195
def test_RPMDirLoader_loadFileProvides(self):
196
returned_filenames = []
197
def result_callback(filenames):
198
returned_filenames.extend(filenames)
199
get_header_filenames_mock = self.mocker.replace(get_header_filenames)
200
get_header_filenames_mock(ANY)
201
self.mocker.passthrough(result_callback)
207
loader = RPMDirLoader(TESTDATADIR + "/rpm",
208
"name1-version1-release1.noarch.rpm")
209
loader.setCache(cache)
212
loader.loadFileProvides({"/tmp/file1": "/tmp/file1"})
214
self.assertEquals(returned_filenames, ["/tmp/file1"])