Ejemplo n.º 1
0
    def testExecuteLargeBinaries(self):
        client_mock = action_mocks.ActionMock(standard.ExecuteBinaryCommand)

        code = b"I am a large binary file" * 100
        upload_path = signed_binary_utils.GetAFF4ExecutablesRoot().Add(
            config.CONFIG["Client.platform"]).Add("test.exe")

        maintenance_utils.UploadSignedConfigBlob(code,
                                                 aff4_path=upload_path,
                                                 limit=100,
                                                 token=self.token)

        binary_urn = rdfvalue.RDFURN(upload_path)
        binary_size = signed_binary_utils.FetchSizeOfSignedBinary(
            binary_urn, token=self.token)
        blob_iterator, _ = signed_binary_utils.FetchBlobsForSignedBinary(
            binary_urn, token=self.token)

        # Total size is 2400.
        self.assertEqual(binary_size, 2400)

        # There should be 24 parts to this binary.
        self.assertLen(list(blob_iterator), 24)

        # This flow has an acl, the user needs to be admin.
        acl_test_lib.CreateAdminUser(self.token.username)

        with utils.Stubber(subprocess, "Popen", client_test_lib.Popen):
            flow_test_lib.TestFlowHelper(compatibility.GetName(
                administrative.LaunchBinary),
                                         client_mock,
                                         client_id=self.SetupClient(0),
                                         binary=upload_path,
                                         command_line="--value 356",
                                         token=self.token)

            # Check that the executable file contains the code string.
            self.assertEqual(client_test_lib.Popen.binary, code)

            # At this point, the actual binary should have been cleaned up by the
            # client action so it should not exist.
            self.assertRaises(IOError, open,
                              client_test_lib.Popen.running_args[0])

            # Check the binary was run with the correct command line.
            self.assertEqual(client_test_lib.Popen.running_args[1], "--value")
            self.assertEqual(client_test_lib.Popen.running_args[2], "356")

            # Check the command was in the tmp file.
            self.assertStartsWith(client_test_lib.Popen.running_args[0],
                                  config.CONFIG["Client.tempdir_roots"][0])
Ejemplo n.º 2
0
  def testUpdateClient(self):
    client_mock = action_mocks.UpdateAgentClientMock()
    fake_installer = b"FakeGRRDebInstaller" * 20
    upload_path = signed_binary_utils.GetAFF4ExecutablesRoot().Add(
        config.CONFIG["Client.platform"]).Add("test.deb")
    maintenance_utils.UploadSignedConfigBlob(
        fake_installer, aff4_path=upload_path, limit=100, token=self.token)

    acl_test_lib.CreateAdminUser(self.token.username)

    flow_test_lib.TestFlowHelper(
        administrative.UpdateClient.__name__,
        client_mock,
        client_id=self.SetupClient(0, system=""),
        blob_path=upload_path,
        token=self.token)
    self.assertEqual(client_mock.GetDownloadedFileContents(), fake_installer)
Ejemplo n.º 3
0
    def testExecuteBinariesWithArgs(self):
        client_mock = action_mocks.ActionMock(standard.ExecuteBinaryCommand)

        code = b"I am a binary file"
        upload_path = signed_binary_utils.GetAFF4ExecutablesRoot().Add(
            config.CONFIG["Client.platform"]).Add("test.exe")

        maintenance_utils.UploadSignedConfigBlob(code,
                                                 aff4_path=upload_path,
                                                 token=self.token)

        # This flow has an acl, the user needs to be admin.
        acl_test_lib.CreateAdminUser(self.token.username)

        with utils.Stubber(subprocess, "Popen", client_test_lib.Popen):
            flow_test_lib.TestFlowHelper(administrative.LaunchBinary.__name__,
                                         client_mock,
                                         client_id=self.SetupClient(0),
                                         binary=upload_path,
                                         command_line="--value 356",
                                         token=self.token)

            # Check that the executable file contains the code string.
            self.assertEqual(client_test_lib.Popen.binary, code)

            # At this point, the actual binary should have been cleaned up by the
            # client action so it should not exist.
            self.assertRaises(IOError, open,
                              client_test_lib.Popen.running_args[0])

            # Check the binary was run with the correct command line.
            self.assertEqual(client_test_lib.Popen.running_args[1], "--value")
            self.assertEqual(client_test_lib.Popen.running_args[2], "356")

            # Check the command was in the tmp file.
            self.assertTrue(client_test_lib.Popen.running_args[0].startswith(
                config.CONFIG["Client.tempdir_roots"][0]))
Ejemplo n.º 4
0
    def testUpdateClientSingleBlob(self):
        client_mock = action_mocks.UpdateAgentClientMock()
        fake_installer = b"FakeGRRDebInstaller" * 20
        upload_path = signed_binary_utils.GetAFF4ExecutablesRoot().Add(
            config.CONFIG["Client.platform"]).Add("test.deb")
        maintenance_utils.UploadSignedConfigBlob(fake_installer,
                                                 aff4_path=upload_path,
                                                 limit=1000)

        blob_list, _ = signed_binary_utils.FetchBlobsForSignedBinaryByURN(
            upload_path)
        self.assertLen(list(blob_list), 1)

        acl_test_lib.CreateAdminUser(self.token.username)

        flow_test_lib.TestFlowHelper(
            compatibility.GetName(administrative.UpdateClient),
            client_mock,
            client_id=self.SetupClient(0, system=""),
            binary_path=os.path.join(config.CONFIG["Client.platform"],
                                     "test.deb"),
            token=self.token)
        self.assertEqual(client_mock.GetDownloadedFileContents(),
                         fake_installer)