ImageWriter: Add abandoned surface exception test

Queueing or dequeueing an image from an image writer should
throw an IllegalStateException if the input surface is
abandoned.

Bug: 22279111
Change-Id: I7848d69d5c70ce91999eb7f803abc8e2ba6494d7
diff --git a/tests/tests/hardware/src/android/hardware/camera2/cts/ImageWriterTest.java b/tests/tests/hardware/src/android/hardware/camera2/cts/ImageWriterTest.java
index b081660..be96aeb 100644
--- a/tests/tests/hardware/src/android/hardware/camera2/cts/ImageWriterTest.java
+++ b/tests/tests/hardware/src/android/hardware/camera2/cts/ImageWriterTest.java
@@ -131,6 +131,50 @@
         }
     }
 
+    public void testAbandonedSurfaceExceptions() throws Exception {
+        final int READER_WIDTH = 1920;
+        final int READER_HEIGHT = 1080;
+        final int READER_FORMAT = ImageFormat.YUV_420_888;
+
+        // Verify that if the image writer's input surface is abandoned, dequeueing an image
+        // throws IllegalStateException
+        ImageReader reader = ImageReader.newInstance(READER_WIDTH, READER_HEIGHT, READER_FORMAT,
+                MAX_NUM_IMAGES);
+        ImageWriter writer = ImageWriter.newInstance(reader.getSurface(), MAX_NUM_IMAGES);
+
+        // Close image reader to abandon the input surface.
+        reader.close();
+
+        Image image;
+        try {
+            image = writer.dequeueInputImage();
+            fail("Should get an IllegalStateException");
+        } catch (IllegalStateException e) {
+            // Expected
+        } finally {
+            writer.close();
+        }
+
+        // Verify that if the image writer's input surface is abandoned, queueing an image
+        // throws IllegalStateException
+        reader = ImageReader.newInstance(READER_WIDTH, READER_HEIGHT, READER_FORMAT,
+                MAX_NUM_IMAGES);
+        writer = ImageWriter.newInstance(reader.getSurface(), MAX_NUM_IMAGES);
+        image = writer.dequeueInputImage();
+
+        // Close image reader to abandon the input surface.
+        reader.close();
+
+        try {
+            writer.queueInputImage(image);
+            fail("Should get an IllegalStateException");
+        } catch (IllegalStateException e) {
+            // Expected
+        } finally {
+            writer.close();
+        }
+    }
+
     private void readerWriterFormatTestByCamera(int format)  throws Exception {
         List<Size> sizes = getSortedSizesForFormat(mCamera.getId(), mCameraManager, format, null);
         Size maxSize = sizes.get(0);