diff --git a/tests/tests/hardware/src/android/hardware/cts/LowRamDeviceTest.java b/tests/tests/hardware/src/android/hardware/cts/LowRamDeviceTest.java
index 9916dbb..82756d1 100644
--- a/tests/tests/hardware/src/android/hardware/cts/LowRamDeviceTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/LowRamDeviceTest.java
@@ -37,16 +37,21 @@
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.os.Build;
+import android.os.StatFs;
 import android.support.test.runner.AndroidJUnit4;
 import android.support.test.InstrumentationRegistry;
 import android.util.DisplayMetrics;
 import android.view.WindowManager;
 import android.util.Log;
 
+import com.android.compatibility.common.util.CddTest;
+
 import org.junit.runner.RunWith;
 import org.junit.Before;
 import org.junit.Test;
 
+import java.io.File;
+
 /**
  * Tests that devices with low RAM specify themselves as Low RAM devices
  */
@@ -56,6 +61,10 @@
     private static final long ONE_MEGABYTE = 1048576L;
     private static final String TAG = "LowRamDeviceTest";
     private static final long LOW_RAM_MAX = 1024;
+    private static final float MIN_APP_DATA_PARTITION_SIZE_GB = 4f;
+    private static final float MIN_APP_DATA_PARTITION_SIZE_LOW_RAM_GB = 1.1f;
+    private static final float MIN_SHARED_DATA_PARTITION_SIZE_GB = 1f;
+    private static final long GB_TO_BYTES_MULTIPLIER = 1024 * 1024 * 1024;
 
     private Context mContext;
     private PackageManager mPackageManager;
@@ -80,6 +89,7 @@
      * in CDD 7.6.1.
      */
     @Test
+    @CddTest(requirement="7.6.1")
     public void testMinimumMemory() {
         int density = mDisplayMetrics.densityDpi;
         Boolean supports64Bit = supportsSixtyFourBit();
@@ -136,6 +146,32 @@
         }
     }
 
+    @Test
+    @CddTest(requirement="7.6.2")
+    public void testMinSharedDataPartitionSize() {
+        assertDataPartitionMinimumSize(
+                "Shared data",
+                mContext.getExternalFilesDir(null),
+                MIN_SHARED_DATA_PARTITION_SIZE_GB);
+    }
+
+    @Test
+    @CddTest(requirement="7.6.1/H-9-2,7.6.1/H-10-1")
+    public void testMinDataPartitionSize() {
+        long totalMemoryMb = getTotalMemory() / ONE_MEGABYTE;
+        boolean lowRam = totalMemoryMb <= LOW_RAM_MAX;
+
+        if (lowRam) {
+            assertDataPartitionMinimumSize(
+                    "Application data",
+                    mContext.getFilesDir(),
+                    MIN_APP_DATA_PARTITION_SIZE_LOW_RAM_GB);
+        } else {
+            assertDataPartitionMinimumSize(
+                    "Application data", mContext.getFilesDir(), MIN_APP_DATA_PARTITION_SIZE_GB);
+        }
+    }
+
     /**
      * @return the total memory accessible by the kernel as defined by
      * {@code ActivityManager.MemoryInfo}.
@@ -197,4 +233,16 @@
         }
         return false;
     }
+
+    private void assertDataPartitionMinimumSize(
+            String partitionName, File fileInPartition, float minPartitionSizeGb) {
+        StatFs statFs = new StatFs(fileInPartition.getAbsolutePath());
+        long size = statFs.getTotalBytes();
+        long minSizeBytes = (long) minPartitionSizeGb * GB_TO_BYTES_MULTIPLIER;
+
+        assertTrue(
+                String.format("%s partition size does not meet requirement. "
+                        + "Found = %d, Minimum = %d", partitionName, size, minSizeBytes),
+                size > minSizeBytes);
+    }
 }
