forked from virtix/cfmongodb
-
Notifications
You must be signed in to change notification settings - Fork 34
/
MongoTest.cfc
200 lines (157 loc) · 6.32 KB
/
MongoTest.cfc
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
<!---
NOTE: a number of these unit tests run ensureIndex(). This is because Marc likes to run mongo with --notablescan during development, and queries
against unindexed fields will fail, thus throwing off the tests.
You should absolutely NOT run an ensureIndex on your columns every time you run a query!
--->
<cfcomponent output="false" extends="BaseTestCase">
<cfscript>
import cfmongodb.core.*;
function setUp(){
col = 'people';
dbCol = mongo.getDBCollection( col );
atomicCol = 'atomictests';
deleteCol = 'deletetests';
super.setUp();
}
function mongo_can_list_commands_via_mongo_driver(){
var result = mongo.getMongoDB().command("listCommands");
//debug(result);
assertTrue( structKeyExists(result, "commands") );
//NOTE: this is not a true CF struct, but a regular java hashmap; consequently, it is case sensitive!
assertTrue( structCount(result["commands"]) GT 1);
}
function mongo_can_list_collections(){
var jMongoDB = mongo.getMongoDB();
var collections = jMongoDB.getCollectionNames();
//debug(collections);
//debug(collections.toString());
assertTrue( collections.size() GT 0 );
}
function mongoOptions_should_be_available(){
var options = mongo.getMongo().getMongoOptions();
//debug(mongo.getMongo());
//debug(mongo.getMongo().toString());
debug(options);
debug(options.toString());
options.socketTimeout=1000;
debug(options.toString());
}
private function getIndexesFailOverride(){
throw("authentication failed");
}
/** test java getters */
function testGetMongo(){
assertIsTypeOf( mongo, "cfmongodb.core.Mongo" );
}
function getMongo_should_return_underlying_java_Mongo(){
var jMongo = mongo.getMongo();
assertEquals("com.mongodb.Mongo",jMongo.getClass().getCanonicalName());
}
function getMongoDB_should_return_underlying_java_MongoDB(){
var jMongoDB = mongo.getMongoDB(mongoConfig);
assertEquals("com.mongodb.DBApiLayer",jMongoDB.getClass().getCanonicalName());
}
/** dumping grounnd for proof of concept tests */
function poc_profiling(){
var u = mongo.getMongoUtil();
var command = u.toMongo({"profile"=2});
var result = mongo.getMongoDB().command( command );
//debug(result);
var result = mongo.query("system.profile").find(limit=50,sort={"ts"=-1}).asArray();
//debug(result);
command = u.toMongo({"profile"=0});
result = mongo.getMongoDB().command( command );
//debug(result);
}
private function flush(){
//forces mongo to flush
mongo.getMongoDB().getLastError();
}
function newDBObject_should_be_acceptably_fast(){
var i = 1;
var count = 500;
var expectedTime = 200;
var u = mongo.getMongoUtil();
var st = {string="string",number=1,float=1.5,date=now(),boolean=true};
//get the first one out of its system
var dbo = u.toMongo( st );
var startTS = getTickCount();
for(i=1; i LTE count; i++){
dbo = u.toMongo( st );
}
var total = getTickCount() - startTS;
assertTrue( total lt expectedTime, "total to create #count# objects should be acceptably fast (#expectedTime#) but was #total#" );
}
function newDBObject_should_create_correct_datatypes(){
var origNums = mongo.query( col ).$eq("number", types.number).count();
var origNestedNums = mongo.query( col ).$eq("types.number", types.number).count();
var origBool = mongo.query( col ).$eq("israd", true).count();
var origNestedBool = mongo.query( col ).$eq("types.israd", true).count();
var origFloats = mongo.query( col ).$eq("floats",1.3).count();
var origNestedFloats = mongo.query( col ).$eq("types.floats",1.3).count();
var origString = mongo.query( col ).$eq("address.street", "123 big top lane").count();
mongo.save( doc, col );
var newNums = mongo.query( col ).$eq("number", types.number).count();
var newNestedNums = mongo.query( col ).$eq("types.number", types.number).count();
var newBool = mongo.query( col ).$eq("israd", true).count();
var newNestedBool = mongo.query( col ).$eq("types.israd", true).count();
var newFloats = mongo.query( col ).$eq("floats",1.3).count();
var newNestedFloats = mongo.query( col ).$eq("types.floats",1.3).count();
var newString = mongo.query( col ).$eq("address.street", "123 big top lane").count();
assertEquals( origNums+1, newNums );
assertEquals( origNestedNums+1, newNestedNums );
assertEquals( origBool+1, newBool );
assertEquals( origNestedBool+1, newNestedBool );
assertEquals( origFloats+1, newFloats );
assertEquals( origNestedFloats+1, newNestedFloats );
assertEquals( origString+1, newString );
debug(doc);
var fetched = dbCol.findById( doc._id );
debug(fetched);
/*assertEquals( doc["types"]["floats"], fetched["types"]["floats"] );
assertEquals( doc.negativeFloat, fetched.negativeFloat, "negativeFloat should be equal" );
assertEquals( doc.positiveFloat, fetched.positiveFloat, "positiveFloat should be equal" );*/
assertEquals( doc, fetched );
}
/**
* Confirm getLastError works and mongo has not changed its response.
*/
function getLastError_should_return_error_when_expected()
{
var jColl = mongo.getMongoDBCollection(col, mongoConfig);
var mongoUtil = mongo.getMongoUtil();
// Create people to steal an id from
createPeople();
// Get the result of the last activity from CreatePeople()
local.lastActivity = mongo.getLastError();
assertFalse( structKeyExists(local.lastActivity, "code"), "code key should not exist when no error is present");
local.peeps = mongo.query(collectionName=col).find(limit="1").asArray();
assertFalse(
arrayIsEmpty(local.peeps)
,'Some people should have been returned.'
);
// Let's duplicate the record.
local.person = local.peeps[1];
jColl.insert([mongoUtil.toMongo(local.person)]);
// Get the result of the last activity
local.lastActivity = mongo.getLastError();
// Confirm we did try to duplicate an id.
assert(
structKeyExists(local.lastActivity,'code')
,'Mongo should be upset a record was duplicated. Check the test.'
);
}
function whatsUpWithCFBasicDBObject(){
var dude = {name="TheDude", abides=true, age=100};
var dboDude = mongo.getMongoUtil().toMongo( dude );
var mongoDBO = mongoConfig.getMongoFactory().getObject("com.mongodb.BasicDBObject");
mongoDBO.putAll(dude);
debug( isStruct(dboDude) );
debug( isObject(dboDude) );
debug( getMetadata(dboDude).getSimpleName() );
debug( dude.toString() );
debug( mongoDBO.toString() );
debug( dboDude.toString() );
}
</cfscript>
</cfcomponent>