def tearDown(self): XpresserUnittest.tearDown(self) # Just in case... we don't want to break other tests startup_cfg = StartUpConfig() startup_cfg.last_upd = datetime.date.today() startup_cfg.save()
def accept_disclaimer(self): """ :return: True/False depending on the user's answer to our disclaimer. Please note that in w3af_console we'll stop if the user does not accept the disclaimer. """ startup_cfg = StartUpConfig() if startup_cfg.accepted_disclaimer: return True QUESTION = 'Do you accept the terms and conditions? [N|y] ' msg = DISCLAIMER + '\n\n' + QUESTION try: user_response = raw_input(msg) except (KeyboardInterrupt, EOFError): print '' user_response = '' user_response = user_response.lower() if user_response == 'y' or user_response == 'yes': startup_cfg.accepted_disclaimer = True startup_cfg.save() return True return False
def test_no_need_update(self): vmgr = self.vmgr vmgr._start_cfg = StartUpConfig() vmgr._start_cfg._autoupd = False # Test no auto-update self.assertFalse(vmgr._has_to_update())
def test_get_prompt(self): # We want to get the prompt, not a disclaimer message startup_cfg = StartUpConfig() startup_cfg.accepted_disclaimer = True startup_cfg.save() # The easy way to do this was to simply pass 'python' to Popen # but now that we want to run the tests in virtualenv, we need to # find the "correct" / "virtual" python executable using which and # then pass that one to Popen python_executable = sys.executable p = subprocess.Popen([python_executable, 'w3af_console', '-n'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, shell=False, universal_newlines=True) expected_prompt = 'w3af>>>' stdout, stderr = p.communicate('exit\r\n') msg = 'Failed to find "%s" in "%s" using "%s" as python executable.' msg = msg % (expected_prompt, stdout, python_executable) self.assertIn(expected_prompt, stdout, msg)
def test_update_not_required_not_forced(self): """ Test that we don't perform any extra steps if the local installation was already updated today. """ self.vmgr._start_cfg = start_cfg = StartUpConfig() start_cfg._autoupd = True start_cfg._freq = StartUpConfig.FREQ_DAILY last_upd = datetime.date.today() - datetime.timedelta(days=0) start_cfg._lastupd = last_upd on_update_check_mock = MagicMock() on_already_latest_mock = MagicMock() on_update_mock = MagicMock() self.vmgr.register(VersionMgr.ON_UPDATE_CHECK, on_update_check_mock, None) self.vmgr.register(VersionMgr.ON_ALREADY_LATEST, on_already_latest_mock, None) self.vmgr.register(VersionMgr.ON_UPDATE, on_update_mock, None) self.vmgr.update() self.assertEqual(on_update_check_mock.call_count, 0) self.assertEqual(on_already_latest_mock.call_count, 0) self.assertEqual(on_update_mock.call_count, 0)
def tearDown(self): XpresserUnittest.tearDown(self) # Just in case... we don't want to break other tests startup_cfg = StartUpConfig() startup_cfg.accepted_disclaimer = True startup_cfg.save()
def test_save(self): scfg = StartUpConfig(self.CFG_FILE) scfg.last_upd = date.today() scfg.accepted_disclaimer = True scfg.last_commit_id = '3f4808082c1943f964669af1a1c94245bab09c61' scfg.save()
def test_set_save_use(self): """ This is a unittest for the bug reported by a user where his settings are not saved to the profile. https://github.com/andresriancho/w3af/issues/291 Actually, the settings are saved but not properly displayed, but that's not so important. The important thing is that the user was seeing the old setting instead of the new. """ # We want to get the prompt, not a disclaimer message startup_cfg = StartUpConfig() startup_cfg.accepted_disclaimer = True startup_cfg.save() # Load an existing profile, modify msf_location and save it as unittest commands_to_run = [ 'profiles', 'use OWASP_TOP10', 'back', 'misc-settings', 'set msf_location /tmp/', 'back', 'profiles', 'save_as %s' % self.get_profile_name(), 'exit' ] self.console = ConsoleUI(commands=commands_to_run, do_upd=False) self.console.sh() expected = ('Profile saved.', ) assert_result, msg = self.startswith_expected_in_output(expected) self.assertTrue(assert_result, msg) # The easy way to do this was to simply pass 'python' to Popen # but now that we want to run the tests in virtualenv, we need to # find the "correct" / "virtual" python executable using which and # then pass that one to Popen python_executable = sys.executable p = subprocess.Popen([python_executable, 'w3af_console', '-n'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, shell=False, universal_newlines=True) # Now we run a new ConsoleUI that will load the saved settings. We # should see /tmp/ as the value for msf_location commands_to_run = [ 'profiles', 'use %s' % self.get_profile_name(), 'back', 'misc-settings', 'view', 'back', 'exit' ] expected_output = '/tmp' stdout, stderr = p.communicate('\r'.join(commands_to_run) + '\r') msg = 'Failed to find "%s" in "%s" using "%s" as python executable.' msg = msg % (expected_output, stdout, python_executable) self.assertIn(expected_output, stdout, msg)
def test_load_file_exists(self): """This is a test to verify that the things we saved were persited in the actual file. """ # Save scfg = StartUpConfig(self.CFG_FILE) scfg.last_upd = date.today() scfg.accepted_disclaimer = True scfg.last_commit_id = '3f4808082c1943f964669af1a1c94245bab09c61' scfg.save() # Load scfg = StartUpConfig(self.CFG_FILE) self.assertEqual(scfg.last_upd, date.today()) self.assertEqual(scfg.accepted_disclaimer, True) self.assertEqual(scfg.last_commit_id, '3f4808082c1943f964669af1a1c94245bab09c61') self.assertEqual(scfg.freq, 'D')
def test_disclaimer_shown_not_accept(self): startup_cfg = StartUpConfig() startup_cfg.accepted_disclaimer = False startup_cfg.save() self.find('accept_terms_conditions') self.click('simple_no') self.not_find('owasp_top_10_profile')
def test_disclaimer_shown_accept(self): startup_cfg = StartUpConfig() startup_cfg.last_upd = datetime.date.today() - datetime.timedelta( days=3) startup_cfg.save() self.find('update_window') self.click('update') self.find('owasp_top_10_profile')
def test_load_not_exist(self): """ This is a test to verify that the defaults are loaded when the file does not exist. """ scfg = StartUpConfig('foo.conf') self.assertEqual(scfg.last_upd, date.today() - timedelta(days=31)) self.assertEqual(scfg.accepted_disclaimer, False) self.assertEqual(scfg.last_commit_id, '') self.assertEqual(scfg.freq, 'D')
def test_update_required_outdated_not_forced(self): """ Test that we check if we're on the latest version if the latest local installation update was 3 days ago and the frequency is set to daily. The local repository is NOT in the latest version. A 'git reset --hard' is run at the beginning of this test to reset the repo to a revision before the latest one. ***** WARNING ***** ***** WARNING ***** YOU DON'T WANT TO RUN THIS TEST WITH OTHERS SINCE IT WILL BREAK THEM! ***** WARNING ***** ***** WARNING ***** """ try: git_client = GitClient('.') head_id = git_client.get_local_head_id() one_before_head = git_client.get_parent_for_revision(head_id) git_client.reset_to_previous_state(one_before_head) self.vmgr._start_cfg = start_cfg = StartUpConfig() start_cfg._autoupd = True start_cfg._freq = StartUpConfig.FREQ_DAILY last_upd = datetime.date.today() - datetime.timedelta(days=3) start_cfg._lastupd = last_upd on_update_check_mock = MagicMock() on_already_latest_mock = MagicMock() on_update_mock = MagicMock() self.vmgr.register(VersionMgr.ON_UPDATE_CHECK, on_update_check_mock, None) self.vmgr.register(VersionMgr.ON_ALREADY_LATEST, on_already_latest_mock, None) self.vmgr.register(VersionMgr.ON_UPDATE, on_update_mock, None) self.vmgr.callback_onupdate_confirm = MagicMock(side_effect=[ True, ]) self.vmgr.update() self.assertEqual(on_update_check_mock.call_count, 1) self.assertEqual(on_already_latest_mock.call_count, 0) self.assertEqual(on_update_mock.call_count, 1) finally: git_client.pull()
def test_has_to_update(self): """ Test [D]aily, [W]eekly and [M]onthly auto-update """ SC = StartUpConfig vmgr = self.vmgr for freq, diffdays in ((SC.FREQ_DAILY, 1), (SC.FREQ_WEEKLY, 8), (SC.FREQ_MONTHLY, 34)): vmgr._start_cfg = start_cfg = StartUpConfig() start_cfg._autoupd = True start_cfg._freq = freq last_upd = datetime.date.today() - datetime.timedelta(days=diffdays) start_cfg._lastupd = last_upd self.assertTrue(vmgr._has_to_update())
def __init__(self, localpath=W3AF_LOCAL_PATH, log=None): """ w3af version manager class. Handles the logic concerning the automatic update/commit process of the code. :param localpath: Working directory :param log: Default output function """ self._localpath = localpath self._client = GitClient(localpath) self._client.add_observer(self._client_progress) log = log if log is not None else om.out.console self._log = log # Set default events self.register_default_events(log) # Startup configuration self._start_cfg = StartUpConfig()
def accept_disclaimer(self): """ :return: True/False depending on the user's answer to our disclaimer. Please note that in w3af_gui we'll stop if the user does not accept the disclaimer. """ startup_cfg = StartUpConfig() if startup_cfg.accepted_disclaimer: return True QUESTION = 'Do you accept the terms and conditions?' msg = DISCLAIMER + '\n\n' + QUESTION user_response = ask(msg) if user_response: startup_cfg.accepted_disclaimer = True startup_cfg.save() return True return False
def test_update_required_not_forced(self): """ Test that we check if we're on the latest version if the latest local installation update was 3 days ago and the frequency is set to daily. The local repository is in the latest version (git pull is run before) In CircleCI this fails with the following message: You asked to pull from the remote 'origin', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line. """ git_client = GitClient('.') git_client.pull() self.vmgr._start_cfg = start_cfg = StartUpConfig() start_cfg._autoupd = True start_cfg._freq = StartUpConfig.FREQ_DAILY last_upd = datetime.date.today() - datetime.timedelta(days=3) start_cfg._lastupd = last_upd on_update_check_mock = MagicMock() on_already_latest_mock = MagicMock() on_update_mock = MagicMock() self.vmgr.register(VersionMgr.ON_UPDATE_CHECK, on_update_check_mock, None) self.vmgr.register(VersionMgr.ON_ALREADY_LATEST, on_already_latest_mock, None) self.vmgr.register(VersionMgr.ON_UPDATE, on_update_mock, None) self.vmgr.update() self.assertEqual(on_update_check_mock.call_count, 1) self.assertEqual(on_already_latest_mock.call_count, 1) self.assertEqual(on_update_mock.call_count, 0)
def dependency_check(dependency_set=CORE, exit_on_failure=True): """ This function verifies that the dependencies that are needed by the framework core are met. :return: True if the process should exit """ if StartUpConfig().get_skip_dependencies_check(): return False disable_warnings() platform = get_current_platform() failed_deps = get_missing_pip_packages(platform, dependency_set) os_packages = get_missing_os_packages(platform, dependency_set) external_commands = get_missing_external_commands(platform) enable_warnings() # If everything is installed, just exit if not failed_deps and not os_packages and not external_commands: # False means: do not exit() return False generate_requirements_txt(failed_deps) script_path = generate_helper_script(platform.PKG_MANAGER_CMD, os_packages, platform.PIP_CMD, failed_deps, external_commands) write_instructions_to_console(platform, failed_deps, os_packages, script_path, external_commands) if exit_on_failure: sys.exit(1) else: return True
def test_wrapped_w3af(self): """ Strange behaviour when wrapping w3af_console https://github.com/andresriancho/w3af/issues/1299 """ # Just in case... we don't want to break other tests startup_cfg = StartUpConfig() startup_cfg.last_upd = datetime.date.today() startup_cfg.set_accepted_disclaimer(True) startup_cfg.save() # The easy way to do this was to simply pass 'python' to Popen # but now that we want to run the tests in virtualenv, we need to # find the "correct" / "virtual" python executable using which and # then pass that one to Popen python_executable = sys.executable p = subprocess.Popen([python_executable, 'w3af_console', '-n'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, shell=False, universal_newlines=True) # Now we run a new ConsoleUI that will load the saved settings. We # should see /tmp/ as the value for msf_location commands_to_run = [ 'profiles', 'back', 'misc-settings', 'view', 'back', 'exit' ] expected_output = 'msf_location' stdout, stderr = p.communicate('\r'.join(commands_to_run) + '\r') msg = 'Failed to find "%s" in "%s" using "%s" as python executable.' msg = msg % (expected_output, stdout, python_executable) self.assertIn(expected_output, stdout, msg)
def test_disclaimer_not_shown(self): startup_cfg = StartUpConfig() startup_cfg.accepted_disclaimer = True startup_cfg.save() self.not_find('accept_terms_conditions')
def skip_dependencies_check(self): startup_cfg = StartUpConfig() return startup_cfg.get_skip_dependencies_check()
def setUp(self): super(TestStrategy, self).setUp() startup_cfg = StartUpConfig() startup_cfg.accepted_disclaimer = True startup_cfg.save()