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