diff --git a/tools/releasetools/test_build_image.py b/tools/releasetools/test_build_image.py
index 6f853e8..634c6b1 100644
--- a/tools/releasetools/test_build_image.py
+++ b/tools/releasetools/test_build_image.py
@@ -15,14 +15,11 @@
 #
 
 import filecmp
-import math
 import os.path
-import random
 
 import common
 from build_image import (
-    AVBCalcMinPartitionSize, BLOCK_SIZE, BuildImageError, CheckHeadroom,
-    SetUpInDirAndFsConfig)
+    BuildImageError, CheckHeadroom, SetUpInDirAndFsConfig)
 from test_utils import ReleaseToolsTestCase
 
 
@@ -32,13 +29,6 @@
   EXT4FS_OUTPUT = (
       "Created filesystem with 2777/129024 inodes and 515099/516099 blocks")
 
-  def setUp(self):
-    # To test AVBCalcMinPartitionSize(), by using 200MB to 2GB image size.
-    #   -  51200 = 200MB * 1024 * 1024 / 4096
-    #   - 524288 = 2GB * 1024 * 1024 * 1024 / 4096
-    self._image_sizes = [BLOCK_SIZE * random.randint(51200, 524288) + offset
-                         for offset in range(BLOCK_SIZE)]
-
   def test_CheckHeadroom_SizeUnderLimit(self):
     # Required headroom: 1000 blocks.
     prop_dict = {
@@ -186,51 +176,3 @@
     self.assertIn('fs-config-system\n', fs_config_data)
     self.assertIn('fs-config-root\n', fs_config_data)
     self.assertEqual('/', prop_dict['mount_point'])
-
-  def test_AVBCalcMinPartitionSize_LinearFooterSize(self):
-    """Tests with footer size which is linear to partition size."""
-    for image_size in self._image_sizes:
-      for ratio in 0.95, 0.56, 0.22:
-        expected_size = common.RoundUpTo4K(int(math.ceil(image_size / ratio)))
-        self.assertEqual(
-            expected_size,
-            AVBCalcMinPartitionSize(image_size, lambda x: int(x * ratio)))
-
-  def test_AVBCalcMinPartitionSize_SlowerGrowthFooterSize(self):
-    """Tests with footer size which grows slower than partition size."""
-
-    def _SizeCalculator(partition_size):
-      """Footer size is the power of 0.95 of partition size."""
-      # Minus footer size to return max image size.
-      return partition_size - int(math.pow(partition_size, 0.95))
-
-    for image_size in self._image_sizes:
-      min_partition_size = AVBCalcMinPartitionSize(image_size, _SizeCalculator)
-      # Checks min_partition_size can accommodate image_size.
-      self.assertGreaterEqual(
-          _SizeCalculator(min_partition_size),
-          image_size)
-      # Checks min_partition_size (round to BLOCK_SIZE) is the minimum.
-      self.assertLess(
-          _SizeCalculator(min_partition_size - BLOCK_SIZE),
-          image_size)
-
-  def test_AVBCalcMinPartitionSize_FasterGrowthFooterSize(self):
-    """Tests with footer size which grows faster than partition size."""
-
-    def _SizeCalculator(partition_size):
-      """Max image size is the power of 0.95 of partition size."""
-      # Max image size grows less than partition size, which means
-      # footer size grows faster than partition size.
-      return int(math.pow(partition_size, 0.95))
-
-    for image_size in self._image_sizes:
-      min_partition_size = AVBCalcMinPartitionSize(image_size, _SizeCalculator)
-      # Checks min_partition_size can accommodate image_size.
-      self.assertGreaterEqual(
-          _SizeCalculator(min_partition_size),
-          image_size)
-      # Checks min_partition_size (round to BLOCK_SIZE) is the minimum.
-      self.assertLess(
-          _SizeCalculator(min_partition_size - BLOCK_SIZE),
-          image_size)
