mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 11:25:00 +00:00
Bug 1641826 - P2 - GTest cases added for PartiallySeekableInputStream to test AsyncWait/AsyncLengthWait behaviour when stream closed r=baku,necko-reviewers,mayhemer
Differential Revision: https://phabricator.services.mozilla.com/D77539
This commit is contained in:
parent
d95870593b
commit
8a32b935f4
@ -365,3 +365,136 @@ TEST(TestPartiallySeekableInputStream, AbortLengthCallback)
|
||||
ASSERT_TRUE(!callback1->Called());
|
||||
ASSERT_EQ(-1, callback2->Size());
|
||||
}
|
||||
|
||||
TEST(TestPartiallySeekableInputStream, AsyncWaitAfterConsumed)
|
||||
{
|
||||
nsCString buf{"The Quick Brown Fox Jumps over the Lazy Dog"};
|
||||
const size_t bufsize = 44;
|
||||
|
||||
auto stream = MakeRefPtr<testing::AsyncStringStream>(buf);
|
||||
nsCOMPtr<nsIAsyncInputStream> psis =
|
||||
new PartiallySeekableInputStream(stream.forget(), bufsize);
|
||||
ASSERT_TRUE(psis);
|
||||
|
||||
auto callback = MakeRefPtr<testing::InputStreamCallback>();
|
||||
|
||||
nsresult rv =
|
||||
psis->AsyncWait(callback, 0, 0, GetCurrentThreadSerialEventTarget());
|
||||
ASSERT_EQ(NS_OK, rv);
|
||||
|
||||
MOZ_ALWAYS_TRUE(SpinEventLoopUntil([&]() { return callback->Called(); }));
|
||||
|
||||
char rdbuf[bufsize] = {'\0'};
|
||||
uint32_t count;
|
||||
ASSERT_EQ(NS_OK, psis->Read(rdbuf, sizeof(rdbuf), &count));
|
||||
ASSERT_STREQ(rdbuf, buf.Data());
|
||||
|
||||
callback = MakeRefPtr<testing::InputStreamCallback>();
|
||||
|
||||
rv = psis->AsyncWait(callback, 0, 0, GetCurrentThreadSerialEventTarget());
|
||||
ASSERT_EQ(NS_OK, rv);
|
||||
|
||||
MOZ_ALWAYS_TRUE(SpinEventLoopUntil([&]() { return callback->Called(); }));
|
||||
|
||||
memset(rdbuf, 0x0, bufsize);
|
||||
ASSERT_EQ(NS_OK, psis->Read(rdbuf, sizeof(rdbuf), &count));
|
||||
ASSERT_EQ(0U, count);
|
||||
}
|
||||
|
||||
TEST(TestPartiallySeekableInputStream, AsyncWaitAfterClosed)
|
||||
{
|
||||
nsCString buf{"The Quick Brown Fox Jumps over the Lazy Dog"};
|
||||
const size_t bufsize = 44;
|
||||
|
||||
auto stream = MakeRefPtr<testing::AsyncStringStream>(buf);
|
||||
nsCOMPtr<nsIAsyncInputStream> psis =
|
||||
new PartiallySeekableInputStream(stream.forget(), bufsize);
|
||||
ASSERT_TRUE(psis);
|
||||
|
||||
auto callback = MakeRefPtr<testing::InputStreamCallback>();
|
||||
|
||||
nsresult rv =
|
||||
psis->AsyncWait(callback, 0, 0, GetCurrentThreadSerialEventTarget());
|
||||
ASSERT_EQ(NS_OK, rv);
|
||||
|
||||
MOZ_ALWAYS_TRUE(SpinEventLoopUntil([&]() { return callback->Called(); }));
|
||||
|
||||
ASSERT_EQ(NS_OK, psis->Close());
|
||||
|
||||
callback = MakeRefPtr<testing::InputStreamCallback>();
|
||||
|
||||
rv = psis->AsyncWait(callback, 0, 0, GetCurrentThreadSerialEventTarget());
|
||||
ASSERT_EQ(NS_OK, rv);
|
||||
|
||||
MOZ_ALWAYS_TRUE(SpinEventLoopUntil([&]() { return callback->Called(); }));
|
||||
}
|
||||
|
||||
TEST(TestPartiallySeekableInputStream, AsyncLengthWaitAfterClosed)
|
||||
{
|
||||
nsCString buf{"The Quick Brown Fox Jumps over the Lazy Dog"};
|
||||
|
||||
auto stream = MakeRefPtr<testing::LengthInputStream>(buf, false, true);
|
||||
nsCOMPtr<nsIInputStream> psis =
|
||||
new PartiallySeekableInputStream(stream.forget());
|
||||
|
||||
nsCOMPtr<nsIAsyncInputStreamLength> qi = do_QueryInterface(psis);
|
||||
ASSERT_TRUE(qi);
|
||||
|
||||
auto callback = MakeRefPtr<testing::LengthCallback>();
|
||||
|
||||
nsresult rv =
|
||||
qi->AsyncLengthWait(callback, GetCurrentThreadSerialEventTarget());
|
||||
ASSERT_EQ(NS_OK, rv);
|
||||
|
||||
MOZ_ALWAYS_TRUE(SpinEventLoopUntil([&]() { return callback->Called(); }));
|
||||
ASSERT_EQ(buf.Length(), callback->Size());
|
||||
|
||||
ASSERT_EQ(NS_OK, psis->Close());
|
||||
|
||||
callback = MakeRefPtr<testing::LengthCallback>();
|
||||
|
||||
rv = qi->AsyncLengthWait(callback, GetCurrentThreadSerialEventTarget());
|
||||
ASSERT_EQ(NS_OK, rv);
|
||||
|
||||
MOZ_ALWAYS_TRUE(SpinEventLoopUntil([&]() { return callback->Called(); }));
|
||||
ASSERT_EQ(-1, callback->Size());
|
||||
}
|
||||
|
||||
TEST(TestPartiallySeekableInputStream, AsyncLengthWaitAfterConsumed)
|
||||
{
|
||||
nsCString buf{"The Quick Brown Fox Jumps over the Lazy Dog"};
|
||||
const size_t bufsize = 44;
|
||||
|
||||
auto stream = MakeRefPtr<testing::LengthInputStream>(buf, false, true);
|
||||
nsCOMPtr<nsIInputStream> psis =
|
||||
new PartiallySeekableInputStream(stream.forget());
|
||||
|
||||
nsCOMPtr<nsIAsyncInputStreamLength> qi = do_QueryInterface(psis);
|
||||
ASSERT_TRUE(qi);
|
||||
|
||||
auto callback = MakeRefPtr<testing::LengthCallback>();
|
||||
|
||||
nsresult rv =
|
||||
qi->AsyncLengthWait(callback, GetCurrentThreadSerialEventTarget());
|
||||
ASSERT_EQ(NS_OK, rv);
|
||||
|
||||
MOZ_ALWAYS_TRUE(SpinEventLoopUntil([&]() { return callback->Called(); }));
|
||||
ASSERT_EQ(buf.Length(), callback->Size());
|
||||
|
||||
char rdbuf[bufsize] = {'\0'};
|
||||
uint32_t count;
|
||||
ASSERT_EQ(NS_OK, psis->Read(rdbuf, sizeof(rdbuf), &count));
|
||||
ASSERT_STREQ(rdbuf, buf.Data());
|
||||
|
||||
callback = MakeRefPtr<testing::LengthCallback>();
|
||||
|
||||
rv = qi->AsyncLengthWait(callback, GetCurrentThreadSerialEventTarget());
|
||||
ASSERT_EQ(NS_OK, rv);
|
||||
|
||||
MOZ_ALWAYS_TRUE(SpinEventLoopUntil([&]() { return callback->Called(); }));
|
||||
ASSERT_EQ(0U, callback->Size());
|
||||
|
||||
memset(rdbuf, 0x0, bufsize);
|
||||
ASSERT_EQ(NS_OK, psis->Read(rdbuf, sizeof(rdbuf), &count));
|
||||
ASSERT_EQ(0U, count);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user