summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorJean-Marie LEMETAYER <jean-marie.lemetayer@savoirfairelinux.com>2020-01-24 18:08:14 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-01-27 16:48:10 +0000
commitf6728edb7e022b27223d28bd80ce40c2f2374a13 (patch)
tree166ad0220d4d10ee5fc041faac3ed6057861988f /bitbake
parente0bd972ba7eaa5f3b0f5d93bf579cd79290d6601 (diff)
downloadpoky-f6728edb7e022b27223d28bd80ce40c2f2374a13.tar.gz
bitbake: tests/fetch: add npmsw tests
This commit adds some tests to validate the npmsw fetcher: - bb.tests.fetch.NPMTest.test_npmsw - bb.tests.fetch.NPMTest.test_npmsw_bad_checksum - bb.tests.fetch.NPMTest.test_npmsw_destsuffix - bb.tests.fetch.NPMTest.test_npmsw_dev - bb.tests.fetch.NPMTest.test_npmsw_mirrors - bb.tests.fetch.NPMTest.test_npmsw_no_network_no_tarball - bb.tests.fetch.NPMTest.test_npmsw_no_network_with_tarball - bb.tests.fetch.NPMTest.test_npmsw_npm_reusability - bb.tests.fetch.NPMTest.test_npmsw_premirrors (Bitbake rev: ba205df20b6a07a4b1125332601c6c54c7b019b5) Signed-off-by: Jean-Marie LEMETAYER <jean-marie.lemetayer@savoirfairelinux.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/tests/fetch.py251
1 files changed, 251 insertions, 0 deletions
diff --git a/bitbake/lib/bb/tests/fetch.py b/bitbake/lib/bb/tests/fetch.py
index 5eeb64c512..45dc9e5d08 100644
--- a/bitbake/lib/bb/tests/fetch.py
+++ b/bitbake/lib/bb/tests/fetch.py
@@ -2220,3 +2220,254 @@ class NPMTest(FetcherTest):
2220 url = 'npm://registry.npmjs.org;package=@savoirfairelinux/node-server-example' 2220 url = 'npm://registry.npmjs.org;package=@savoirfairelinux/node-server-example'
2221 with self.assertRaises(bb.fetch2.MissingParameterError): 2221 with self.assertRaises(bb.fetch2.MissingParameterError):
2222 fetcher = bb.fetch.Fetch([url], self.d) 2222 fetcher = bb.fetch.Fetch([url], self.d)
2223
2224 def create_shrinkwrap_file(self, data):
2225 import json
2226 datadir = os.path.join(self.tempdir, 'data')
2227 swfile = os.path.join(datadir, 'npm-shrinkwrap.json')
2228 bb.utils.mkdirhier(datadir)
2229 with open(swfile, 'w') as f:
2230 json.dump(data, f)
2231 # Also configure the S directory
2232 self.sdir = os.path.join(self.unpackdir, 'S')
2233 self.d.setVar('S', self.sdir)
2234 return swfile
2235
2236 @skipIfNoNpm()
2237 @skipIfNoNetwork()
2238 def test_npmsw(self):
2239 swfile = self.create_shrinkwrap_file({
2240 'dependencies': {
2241 'array-flatten': {
2242 'version': '1.1.1',
2243 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz',
2244 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=',
2245 'dependencies': {
2246 'content-type': {
2247 'version': 'https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz',
2248 'integrity': 'sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==',
2249 'dependencies': {
2250 'cookie': {
2251 'version': 'git+https://github.com/jshttp/cookie.git#aec1177c7da67e3b3273df96cf476824dbc9ae09',
2252 'from': 'git+https://github.com/jshttp/cookie.git'
2253 }
2254 }
2255 }
2256 }
2257 }
2258 }
2259 })
2260 fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d)
2261 fetcher.download()
2262 self.assertTrue(os.path.exists(os.path.join(self.dldir, 'npm2', 'array-flatten-1.1.1.tgz')))
2263 self.assertTrue(os.path.exists(os.path.join(self.dldir, 'npm2', 'content-type-1.0.4.tgz')))
2264 self.assertTrue(os.path.exists(os.path.join(self.dldir, 'git2', 'github.com.jshttp.cookie.git')))
2265 fetcher.unpack(self.unpackdir)
2266 self.assertTrue(os.path.exists(os.path.join(self.sdir, 'npm-shrinkwrap.json')))
2267 self.assertTrue(os.path.exists(os.path.join(self.sdir, 'node_modules', 'array-flatten', 'package.json')))
2268 self.assertTrue(os.path.exists(os.path.join(self.sdir, 'node_modules', 'array-flatten', 'node_modules', 'content-type', 'package.json')))
2269 self.assertTrue(os.path.exists(os.path.join(self.sdir, 'node_modules', 'array-flatten', 'node_modules', 'content-type', 'node_modules', 'cookie', 'package.json')))
2270
2271 @skipIfNoNpm()
2272 @skipIfNoNetwork()
2273 def test_npmsw_dev(self):
2274 swfile = self.create_shrinkwrap_file({
2275 'dependencies': {
2276 'array-flatten': {
2277 'version': '1.1.1',
2278 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz',
2279 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI='
2280 },
2281 'content-type': {
2282 'version': '1.0.4',
2283 'resolved': 'https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz',
2284 'integrity': 'sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==',
2285 'dev': True
2286 }
2287 }
2288 })
2289 # Fetch with dev disabled
2290 fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d)
2291 fetcher.download()
2292 self.assertTrue(os.path.exists(os.path.join(self.dldir, 'npm2', 'array-flatten-1.1.1.tgz')))
2293 self.assertFalse(os.path.exists(os.path.join(self.dldir, 'npm2', 'content-type-1.0.4.tgz')))
2294 # Fetch with dev enabled
2295 fetcher = bb.fetch.Fetch(['npmsw://' + swfile + ';dev=1'], self.d)
2296 fetcher.download()
2297 self.assertTrue(os.path.exists(os.path.join(self.dldir, 'npm2', 'array-flatten-1.1.1.tgz')))
2298 self.assertTrue(os.path.exists(os.path.join(self.dldir, 'npm2', 'content-type-1.0.4.tgz')))
2299
2300 @skipIfNoNpm()
2301 @skipIfNoNetwork()
2302 def test_npmsw_destsuffix(self):
2303 swfile = self.create_shrinkwrap_file({
2304 'dependencies': {
2305 'array-flatten': {
2306 'version': '1.1.1',
2307 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz',
2308 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI='
2309 }
2310 }
2311 })
2312 fetcher = bb.fetch.Fetch(['npmsw://' + swfile + ';destsuffix=foo/bar'], self.d)
2313 fetcher.download()
2314 fetcher.unpack(self.unpackdir)
2315 self.assertTrue(os.path.exists(os.path.join(self.unpackdir, 'foo', 'bar', 'node_modules', 'array-flatten', 'package.json')))
2316
2317 def test_npmsw_no_network_no_tarball(self):
2318 swfile = self.create_shrinkwrap_file({
2319 'dependencies': {
2320 'array-flatten': {
2321 'version': '1.1.1',
2322 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz',
2323 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI='
2324 }
2325 }
2326 })
2327 self.d.setVar('BB_NO_NETWORK', '1')
2328 fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d)
2329 with self.assertRaises(bb.fetch2.NetworkAccess):
2330 fetcher.download()
2331
2332 @skipIfNoNpm()
2333 @skipIfNoNetwork()
2334 def test_npmsw_no_network_with_tarball(self):
2335 # Fetch once to get a tarball
2336 fetcher = bb.fetch.Fetch(['npm://registry.npmjs.org;package=array-flatten;version=1.1.1'], self.d)
2337 fetcher.download()
2338 # Disable network access
2339 self.d.setVar('BB_NO_NETWORK', '1')
2340 # Fetch again
2341 swfile = self.create_shrinkwrap_file({
2342 'dependencies': {
2343 'array-flatten': {
2344 'version': '1.1.1',
2345 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz',
2346 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI='
2347 }
2348 }
2349 })
2350 fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d)
2351 fetcher.download()
2352 fetcher.unpack(self.unpackdir)
2353 self.assertTrue(os.path.exists(os.path.join(self.sdir, 'node_modules', 'array-flatten', 'package.json')))
2354
2355 @skipIfNoNpm()
2356 @skipIfNoNetwork()
2357 def test_npmsw_npm_reusability(self):
2358 # Fetch once with npmsw
2359 swfile = self.create_shrinkwrap_file({
2360 'dependencies': {
2361 'array-flatten': {
2362 'version': '1.1.1',
2363 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz',
2364 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI='
2365 }
2366 }
2367 })
2368 fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d)
2369 fetcher.download()
2370 # Disable network access
2371 self.d.setVar('BB_NO_NETWORK', '1')
2372 # Fetch again with npm
2373 fetcher = bb.fetch.Fetch(['npm://registry.npmjs.org;package=array-flatten;version=1.1.1'], self.d)
2374 fetcher.download()
2375 fetcher.unpack(self.unpackdir)
2376 self.assertTrue(os.path.exists(os.path.join(self.unpackdir, 'npm', 'package.json')))
2377
2378 @skipIfNoNpm()
2379 @skipIfNoNetwork()
2380 def test_npmsw_bad_checksum(self):
2381 # Try to fetch with bad checksum
2382 swfile = self.create_shrinkwrap_file({
2383 'dependencies': {
2384 'array-flatten': {
2385 'version': '1.1.1',
2386 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz',
2387 'integrity': 'sha1-gfNEp2hqgLTFKT6P3AsBYMgsBqg='
2388 }
2389 }
2390 })
2391 fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d)
2392 with self.assertRaises(bb.fetch2.FetchError):
2393 fetcher.download()
2394 # Fetch correctly to get a tarball
2395 swfile = self.create_shrinkwrap_file({
2396 'dependencies': {
2397 'array-flatten': {
2398 'version': '1.1.1',
2399 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz',
2400 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI='
2401 }
2402 }
2403 })
2404 fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d)
2405 fetcher.download()
2406 localpath = os.path.join(self.dldir, 'npm2', 'array-flatten-1.1.1.tgz')
2407 self.assertTrue(os.path.exists(localpath))
2408 # Modify the tarball
2409 bad = b'bad checksum'
2410 with open(localpath, 'wb') as f:
2411 f.write(bad)
2412 # Verify that the tarball is fetched again
2413 fetcher.download()
2414 badsum = hashlib.sha1(bad).hexdigest()
2415 self.assertTrue(os.path.exists(localpath + '_bad-checksum_' + badsum))
2416 self.assertTrue(os.path.exists(localpath))
2417
2418 @skipIfNoNpm()
2419 @skipIfNoNetwork()
2420 def test_npmsw_premirrors(self):
2421 # Fetch once to get a tarball
2422 fetcher = bb.fetch.Fetch(['npm://registry.npmjs.org;package=array-flatten;version=1.1.1'], self.d)
2423 ud = fetcher.ud[fetcher.urls[0]]
2424 fetcher.download()
2425 self.assertTrue(os.path.exists(ud.localpath))
2426 # Setup the mirror
2427 mirrordir = os.path.join(self.tempdir, 'mirror')
2428 bb.utils.mkdirhier(mirrordir)
2429 os.replace(ud.localpath, os.path.join(mirrordir, os.path.basename(ud.localpath)))
2430 self.d.setVar('PREMIRRORS', 'https?$://.*/.* file://%s/\n' % mirrordir)
2431 self.d.setVar('BB_FETCH_PREMIRRORONLY', '1')
2432 # Fetch again
2433 self.assertFalse(os.path.exists(ud.localpath))
2434 swfile = self.create_shrinkwrap_file({
2435 'dependencies': {
2436 'array-flatten': {
2437 'version': '1.1.1',
2438 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz',
2439 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI='
2440 }
2441 }
2442 })
2443 fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d)
2444 fetcher.download()
2445 self.assertTrue(os.path.exists(ud.localpath))
2446
2447 @skipIfNoNpm()
2448 @skipIfNoNetwork()
2449 def test_npmsw_mirrors(self):
2450 # Fetch once to get a tarball
2451 fetcher = bb.fetch.Fetch(['npm://registry.npmjs.org;package=array-flatten;version=1.1.1'], self.d)
2452 ud = fetcher.ud[fetcher.urls[0]]
2453 fetcher.download()
2454 self.assertTrue(os.path.exists(ud.localpath))
2455 # Setup the mirror
2456 mirrordir = os.path.join(self.tempdir, 'mirror')
2457 bb.utils.mkdirhier(mirrordir)
2458 os.replace(ud.localpath, os.path.join(mirrordir, os.path.basename(ud.localpath)))
2459 self.d.setVar('MIRRORS', 'https?$://.*/.* file://%s/\n' % mirrordir)
2460 # Fetch again with invalid url
2461 self.assertFalse(os.path.exists(ud.localpath))
2462 swfile = self.create_shrinkwrap_file({
2463 'dependencies': {
2464 'array-flatten': {
2465 'version': '1.1.1',
2466 'resolved': 'https://invalid',
2467 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI='
2468 }
2469 }
2470 })
2471 fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d)
2472 fetcher.download()
2473 self.assertTrue(os.path.exists(ud.localpath))