move bson tests to test directory
This commit is contained in:
parent
20c774d04f
commit
9ee3c3b043
131
bson.py
131
bson.py
@ -2,7 +2,6 @@
|
||||
|
||||
Generally not needed to be used by application developers."""
|
||||
|
||||
import unittest
|
||||
import types
|
||||
import struct
|
||||
import random
|
||||
@ -10,10 +9,7 @@ import re
|
||||
import datetime
|
||||
import time
|
||||
import logging
|
||||
import glob
|
||||
import sys
|
||||
|
||||
from test import test_data, qcheck
|
||||
from objectid import ObjectId
|
||||
from dbref import DBRef
|
||||
from son import SON
|
||||
@ -453,130 +449,3 @@ class BSON(str):
|
||||
"""Get the dictionary representation of this data."""
|
||||
(son, _) = _document_to_dict(self)
|
||||
return son
|
||||
|
||||
class TestBSON(unittest.TestCase):
|
||||
def setUp(self):
|
||||
pass
|
||||
|
||||
def test_basic_validation(self):
|
||||
self.assertRaises(TypeError, is_valid, 100)
|
||||
self.assertRaises(TypeError, is_valid, u"test")
|
||||
self.assertRaises(TypeError, is_valid, 10.4)
|
||||
|
||||
self.assertFalse(is_valid("test"))
|
||||
|
||||
# the simplest valid BSON document
|
||||
self.assertTrue(is_valid("\x05\x00\x00\x00\x00"))
|
||||
self.assertTrue(is_valid(BSON("\x05\x00\x00\x00\x00")))
|
||||
self.assertFalse(is_valid("\x04\x00\x00\x00\x00"))
|
||||
self.assertFalse(is_valid("\x05\x00\x00\x00\x01"))
|
||||
self.assertFalse(is_valid("\x05\x00\x00\x00"))
|
||||
self.assertFalse(is_valid("\x05\x00\x00\x00\x00\x00"))
|
||||
|
||||
for data in test_data.valid_bson:
|
||||
self.assertTrue(is_valid(data))
|
||||
|
||||
def test_random_data_is_not_bson(self):
|
||||
qcheck.check_unittest(self, qcheck.isnt(is_valid), qcheck.gen_string(qcheck.gen_range(0, 40)))
|
||||
|
||||
def test_basic_to_dict(self):
|
||||
self.assertEqual({"test": u"hello world"},
|
||||
BSON("\x1B\x00\x00\x00\x0E\x74\x65\x73\x74\x00\x0C\x00\x00\x00\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64\x00\x00").to_dict())
|
||||
self.assertEqual([{"test": u"hello world"}, {}],
|
||||
to_dicts("\x1B\x00\x00\x00\x0E\x74\x65\x73\x74\x00\x0C\x00\x00\x00\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64\x00\x00\x05\x00\x00\x00\x00"))
|
||||
|
||||
def test_basic_from_dict(self):
|
||||
self.assertRaises(TypeError, BSON.from_dict, 100)
|
||||
self.assertRaises(TypeError, BSON.from_dict, "hello")
|
||||
self.assertRaises(TypeError, BSON.from_dict, None)
|
||||
self.assertRaises(TypeError, BSON.from_dict, [])
|
||||
|
||||
self.assertEqual(BSON.from_dict({}), BSON("\x05\x00\x00\x00\x00"))
|
||||
self.assertEqual(BSON.from_dict({"test": u"hello world"}),
|
||||
"\x1B\x00\x00\x00\x02\x74\x65\x73\x74\x00\x0C\x00\x00\x00\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({u"mike": 100}),
|
||||
"\x0F\x00\x00\x00\x10\x6D\x69\x6B\x65\x00\x64\x00\x00\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"hello": 1.5}),
|
||||
"\x14\x00\x00\x00\x01\x68\x65\x6C\x6C\x6F\x00\x00\x00\x00\x00\x00\x00\xF8\x3F\x00")
|
||||
self.assertEqual(BSON.from_dict({"true": True}),
|
||||
"\x0C\x00\x00\x00\x08\x74\x72\x75\x65\x00\x01\x00")
|
||||
self.assertEqual(BSON.from_dict({"false": False}),
|
||||
"\x0D\x00\x00\x00\x08\x66\x61\x6C\x73\x65\x00\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"empty": []}),
|
||||
"\x11\x00\x00\x00\x04\x65\x6D\x70\x74\x79\x00\x05\x00\x00\x00\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"none": {}}),
|
||||
"\x10\x00\x00\x00\x03\x6E\x6F\x6E\x65\x00\x05\x00\x00\x00\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"test": "test"}),
|
||||
"\x13\x00\x00\x00\x05\x74\x65\x73\x74\x00\x04\x00\x00\x00\x74\x65\x73\x74\x00")
|
||||
self.assertEqual(BSON.from_dict({"test": None}),
|
||||
"\x0B\x00\x00\x00\x0A\x74\x65\x73\x74\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"date": datetime.datetime(2007, 1, 7, 19, 30, 11)}),
|
||||
"\x13\x00\x00\x00\x09\x64\x61\x74\x65\x00\x38\xBE\x1C\xFF\x0F\x01\x00\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"regex": re.compile("a*b", re.IGNORECASE)}),
|
||||
"\x12\x00\x00\x00\x0B\x72\x65\x67\x65\x78\x00\x61\x2A\x62\x00\x69\x00\x00")
|
||||
self.assertRaises(TypeError, BSON.from_dict, {"$where": 5})
|
||||
self.assertEqual(BSON.from_dict({"$where": "test"}),
|
||||
"\x16\x00\x00\x00\x0D\x24\x77\x68\x65\x72\x65\x00\x05\x00\x00\x00\x74\x65\x73\x74\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"$where": u"test"}),
|
||||
"\x16\x00\x00\x00\x0D\x24\x77\x68\x65\x72\x65\x00\x05\x00\x00\x00\x74\x65\x73\x74\x00\x00")
|
||||
a = ObjectId("\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B")
|
||||
self.assertEqual(BSON.from_dict({"oid": a}),
|
||||
"\x16\x00\x00\x00\x07\x6F\x69\x64\x00\x07\x06\x05\x04\x03\x02\x01\x00\x0B\x0A\x09\x08\x00")
|
||||
self.assertEqual(BSON.from_dict({"ref": DBRef("coll", a)}),
|
||||
"\x1F\x00\x00\x00\x0C\x72\x65\x66\x00\x05\x00\x00\x00\x63\x6F\x6C\x6C\x00\x07\x06\x05\x04\x03\x02\x01\x00\x0B\x0A\x09\x08\x00")
|
||||
|
||||
def test_from_then_to_dict(self):
|
||||
def helper(dict):
|
||||
self.assertEqual(dict, (BSON.from_dict(dict)).to_dict())
|
||||
helper({})
|
||||
helper({"test": u"hello"})
|
||||
helper({"mike": -10120})
|
||||
helper({u"hello": 0.0013109})
|
||||
helper({"something": True})
|
||||
helper({"false": False})
|
||||
helper({"an array": [1, True, 3.8, u"world"]})
|
||||
helper({"an object": {"test": u"something"}})
|
||||
|
||||
def from_then_to_dict(dict):
|
||||
return dict == (BSON.from_dict(dict)).to_dict()
|
||||
|
||||
qcheck.check_unittest(self, from_then_to_dict, qcheck.gen_mongo_dict(3))
|
||||
|
||||
def test_data_files(self):
|
||||
# TODO don't hardcode this, actually clone the repo
|
||||
data_files = "../mongo-qa/modules/bson_tests/tests/*/*.xson"
|
||||
generate = True
|
||||
|
||||
for file_name in glob.iglob(data_files):
|
||||
f = open(file_name, "r")
|
||||
xml = f.read()
|
||||
f.close()
|
||||
|
||||
try:
|
||||
doc = SON.from_xml(xml)
|
||||
bson = BSON.from_dict(doc)
|
||||
except UnsupportedTag:
|
||||
print "skipped file %s: %s" % (file_name, sys.exc_info()[1])
|
||||
continue
|
||||
except:
|
||||
print "failed to parse %s: %s" % (file_name, sys.exc_info()[1])
|
||||
continue
|
||||
|
||||
try:
|
||||
f = open(file_name.replace(".xson", ".bson"), "r")
|
||||
expected = f.read()
|
||||
f.close()
|
||||
|
||||
self.assertEqual(bson, expected, file_name)
|
||||
self.assertEqual(doc, bson.to_dict(), file_name)
|
||||
|
||||
except IOError:
|
||||
if generate:
|
||||
print "generating .bson for %s" % file_name
|
||||
|
||||
f = open(file_name.replace(".xson", ".bson"), "w")
|
||||
f.write(bson)
|
||||
f.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
138
test/test_bson.py
Normal file
138
test/test_bson.py
Normal file
@ -0,0 +1,138 @@
|
||||
"""Test the bson module."""
|
||||
|
||||
import unittest
|
||||
import datetime
|
||||
import re
|
||||
import glob
|
||||
import sys
|
||||
|
||||
from objectid import ObjectId
|
||||
from dbref import DBRef
|
||||
import qcheck
|
||||
from son import SON
|
||||
from bson import BSON, is_valid, to_dicts
|
||||
from errors import UnsupportedTag
|
||||
|
||||
class TestBSON(unittest.TestCase):
|
||||
def setUp(self):
|
||||
pass
|
||||
|
||||
def test_basic_validation(self):
|
||||
self.assertRaises(TypeError, is_valid, 100)
|
||||
self.assertRaises(TypeError, is_valid, u"test")
|
||||
self.assertRaises(TypeError, is_valid, 10.4)
|
||||
|
||||
self.assertFalse(is_valid("test"))
|
||||
|
||||
# the simplest valid BSON document
|
||||
self.assertTrue(is_valid("\x05\x00\x00\x00\x00"))
|
||||
self.assertTrue(is_valid(BSON("\x05\x00\x00\x00\x00")))
|
||||
self.assertFalse(is_valid("\x04\x00\x00\x00\x00"))
|
||||
self.assertFalse(is_valid("\x05\x00\x00\x00\x01"))
|
||||
self.assertFalse(is_valid("\x05\x00\x00\x00"))
|
||||
self.assertFalse(is_valid("\x05\x00\x00\x00\x00\x00"))
|
||||
|
||||
def test_random_data_is_not_bson(self):
|
||||
qcheck.check_unittest(self, qcheck.isnt(is_valid), qcheck.gen_string(qcheck.gen_range(0, 40)))
|
||||
|
||||
def test_basic_to_dict(self):
|
||||
self.assertEqual({"test": u"hello world"},
|
||||
BSON("\x1B\x00\x00\x00\x0E\x74\x65\x73\x74\x00\x0C\x00\x00\x00\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64\x00\x00").to_dict())
|
||||
self.assertEqual([{"test": u"hello world"}, {}],
|
||||
to_dicts("\x1B\x00\x00\x00\x0E\x74\x65\x73\x74\x00\x0C\x00\x00\x00\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64\x00\x00\x05\x00\x00\x00\x00"))
|
||||
|
||||
def test_basic_from_dict(self):
|
||||
self.assertRaises(TypeError, BSON.from_dict, 100)
|
||||
self.assertRaises(TypeError, BSON.from_dict, "hello")
|
||||
self.assertRaises(TypeError, BSON.from_dict, None)
|
||||
self.assertRaises(TypeError, BSON.from_dict, [])
|
||||
|
||||
self.assertEqual(BSON.from_dict({}), BSON("\x05\x00\x00\x00\x00"))
|
||||
self.assertEqual(BSON.from_dict({"test": u"hello world"}),
|
||||
"\x1B\x00\x00\x00\x02\x74\x65\x73\x74\x00\x0C\x00\x00\x00\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({u"mike": 100}),
|
||||
"\x0F\x00\x00\x00\x10\x6D\x69\x6B\x65\x00\x64\x00\x00\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"hello": 1.5}),
|
||||
"\x14\x00\x00\x00\x01\x68\x65\x6C\x6C\x6F\x00\x00\x00\x00\x00\x00\x00\xF8\x3F\x00")
|
||||
self.assertEqual(BSON.from_dict({"true": True}),
|
||||
"\x0C\x00\x00\x00\x08\x74\x72\x75\x65\x00\x01\x00")
|
||||
self.assertEqual(BSON.from_dict({"false": False}),
|
||||
"\x0D\x00\x00\x00\x08\x66\x61\x6C\x73\x65\x00\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"empty": []}),
|
||||
"\x11\x00\x00\x00\x04\x65\x6D\x70\x74\x79\x00\x05\x00\x00\x00\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"none": {}}),
|
||||
"\x10\x00\x00\x00\x03\x6E\x6F\x6E\x65\x00\x05\x00\x00\x00\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"test": "test"}),
|
||||
"\x13\x00\x00\x00\x05\x74\x65\x73\x74\x00\x04\x00\x00\x00\x74\x65\x73\x74\x00")
|
||||
self.assertEqual(BSON.from_dict({"test": None}),
|
||||
"\x0B\x00\x00\x00\x0A\x74\x65\x73\x74\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"date": datetime.datetime(2007, 1, 7, 19, 30, 11)}),
|
||||
"\x13\x00\x00\x00\x09\x64\x61\x74\x65\x00\x38\xBE\x1C\xFF\x0F\x01\x00\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"regex": re.compile("a*b", re.IGNORECASE)}),
|
||||
"\x12\x00\x00\x00\x0B\x72\x65\x67\x65\x78\x00\x61\x2A\x62\x00\x69\x00\x00")
|
||||
self.assertRaises(TypeError, BSON.from_dict, {"$where": 5})
|
||||
self.assertEqual(BSON.from_dict({"$where": "test"}),
|
||||
"\x16\x00\x00\x00\x0D\x24\x77\x68\x65\x72\x65\x00\x05\x00\x00\x00\x74\x65\x73\x74\x00\x00")
|
||||
self.assertEqual(BSON.from_dict({"$where": u"test"}),
|
||||
"\x16\x00\x00\x00\x0D\x24\x77\x68\x65\x72\x65\x00\x05\x00\x00\x00\x74\x65\x73\x74\x00\x00")
|
||||
a = ObjectId("\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B")
|
||||
self.assertEqual(BSON.from_dict({"oid": a}),
|
||||
"\x16\x00\x00\x00\x07\x6F\x69\x64\x00\x07\x06\x05\x04\x03\x02\x01\x00\x0B\x0A\x09\x08\x00")
|
||||
self.assertEqual(BSON.from_dict({"ref": DBRef("coll", a)}),
|
||||
"\x1F\x00\x00\x00\x0C\x72\x65\x66\x00\x05\x00\x00\x00\x63\x6F\x6C\x6C\x00\x07\x06\x05\x04\x03\x02\x01\x00\x0B\x0A\x09\x08\x00")
|
||||
|
||||
def test_from_then_to_dict(self):
|
||||
def helper(dict):
|
||||
self.assertEqual(dict, (BSON.from_dict(dict)).to_dict())
|
||||
helper({})
|
||||
helper({"test": u"hello"})
|
||||
helper({"mike": -10120})
|
||||
helper({u"hello": 0.0013109})
|
||||
helper({"something": True})
|
||||
helper({"false": False})
|
||||
helper({"an array": [1, True, 3.8, u"world"]})
|
||||
helper({"an object": {"test": u"something"}})
|
||||
|
||||
def from_then_to_dict(dict):
|
||||
return dict == (BSON.from_dict(dict)).to_dict()
|
||||
|
||||
qcheck.check_unittest(self, from_then_to_dict, qcheck.gen_mongo_dict(3))
|
||||
|
||||
def test_data_files(self):
|
||||
# TODO don't hardcode this, actually clone the repo
|
||||
data_files = "../mongo-qa/modules/bson_tests/tests/*/*.xson"
|
||||
generate = True
|
||||
|
||||
for file_name in glob.iglob(data_files):
|
||||
f = open(file_name, "r")
|
||||
xml = f.read()
|
||||
f.close()
|
||||
|
||||
try:
|
||||
doc = SON.from_xml(xml)
|
||||
bson = BSON.from_dict(doc)
|
||||
except UnsupportedTag:
|
||||
print "skipped file %s: %s" % (file_name, sys.exc_info()[1])
|
||||
continue
|
||||
except:
|
||||
print "failed to parse %s: %s" % (file_name, sys.exc_info()[1])
|
||||
continue
|
||||
|
||||
try:
|
||||
f = open(file_name.replace(".xson", ".bson"), "r")
|
||||
expected = f.read()
|
||||
f.close()
|
||||
|
||||
self.assertEqual(bson, expected, file_name)
|
||||
self.assertEqual(doc, bson.to_dict(), file_name)
|
||||
|
||||
except IOError:
|
||||
if generate:
|
||||
print "generating .bson for %s" % file_name
|
||||
|
||||
f = open(file_name.replace(".xson", ".bson"), "w")
|
||||
f.write(bson)
|
||||
f.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Loading…
Reference in New Issue
Block a user