Beispiel #1
0
    def test_version_check_older_cluster(self):  # pylint: disable=invalid-name
        """
        Test that when hitting an older cluster without a cluster version, the time is updated and
        we mark the cluster check as passed/not done.

        We don't actually hit a live cluster, so we will enter a dummy value of None to the
        function call, which is what the result will be http gateway returns error.
        """

        state_file_path = sfctl_state.get_state_path()

        # empty the file
        open(state_file_path, 'w').close()

        current_utc_time = datetime.utcnow()

        # Check cluster version. This should update the last updated time (in state)
        checks_passed_or_not_done = check_cluster_version(
            False, dummy_cluster_version='NoResult')

        self.assertTrue(
            checks_passed_or_not_done,
            'check_cluster_version should return True '
            'because checks should not be performed, '
            'since we are simulating that we are a newer '
            'sfctl hitting a cluster without the '
            'get cluster version API.')

        self.assertGreater(
            sfctl_state.get_cluster_version_check_time(), current_utc_time,
            'check_cluster_version command should have modified the '
            'last checked time such that the time in state is greater than our '
            'time.')
Beispiel #2
0
    def test_version_check_triggered(self):
        """Test that under the following circumstances, a cluster version & sfctl version
        compatibility check is triggered and verify that the last check time was left
        in a good state after the call:
            - The last check time (in state) doesn't exist yet
            - An error has occurred during function call
            - On connection to a new cluster even
                if time since last check is less than SF_CLI_VERSION_CHECK_INTERVAL
            - The last check time (in state) was greater than
                config.py's SF_CLI_VERSION_CHECK_INTERVAL

        NOTE: this is a unit test only, which relies on the
        custom_cluster.py - check_cluster_version
        function being called with the correct parameters, and being called at all.
        """

        # Start session state with condition last check time does not exist:
        state_file_path = sfctl_state.get_state_path()
        # If anything other than one line with our state exists in the file
        # (2 lines total - one to specify the section)
        # then throw an error. This may happen if sfctl uses the state file for something else.
        # If the state file ends up being used for anything else
        # other than last checked API version time, then modify this test then to remove
        # only that one line.
        with open(state_file_path) as state_file:
            content = state_file.readlines()

        content_trimmed = []
        for line in content:
            if line.strip():
                content_trimmed.append(line)

        self.assertLess(
            len(content_trimmed), 3,
            'sfctl state file should not have more than 2 lines. '
            'Content: ' + str(content_trimmed))

        # empty the file
        open(state_file_path, 'w').close()

        # Create cluster version object.
        cluster_version = 'invalid_version'

        current_utc_time = datetime.utcnow()

        # Check cluster version. This should update the last updated time (in state)
        checks_passed_or_not_done = check_cluster_version(
            False, dummy_cluster_version=cluster_version)

        self.assertFalse(
            checks_passed_or_not_done,
            'check_cluster_version should return False '
            'because checks were performed and the '
            'versions do not match')
        self.assertGreater(
            sfctl_state.get_cluster_version_check_time(), current_utc_time,
            'check_cluster_version command should have modified the '
            'last checked time such that the time in state is greater than our '
            'time.')

        # Set the last checked time in state to something recent, and set calling on failure
        # to True
        sfctl_state.set_cluster_version_check_time(current_utc_time)

        checks_passed_or_not_done = check_cluster_version(
            on_failure_or_connection=True,
            dummy_cluster_version=cluster_version)

        self.assertFalse(
            checks_passed_or_not_done,
            'check_cluster_version should return False '
            'because checks were performed and the '
            'versions do not match')
        self.assertGreater(
            sfctl_state.get_cluster_version_check_time(), current_utc_time,
            'check_cluster_version command should have modified the '
            'last checked time such that the time in state is greater than our '
            'time.')

        # Last check time is in the past (well past SF_CLI_VERSION_CHECK_INTERVAL),
        # so should trigger an update and a check
        utc_time_past = datetime(year=current_utc_time.year - 1,
                                 month=12,
                                 day=20,
                                 hour=0,
                                 minute=0,
                                 second=0)

        sfctl_state.set_cluster_version_check_time(utc_time_past)

        checks_passed_or_not_done = check_cluster_version(
            on_failure_or_connection=False,
            dummy_cluster_version=cluster_version)

        self.assertFalse(
            checks_passed_or_not_done,
            'check_cluster_version should return False '
            'because checks were performed and the '
            'versions do not match')
        self.assertGreater(
            sfctl_state.get_cluster_version_check_time(), utc_time_past,
            'check_cluster_version command should have modified the '
            'last checked time such that the time in state is greater than our '
            'time.')