1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
/** @file directclienttests.cpp
*/
/**
* Copyright (C) 2008 10gen Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "pch.h"
#include "../db/ops/query.h"
#include "../db/db.h"
#include "../db/instance.h"
#include "../db/json.h"
#include "../db/lasterror.h"
#include "../db/ops/update.h"
#include "../util/timer.h"
#include "dbtests.h"
namespace DirectClientTests {
class ClientBase {
public:
// NOTE: Not bothering to backup the old error record.
ClientBase() { mongo::lastError.reset( new LastError() ); }
virtual ~ClientBase() { }
protected:
static bool error() {
return !_client.getPrevError().getField( "err" ).isNull();
}
DBDirectClient &client() const { return _client; }
private:
static DBDirectClient _client;
};
DBDirectClient ClientBase::_client;
const char *ns = "a.b";
class Capped : public ClientBase {
public:
virtual void run() {
for( int pass=0; pass < 3; pass++ ) {
client().createCollection(ns, 1024 * 1024, true, 999);
for( int j =0; j < pass*3; j++ )
client().insert(ns, BSON("x" << j));
// test truncation of a capped collection
if( pass ) {
BSONObj info;
BSONObj cmd = BSON( "captrunc" << "b" << "n" << 1 << "inc" << true );
//cout << cmd.toString() << endl;
bool ok = client().runCommand("a", cmd, info);
//cout << info.toString() << endl;
assert(ok);
}
assert( client().dropCollection(ns) );
}
}
};
class InsertMany : ClientBase {
public:
virtual void run(){
vector<BSONObj> objs;
objs.push_back(BSON("_id" << 1));
objs.push_back(BSON("_id" << 1));
objs.push_back(BSON("_id" << 2));
client().dropCollection(ns);
client().insert(ns, objs);
ASSERT_EQUALS(client().getLastErrorDetailed()["code"].numberInt(), 11000);
ASSERT_EQUALS((int)client().count(ns), 1);
client().dropCollection(ns);
client().insert(ns, objs, InsertOption_ContinueOnError);
ASSERT_EQUALS(client().getLastErrorDetailed()["code"].numberInt(), 11000);
ASSERT_EQUALS((int)client().count(ns), 2);
}
};
class All : public Suite {
public:
All() : Suite( "directclient" ) {
}
void setupTests() {
add< Capped >();
add< InsertMany >();
}
} myall;
}
|