Storage Engine API
record_store_test_validate.h
Go to the documentation of this file.
1 // record_store_test_validate.h
2 
31 #pragma once
32 
33 
37 #include "mongo/unittest/unittest.h"
38 
39 namespace mongo {
40 
42 public:
44 
45  ValidateAdaptorSpy(const std::set<std::string>& remain) : _remain(remain) {}
46 
48 
49  Status validate(const RecordId& recordId, const RecordData& recordData, size_t* dataSize) {
50  std::string s(recordData.data());
51  ASSERT(1 == _remain.erase(s));
52 
53  *dataSize = recordData.size();
54  return Status::OK();
55  }
56 
57  bool allValidated() {
58  return _remain.empty();
59  }
60 
61 private:
62  std::set<std::string> _remain; // initially contains all inserted records
63 };
64 
65 class ValidateTest : public mongo::unittest::Test {
66 public:
68  : _harnessHelper(newRecordStoreHarnessHelper()),
69  _rs(_harnessHelper->newNonCappedRecordStore()) {}
70 
71  ServiceContext::UniqueOperationContext newOperationContext() {
72  return _harnessHelper->newOperationContext();
73  }
74 
76  return *_rs;
77  }
78 
79  const std::set<std::string>& getInsertedRecords() {
80  return _remain;
81  }
82 
83  void setUp() {
84  {
85  ServiceContext::UniqueOperationContext opCtx(newOperationContext());
86  ASSERT_EQUALS(0, _rs->numRecords(opCtx.get()));
87  }
88 
89  int nToInsert = 10;
90  for (int i = 0; i < nToInsert; i++) {
91  ServiceContext::UniqueOperationContext opCtx(newOperationContext());
92  {
93  std::stringstream ss;
94  ss << "record " << i;
95  std::string data = ss.str();
96  ASSERT(_remain.insert(data).second);
97 
98  WriteUnitOfWork uow(opCtx.get());
99  StatusWith<RecordId> res = _rs->insertRecord(
100  opCtx.get(), data.c_str(), data.size() + 1, Timestamp(), false);
101  ASSERT_OK(res.getStatus());
102  uow.commit();
103  }
104  }
105 
106  {
107  ServiceContext::UniqueOperationContext opCtx(newOperationContext());
108  ASSERT_EQUALS(nToInsert, _rs->numRecords(opCtx.get()));
109  }
110  }
111 
112 private:
113  std::unique_ptr<RecordStoreHarnessHelper> _harnessHelper;
114  std::unique_ptr<RecordStore> _rs;
115  std::set<std::string> _remain;
116 };
117 
118 } // namespace mongo
std::unique_ptr< RecordStore > _rs
Definition: kv_catalog_feature_tracker_test.cpp:102
std::unique_ptr< RecordStoreHarnessHelper > _harnessHelper
Definition: record_store_test_validate.h:113
std::set< std::string > _remain
Definition: record_store_test_validate.h:115
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
ServiceContext::UniqueOperationContext newOperationContext()
Definition: record_store_test_validate.h:71
OperationContext Database StringData BSONObj CollectionOptions::ParseKind bool const BSONObj &idIndex Status
Definition: database_impl.cpp:956
A replacement for the Record class.
Definition: record_data.h:43
RecordStore & getRecordStore()
Definition: record_store_test_validate.h:75
This is so when a RecordStore is validating all records it can call back to someone to check if a rec...
Definition: record_store.h:685
~ValidateAdaptorSpy()
Definition: record_store_test_validate.h:47
std::shared_ptr< void > data
Definition: ephemeral_for_test_record_store_test.cpp:74
ValidateAdaptorSpy(const std::set< std::string > &remain)
Definition: record_store_test_validate.h:45
void setUp()
Definition: record_store_test_validate.h:83
bool allValidated()
Definition: record_store_test_validate.h:57
const std::set< std::string > & getInsertedRecords()
Definition: record_store_test_validate.h:79
Definition: index_key_validate.h:40
Definition: record_store_test_validate.h:65
An abstraction used for storing documents in a collection or entries in an index. ...
Definition: record_store.h:282
std::unique_ptr< RecordStore > _rs
Definition: record_store_test_validate.h:114
The WriteUnitOfWork is an RAII type that begins a storage engine write unit of work on both the Locke...
Definition: write_unit_of_work.h:49
ValidateTest()
Definition: record_store_test_validate.h:67
std::set< std::string > _remain
Definition: record_store_test_validate.h:62
const char * data() const
Definition: record_data.h:51
Definition: record_store_test_validate.h:41
std::unique_ptr< RecordStoreHarnessHelper > newRecordStoreHarnessHelper()
Definition: record_store_test_harness.h:67
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80
Status validate(const RecordId &recordId, const RecordData &recordData, size_t *dataSize)
Definition: record_store_test_validate.h:49
int size() const
Definition: record_data.h:55
ValidateAdaptorSpy()
Definition: record_store_test_validate.h:43