Ejemplo n.º 1
0
    def test_installed_no_updates(self):
        """
        Test installed function when no updates are found.
        """
        # Mocks the connection to the Windows Update Agent
        mock_wua = MagicMock()
        # Mocks the initial search
        mock_wua.search = MagicMock()
        # Mocks the number of updates found.
        mock_wua.search().count.return_value = 0

        patch_winapi_com = patch("salt.utils.winapi.Com", autospec=True)
        patch_dispatch = patch("win32com.client.Dispatch", autospec=True)
        patch_wua = patch(
            "salt.utils.win_update.WindowsUpdateAgent",
            autospec=True,
            return_value=mock_wua,
        )

        with patch_winapi_com, patch_dispatch, patch_wua:
            expected = {
                "name": "KB4062623",
                "changes": {},
                "result": True,
                "comment": "No updates found",
            }
            result = win_wua.installed(name="KB4062623")
            self.assertDictEqual(result, expected)
Ejemplo n.º 2
0
def test_removed_test_mode(update_records, update_records_identity):
    """
    Test removed function in test mode
    """

    update_search_obj = {
        update_records(
            KBArticleIDs=("4052623",),
            Identity=update_records_identity(
                UpdateID="eac02b09-d745-4891-b80f-400e0e5e4b6d"
            ),
            IsDownloaded=False,
            IsInstalled=True,
            Title="KB4052623: Really long title that exceeds 40 characters",
        ),
    }

    # Mocks the connection to the Windows Update Agent
    mock_wua = MagicMock()
    # Mocks the initial search
    mock_wua.search = MagicMock()
    # Mocks the number of updates found.
    mock_wua.search().count.return_value = 1
    # Mocks the the updates collection object
    mock_wua.search().updates = update_search_obj

    # This mocks the updates collection in the install variable. This will
    # get populated to as matches are found with the Add method
    mock_updates = MagicMock()
    # Needs to return the number of updates that need to be installed
    # (IsInstalled = False)
    mock_updates.count.return_value = 1

    patch_winapi_com = patch("salt.utils.winapi.Com", autospec=True)
    patch_dispatch = patch("win32com.client.Dispatch", autospec=True)
    patch_wua = patch(
        "salt.utils.win_update.WindowsUpdateAgent",
        autospec=True,
        return_value=mock_wua,
    )
    patch_update_collection = patch(
        "salt.utils.win_update.Updates", autospec=True, return_value=mock_updates
    )
    patch_opts = patch.dict(win_wua.__opts__, {"test": True})

    with patch_winapi_com, patch_dispatch, patch_wua, patch_update_collection, patch_opts:
        expected = {
            "changes": {},
            "comment": "Updates will be removed:",
            # I don't know how to mock this part so the list will show up.
            # It's an update collection object populated using the Add
            # method. But this works for now
            "name": "KB4062623",
            "result": None,
        }
        result = win_wua.removed(name="KB4062623")
        assert result == expected
Ejemplo n.º 3
0
def test_installed_already_installed(update_records, update_records_identity):
    """
    Test installed function when the update is already installed
    """

    update_search_obj = {
        update_records(
            KBArticleIDs=("4052623",),
            Identity=update_records_identity(
                UpdateID="eac02b09-d745-4891-b80f-400e0e5e4b6d"
            ),
            IsDownloaded=True,
            IsInstalled=True,
            Title="Update 2",
        ),
    }

    # Mocks the connection to the Windows Update Agent
    mock_wua = MagicMock()
    # Mocks the initial search
    mock_wua.search = MagicMock()
    # Mocks the number of updates found.
    mock_wua.search().count.return_value = 1
    # Mocks the the updates collection object
    mock_wua.search().updates = update_search_obj

    # This mocks the updates collection in the install variable. This will
    # get populated to as matches are found with the Add method
    mock_updates = MagicMock()
    # Needs to return the number of updates that need to be installed
    # (IsInstalled = False)
    mock_updates.count.return_value = 0

    patch_winapi_com = patch("salt.utils.winapi.Com", autospec=True)
    patch_dispatch = patch("win32com.client.Dispatch", autospec=True)
    patch_wua = patch(
        "salt.utils.win_update.WindowsUpdateAgent",
        autospec=True,
        return_value=mock_wua,
    )
    patch_update_collection = patch(
        "salt.utils.win_update.Updates", autospec=True, return_value=mock_updates
    )
    patch_opts = patch.dict(win_wua.__opts__, {"test": True})

    with patch_winapi_com, patch_dispatch, patch_wua, patch_update_collection, patch_opts:
        expected = {
            "changes": {},
            "comment": "Updates already installed: KB4052623",
            "name": "KB4062623",
            "result": True,
        }
        result = win_wua.installed(name="KB4062623")
        assert result == expected
