blob: f810817c6507d50da4a970f8f09b10cc108399c5 [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.security.cts;
import android.graphics.SurfaceTexture;
import android.hardware.camera2.params.OutputConfiguration;
import android.os.Parcel;
import android.platform.test.annotations.AsbSecurityTest;
import android.test.AndroidTestCase;
import android.util.Size;
import android.view.Surface;
import android.view.TextureView;
/**
* Verify that OutputConfiguration's fields propagate through parcel properly.
*/
public class OutputConfigurationTest extends AndroidTestCase {
@AsbSecurityTest(cveBugId = 69683251)
public void testSharedSurfaceOutputConfigurationBasic() throws Exception {
SurfaceTexture outputTexture = new SurfaceTexture(/* random texture ID */ 5);
Surface surface = new Surface(outputTexture);
//Test OutputConfiguration with a surface.
OutputConfiguration outputConfig = new OutputConfiguration(surface);
outputConfig.enableSurfaceSharing();
Parcel p;
p = Parcel.obtain();
outputConfig.writeToParcel(p, 0);
p.setDataPosition(0);
OutputConfiguration parcelledOutput = OutputConfiguration.CREATOR.createFromParcel(p);
assertEquals("Number of surfaces should be 1",
parcelledOutput.getSurfaces().size(),
1);
assertEquals("Number of surfaces shouldn't change",
parcelledOutput.getSurfaces().size(),
outputConfig.getSurfaces().size());
assertEquals("surfaceGroupId shouldn't change",
parcelledOutput.getSurfaceGroupId(),
outputConfig.getSurfaceGroupId());
// addSurface shouldn't throw exception because surface sharing is enabled.
SurfaceTexture outputTexture2 = new SurfaceTexture(/* random texture ID */ 6);
Surface surface2 = new Surface(outputTexture2);
parcelledOutput.addSurface(surface2);
p.recycle();
//Test OutputConfiguration with surface group id.
outputConfig = new OutputConfiguration(
/* random surface groupd id */1, surface);
p = Parcel.obtain();
outputConfig.writeToParcel(p, 0);
p.setDataPosition(0);
parcelledOutput = OutputConfiguration.CREATOR.createFromParcel(p);
assertEquals("Number of surfaces should be 1",
parcelledOutput.getSurfaces().size(),
1);
assertEquals("Number of surfaces shouldn't change",
parcelledOutput.getSurfaces().size(),
outputConfig.getSurfaces().size());
assertEquals("surfaceGroupdId shouldn't change",
parcelledOutput.getSurfaceGroupId(),
outputConfig.getSurfaceGroupId());
try {
parcelledOutput.addSurface(surface);
fail("should get IllegalStateException due to OutputConfiguration not shared");
} catch (IllegalStateException e) {
// expected exception
}
p.recycle();
//Test OutputConfiguration with deferred surface.
Size surfaceSize = new Size(10, 10);
outputConfig = new OutputConfiguration(
surfaceSize, SurfaceTexture.class);
p = Parcel.obtain();
outputConfig.writeToParcel(p, 0);
p.setDataPosition(0);
parcelledOutput = OutputConfiguration.CREATOR.createFromParcel(p);
assertEquals("Number of surfaces should be 0",
parcelledOutput.getSurfaces().size(), 0);
assertEquals("Number of surfaces shouldn't change",
parcelledOutput.getSurfaces().size(),
outputConfig.getSurfaces().size());
assertEquals("surfaceGroupdId shouldn't change",
parcelledOutput.getSurfaceGroupId(),
outputConfig.getSurfaceGroupId());
p.recycle();
}
}