code: def test_run_query_e2e_run(self):
      # Arrange
      spark = self._get_spark_session()
      df = spark.createDataFrame(get_pandas_df())
      columns = dataframes.Columns("privacy_key", "group_key", "value")
      metrics = {
          pipeline_dp.Metrics.COUNT: "count_column",
          pipeline_dp.Metrics.SUM: None,  # it returns default name "sum"
          pipeline_dp.Metrics.MEAN: None,  # it returns default name "mean"
      }
      bounds = dataframes.ContributionBounds(
          max_partitions_contributed=2,
          max_contributions_per_partition=2,
          min_value=-5,
          max_value=5,
      )
      public_keys = ["key1", "key0"]
      query = dataframes.Query(
          df, columns, metrics, bounds, public_keys
      )
  
      # Act
      budget = dataframes.Budget(
          1e6, 1e-1
      )  # large budget to get small noise
      result_df = query.run_query(budget)
  
      # Assert
      pandas_df = result_df.toPandas()
      pandas_df = pandas_df.sort_values(by=["group_key"]).reset_index(
          drop=True
      )
      self.assertLen(pandas_df, 2)
      # check row[0] = "key0", 0+noise, 0+noise
      row0 = pandas_df.loc[0]
      self.assertEqual(row0["group_key"], "key0")
      self.assertAlmostEqual(row0["count_column"], 0, delta=1e-3)
      self.assertAlmostEqual(row0["sum"], 0, delta=1e-3)
      # check row[1] = "key1", 2+noise, 3+noise
      row1 = pandas_df.loc[1]
      self.assertEqual(row1["group_key"], "key1")
      self.assertAlmostEqual(row1["count_column"], 2, delta=1e-3)
      self.assertAlmostEqual(row1["sum"], 3, delta=1e-3)
      self.assertAlmostEqual(row1["mean"], 1.5, delta=1e-3)
  
imports: from absl.testing import absltest
  from absl.testing import parameterized
  from collections import namedtuple
  import pandas
  from pyspark import sql
  from unittest import mock
  from unittest.mock import patch
  from pipeline_dp import dataframes
  import pipeline_dp
label_desc: Use image node_id 3 for calling the QueryTest obj's underlying member method code with example usage: obj.test_run_query_e2e_run() without return types