Ejemplo n.º 1
0
    def setUp(self):
        super(ApiGetVfsFilesArchiveHandlerTest, self).setUp()

        self.handler = vfs_plugin.ApiGetVfsFilesArchiveHandler()
        self.client_id = self.SetupClient(0)

        self.CreateFileVersions(self.client_id, "fs/os/c/Downloads/a.txt")

        self.CreateFileVersions(self.client_id, "fs/os/c/b.txt")
Ejemplo n.º 2
0
class VFSViewTest(gui_test_lib.GRRSeleniumTest):
    def setUp(self):
        super(VFSViewTest, self).setUp()
        # Prepare our fixture.
        self.client_id = rdf_client.ClientURN("C.0000000000000001")
        fixture_test_lib.ClientFixture(self.client_id, self.token)
        gui_test_lib.CreateFileVersions(self.client_id, self.token)
        self.RequestAndGrantClientApproval("C.0000000000000001")

    def testUnicodeContentIsShownInTree(self):
        # Open VFS view for client 1 on a specific location.
        self.Open("/#clients/C.0000000000000001/vfs/fs/os/c/Downloads/")

        # Click on the file containing unicode characters.
        self.Click(u"css=tr:contains(\"中.txt\")")
        # Then click on the "Download" tab.
        self.Click("css=li[heading=Download]:not(.disabled)")

        self.WaitUntil(self.IsTextPresent, u"中国新闻网新闻中.txt")

    def testFolderPathCanContainUnicodeCharacters(self):
        # Open VFS view for client 1 on a location containing unicode characters.
        self.Open("/#/clients/C.0000000000000001/vfs/fs/os/c/中国新闻网新闻中/")

        # Check that the correct file is listed.
        self.WaitUntil(self.IsElementPresent, "css=tr:contains(\"bzcmp\")")

    def testUrlSensitiveCharactersAreShownInTree(self):
        gui_test_lib.CreateFileVersion(self.client_id,
                                       "fs/os/c/foo?bar&oh/a&=?b.txt",
                                       "Hello World",
                                       timestamp=gui_test_lib.TIME_1,
                                       token=self.token)

        # Open VFS view for client 1 on a specific location.
        self.Open(
            "/#c=C.0000000000000001&main=VirtualFileSystemView&t=_fs-os-c")

        # Wait until the folder gets selected and its information displayed in
        # the details pane.
        self.WaitUntil(self.IsTextPresent, "C.0000000000000001/fs/os/c")

        # Click on the "foo?bar&oh" subfolder.
        self.Click("css=#_fs-os-c-foo_3Fbar_26oh a:visible")

        # Some more unicode testing.
        self.Click(u"css=tr:contains(\"a&=?b.txt\")")
        self.Click("css=li[heading=Download]")

        self.WaitUntil(self.IsTextPresent, u"a&=?b.txt")

        # Test the text viewer.
        self.Click("css=li[heading=TextView]")
        self.WaitUntilContains("Hello World", self.GetText,
                               "css=div.monospace pre")

    def testFolderPathCanContainUrlSensitiveCharacters(self):
        gui_test_lib.CreateFileVersion(self.client_id,
                                       "fs/os/c/foo?bar&oh/a&=?b.txt",
                                       "Hello World",
                                       timestamp=gui_test_lib.TIME_1,
                                       token=self.token)

        # Open VFS view for client 1 on a location containing unicode characters.
        self.Open(
            "/#c=C.0000000000000001&main=VirtualFileSystemView&t=_fs-os-c"
            "-foo_3Fbar_26oh")

        # Check that the correct file is listed.
        self.WaitUntil(self.IsElementPresent, "css=tr:contains(\"a&=?b.txt\")")

    def testDoubleClickGoesInsideDirectory(self):
        """Tests that double click in FileTable goes inside the directory."""

        self.Open("/")

        self.Type("client_query", "C.0000000000000001")
        self.Click("client_query_submit")

        self.WaitUntilEqual(u"C.0000000000000001", self.GetText,
                            "css=span[type=subject]")

        # Choose client 1 and go to 'Browse Virtual Filesystem'
        self.Click("css=td:contains('0001')")
        self.Click("css=a[grrtarget='client.vfs']")
        self.Click("link=fs")

        # Now click on "os" inside the table. Tree shouldn't get updated,
        self.Click("css=td:contains('os')")

        # Now double click on "os".
        self.DoubleClick("css=td:contains('os')")

        # Now we should be inside the folder, and the tree should open.
        self.WaitUntil(self.IsElementPresent, "css=#_fs-os-c i.jstree-icon")
        # Check that breadcrumbs got updated.
        self.WaitUntil(self.IsElementPresent,
                       "css=#content_rightPane .breadcrumb li:contains('os')")

    @mock.patch.object(
        api_call_router_with_approval_checks.ApiCallRouterWithApprovalChecks,
        "GetVfsFilesArchive",
        return_value=api_vfs.ApiGetVfsFilesArchiveHandler())
    def testClickingOnDownloadCurrentFolderButtonStartsDownload(
            self, mock_method):
        # Open VFS view for client 1 on a specific location.
        self.Open("/#c=C.0000000000000001&main=VirtualFileSystemView"
                  "&t=_fs-os-c-proc")

        self.Click("css=grr-vfs-files-archive-button")
        self.Click("css=a[name=downloadCurrentFolder]")

        # Mock method will be called twice: once for HEAD request (to check
        # permissions) and once for GET request.
        self.WaitUntil(lambda: mock_method.call_count)
        mock_method.assert_called_with(api_vfs.ApiGetVfsFilesArchiveArgs(
            client_id="C.0000000000000001", file_path="fs/os/c/proc"),
                                       token=mock.ANY)

    @mock.patch.object(
        api_call_router_with_approval_checks.ApiCallRouterWithApprovalChecks,
        "GetVfsFilesArchive",
        return_value=api_vfs.ApiGetVfsFilesArchiveHandler())
    def testClickingOnDownloadEverythingButtonStartsDownload(
            self, mock_method):
        # Open VFS view for client 1 on a specific location.
        self.Open("/#c=C.0000000000000001&main=VirtualFileSystemView"
                  "&t=_fs-os-c-proc")

        self.Click("css=grr-vfs-files-archive-button")
        self.Click("css=a[name=downloadEverything]:not([disabled])")

        # Mock method will be called twice: once for HEAD request (to check
        # permissions) and once for GET request.
        self.WaitUntil(lambda: mock_method.call_count)
        mock_method.assert_called_with(
            api_vfs.ApiGetVfsFilesArchiveArgs(client_id="C.0000000000000001"),
            token=mock.ANY)
 def GetVfsFilesArchive(self, args, token=None):
     return api_vfs.ApiGetVfsFilesArchiveHandler()