summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ftp/ftp_network_transaction_unittest.cc38
-rw-r--r--net/socket/socket_test_util.cc5
-rw-r--r--net/socket/socket_test_util.h6
3 files changed, 37 insertions, 12 deletions
diff --git a/net/ftp/ftp_network_transaction_unittest.cc b/net/ftp/ftp_network_transaction_unittest.cc
index 6e814aa..6b359a5 100644
--- a/net/ftp/ftp_network_transaction_unittest.cc
+++ b/net/ftp/ftp_network_transaction_unittest.cc
@@ -150,16 +150,26 @@ class FtpSocketDataProvider : public DynamicSocketDataProvider {
MockWriteResult Verify(const std::string& expected,
const std::string& data,
State next_state,
- const char* next_read) {
+ const char* next_read,
+ const size_t next_read_length) {
EXPECT_EQ(expected, data);
if (expected == data) {
state_ = next_state;
- SimulateRead(next_read);
+ SimulateRead(next_read, next_read_length);
return MockWriteResult(true, data.length());
}
return MockWriteResult(true, ERR_UNEXPECTED);
}
+ MockWriteResult Verify(const std::string& expected,
+ const std::string& data,
+ State next_state,
+ const char* next_read) {
+ return Verify(expected, data, next_state,
+ next_read, std::strlen(next_read));
+ }
+
+
private:
State state_;
State failure_injection_state_;
@@ -552,18 +562,26 @@ class FtpSocketDataProviderFileDownloadRetrFail
class FtpSocketDataProviderEvilEpsv : public FtpSocketDataProviderFileDownload {
public:
- explicit FtpSocketDataProviderEvilEpsv(const char* epsv_response,
- State expected_state)
+ FtpSocketDataProviderEvilEpsv(const char* epsv_response,
+ State expected_state)
: epsv_response_(epsv_response),
- expected_state_(expected_state) {
- }
+ epsv_response_length_(std::strlen(epsv_response)),
+ expected_state_(expected_state) {}
+
+ FtpSocketDataProviderEvilEpsv(const char* epsv_response,
+ size_t epsv_response_length,
+ State expected_state)
+ : epsv_response_(epsv_response),
+ epsv_response_length_(epsv_response_length),
+ expected_state_(expected_state) {}
virtual MockWriteResult OnWrite(const std::string& data) {
if (InjectFault())
return MockWriteResult(true, data.length());
switch (state()) {
case PRE_EPSV:
- return Verify("EPSV\r\n", data, expected_state_, epsv_response_);
+ return Verify("EPSV\r\n", data, expected_state_,
+ epsv_response_, epsv_response_length_);
default:
return FtpSocketDataProviderFileDownload::OnWrite(data);
}
@@ -571,6 +589,7 @@ class FtpSocketDataProviderEvilEpsv : public FtpSocketDataProviderFileDownload {
private:
const char* epsv_response_;
+ const size_t epsv_response_length_;
const State expected_state_;
DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEvilEpsv);
@@ -1007,9 +1026,10 @@ TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat4) {
}
TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat5) {
- FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (\0\0\031773\0)\r\n",
+ const char response[] = "227 Portscan (\0\0\031773\0)\r\n";
+ FtpSocketDataProviderEvilEpsv ctrl_socket(response, sizeof(response)-1,
FtpSocketDataProvider::PRE_QUIT);
- ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNEXPECTED);
+ ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
}
TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvUnsafePort1) {
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc
index 99a200f..5cae82e 100644
--- a/net/socket/socket_test_util.cc
+++ b/net/socket/socket_test_util.cc
@@ -475,11 +475,12 @@ void DynamicSocketDataProvider::Reset() {
reads_.clear();
}
-void DynamicSocketDataProvider::SimulateRead(const char* data) {
+void DynamicSocketDataProvider::SimulateRead(const char* data,
+ const size_t length) {
if (!allow_unconsumed_reads_) {
EXPECT_TRUE(reads_.empty()) << "Unconsumed read: " << reads_.front().data;
}
- reads_.push_back(MockRead(data));
+ reads_.push_back(MockRead(true, data, length));
}
DelayedSocketData::DelayedSocketData(
diff --git a/net/socket/socket_test_util.h b/net/socket/socket_test_util.h
index f50cf7d..6e0698f 100644
--- a/net/socket/socket_test_util.h
+++ b/net/socket/socket_test_util.h
@@ -5,6 +5,7 @@
#ifndef NET_SOCKET_SOCKET_TEST_UTIL_H_
#define NET_SOCKET_SOCKET_TEST_UTIL_H_
+#include <cstring>
#include <deque>
#include <string>
#include <vector>
@@ -211,7 +212,10 @@ class DynamicSocketDataProvider : public SocketDataProvider {
protected:
// The next time there is a read from this socket, it will return |data|.
// Before calling SimulateRead next time, the previous data must be consumed.
- void SimulateRead(const char* data);
+ void SimulateRead(const char* data, size_t length);
+ void SimulateRead(const char* data) {
+ SimulateRead(data, std::strlen(data));
+ }
private:
std::deque<MockRead> reads_;