def test_change_prefix(self): old_state = release.SystemState('testing', 'wb6/stretch', '', True) new_state = release.SystemState('testing', 'wb6/stretch', 'new/prefix', True) assert new_state == release.get_target_state(old_state, prefix='new/prefix')
def test_new_state_not_exist(self, mocker): state = release.SystemState('testing', 'wb6/stretch', '', True) new_state = release.SystemState('stable', 'wb6/stretch', '', True) self.patch(mocker, state, release_exists=False) assert release.RETCODE_NO_TARGET == release.route( args=self.make_args(target_release='stable'), argv=['test', '-t']) release.release_exists.assert_called_once_with(new_state) release.update_system.assert_not_called()
def test_change_release_keep_prefix(self): old_state = release.SystemState('testing', 'wb6/stretch', 'my/prefix', True) new_state = release.SystemState('stable', 'wb6/stretch', 'my/prefix', True) assert new_state == release.get_target_state(old_state, target_release='stable')
def patch(self, mocker, confirm=True): super().patch(mocker, confirm=confirm) self.old_state = release.SystemState('testing', 'wb6/stretch', '', True) self.new_state = release.SystemState('stable', 'wb6/stretch', '', True) mocker.patch.object(release, 'generate_system_config') mocker.patch.object(release, 'generate_tmp_apt_preferences') mocker.patch.object(release, 'run_apt') mocker.patch('atexit.register') mocker.patch('atexit.unregister')
def test_old_state_inconsistent(self, mocker): state = release.SystemState('testing', 'wb6/stretch', '', False) new_state = release.SystemState('testing', 'wb6/stretch', '', True) self.patch(mocker, state) assert release.RETCODE_OK == release.route( args=self.make_args(target_release='testing'), argv=['test', '-t']) release.release_exists.assert_called_once_with(new_state) release.update_system.assert_called_once_with(new_state, state, second_stage=False, assume_yes=False, log_filename=None)
def patch(self, mocker, raise_exc=None, return_value=release.RETCODE_OK): self.old_state = release.SystemState('testing', 'wb6/stretch', '', True) self.new_state = release.SystemState('stable', 'wb6/stretch', '', True) mocker.patch.object(release, 'update_first_stage', return_value=return_value, side_effect=raise_exc) mocker.patch.object(release, 'update_second_stage', return_value=return_value, side_effect=raise_exc)
def test_reset_packages_route(self, mocker): state = release.SystemState('testing', 'wb6/stretch', '', True) self.patch(mocker, state) assert release.RETCODE_OK == release.route( args=self.make_args(reset_packages=True), argv=['test', '-p']) release.update_system.assert_called_once_with(state, state, second_stage=True, assume_yes=False, log_filename=None)
def patch(self, mocker, side_effect=None): self.state = release.SystemState('testing', 'wb6/stretch', 'my/prefix', True) self.url = "http://deb.wirenboard.com/my/prefix/wb6/stretch/dists/testing/Release" ret = SimpleNamespace(getcode=lambda: 200) mocker.patch.object(urllib.request, 'urlopen', side_effect=side_effect, return_value=ret)
def test_generate_system_config(mocker): mocker.patch.object(release, 'generate_sources_list') mocker.patch.object(release, 'generate_release_apt_preferences') state = release.SystemState('testing', 'wb6/stretch', 'my/prefix', True) release.generate_system_config(state) release.generate_sources_list.assert_called_once_with( state, filename=release.WB_SOURCES_LIST_FILENAME) release.generate_release_apt_preferences.assert_called_once_with( state, filename=release.WB_RELEASE_APT_PREFERENCES_FILENAME)
class TestSystemStateReader: @pytest.mark.parametrize( 'wb_release,sources_list,result', [('wb-release.1.txt', 'sources.3.list', release.SystemState('testing', 'wb6/stretch', '', True)), ('wb-release.2.txt', 'sources.4.list', release.SystemState('stable', 'wb5/stretch', 'git/my/path', True)), ('wb-release.2.txt', 'sources.3.list', release.SystemState('stable', 'wb5/stretch', 'git/my/path', False))]) def test_read(self, wb_release, sources_list, result): assert release.get_current_state(os.path.join(DATA_PATH, wb_release), os.path.join(DATA_PATH, sources_list)) == result @pytest.mark.parametrize('filename', ['wb-release.err.1.txt', 'wb-release.err.2.txt']) def test_error(self, filename): with pytest.raises(Exception): release.get_current_state( os.path.join(DATA_PATH, filename), os.path.join(DATA_PATH, 'sources.3.list'))
def patch(self, mocker, system_state=release.SystemState('testing', 'wb6/stretch', '', True), release_exists=True): # possible actions mocker.patch.object(release, 'update_system', return_value=release.RETCODE_OK) mocker.patch.object(release, 'generate_system_config', return_value=release.RETCODE_OK) mocker.patch.object(release, 'print_banner') mocker.patch.object(release, 'configure_logger') # additional info sources mocker.patch.object(release, 'get_current_state', return_value=system_state) mocker.patch.object(release, 'release_exists', return_value=release_exists)
def test_impossible_update(self): with pytest.raises(release.ImpossibleUpdateError): release.get_target_state(release.SystemState( 'some', 'thing', 'here', True), reset_url=True, prefix='new/prefix')
def test_same_state(self, mocker): state = release.SystemState('testing', 'wb6/stretch', '', True) self.patch(mocker, state) assert release.RETCODE_OK == release.route( args=self.make_args(target_release='testing'), argv=['test', '-t'])
def test_regenerate_config(self, mocker): state = release.SystemState('testing', 'wb6/stretch', '', True) self.patch(mocker, state) assert release.RETCODE_OK == release.route( args=self.make_args(regenerate=True), argv=['test', '-r']) release.generate_system_config.assert_called_once_with(state)
def test_reset_prefix(self): old_state = release.SystemState('testing', 'wb6/stretch', 'old/prefix', True) new_state = release.SystemState('testing', 'wb6/stretch', '', True) assert new_state == release.get_target_state(old_state, reset_url=True)
exc = subprocess.CalledProcessError(42, cmd='apt-get') self.patch(mocker, side_effect=exc) with pytest.raises(subprocess.CalledProcessError) as exc_info: release.run_apt('update') assert exc_info.value == exc release.run_cmd.assert_called_once_with('apt-get', '-q', 'update', *self.expected_args, env=self.expected_env, log_suffix='apt.update') @pytest.mark.parametrize( 'state,result', [(release.SystemState('testing', 'wb6/stretch', '', True), 'deb http://deb.wirenboard.com/wb6/stretch testing main'), (release.SystemState('wb-2108', 'wb6/stretch', 'my/prefix', True), 'deb http://deb.wirenboard.com/my/prefix/wb6/stretch wb-2108 main'), (release.SystemState('staging', 'all', '', True), 'deb http://deb.wirenboard.com/all staging main')]) def test_sources_list_generator(state, result): with tempfile.NamedTemporaryFile() as f: release.generate_sources_list(state, filename=f.name) assert read_file_ignore_comments(f.name) == result @pytest.mark.parametrize( 'state,result', [(release.SystemState('testing', 'wb6/stretch', '', True), "Package: *\nPin: release o=wirenboard, a=testing\nPin-Priority: 990"),