@@ -29,11 +29,11 @@ namespace {
2929
3030// Helper function to check if two file descriptors point to the same file.
3131bool is_same_file (int fd1, int fd2) {
32- struct stat stat1;
32+ struct stat stat1 {} ;
3333 if (fstat (fd1, &stat1) != 0 ) {
3434 return false ;
3535 }
36- struct stat stat2;
36+ struct stat stat2 {} ;
3737 if (fstat (fd2, &stat2) != 0 ) {
3838 return false ;
3939 }
@@ -42,7 +42,18 @@ bool is_same_file(int fd1, int fd2) {
4242
4343} // namespace
4444
45- TEST (BufferReleaseChannelTest, MessageFlattenable) {
45+ class BufferReleaseChannelTest : public testing ::Test {
46+ protected:
47+ std::unique_ptr<BufferReleaseChannel::ConsumerEndpoint> mConsumer ;
48+ std::shared_ptr<BufferReleaseChannel::ProducerEndpoint> mProducer ;
49+
50+ void SetUp () override {
51+ ASSERT_EQ (OK,
52+ BufferReleaseChannel::open (" BufferReleaseChannelTest" s, mConsumer , mProducer ));
53+ }
54+ };
55+
56+ TEST_F (BufferReleaseChannelTest, MessageFlattenable) {
4657 ReleaseCallbackId releaseCallbackId{1 , 2 };
4758 sp<Fence> releaseFence = sp<Fence>::make (memfd_create (" fake-fence-fd" , 0 ));
4859 uint32_t maxAcquiredBufferCount = 5 ;
@@ -92,31 +103,23 @@ TEST(BufferReleaseChannelTest, MessageFlattenable) {
92103
93104// Verify that the BufferReleaseChannel consume returns WOULD_BLOCK when there's no message
94105// available.
95- TEST (BufferReleaseChannelTest, ConsumerEndpointIsNonBlocking) {
96- std::unique_ptr<BufferReleaseChannel::ConsumerEndpoint> consumer;
97- std::shared_ptr<BufferReleaseChannel::ProducerEndpoint> producer;
98- ASSERT_EQ (OK, BufferReleaseChannel::open (" test-channel" s, consumer, producer));
99-
106+ TEST_F (BufferReleaseChannelTest, ConsumerEndpointIsNonBlocking) {
100107 ReleaseCallbackId releaseCallbackId;
101108 sp<Fence> releaseFence;
102109 uint32_t maxAcquiredBufferCount;
103110 ASSERT_EQ (WOULD_BLOCK,
104- consumer ->readReleaseFence (releaseCallbackId, releaseFence, maxAcquiredBufferCount));
111+ mConsumer ->readReleaseFence (releaseCallbackId, releaseFence, maxAcquiredBufferCount));
105112}
106113
107114// Verify that we can write a message to the BufferReleaseChannel producer and read that message
108115// using the BufferReleaseChannel consumer.
109- TEST (BufferReleaseChannelTest, ProduceAndConsume) {
110- std::unique_ptr<BufferReleaseChannel::ConsumerEndpoint> consumer;
111- std::shared_ptr<BufferReleaseChannel::ProducerEndpoint> producer;
112- ASSERT_EQ (OK, BufferReleaseChannel::open (" test-channel" s, consumer, producer));
113-
116+ TEST_F (BufferReleaseChannelTest, ProduceAndConsume) {
114117 sp<Fence> fence = sp<Fence>::make (memfd_create (" fake-fence-fd" , 0 ));
115118
116119 for (uint64_t i = 0 ; i < 64 ; i++) {
117120 ReleaseCallbackId producerId{i, i + 1 };
118121 uint32_t maxAcquiredBufferCount = i + 2 ;
119- ASSERT_EQ (OK, producer ->writeReleaseFence (producerId, fence, maxAcquiredBufferCount));
122+ ASSERT_EQ (OK, mProducer ->writeReleaseFence (producerId, fence, maxAcquiredBufferCount));
120123 }
121124
122125 for (uint64_t i = 0 ; i < 64 ; i++) {
@@ -127,12 +130,24 @@ TEST(BufferReleaseChannelTest, ProduceAndConsume) {
127130 sp<Fence> consumerFence;
128131 uint32_t maxAcquiredBufferCount;
129132 ASSERT_EQ (OK,
130- consumer ->readReleaseFence (consumerId, consumerFence, maxAcquiredBufferCount));
133+ mConsumer ->readReleaseFence (consumerId, consumerFence, maxAcquiredBufferCount));
131134
132135 ASSERT_EQ (expectedId, consumerId);
133136 ASSERT_TRUE (is_same_file (fence->get (), consumerFence->get ()));
134137 ASSERT_EQ (expectedMaxAcquiredBufferCount, maxAcquiredBufferCount);
135138 }
136139}
137140
141+ // Verify that BufferReleaseChannel::ConsumerEndpoint's socket can't be written to.
142+ TEST_F (BufferReleaseChannelTest, ConsumerSocketReadOnly) {
143+ uint64_t data = 0 ;
144+ ASSERT_EQ (-1 , write (mConsumer ->getFd ().get (), &data, sizeof (uint64_t )));
145+ ASSERT_EQ (errno, EPIPE);
146+ }
147+
148+ // Verify that BufferReleaseChannel::ProducerEndpoint's socket can't be read from.
149+ TEST_F (BufferReleaseChannelTest, ProducerSocketWriteOnly) {
150+ ASSERT_EQ (0 , read (mProducer ->getFd ().get (), nullptr , sizeof (uint64_t )));
151+ }
152+
138153} // namespace android
0 commit comments