// Copyright (c) 2011 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_BASE_TEST_DATA_STREAM_H_
#define NET_BASE_TEST_DATA_STREAM_H_

#include <string.h>  // for memcpy().
#include <algorithm>
#include "net/base/net_export.h"
#include "starboard/types.h"

// This is a class for generating an infinite stream of data which can be
// verified independently to be the correct stream of data.

namespace net {

class NET_EXPORT TestDataStream {
 public:
  TestDataStream();

  // Fill |buffer| with |length| bytes of data from the stream.
  void GetBytes(char* buffer, int length);

  // Verify that |buffer| contains the expected next |length| bytes from the
  // stream.  Returns true if correct, false otherwise.
  bool VerifyBytes(const char *buffer, int length);

  // Resets all the data.
  void Reset();

 private:
  // If there is no data spilled over from the previous index, advance the
  // index and fill the buffer.
  void AdvanceIndex();

  // Consume data from the spill buffer.
  void Consume(int bytes);

  int index_;
  int bytes_remaining_;
  char buffer_[16];
  char* buffer_ptr_;
};

}  // namespace net

#endif  // NET_BASE_TEST_DATA_STREAM_H_
