From 9ee3c3b043b30e0729e90cb5da48d769ef7f181c Mon Sep 17 00:00:00 2001 From: Mike Dirolf Date: Fri, 16 Jan 2009 14:40:02 -0500 Subject: [PATCH] move bson tests to test directory --- bson.py | 131 ------------------------------------------- test/test_bson.py | 138 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+), 131 deletions(-) create mode 100644 test/test_bson.py diff --git a/bson.py b/bson.py index ba98690e3..d4813f56d 100644 --- a/bson.py +++ b/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() diff --git a/test/test_bson.py b/test/test_bson.py new file mode 100644 index 000000000..724484c92 --- /dev/null +++ b/test/test_bson.py @@ -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()