/*
- * Copyright 2016 Facebook, Inc.
+ * Copyright 2017 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#include <folly/Foreach.h>
#include <folly/io/Cursor.h>
#include <folly/io/async/AsyncSSLSocket.h>
#include <folly/io/async/AsyncSocket.h>
#include <folly/io/async/EventBase.h>
+#include <folly/portability/GMock.h>
+#include <folly/portability/GTest.h>
-#include <gtest/gtest.h>
-#include <gmock/gmock.h>
#include <string>
#include <vector>
MOCK_CONST_METHOD0(getRawBytesWritten, size_t());
// public wrapper for protected interface
- ssize_t testPerformWrite(const iovec* vec, uint32_t count, WriteFlags flags,
- uint32_t* countWritten, uint32_t* partialWritten) {
+ WriteResult testPerformWrite(
+ const iovec* vec,
+ uint32_t count,
+ WriteFlags flags,
+ uint32_t* countWritten,
+ uint32_t* partialWritten) {
return performWrite(vec, count, flags, countWritten, partialWritten);
}
int n = 3;
auto vec = makeVec({3, 3, 3});
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 9))
- .WillOnce(Invoke([this] (SSL *, const void *buf, int n) {
- verifyVec(buf, n, 0);
+ .WillOnce(Invoke([this] (SSL *, const void *buf, int m) {
+ verifyVec(buf, m, 0);
return 9; }));
uint32_t countWritten = 0;
uint32_t partialWritten = 0;
auto vec = makeVec({1500, 3, 3});
int pos = 0;
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 1500))
- .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int n) {
- verifyVec(buf, n, pos);
- pos += n;
- return n; }));
+ .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int m) {
+ verifyVec(buf, m, pos);
+ pos += m;
+ return m; }));
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 6))
- .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int n) {
- verifyVec(buf, n, pos);
- pos += n;
- return n; }));
+ .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int m) {
+ verifyVec(buf, m, pos);
+ pos += m;
+ return m; }));
uint32_t countWritten = 0;
uint32_t partialWritten = 0;
sock_->testPerformWrite(vec.get(), n, WriteFlags::NONE, &countWritten,
int pos = 0;
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 1500))
.Times(2)
- .WillRepeatedly(Invoke([this, &pos] (SSL *, const void *buf, int n) {
- verifyVec(buf, n, pos);
- pos += n;
- return n; }));
+ .WillRepeatedly(Invoke([this, &pos] (SSL *, const void *buf, int m) {
+ verifyVec(buf, m, pos);
+ pos += m;
+ return m; }));
uint32_t countWritten = 0;
uint32_t partialWritten = 0;
sock_->testPerformWrite(vec.get(), n, WriteFlags::NONE, &countWritten,
auto vec = makeVec({300, 300, 300, 300, 300});
int pos = 0;
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 1500))
- .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int n) {
- verifyVec(buf, n, pos);
+ .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int m) {
+ verifyVec(buf, m, pos);
pos += 1000;
return 1000; /* 500 bytes "pending" */ }));
uint32_t countWritten = 0;
EXPECT_EQ(partialWritten, 100);
consumeVec(vec.get(), countWritten, partialWritten);
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 500))
- .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int n) {
- verifyVec(buf, n, pos);
- pos += n;
+ .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int m) {
+ verifyVec(buf, m, pos);
+ pos += m;
return 500; }));
sock_->testPerformWrite(vec.get() + countWritten, n - countWritten,
WriteFlags::NONE,
auto vec = makeVec({1000, 500, 500});
int pos = 0;
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 1500))
- .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int n) {
- verifyVec(buf, n, pos);
- pos += n;
- return n; }));
+ .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int m) {
+ verifyVec(buf, m, pos);
+ pos += m;
+ return m; }));
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 500))
- .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int n) {
- verifyVec(buf, n, pos);
- pos += n;
- return n; }));
+ .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int m) {
+ verifyVec(buf, m, pos);
+ pos += m;
+ return m; }));
uint32_t countWritten = 0;
uint32_t partialWritten = 0;
sock_->testPerformWrite(vec.get(), n, WriteFlags::NONE, &countWritten,
auto vec = makeVec({1000, 500});
int pos = 0;
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 1500))
- .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int n) {
- verifyVec(buf, n, pos);
+ .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int m) {
+ verifyVec(buf, m, pos);
pos += 700;
return 700; }));
uint32_t countWritten = 0;
EXPECT_EQ(partialWritten, 700);
consumeVec(vec.get(), countWritten, partialWritten);
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 800))
- .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int n) {
- verifyVec(buf, n, pos);
- pos += n;
- return n; }));
+ .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int m) {
+ verifyVec(buf, m, pos);
+ pos += m;
+ return m; }));
sock_->testPerformWrite(vec.get() + countWritten, n - countWritten,
WriteFlags::NONE,
&countWritten, &partialWritten);
EXPECT_TRUE(sock_->isEorTrackingEnabled());
EXPECT_CALL(*(sock_.get()), getRawBytesWritten())
- // rawBytesWritten after writting initAppBytesWritten + 1500
- // + some random SSL overhead
- .WillOnce(Return(3600))
- // rawBytesWritten after writting last 6 bytes
- // + some random SSL overhead
- .WillOnce(Return(3728));
+ // rawBytesWritten after writting initAppBytesWritten + 1500
+ // + some random SSL overhead
+ .WillOnce(Return(3600u))
+ // rawBytesWritten after writting last 6 bytes
+ // + some random SSL overhead
+ .WillOnce(Return(3728u));
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 1500))
- .WillOnce(Invoke([=, &pos] (SSL *, const void *buf, int n) {
+ .WillOnce(Invoke([=, &pos] (SSL *, const void *buf, int m) {
// the first 1500 does not have the EOR byte
sock_->checkEor(0, 0);
- verifyVec(buf, n, pos);
- pos += n;
- return n; }));
+ verifyVec(buf, m, pos);
+ pos += m;
+ return m; }));
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 6))
- .WillOnce(Invoke([=, &pos] (SSL *, const void *buf, int n) {
- sock_->checkEor(appEor, 3600 + n);
- verifyVec(buf, n, pos);
- pos += n;
- return n; }));
+ .WillOnce(Invoke([=, &pos] (SSL *, const void *buf, int m) {
+ sock_->checkEor(appEor, 3600 + m);
+ verifyVec(buf, m, pos);
+ pos += m;
+ return m; }));
uint32_t countWritten = 0;
uint32_t partialWritten = 0;
// + some random SSL overhead
.WillOnce(Return(4100));
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 1500))
- .WillOnce(Invoke([=, &pos] (SSL *, const void *buf, int n) {
+ .WillOnce(Invoke([=, &pos] (SSL *, const void *buf, int m) {
// the first 1500 does not have the EOR byte
sock_->checkEor(0, 0);
- verifyVec(buf, n, pos);
- pos += n;
- return n; }));
+ verifyVec(buf, m, pos);
+ pos += m;
+ return m; }));
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 300))
- .WillOnce(Invoke([=, &pos] (SSL *, const void *buf, int n) {
- sock_->checkEor(appEor, 3600 + n);
- verifyVec(buf, n, pos);
- pos += n;
- return n; }));
+ .WillOnce(Invoke([=, &pos] (SSL *, const void *buf, int m) {
+ sock_->checkEor(appEor, 3600 + m);
+ verifyVec(buf, m, pos);
+ pos += m;
+ return m; }));
uint32_t countWritten = 0;
uint32_t partialWritten = 0;
int n = 1;
auto vec = makeVec({1600});
int pos = 0;
- const size_t initAppBytesWritten = 500;
- const size_t appEor = initAppBytesWritten + 1600;
+ static constexpr size_t initAppBytesWritten = 500;
+ static constexpr size_t appEor = initAppBytesWritten + 1600;
sock_->setAppBytesWritten(initAppBytesWritten);
sock_->setEorTracking(true);
// + some random SSL overhead
.WillOnce(Return(3100));
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 1600))
- .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int n) {
- sock_->checkEor(appEor, 2000 + n);
- verifyVec(buf, n, pos);
+ .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int m) {
+ sock_->checkEor(appEor, 2000 + m);
+ verifyVec(buf, m, pos);
pos += 1000;
return 1000; }));
.WillOnce(Return(3100))
.WillOnce(Return(3800));
EXPECT_CALL(*(sock_.get()), sslWriteImpl(_, _, 600))
- .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int n) {
- sock_->checkEor(appEor, 3100 + n);
- verifyVec(buf, n, pos);
- pos += n;
- return n; }));
+ .WillOnce(Invoke([this, &pos] (SSL *, const void *buf, int m) {
+ sock_->checkEor(appEor, 3100 + m);
+ verifyVec(buf, m, pos);
+ pos += m;
+ return m; }));
sock_->testPerformWrite(vec.get() + countWritten, n - countWritten,
WriteFlags::EOR,
&countWritten, &partialWritten);
sock_->checkEor(0, 0);
}
-}
+} // namespace folly