1# 2# SPDX-License-Identifier: MIT 3# 4 5import os 6from oeqa.utils.httpserver import HTTPService 7from oeqa.runtime.case import OERuntimeTestCase 8from oeqa.core.decorator.data import skipIfNotDataVar, skipIfNotFeature 9from oeqa.runtime.decorator.package import OEHasPackage 10 11class AptTest(OERuntimeTestCase): 12 13 def pkg(self, command, expected = 0): 14 command = 'apt-get %s' % command 15 status, output = self.target.run(command, 1500) 16 message = os.linesep.join([command, output]) 17 self.assertEqual(status, expected, message) 18 return output 19 20class AptRepoTest(AptTest): 21 22 @classmethod 23 def setUpClass(cls): 24 service_repo = os.path.join(cls.tc.td['DEPLOY_DIR_DEB'], '') 25 cls.repo_server = HTTPService(service_repo, 26 '0.0.0.0', port=cls.tc.target.server_port, 27 logger=cls.tc.logger) 28 cls.repo_server.start() 29 30 @classmethod 31 def tearDownClass(cls): 32 cls.repo_server.stop() 33 34 def setup_source_config_for_package_install(self): 35 apt_get_source_server = 'http://%s:%s/' % (self.tc.target.server_ip, self.repo_server.port) 36 apt_get_sourceslist_dir = '/etc/apt/' 37 self.target.run('cd %s; echo deb [ allow-insecure=yes ] %s/all ./ > sources.list' % (apt_get_sourceslist_dir, apt_get_source_server)) 38 39 def setup_source_config_for_package_install_signed(self): 40 apt_get_source_server = 'http:\/\/%s:%s' % (self.tc.target.server_ip, self.repo_server.port) 41 apt_get_sourceslist_dir = '/etc/apt/' 42 self.target.run("cd %s; cp sources.list sources.list.bak; sed -i 's/\[trusted=yes\] http:\/\/bogus_ip:bogus_port/%s/g' sources.list" % (apt_get_sourceslist_dir, apt_get_source_server)) 43 44 def cleanup_source_config_for_package_install(self): 45 apt_get_sourceslist_dir = '/etc/apt/' 46 self.target.run('cd %s; rm sources.list' % (apt_get_sourceslist_dir)) 47 48 def cleanup_source_config_for_package_install_signed(self): 49 apt_get_sourceslist_dir = '/etc/apt/' 50 self.target.run('cd %s; mv sources.list.bak sources.list' % (apt_get_sourceslist_dir)) 51 52 def setup_key(self): 53 # the key is found on the target /etc/pki/packagefeed-gpg/ 54 # named PACKAGEFEED-GPG-KEY-poky-branch 55 self.target.run('cd %s; apt-key add P*' % ('/etc/pki/packagefeed-gpg')) 56 57 @skipIfNotFeature('package-management', 58 'Test requires package-management to be in IMAGE_FEATURES') 59 @skipIfNotDataVar('IMAGE_PKGTYPE', 'deb', 60 'DEB is not the primary package manager') 61 @OEHasPackage(['apt']) 62 def test_apt_install_from_repo(self): 63 if not self.tc.td.get('PACKAGE_FEED_GPG_NAME'): 64 self.setup_source_config_for_package_install() 65 self.pkg('update') 66 self.pkg('remove --yes run-postinsts-dev') 67 self.pkg('install --yes --allow-unauthenticated run-postinsts-dev') 68 self.cleanup_source_config_for_package_install() 69 else: 70 # when we are here a key has been set to sign the package feed and 71 # public key and gnupg installed on the image by test_testimage_apt 72 self.setup_source_config_for_package_install_signed() 73 self.setup_key() 74 self.pkg('update') 75 self.pkg('install --yes run-postinsts-dev') 76 self.pkg('remove --yes run-postinsts-dev') 77 self.cleanup_source_config_for_package_install_signed() 78