blob: 7955282641ee91d6e3c3f2fa6c7da1cf5c251814 [file] [log] [blame]
#########################################################################################
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#########################################################################################
import scanner
import unittest
import diff
import xml.parsers.expat
class ReadXmlTestCase(unittest.TestCase):
def testReadOne(self):
document = diff.Document()
parser = xml.parsers.expat.ParserCreate()
parser.StartElementHandler = document.start_element
parser.EndElementHandler = document.end_element
parser.CharacterDataHandler = document.char_data
parser.Parse("""<?xml version="1.0"?>
<document dir='a directory' name='a name' >
<md5>MD5 SUM</md5>
<sha512>SHA SUM</sha512>
<ripemd160>RIPEMD</ripemd160>
</document>""", 1)
self.assertEqual('a directory', document.dir)
self.assertEqual('a name', document.name)
self.assertEqual('MD5 SUM', document.md5)
self.assertEqual('SHA SUM', document.sha)
self.assertEqual('RIPEMD', document.ripemd)
def testLoad(self):
documents = diff.Documents()
documents.load("""<?xml version="1.0"?><audit on='2008-01-22'><documents>
<document dir='a directory' name='a name' >
<md5>MD5 SUM</md5>
<sha512>SHA SUM</sha512>
<ripemd160>RIPEMD</ripemd160>
</document>
<document dir='another directory' name='another name' >
<md5>ANOTHER MD5 SUM</md5>
<sha512>ANOTHER SHA SUM</sha512>
<ripemd160>ANOTHER RIPEMD</ripemd160>
</document>
</documents></audit>
""")
self.assert_(not documents.documents == None)
self.assertEqual('2008-01-22', documents.on)
self.assertEqual(2, len(documents.documents))
document = documents.documents[0]
self.assertEqual('a directory', document.dir)
self.assertEqual('a name', document.name)
self.assertEqual('MD5 SUM', document.md5)
self.assertEqual('SHA SUM', document.sha)
self.assertEqual('RIPEMD', document.ripemd)
document = documents.documents[1]
self.assertEqual('another directory', document.dir)
self.assertEqual('another name', document.name)
self.assertEqual('ANOTHER MD5 SUM', document.md5)
self.assertEqual('ANOTHER SHA SUM', document.sha)
self.assertEqual('ANOTHER RIPEMD', document.ripemd)
class DiffTestCase(unittest.TestCase):
def setUp(self):
self.documents = []
self.documents.append(diff.document("dir", "name", "md5", "sha", "ripemd"))
self.document2 = diff.document("dir", "name2", "2md5", "2sha", "2ripemd")
self.documents.append(self.document2)
self.documents.append(diff.document("dirA", "name", "Amd5", "Asha", "Aripemd"))
self.documents.append(diff.document("dirA", "nameB", "Bmd5", "Bsha", "Bripemd"))
def testIsMissing(self):
document = diff.document("dir", "name", "md5", "sha", "ripemd")
self.assertEquals(False, document.isMissing(self.documents))
document = diff.document("dirA", "name", "Amd5", "Asha", "Aripemd")
self.assertEquals(False, document.isMissing(self.documents))
document = diff.document("dirC", "name", "md5", "sha", "ripemd")
self.assertEquals(True, document.isMissing(self.documents))
document = diff.document("dir", "nameB", "md5", "sha", "ripemd")
self.assertEquals(True, document.isMissing(self.documents))
def testIsModified(self):
document = diff.document("dir", "name", "md5", "sha", "ripemd")
self.assertEquals(False, document.isModified(self.documents))
document = diff.document("dirA", "name", "Amd5", "Asha", "Aripemd")
self.assertEquals(False, document.isModified(self.documents))
document = diff.document("dirC", "name", "md5", "sha", "ripemd")
self.assertEquals(False, document.isModified(self.documents))
document = diff.document("dir", "nameB", "md5", "sha", "ripemd")
self.assertEquals(False, document.isModified(self.documents))
document = diff.document("dir", "name", "Amd5", "sha", "ripemd")
self.assertEquals(True, document.isModified(self.documents))
document = diff.document("dir", "name", "md5", "Qsha", "ripemd")
self.assertEquals(True, document.isModified(self.documents))
document = diff.document("dir", "name", "md5", "sha", "Tripemd")
self.assertEquals(True, document.isModified(self.documents))
def testCompareEmpty(self):
emptyDocuments = diff.Documents()
documents = diff.documents(self.documents)
added, removed, modified = documents.compare(emptyDocuments)
self.assert_(not added == None)
self.assert_(not removed == None)
self.assert_(not modified == None)
self.assertEquals(4, len(added))
self.assertEquals(0, len(modified))
self.assertEquals(0, len(removed))
added, removed, modified = emptyDocuments.compare(documents)
self.assert_(not added == None)
self.assert_(not removed == None)
self.assert_(not modified == None)
self.assertEquals(0, len(added))
self.assertEquals(0, len(modified))
self.assertEquals(4, len(removed))
def testCompareDiffering(self):
documents = diff.documents(self.documents)
differentsDocuments = diff.Documents()
modifiedDocument = diff.document("dir", "name", "NOT", "NOT", "NOT")
newDocument = diff.document("anotherdir", "anothername", "NOT", "NOT", "NOT")
differentsDocuments.append(modifiedDocument)
differentsDocuments.append(newDocument)
differentsDocuments.append(diff.document("dirA", "name", "Amd5", "Asha", "Aripemd"))
differentsDocuments.append(diff.document("dirA", "nameB", "Bmd5", "Bsha", "Bripemd"))
added, removed, modified = differentsDocuments.compare(documents)
self.assert_(not added == None)
self.assert_(not removed == None)
self.assert_(not modified == None)
self.assertEquals(1, len(modified))
self.assertEquals(1, len(added))
self.assertEquals(1, len(removed))
self.assertEquals(modifiedDocument, modified[0])
self.assertEquals(newDocument, added[0])
self.assertEquals(self.document2, removed[0])