| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef NET_SPDY_SPDY_STREAM_TEST_UTIL_H_ |
| #define NET_SPDY_SPDY_STREAM_TEST_UTIL_H_ |
| |
| #include "base/compiler_specific.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/strings/string_piece.h" |
| #include "net/base/io_buffer.h" |
| #include "net/base/test_completion_callback.h" |
| #include "net/spdy/spdy_read_queue.h" |
| #include "net/spdy/spdy_stream.h" |
| |
| namespace net { |
| |
| namespace test { |
| |
| // Delegate that calls Close() on |stream_| on OnClose. Used by tests |
| // to make sure that such an action is harmless. |
| class ClosingDelegate : public SpdyStream::Delegate { |
| public: |
| explicit ClosingDelegate(const base::WeakPtr<SpdyStream>& stream); |
| virtual ~ClosingDelegate(); |
| |
| // SpdyStream::Delegate implementation. |
| virtual void OnRequestHeadersSent() OVERRIDE; |
| virtual SpdyResponseHeadersStatus OnResponseHeadersUpdated( |
| const SpdyHeaderBlock& response_headers) OVERRIDE; |
| virtual void OnDataReceived(scoped_ptr<SpdyBuffer> buffer) OVERRIDE; |
| virtual void OnDataSent() OVERRIDE; |
| virtual void OnClose(int status) OVERRIDE; |
| |
| // Returns whether or not the stream is closed. |
| bool StreamIsClosed() const { return !stream_.get(); } |
| |
| private: |
| base::WeakPtr<SpdyStream> stream_; |
| }; |
| |
| // Base class with shared functionality for test delegate |
| // implementations below. |
| class StreamDelegateBase : public SpdyStream::Delegate { |
| public: |
| explicit StreamDelegateBase(const base::WeakPtr<SpdyStream>& stream); |
| virtual ~StreamDelegateBase(); |
| |
| virtual void OnRequestHeadersSent() OVERRIDE; |
| virtual SpdyResponseHeadersStatus OnResponseHeadersUpdated( |
| const SpdyHeaderBlock& response_headers) OVERRIDE; |
| virtual void OnDataReceived(scoped_ptr<SpdyBuffer> buffer) OVERRIDE; |
| virtual void OnDataSent() OVERRIDE; |
| virtual void OnClose(int status) OVERRIDE; |
| |
| // Waits for the stream to be closed and returns the status passed |
| // to OnClose(). |
| int WaitForClose(); |
| |
| // Drains all data from the underlying read queue and returns it as |
| // a string. |
| std::string TakeReceivedData(); |
| |
| // Returns whether or not the stream is closed. |
| bool StreamIsClosed() const { return !stream_.get(); } |
| |
| // Returns the stream's ID. If called when the stream is closed, |
| // returns the stream's ID when it was open. |
| SpdyStreamId stream_id() const { return stream_id_; } |
| |
| std::string GetResponseHeaderValue(const std::string& name) const; |
| bool send_headers_completed() const { return send_headers_completed_; } |
| |
| protected: |
| const base::WeakPtr<SpdyStream>& stream() { return stream_; } |
| |
| private: |
| base::WeakPtr<SpdyStream> stream_; |
| SpdyStreamId stream_id_; |
| TestCompletionCallback callback_; |
| bool send_headers_completed_; |
| SpdyHeaderBlock response_headers_; |
| SpdyReadQueue received_data_queue_; |
| }; |
| |
| // Test delegate that does nothing. Used to capture data about the |
| // stream, e.g. its id when it was open. |
| class StreamDelegateDoNothing : public StreamDelegateBase { |
| public: |
| StreamDelegateDoNothing(const base::WeakPtr<SpdyStream>& stream); |
| virtual ~StreamDelegateDoNothing(); |
| }; |
| |
| // Test delegate that sends data immediately in OnResponseHeadersUpdated(). |
| class StreamDelegateSendImmediate : public StreamDelegateBase { |
| public: |
| // |data| can be NULL. |
| StreamDelegateSendImmediate(const base::WeakPtr<SpdyStream>& stream, |
| base::StringPiece data); |
| virtual ~StreamDelegateSendImmediate(); |
| |
| virtual SpdyResponseHeadersStatus OnResponseHeadersUpdated( |
| const SpdyHeaderBlock& response_headers) OVERRIDE; |
| |
| private: |
| base::StringPiece data_; |
| }; |
| |
| // Test delegate that sends body data. |
| class StreamDelegateWithBody : public StreamDelegateBase { |
| public: |
| StreamDelegateWithBody(const base::WeakPtr<SpdyStream>& stream, |
| base::StringPiece data); |
| virtual ~StreamDelegateWithBody(); |
| |
| virtual void OnRequestHeadersSent() OVERRIDE; |
| |
| private: |
| scoped_refptr<StringIOBuffer> buf_; |
| }; |
| |
| } // namespace test |
| |
| } // namespace net |
| |
| #endif // NET_SPDY_SPDY_STREAM_TEST_UTIL_H_ |