diff -r 87cfa131b535 -r e7e0ae78773e configurationengine/source/cone/validation/tests/unittest_schemavalidation.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configurationengine/source/cone/validation/tests/unittest_schemavalidation.py Tue Aug 10 14:29:28 2010 +0300 @@ -0,0 +1,192 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +import unittest +import os +import StringIO + +from testautomation.base_testcase import BaseTestCase +from cone.public import api, plugin, utils, exceptions +from cone.validation import schemavalidation + +ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) + +CONFML1_NAMESPACE = 'http://www.s60.com/xml/confml/1' +CONFML2_NAMESPACE = 'http://www.s60.com/xml/confml/2' + +class DummyResource(object): + def __init__(self, data): + self.data = data + def read(self): + return self.data + def close(self): + pass + +class DummyConfiguration(object): + def __init__(self, resources): + self.resources = resources + + def get_resource(self, ref): + if ref in self.resources: + return DummyResource(self.resources[ref]) + else: + raise exceptions.NotFound("No such resource '%s'!" % ref) + +class TestConfmlSchemaValidation(BaseTestCase, schemavalidation.SchemaValidationTestMixin): + + def test_valid_confml2_files(self): + self.assert_schemavalidation_succeeds( + type = 'confml', + dir = os.path.join(ROOT_PATH, 'testdata/schema/confml2/valid'), + namespace = CONFML2_NAMESPACE) + + def test_invalid_confml2_files(self): + self.assert_schemavalidation_fails( + type = 'confml', + dir = os.path.join(ROOT_PATH, 'testdata/schema/confml2/invalid'), + namespace = CONFML2_NAMESPACE) + + def test_valid_confml1_files(self): + self.assert_schemavalidation_succeeds( + type = 'confml', + dir = os.path.join(ROOT_PATH, 'testdata/schema/confml1/valid'), + namespace = CONFML1_NAMESPACE) + + def test_invalid_confml1_files(self): + self.assert_schemavalidation_fails( + type = 'confml', + dir = os.path.join(ROOT_PATH, 'testdata/schema/confml1/invalid'), + namespace = CONFML1_NAMESPACE) + + def test_validate_confml_invalid_xml_data(self): + config = DummyConfiguration({'foo.confml': 'foo'}) + problems = schemavalidation.validate_confml_file(config, 'foo.confml') + self.assertEquals(len(problems), 1) + prob = problems[0] + #self.assertEquals(prob.type, api.Problem.TYPE_XML_PROBLEM) + self.assertEquals(prob.severity, api.Problem.SEVERITY_ERROR) + self.assertEquals(prob.line, 1) + + def test_validate_confml_invalid_xml_data_but_valid_root(self): + REF = 'test.confml' + DATA = """ + + + """.encode('utf-8') + config = DummyConfiguration({REF: DATA}) + problems = schemavalidation.validate_confml_file(config, REF) + self.assertEquals(len(problems), 1) + prob = problems[0] + #self.assertEquals(prob.type, api.Problem.TYPE_XML_PROBLEM) + self.assertEquals(prob.severity, api.Problem.SEVERITY_ERROR) + self.assertEquals(prob.line, 3) + + def test_validate_confml_unsupported_namespace(self): + DATA = """ + + + """.encode('utf-8') + self.assertRaises(exceptions.ConfmlParseError, schemavalidation.validate_confml_data, DATA) + + + + +class TestImplmlSchemaValidation(BaseTestCase, schemavalidation.SchemaValidationTestMixin): + + DUMMY1_XSD_DATA = """ + + + + + + + + + + """ + + DUMMY2_XSD_DATA = """ + + + + + + + + + + """ + + def setUp(self): + class MockReader1(plugin.ReaderBase): + NAMESPACE = "http://www.dummy.com/dummy1" + NAMESPACE_ID = "dummy1ml" + FILE_EXTENSIONS = ['dummy1ml'] + ROOT_ELEMENT_NAME = 'dummy1' + @classmethod + def get_schema_data(cls): + return self.DUMMY1_XSD_DATA + class MockReader2(plugin.ReaderBase): + NAMESPACE = "http://www.dummy.com/dummy2" + NAMESPACE_ID = "dummy2ml" + FILE_EXTENSIONS = ['dummy2ml'] + ROOT_ELEMENT_NAME = 'dummy2' + @classmethod + def get_schema_data(cls): + return self.DUMMY2_XSD_DATA + class MockReader3(plugin.ReaderBase): + NAMESPACE = "http://www.dummy.com/dummy3" + NAMESPACE_ID = "dummy3ml" + FILE_EXTENSIONS = ['dummy3ml'] + ROOT_ELEMENT_NAME = 'dummy3' + plugin.ImplFactory.set_reader_classes_override([MockReader1, MockReader2, MockReader3]) + + def tearDown(self): + plugin.ImplFactory.set_reader_classes_override(None) + + def test_valid_implml_files(self): + self.assert_schemavalidation_succeeds( + type = 'implml', + dir = os.path.join(ROOT_PATH, 'testdata/schema/implml/valid')) + + def test_invalid_implml_files(self): + self.assert_schemavalidation_fails( + type = 'implml', + dir = os.path.join(ROOT_PATH, 'testdata/schema/implml/invalid')) + + def test_validate_implml_invalid_xml_data(self): + self.assertRaises(exceptions.XmlParseError, schemavalidation.validate_implml_data, "foo") + + def test_validate_implml_invalid_xml_data_but_valid_root(self): + DATA = """ + + + """.encode('utf-8') + self.assertRaises(exceptions.ImplmlParseError, schemavalidation.validate_implml_data, DATA) + + def test_validate_implml_unsupported_namespace(self): + DATA = """ + + + """.encode('utf-8') + self.assertRaises(exceptions.ImplmlParseError, schemavalidation.validate_implml_data, DATA) + +if __name__ == '__main__': + unittest.main()