1 /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  *     Copyright 2017 Couchbase, Inc
4  *
5  *   Licensed under the Apache License, Version 2.0 (the "License");
6  *   you may not use this file except in compliance with the License.
7  *   You may obtain a copy of the License at
8  *
9  *       http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *   Unless required by applicable law or agreed to in writing, software
12  *   distributed under the License is distributed on an "AS IS" BASIS,
13  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *   See the License for the specific language governing permissions and
15  *   limitations under the License.
16  */
17 
18 /*
19  * Mock of the BasicLinkedList class.  Wraps the real BasicLinkedList class
20  * and provides access to functions like getAllItemsForVerification().
21  */
22 #pragma once
23 
24 #include "../mock/mock_basic_ll.h"
25 #include "ephemeral_vb.h"
26 
27 #include <mutex>
28 #include <vector>
29 
30 class MockEphemeralVBucket : public EphemeralVBucket {
31 public:
32     MockEphemeralVBucket(Vbid i,
33                          vbucket_state_t newState,
34                          EPStats& st,
35                          CheckpointConfig& chkConfig,
36                          KVShard* kvshard,
37                          int64_t lastSeqno,
38                          uint64_t lastSnapStart,
39                          uint64_t lastSnapEnd,
40                          std::unique_ptr<FailoverTable> table,
41                          NewSeqnoCallback newSeqnoCb,
42                          SyncWriteResolvedCallback syncWriteResolvedCb,
43                          SyncWriteCompleteCallback syncWriteCb,
44                          SeqnoAckCallback seqnoAckCb,
45                          Configuration& config,
46                          EvictionPolicy evictionPolicy);
47 
48     /* Register fake shared range lock for testing */
registerFakeSharedRangeLock(seqno_t start, seqno_t end)49     RangeGuard registerFakeSharedRangeLock(seqno_t start, seqno_t end) {
50         return mockLL->registerFakeSharedRangeLock(start, end);
51     }
52 
53     /* Register fake exclusive range lock for testing */
registerFakeRangeLock(seqno_t start, seqno_t end)54     RangeGuard registerFakeRangeLock(seqno_t start, seqno_t end) {
55         return mockLL->registerFakeRangeLock(start, end);
56     }
57 
public_getNumStaleItems()58     int public_getNumStaleItems() {
59         return mockLL->getNumStaleItems();
60     }
61 
public_getNumListItems()62     int public_getNumListItems() {
63         return mockLL->getNumItems();
64     }
65 
public_getNumListDeletedItems()66     int public_getNumListDeletedItems() {
67         return mockLL->getNumDeletedItems();
68     }
69 
public_getListHighSeqno() const70     uint64_t public_getListHighSeqno() const {
71         return mockLL->getHighSeqno();
72     }
73 
getLL()74     MockBasicLinkedList* getLL() {
75         return mockLL;
76     }
77 
78     /**
79      * Convenience method to run the HT tombstone purger across the entire
80      * vBucket (this is normally done with a seperate task using the
81      * pause/resumevisitor).
82      * @return Count of items marked stale and moved to sequenceList.
83      */
84     size_t markOldTombstonesStale(rel_time_t purgeAge);
85 
86     void public_doCollectionsStats(
87             const Collections::VB::Manifest::CachingReadHandle& cHandle,
88             const VBNotifyCtx& notifyCtx);
89 
90 private:
91     /* non owning ptr to the linkedlist in the ephemeral vbucket obj */
92     MockBasicLinkedList* mockLL;
93 };
94