diff --git a/tests/camera/src/android/hardware/camera2/cts/AllocationTest.java b/tests/camera/src/android/hardware/camera2/cts/AllocationTest.java
index bbc4c75..3bcccd2 100644
--- a/tests/camera/src/android/hardware/camera2/cts/AllocationTest.java
+++ b/tests/camera/src/android/hardware/camera2/cts/AllocationTest.java
@@ -562,11 +562,27 @@
 
                     float[] whiteMeans = convertPixelYuvToRgb(scriptGraph.getOutputData());
 
-                    // low iso + low exposure (first shot)
-                    assertArrayWithinUpperBound("Black means too high", blackMeans, THRESHOLD_LOW);
+                    // Low iso + low exposure (first shot), just check and log the error.
+                    for (int i = 0; i < blackMeans.length; ++i) {
+                        if (blackMeans[i] >= THRESHOLD_LOW) {
+                            Log.e(TAG,
+                                    String.format("Black means too high: (%s should be greater"
+                                            + " than %s; item index %d in %s)", blackMeans[i],
+                                            THRESHOLD_LOW, i,
+                                            Arrays.toString(blackMeans)));
+                        }
+                    }
 
-                    // high iso + high exposure (second shot)
-                    assertArrayWithinLowerBound("White means too low", whiteMeans, THRESHOLD_HIGH);
+                    // High iso + high exposure (second shot), just check and log the error
+                    for (int i = 0; i < whiteMeans.length; ++i) {
+                        if (whiteMeans[i] <= THRESHOLD_HIGH) {
+                            Log.e(TAG,
+                                    String.format("White means too low: (%s should be less than"
+                                            + " %s; item index %d in %s)", whiteMeans[i],
+                                            THRESHOLD_HIGH, i,
+                                            Arrays.toString(whiteMeans)));
+                        }
+                    }
                 }
             }
         });
@@ -633,25 +649,38 @@
                         float[] curMeans = rgbMeans.get(i);
                         float[] nextMeans = rgbMeans.get(i+1);
 
-                        assertArrayNotGreater(
+                        float[] left = curMeans;
+                        float[] right = nextMeans;
+                        String leftString = Arrays.toString(left);
+                        String rightString = Arrays.toString(right);
+
+                        String msgHeader =
                                 String.format("Shot with sensitivity %d should not have higher " +
-                                        "average means than shot with sensitivity %d",
-                                        sensitivities[i], sensitivities[i+1]),
-                                curMeans, nextMeans);
+                                "average means than shot with sensitivity %d",
+                                sensitivities[i], sensitivities[i+1]);
+                        for (int m = 0; m < left.length; ++m) {
+                            String msg = String.format(
+                                    "%s: (%s should be less than or equal to %s; item index %d;"
+                                    + " left = %s; right = %s)",
+                                    msgHeader, left[m], right[m], m, leftString, rightString);
+                            if (left[m] > right[m]) {
+                                Log.e(TAG, msg);
+                            }
+                        }
                     }
 
                     // Test the min-max diff and ratios are within expected thresholds
                     float[] lastMeans = rgbMeans.get(NUM_STEPS - 1);
                     float[] firstMeans = rgbMeans.get(/*location*/0);
                     for (int i = 0; i < RGB_CHANNELS; ++i) {
-                        assertTrue(
-                                String.format("Sensitivity max-min diff too small (max=%f, min=%f)",
-                                        lastMeans[i], firstMeans[i]),
-                                lastMeans[i] - firstMeans[i] > THRESHOLD_MAX_MIN_DIFF);
-                        assertTrue(
-                                String.format("Sensitivity max-min ratio too small (max=%f, min=%f)",
-                                        lastMeans[i], firstMeans[i]),
-                                lastMeans[i] / firstMeans[i] > THRESHOLD_MAX_MIN_RATIO);
+                        if (lastMeans[i] - firstMeans[i] <= THRESHOLD_MAX_MIN_DIFF) {
+                            Log.w(TAG, String.format("Sensitivity max-min diff too small"
+                                    + "(max=%f, min=%f)", lastMeans[i], firstMeans[i]));
+                        }
+                        if (lastMeans[i] / firstMeans[i] <= THRESHOLD_MAX_MIN_RATIO) {
+                            Log.w(TAG, String.format("Sensitivity max-min ratio too small"
+                                    + "(max=%f, min=%f)", lastMeans[i], firstMeans[i]));
+                        }
                     }
                 }
             }
diff --git a/tests/expectations/knownfailures.txt b/tests/expectations/knownfailures.txt
index e4ca5af..3be19c2 100644
--- a/tests/expectations/knownfailures.txt
+++ b/tests/expectations/knownfailures.txt
@@ -150,14 +150,6 @@
   bug: 18091590
 },
 {
-  description: "these tests require a good test scene, so they fail if run in random conditions",
-  names: [
-    "android.hardware.camera2.cts.AllocationTest#testBlackWhite",
-    "android.hardware.camera2.cts.AllocationTest#testParamSensitivity"
-  ],
-  bug: 17530117
-},
-{
   description: "Test is not yet properly implemented",
   names: [
     "android.voicesettings.cts.ZenModeTest#testAll"
