def setUp(self): super().setUp() temp_cwd_fixture = fixture_setup.TempCWD() self.useFixture(temp_cwd_fixture) self.path = temp_cwd_fixture.path self.useFixture(fixture_setup.TempConfig(self.path)) # Some tests will directly or indirectly change the plugindir, which # is a module variable. Make sure that it is returned to the original # value when a test ends. self.addCleanup(common.set_plugindir, common.get_plugindir()) self.addCleanup(common.set_schemadir, common.get_schemadir()) self.addCleanup(common.set_schemadir, common.get_schemadir()) self.addCleanup(common.reset_env) common.set_schemadir(os.path.join(__file__, '..', '..', '..', 'schema')) self.useFixture(fixtures.FakeLogger(level=logging.ERROR)) patcher = mock.patch('multiprocessing.cpu_count') self.cpu_count = patcher.start() self.cpu_count.return_value = 2 self.addCleanup(patcher.stop) # These are what we expect by default self.snap_dir = os.path.join(os.getcwd(), 'prime') self.stage_dir = os.path.join(os.getcwd(), 'stage') self.parts_dir = os.path.join(os.getcwd(), 'parts') self.local_plugins_dir = os.path.join(self.parts_dir, 'plugins')
def setUp(self): super().setUp() temp_cwd_fixture = fixture_setup.TempCWD() self.useFixture(temp_cwd_fixture) self.path = temp_cwd_fixture.path # Some tests will directly or indirectly change the plugindir, which # is a module variable. Make sure that it is returned to the original # value when a test ends. self.addCleanup(common.set_plugindir, common.get_plugindir()) self.addCleanup(common.set_schemadir, common.get_schemadir()) self.addCleanup(common.set_schemadir, common.get_schemadir()) self.addCleanup(common.reset_env) common.set_schemadir(os.path.join(__file__, '..', '..', '..', 'schema')) self.useFixture(fixtures.FakeLogger(level=logging.ERROR)) patcher = mock.patch('multiprocessing.cpu_count') self.cpu_count = patcher.start() self.cpu_count.return_value = 2 self.addCleanup(patcher.stop) # These are what we expect by default self.snap_dir = os.path.join(os.getcwd(), 'snap') self.stage_dir = os.path.join(os.getcwd(), 'stage') self.parts_dir = os.path.join(os.getcwd(), 'parts') self.local_plugins_dir = os.path.join(self.parts_dir, 'plugins')
def setUp(self): super().setUp() temp_cwd_fixture = fixture_setup.TempCWD() self.useFixture(temp_cwd_fixture) self.path = temp_cwd_fixture.path # Use a separate path for XDG dirs, or changes there may be detected as # source changes. self.xdg_path = self.useFixture(fixtures.TempDir()).path self.useFixture(fixture_setup.TempXDG(self.xdg_path)) self.fake_terminal = fixture_setup.FakeTerminal() self.useFixture(self.fake_terminal) self.useFixture(fixture_setup.SilentSnapProgress()) # Some tests will directly or indirectly change the plugindir, which # is a module variable. Make sure that it is returned to the original # value when a test ends. self.addCleanup(common.set_plugindir, common.get_plugindir()) self.addCleanup(common.set_schemadir, common.get_schemadir()) self.addCleanup(common.set_librariesdir, common.get_librariesdir()) self.addCleanup(common.reset_env) common.set_schemadir(os.path.join(get_snapcraft_path(), "schema")) self.fake_logger = fixtures.FakeLogger(level=logging.ERROR) self.useFixture(self.fake_logger) patcher = mock.patch("multiprocessing.cpu_count") self.cpu_count = patcher.start() self.cpu_count.return_value = 2 self.addCleanup(patcher.stop) patcher = mock.patch( "snapcraft.internal.indicators.ProgressBar", new=SilentProgressBar ) patcher.start() self.addCleanup(patcher.stop) # These are what we expect by default self.snap_dir = os.path.join(os.getcwd(), "snap") self.prime_dir = os.path.join(os.getcwd(), "prime") self.stage_dir = os.path.join(os.getcwd(), "stage") self.parts_dir = os.path.join(os.getcwd(), "parts") self.local_plugins_dir = os.path.join(self.snap_dir, "plugins") # Avoid installing patchelf in the tests self.useFixture(fixtures.EnvironmentVariable("SNAPCRAFT_NO_PATCHELF", "1")) # Disable Sentry reporting for tests, otherwise they'll hang waiting # for input self.useFixture( fixtures.EnvironmentVariable("SNAPCRAFT_ENABLE_SENTRY", "false") ) machine = os.environ.get("SNAPCRAFT_TEST_MOCK_MACHINE", None) self.base_environment = fixture_setup.FakeBaseEnvironment(machine=machine) self.useFixture(self.base_environment) # Make sure "SNAPCRAFT_ENABLE_DEVELOPER_DEBUG" is reset between tests self.useFixture( fixtures.EnvironmentVariable("SNAPCRAFT_ENABLE_DEVELOPER_DEBUG") ) self.useFixture(fixture_setup.FakeSnapcraftctl())
def _load_schema(self): schema_file = os.path.abspath(os.path.join( common.get_schemadir(), 'snapcraft.yaml')) try: with open(schema_file) as fp: self._schema = yaml.load(fp) except FileNotFoundError: raise errors.SnapcraftSchemaError( 'snapcraft validation file is missing from installation path')
def _load_schema(self): schema_file = os.path.abspath( os.path.join(common.get_schemadir(), "snapcraft.json")) try: with open(schema_file) as fp: self._schema = json.load(fp) except FileNotFoundError: raise errors.YamlValidationError( "snapcraft validation file is missing from installation path")
def _load_schema(self): schema_file = os.path.abspath(os.path.join( common.get_schemadir(), 'snapcraft.yaml')) try: with open(schema_file) as fp: self._schema = yaml.load(fp) except FileNotFoundError: from snapcraft.internal.project_loader import errors raise errors.YamlValidationError( 'snapcraft validation file is missing from installation path')
def _load_schema(self): schema_file = os.path.abspath(os.path.join( common.get_schemadir(), 'snapcraft.yaml')) try: with open(schema_file) as fp: self._schema = yaml.safe_load(fp) except FileNotFoundError: from snapcraft.internal.project_loader import errors raise errors.YamlValidationError( 'snapcraft validation file is missing from installation path')
def setup_dirs() -> None: """ Ensure that snapcraft.common plugindir is setup correctly and support running out of a development snapshot """ from snapcraft.internal import common topdir = os.path.abspath(os.path.join(__file__, "..", "..", "..")) # Only change the default if we are running from a checkout or from the # snap, or in Windows. if os.path.exists(os.path.join(topdir, "setup.py")): common.set_plugindir(os.path.join(topdir, "snapcraft", "plugins")) common.set_schemadir(os.path.join(topdir, "schema")) common.set_extensionsdir(os.path.join(topdir, "extensions")) common.set_keyringsdir(os.path.join(topdir, "keyrings")) # The default paths are relative to sys.prefix, which works well for # Snapcraft as a deb or in a venv. However, the Python plugin installs # packages into $SNAP/ as a prefix, while Python itself is contained in # $SNAP/usr/. As a result, using sys.prefix (which is '/usr') to find these # files won't work in the snap. elif common.is_snap(): snap_path = os.environ.get("SNAP") if snap_path is None: # Shouldn't happen, but it is certainly an error if it does. raise RuntimeError("SNAP not defined, but SNAP_NAME is?") parent_dir = os.path.join(snap_path, "share", "snapcraft") common.set_plugindir(os.path.join(parent_dir, "plugins")) common.set_schemadir(os.path.join(parent_dir, "schema")) common.set_extensionsdir(os.path.join(parent_dir, "extensions")) common.set_keyringsdir(os.path.join(parent_dir, "keyrings")) common.set_legacy_snapcraft_dir( os.path.join(snap_path, "legacy_snapcraft")) elif sys.platform == "win32": common.set_plugindir(os.path.join(topdir, "snapcraft", "plugins")) data_dir = _find_windows_data_dir(topdir) common.set_schemadir(os.path.join(data_dir, "schema")) common.set_extensionsdir(os.path.join(data_dir, "extensions")) common.set_keyringsdir(os.path.join(data_dir, "keyrings")) else: # Make sure required data directories exist in the default locations. # Plugins and legacy snapcraft directory are not required. for d in [ common.get_schemadir(), common.get_extensionsdir(), common.get_keyringsdir(), ]: if not os.path.exists(d): raise snapcraft.internal.errors.SnapcraftDataDirectoryMissingError( )
def setUp(self): super().setUp() temp_cwd_fixture = fixture_setup.TempCWD() self.useFixture(temp_cwd_fixture) self.path = temp_cwd_fixture.path self.useFixture(fixture_setup.TempXDG(self.path)) self.fake_terminal = fixture_setup.FakeTerminal() self.useFixture(self.fake_terminal) self.useFixture(fixture_setup.SilentSnapProgress()) # Some tests will directly or indirectly change the plugindir, which # is a module variable. Make sure that it is returned to the original # value when a test ends. self.addCleanup(common.set_plugindir, common.get_plugindir()) self.addCleanup(common.set_schemadir, common.get_schemadir()) self.addCleanup(common.set_librariesdir, common.get_librariesdir()) self.addCleanup(common.reset_env) common.set_schemadir(os.path.join(get_snapcraft_path(), 'schema')) self.fake_logger = fixtures.FakeLogger(level=logging.ERROR) self.useFixture(self.fake_logger) patcher = mock.patch('multiprocessing.cpu_count') self.cpu_count = patcher.start() self.cpu_count.return_value = 2 self.addCleanup(patcher.stop) patcher = mock.patch('snapcraft.internal.indicators.ProgressBar', new=SilentProgressBar) patcher.start() self.addCleanup(patcher.stop) # These are what we expect by default self.snap_dir = os.path.join(os.getcwd(), 'snap') self.prime_dir = os.path.join(os.getcwd(), 'prime') self.stage_dir = os.path.join(os.getcwd(), 'stage') self.parts_dir = os.path.join(os.getcwd(), 'parts') self.local_plugins_dir = os.path.join(self.snap_dir, 'plugins') # Avoid installing patchelf in the tests self.useFixture( fixtures.EnvironmentVariable('SNAPCRAFT_NO_PATCHELF', '1')) # Disable Sentry reporting for tests, otherwise they'll hang waiting # for input self.useFixture( fixtures.EnvironmentVariable('SNAPCRAFT_ENABLE_SENTRY', 'false')) machine = os.environ.get('SNAPCRAFT_TEST_MOCK_MACHINE', None) self.base_environment = fixture_setup.FakeBaseEnvironment( machine=machine) self.useFixture(self.base_environment) # Make sure SNAPCRAFT_DEBUG is reset between tests self.useFixture(fixtures.EnvironmentVariable('SNAPCRAFT_DEBUG')) self.useFixture(fixture_setup.FakeSnapcraftctl())
def setUp(self): super().setUp() temp_cwd_fixture = fixture_setup.TempCWD() self.useFixture(temp_cwd_fixture) self.path = temp_cwd_fixture.path self.useFixture(fixture_setup.TempXDG(self.path)) self.fake_terminal = fixture_setup.FakeTerminal() self.useFixture(self.fake_terminal) self.useFixture(fixture_setup.SilentSnapProgress()) # Some tests will directly or indirectly change the plugindir, which # is a module variable. Make sure that it is returned to the original # value when a test ends. self.addCleanup(common.set_plugindir, common.get_plugindir()) self.addCleanup(common.set_schemadir, common.get_schemadir()) self.addCleanup(common.set_librariesdir, common.get_librariesdir()) self.addCleanup(common.reset_env) common.set_schemadir(os.path.join(__file__, '..', '..', '..', 'schema')) self.fake_logger = fixtures.FakeLogger(level=logging.ERROR) self.useFixture(self.fake_logger) patcher = mock.patch('multiprocessing.cpu_count') self.cpu_count = patcher.start() self.cpu_count.return_value = 2 self.addCleanup(patcher.stop) patcher = mock.patch('snapcraft.internal.indicators.ProgressBar', new=SilentProgressBar) patcher.start() self.addCleanup(patcher.stop) # These are what we expect by default self.snap_dir = os.path.join(os.getcwd(), 'snap') self.prime_dir = os.path.join(os.getcwd(), 'prime') self.stage_dir = os.path.join(os.getcwd(), 'stage') self.parts_dir = os.path.join(os.getcwd(), 'parts') self.local_plugins_dir = os.path.join(self.snap_dir, 'plugins') machine = os.environ.get('SNAPCRAFT_TEST_MOCK_MACHINE', None) if machine: patcher = mock.patch('platform.machine') self.mock_machine = patcher.start() self.mock_machine.return_value = machine self.addCleanup(patcher.stop) # Ensure logging is set back to the default self.addCleanup(log.configure)
def setUp(self): super().setUp() temp_cwd_fixture = fixture_setup.TempCWD() self.useFixture(temp_cwd_fixture) self.path = temp_cwd_fixture.path self.useFixture(fixture_setup.TempXDG(self.path)) self.fake_terminal = fixture_setup.FakeTerminal() self.useFixture(self.fake_terminal) self.useFixture(fixture_setup.SilentSnapProgress()) # Some tests will directly or indirectly change the plugindir, which # is a module variable. Make sure that it is returned to the original # value when a test ends. self.addCleanup(common.set_plugindir, common.get_plugindir()) self.addCleanup(common.set_schemadir, common.get_schemadir()) self.addCleanup(common.set_librariesdir, common.get_librariesdir()) self.addCleanup(common.set_tourdir, common.get_tourdir()) self.addCleanup(common.reset_env) common.set_schemadir(os.path.join(__file__, '..', '..', '..', 'schema')) self.fake_logger = fixtures.FakeLogger(level=logging.ERROR) self.useFixture(self.fake_logger) patcher = mock.patch('multiprocessing.cpu_count') self.cpu_count = patcher.start() self.cpu_count.return_value = 2 self.addCleanup(patcher.stop) patcher = mock.patch( 'snapcraft.internal.indicators.ProgressBar', new=SilentProgressBar) patcher.start() self.addCleanup(patcher.stop) # These are what we expect by default self.snap_dir = os.path.join(os.getcwd(), 'snap') self.prime_dir = os.path.join(os.getcwd(), 'prime') self.stage_dir = os.path.join(os.getcwd(), 'stage') self.parts_dir = os.path.join(os.getcwd(), 'parts') self.local_plugins_dir = os.path.join(self.snap_dir, 'plugins')
def setUp(self): super().setUp() temp_cwd_fixture = fixture_setup.TempCWD() self.useFixture(temp_cwd_fixture) self.path = temp_cwd_fixture.path # Use a separate path for XDG dirs, or changes there may be detected as # source changes. self.xdg_path = self.useFixture(fixtures.TempDir()).path self.useFixture(fixture_setup.TempXDG(self.xdg_path)) self.fake_terminal = fixture_setup.FakeTerminal() self.useFixture(self.fake_terminal) # Some tests will directly or indirectly change the plugindir, which # is a module variable. Make sure that it is returned to the original # value when a test ends. self.addCleanup(common.set_plugindir, common.get_plugindir()) self.addCleanup(common.set_schemadir, common.get_schemadir()) self.addCleanup(common.set_extensionsdir, common.get_extensionsdir()) self.addCleanup(common.set_keyringsdir, common.get_keyringsdir()) self.addCleanup(common.reset_env) common.set_schemadir(os.path.join(get_snapcraft_path(), "schema")) self.fake_logger = fixtures.FakeLogger(level=logging.ERROR) self.useFixture(self.fake_logger) # Some tests will change the apt Dir::Etc::Trusted and # Dir::Etc::TrustedParts directories. Make sure they're properly reset. self.addCleanup( apt.apt_pkg.config.set, "Dir::Etc::Trusted", apt.apt_pkg.config.find_file("Dir::Etc::Trusted"), ) self.addCleanup( apt.apt_pkg.config.set, "Dir::Etc::TrustedParts", apt.apt_pkg.config.find_file("Dir::Etc::TrustedParts"), ) patcher = mock.patch("os.sched_getaffinity") self.cpu_count = patcher.start() self.cpu_count.return_value = {1, 2} self.addCleanup(patcher.stop) # We do not want the paths to affect every test we have. patcher = mock.patch( "snapcraft.file_utils.get_snap_tool_path", side_effect=lambda x: x ) patcher.start() self.addCleanup(patcher.stop) patcher = mock.patch( "snapcraft.internal.indicators.ProgressBar", new=SilentProgressBar ) patcher.start() self.addCleanup(patcher.stop) # These are what we expect by default self.snap_dir = os.path.join(os.getcwd(), "snap") self.prime_dir = os.path.join(os.getcwd(), "prime") self.stage_dir = os.path.join(os.getcwd(), "stage") self.parts_dir = os.path.join(os.getcwd(), "parts") self.local_plugins_dir = os.path.join(self.snap_dir, "plugins") # Use this host to run through the lifecycle tests self.useFixture( fixtures.EnvironmentVariable("SNAPCRAFT_BUILD_ENVIRONMENT", "host") ) # Make sure snap installation does the right thing self.fake_snapd.installed_snaps = [ dict(name="core16", channel="stable", revision="10"), dict(name="core18", channel="stable", revision="10"), ] self.fake_snapd.snaps_result = [ dict(name="core16", channel="stable", revision="10"), dict(name="core18", channel="stable", revision="10"), ] self.fake_snapd.find_result = [ dict( core16=dict( channel="stable", channels={"latest/stable": dict(confinement="strict")}, ) ), dict( core18=dict( channel="stable", channels={"latest/stable": dict(confinement="strict")}, ) ), ] self.fake_snapd.snap_details_func = None self.fake_snap_command = fixture_setup.FakeSnapCommand() self.useFixture(self.fake_snap_command) # Avoid installing patchelf in the tests self.useFixture(fixtures.EnvironmentVariable("SNAPCRAFT_NO_PATCHELF", "1")) # Disable Sentry reporting for tests, otherwise they'll hang waiting # for input self.useFixture( fixtures.EnvironmentVariable("SNAPCRAFT_ENABLE_ERROR_REPORTING", "false") ) # Don't let the managed host variable leak into tests self.useFixture(fixtures.EnvironmentVariable("SNAPCRAFT_MANAGED_HOST")) machine = os.environ.get("SNAPCRAFT_TEST_MOCK_MACHINE", None) self.base_environment = fixture_setup.FakeBaseEnvironment(machine=machine) self.useFixture(self.base_environment) # Make sure "SNAPCRAFT_ENABLE_DEVELOPER_DEBUG" is reset between tests self.useFixture( fixtures.EnvironmentVariable("SNAPCRAFT_ENABLE_DEVELOPER_DEBUG") ) self.useFixture(fixture_setup.FakeSnapcraftctl()) # Don't let host SNAPCRAFT_BUILD_INFO variable leak into tests self.useFixture(fixtures.EnvironmentVariable("SNAPCRAFT_BUILD_INFO"))