9b2d182822a411707f10450cee1d1694f3f62dee
[ep-engine.git] / tests / module_tests / vbucket_test.h
1 /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  *     Copyright 2016 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 #include "config.h"
19
20 #include "callbacks.h"
21 #include "checkpoint.h"
22 #include "configuration.h"
23 #include "hash_table.h"
24 #include "item_pager.h"
25
26 #include <gtest/gtest.h>
27
28 class BgFetcher;
29 class VBucket;
30 class VBucketBGFetchItem;
31
32 /**
33  * Dummy callback to replace the flusher callback.
34  */
35 class DummyCB: public Callback<uint16_t> {
36 public:
37     DummyCB() {}
38
39     void callback(uint16_t &dummy) { }
40 };
41
42 /**
43  * Test fixture for VBucket tests.
44  *
45  * Templated on the Item Eviction policy to use.
46  */
47 class VBucketTest
48         : public ::testing::Test,
49           public ::testing::WithParamInterface<item_eviction_policy_t> {
50 protected:
51     void SetUp();
52
53     void TearDown();
54
55     std::vector<StoredDocKey> generateKeys(int num, int start = 0);
56
57     AddStatus addOne(const StoredDocKey& k, int expiry = 0);
58
59     void addMany(std::vector<StoredDocKey>& keys, AddStatus expect);
60
61     MutationStatus setOne(const StoredDocKey& k, int expiry = 0);
62
63     void setMany(std::vector<StoredDocKey>& keys, MutationStatus expect);
64
65     void softDeleteOne(const StoredDocKey& k, MutationStatus expect);
66
67     void softDeleteMany(std::vector<StoredDocKey>& keys, MutationStatus expect);
68
69     StoredValue* findValue(StoredDocKey& key);
70
71     void verifyValue(StoredDocKey& key,
72                      const char* value,
73                      TrackReference trackReference,
74                      WantsDeleted wantDeleted);
75
76     std::pair<HashTable::HashBucketLock, StoredValue*> lockAndFind(
77             const StoredDocKey& key);
78
79     MutationStatus public_processSet(Item& itm, const uint64_t cas);
80
81     AddStatus public_processAdd(Item& itm);
82
83     MutationStatus public_processSoftDelete(const DocKey& key,
84                                             StoredValue* v,
85                                             uint64_t cas);
86
87     bool public_deleteStoredValue(const DocKey& key);
88
89     std::unique_ptr<VBucket> vbucket;
90     EPStats global_stats;
91     CheckpointConfig checkpoint_config;
92     Configuration config;
93 };
94
95 class EPVBucketTest : public VBucketTest {
96 protected:
97     size_t public_queueBGFetchItem(
98             const DocKey& key,
99             std::unique_ptr<VBucketBGFetchItem> fetchItem,
100             BgFetcher* bgFetcher);
101 };