def test_get_remote_head_id(self): # For some strange reason jenkins creates a branch called # jenkins-<job name> during the build, which makes this test FAIL # if we don't take that into account if get_current_branch().startswith('jenkins-'): raise SkipTest('Workaround for Jenkins Git plugin wierdness.') client = GitClient(W3AF_LOCAL_PATH) # I don't really want to wait for the local repo to update itself # using "git fetch", so I simply put this as a mock client.fetch = MagicMock() remote_head = client.get_remote_head_id() client.fetch.assert_called_once_with() self.assertEqual(len(remote_head), 40) self.assertIsInstance(remote_head, basestring) # Get the ID using an alternative way for double checking branch = 'refs/remotes/origin/%s' % get_current_branch() proc = subprocess.Popen(['git', 'for-each-ref', branch], stdout=subprocess.PIPE) commit_id_line = proc.stdout.readline() commit_id_line = commit_id_line.strip() commit_id, _ = commit_id_line.split(' ') self.assertEqual(remote_head, commit_id)
def test_get_URL(self): client = GitClient(W3AF_LOCAL_PATH) # https://github.com/andresriancho/w3af/ provides a list of all the # URLs which can be used to clone the repo REPO_URLS = ('[email protected]:andresriancho/w3af.git', 'https://github.com/andresriancho/w3af.git', 'git://github.com/andresriancho/w3af.git') self.assertIn(client.URL, REPO_URLS)
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_get_local_head_id(self): client = GitClient(W3AF_LOCAL_PATH) local_head = client.get_local_head_id() self.assertEqual(len(local_head), 40) self.assertIsInstance(local_head, basestring) # Get the ID using an alternative way for double checking proc = subprocess.Popen(['git', 'log', '-n', '1'], stdout=subprocess.PIPE) commit_id_line = proc.stdout.readline() commit_id_line = commit_id_line.strip() _, commit_id = commit_id_line.split(' ') self.assertEqual(local_head, commit_id)
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 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)