xref: /aosp_15_r20/external/cronet/net/base/test_data_stream.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "net/base/test_data_stream.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <algorithm>
8*6777b538SAndroid Build Coastguard Worker #include <cstring>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker namespace net {
11*6777b538SAndroid Build Coastguard Worker 
TestDataStream()12*6777b538SAndroid Build Coastguard Worker TestDataStream::TestDataStream() {
13*6777b538SAndroid Build Coastguard Worker   Reset();
14*6777b538SAndroid Build Coastguard Worker }
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker // Fill |buffer| with |length| bytes of data from the stream.
GetBytes(char * buffer,int length)17*6777b538SAndroid Build Coastguard Worker void TestDataStream::GetBytes(char* buffer, int length) {
18*6777b538SAndroid Build Coastguard Worker   while (length) {
19*6777b538SAndroid Build Coastguard Worker     AdvanceIndex();
20*6777b538SAndroid Build Coastguard Worker     int bytes_to_copy = std::min(length, bytes_remaining_);
21*6777b538SAndroid Build Coastguard Worker     memcpy(buffer, buffer_ptr_, bytes_to_copy);
22*6777b538SAndroid Build Coastguard Worker     buffer += bytes_to_copy;
23*6777b538SAndroid Build Coastguard Worker     Consume(bytes_to_copy);
24*6777b538SAndroid Build Coastguard Worker     length -= bytes_to_copy;
25*6777b538SAndroid Build Coastguard Worker   }
26*6777b538SAndroid Build Coastguard Worker }
27*6777b538SAndroid Build Coastguard Worker 
VerifyBytes(const char * buffer,int length)28*6777b538SAndroid Build Coastguard Worker bool TestDataStream::VerifyBytes(const char *buffer, int length) {
29*6777b538SAndroid Build Coastguard Worker   while (length) {
30*6777b538SAndroid Build Coastguard Worker     AdvanceIndex();
31*6777b538SAndroid Build Coastguard Worker     int bytes_to_compare = std::min(length, bytes_remaining_);
32*6777b538SAndroid Build Coastguard Worker     if (memcmp(buffer, buffer_ptr_, bytes_to_compare))
33*6777b538SAndroid Build Coastguard Worker       return false;
34*6777b538SAndroid Build Coastguard Worker     Consume(bytes_to_compare);
35*6777b538SAndroid Build Coastguard Worker     length -= bytes_to_compare;
36*6777b538SAndroid Build Coastguard Worker     buffer += bytes_to_compare;
37*6777b538SAndroid Build Coastguard Worker   }
38*6777b538SAndroid Build Coastguard Worker   return true;
39*6777b538SAndroid Build Coastguard Worker }
40*6777b538SAndroid Build Coastguard Worker 
Reset()41*6777b538SAndroid Build Coastguard Worker void TestDataStream::Reset() {
42*6777b538SAndroid Build Coastguard Worker   index_ = 0;
43*6777b538SAndroid Build Coastguard Worker   bytes_remaining_ = 0;
44*6777b538SAndroid Build Coastguard Worker   buffer_ptr_ = buffer_;
45*6777b538SAndroid Build Coastguard Worker }
46*6777b538SAndroid Build Coastguard Worker 
47*6777b538SAndroid Build Coastguard Worker // If there is no data spilled over from the previous index, advance the
48*6777b538SAndroid Build Coastguard Worker // index and fill the buffer.
AdvanceIndex()49*6777b538SAndroid Build Coastguard Worker void TestDataStream::AdvanceIndex() {
50*6777b538SAndroid Build Coastguard Worker   if (bytes_remaining_ == 0) {
51*6777b538SAndroid Build Coastguard Worker     // Convert it to ascii, but don't bother to reverse it.
52*6777b538SAndroid Build Coastguard Worker     // (e.g. 12345 becomes "54321")
53*6777b538SAndroid Build Coastguard Worker     int val = index_++;
54*6777b538SAndroid Build Coastguard Worker     do {
55*6777b538SAndroid Build Coastguard Worker       buffer_[bytes_remaining_++] = (val % 10) + '0';
56*6777b538SAndroid Build Coastguard Worker     } while ((val /= 10) > 0);
57*6777b538SAndroid Build Coastguard Worker     buffer_[bytes_remaining_++] = '.';
58*6777b538SAndroid Build Coastguard Worker   }
59*6777b538SAndroid Build Coastguard Worker }
60*6777b538SAndroid Build Coastguard Worker 
61*6777b538SAndroid Build Coastguard Worker // Consume data from the spill buffer.
Consume(int bytes)62*6777b538SAndroid Build Coastguard Worker void TestDataStream::Consume(int bytes) {
63*6777b538SAndroid Build Coastguard Worker   bytes_remaining_ -= bytes;
64*6777b538SAndroid Build Coastguard Worker   if (bytes_remaining_)
65*6777b538SAndroid Build Coastguard Worker     buffer_ptr_ += bytes;
66*6777b538SAndroid Build Coastguard Worker   else
67*6777b538SAndroid Build Coastguard Worker     buffer_ptr_ = buffer_;
68*6777b538SAndroid Build Coastguard Worker }
69*6777b538SAndroid Build Coastguard Worker 
70*6777b538SAndroid Build Coastguard Worker }  // namespace net
71