Add WithMeta unit tests
[ep-engine.git] / tests / mock / mock_synchronous_ep_engine.cc
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 #include "mock_synchronous_ep_engine.h"
19
20 #include <checkpoint_remover.h>
21 #include <programs/engine_testapp/mock_server.h>
22 #include "dcp/dcpconnmap.h"
23 #include "dcp/flow-control-manager.h"
24 #include "replicationthrottle.h"
25 #include "tapconnmap.h"
26
27 #include <string>
28
29 SynchronousEPEngine::SynchronousEPEngine(const std::string& extra_config)
30     : EventuallyPersistentEngine(get_mock_server_api) {
31
32     // Tests may need to create multiple failover table entries, so allow that
33     maxFailoverEntries = 5;
34
35     // Merge any extra config into the main configuration.
36     if (extra_config.size() > 0) {
37         if (!configuration.parseConfiguration(extra_config.c_str(),
38                                               serverApi)) {
39             throw std::invalid_argument("Unable to parse config string: " +
40                                         extra_config);
41         }
42     }
43
44     // workload is needed by EPStore's constructor (to construct the
45     // VBucketMap).
46     workload = new WorkLoadPolicy(/*workers*/ 1, /*shards*/ 1);
47
48     // dcpConnMap_ is needed by EPStore's constructor.
49     dcpConnMap_ = new DcpConnMap(*this);
50
51     // tapConnMap is needed by queueDirty.
52     tapConnMap = new TapConnMap(*this);
53
54     // checkpointConfig is needed by CheckpointManager (via EPStore).
55     checkpointConfig = new CheckpointConfig(*this);
56
57     dcpFlowControlManager_ = new DcpFlowControlManager(*this);
58
59     replicationThrottle = new ReplicationThrottle(configuration, stats);
60
61     tapConfig = new TapConfig(*this);
62
63     enableTraffic(true);
64
65     maxItemSize = configuration.getMaxItemSize();
66 }
67
68 void SynchronousEPEngine::setKVBucket(std::unique_ptr<KVBucket> store) {
69     cb_assert(kvBucket == nullptr);
70     kvBucket = std::move(store);
71 }
72
73 void SynchronousEPEngine::initializeConnmaps() {
74     dcpConnMap_->initialize(DCP_CONN_NOTIFIER);
75     tapConnMap->initialize(TAP_CONN_NOTIFIER);
76 }