Ejemplo n.º 4
0
    def test_installed(self):
        """
        Test installed function
        """

        update_search_obj = {
            self.UpdateRecord(
                KBArticleIDs=("4052623", ),
                Identity=self.UpdateRecordIdentity(
                    UpdateID="eac02b09-d745-4891-b80f-400e0e5e4b6d"),
                IsDownloaded=False,
                IsInstalled=False,
                Title="Update 2",
            ),
        }
        update_search_dict = {
            "eac02b09-d745-4891-b80f-400e0e5e4b6d": {
                "Downloaded": True,
                "KBs": ["KB4052623"],
                "Installed": True,
                "NeedsReboot": True,
                "Title": "Update 2",
            },
        }

        updates_refresh = {
            "a0f997b1-1abe-4a46-941f-b37f732f9fbd": {
                "Downloaded": False,
                "KBs": ["KB3193497"],
                "Installed": False,
                "NeedsReboot": False,
                "Title": "Update 1",
            },
            "eac02b09-d745-4891-b80f-400e0e5e4b6d": {
                "Downloaded": True,
                "KBs": ["KB4052623"],
                "Installed": True,
                "NeedsReboot": True,
                "Title": "Update 2",
            },
            "eac02c07-d744-4892-b80f-312d045e4ccc": {
                "Downloaded": True,
                "KBs": ["KB4052444"],
                "Installed": True,
                "NeedsReboot": False,
                "Title": "Update 3",
            },
        }

        # Mocks the connection to the Windows Update Agent
        mock_wua = MagicMock()
        # Mocks the initial search
        mock_wua.search = MagicMock()
        # Mocks the number of updates found.
        mock_wua.search().count.return_value = 1
        # Mocks the the updates collection object
        mock_wua.search().updates = update_search_obj

        # This mocks the updates collection in the install variable. This will
        # get populated to as matches are found with the Add method
        mock_updates = MagicMock()
        # Needs to return the number of updates that need to be installed
        # (IsInstalled = False)
        mock_updates.count.return_value = 1
        # Returns the updates that need to be installed as a dict
        mock_updates.list.return_value = update_search_dict

        # This gives us post_info
        mock_wua.updates = MagicMock()
        # Mock a refresh of the updates recognized by the machine. This would
        # occur post install. This is compared with the updates on the machine
        # to determine if the update was successful
        mock_wua.updates().list.return_value = updates_refresh

        patch_winapi_com = patch("salt.utils.winapi.Com", autospec=True)
        patch_dispatch = patch("win32com.client.Dispatch", autospec=True)
        patch_wua = patch(
            "salt.utils.win_update.WindowsUpdateAgent",
            autospec=True,
            return_value=mock_wua,
        )
        patch_update_collection = patch("salt.utils.win_update.Updates",
                                        autospec=True,
                                        return_value=mock_updates)
        patch_opts = patch.dict(win_wua.__opts__, {"test": False})

        with patch_winapi_com, patch_dispatch, patch_wua, patch_update_collection, patch_opts:
            expected = {
                "changes": {
                    "installed": {
                        "eac02b09-d745-4891-b80f-400e0e5e4b6d": {
                            "KBs": ["KB4052623"],
                            "NeedsReboot": True,
                            "Title": "Update 2...",
                        }
                    }
                },
                "comment": "Updates installed successfully",
                "name": "KB4062623",
                "result": True,
            }
            result = win_wua.installed(name="KB4062623")
            self.assertDictEqual(result, expected)