+++ /dev/null
-import unittest
-import sys
-import JsonDiffTool
-
-"""
-Unit tests for the Json Diff Tool library
-Updated: 2017-04-24
-"""
-
-__author__ = "Diego Granados"
-__copyright__ = "Copyright(c) 2017, Ericsson."
-__license__ = "New-style BSD"
-__email__ = "diego.jesus.granados.lopez@ericsson.com"
-
-
-class PathConversionTest(unittest.TestCase):
- """
- Conversions from jsonpath paths to jsonpatch patches used to remove the element pointed by the path
- """
-
- def testArrayElementConversion(self):
- self.assertEquals(
- '[{"op":"remove","path":"/ietf-yang-library:modules-state/module/56"}]',
- JsonDiffTool.from_path_to_jsonpatch(
- "/ietf-yang-library:modules-state/module/56"
- ),
- "Array element conversion failed!",
- )
-
- def testMapValueElementConversion(self):
- self.assertEquals(
- '[{"op":"remove","path":"/ietf-yang-library:modules-state/module/blablah"}]',
- JsonDiffTool.from_path_to_jsonpatch(
- "/ietf-yang-library:modules-state/module/blablah"
- ),
- "Array element conversion failed!",
- )
-
-
-class JsonDiffToolTest(unittest.TestCase):
- """
- Tests for the tool itself, including both command-line and RIDE keyword invokation style
- """
-
- def testSimpleDifferenceCountingWithoutFiltering(self):
- """
- Identical documents
- """
- self.assertEquals(
- 0,
- JsonDiffTool.Json_Diff_Check_Keyword(
- "testinput/arrayTwoNames.json",
- "testinput/arrayTwoNamesCopy.json",
- "",
- "",
- ),
- "failed! (expected 0 differences)",
- )
-
- def testEqualFilesWithScrambledArrayOrder(self):
- """
- This is moving an array element from one position to other. RFC 6902 describes this as "moving
- a value", but this jsonpatch implementation constructs a patch using remove + add. Acceptable though
- """
- self.assertEquals(
- 2,
- JsonDiffTool.Json_Diff_Check_Keyword(
- "testinput/arrayTwoNames.json",
- "testinput/arrayTwoNamesReversed.json",
- "",
- "",
- ),
- "failed! (expected 2 differences)",
- )
-
- def testEqualFilesWithChangedAttributeOrder(self):
- """
- Attributes in different order. It's not a difference
- """
- self.assertEquals(
- 0,
- JsonDiffTool.Json_Diff_Check_Keyword(
- "testinput/setTwoNames.json",
- "testinput/setTwoNamesReversed.json",
- "",
- "",
- ),
- "failed! (expected 0 differences)",
- )
-
- def testSimpleDifferenceSecondFileWithExtraAttrib(self):
- self.assertEquals(
- 1,
- JsonDiffTool.Json_Diff_Check_Keyword(
- "testinput/setTwoNames.json",
- "testinput/setTwoNamesExtraAttrib.json",
- "",
- "",
- ),
- "failed! (expected 1 differences)",
- )
-
- def testSimpleDifferenceCountingWithoutFiltering(self):
- """
- Example coming from a true daexim export. No prefilters used
- """
- input_argv = [
- "-i",
- "testinput/mainTestCase/odl_backup_operational_before.json",
- "-f",
- "testinput/mainTestCase/odl_backup_operational_after.json",
- ]
- sys.argv[1:] = input_argv
- self.assertEquals(
- 16,
- JsonDiffTool.Json_Diff_Check(),
- "main failed! expected 16 differences, result was: "
- + str(JsonDiffTool.Json_Diff_Check()),
- )
-
- def testSimpleDifferenceCountingUsingSingleMatchingBeforeFilter(self):
- """
- Using a prefilter for the initial file The prefilter contains one expression only
- """
- input_argv = [
- "-i",
- "testinput/mainTestCase/odl_backup_operational_before.json",
- "-f",
- "testinput/mainTestCase/odl_backup_operational_after.json",
- "-ipf",
- "testinput/mainTestCase/json_prefilter.conf",
- "-v",
- ]
- sys.argv[1:] = input_argv
- self.assertEquals(
- 15,
- JsonDiffTool.Json_Diff_Check(),
- "main failed! expected 15 differences, result was: "
- + str(JsonDiffTool.Json_Diff_Check()),
- )
-
- def testSimpleDifferenceCountingUsingMatchingBeforeFilterMatchingTwoEntries(self):
- """
- Using a prefilter for the initial file The prefilter contains two expressions
- """
- input_argv = [
- "-i",
- "testinput/mainTestCase/odl_backup_operational_before.json",
- "-f",
- "testinput/mainTestCase/odl_backup_operational_after.json",
- "-ipf",
- "testinput/mainTestCase/json_prefilter_two_matches.conf",
- "-v",
- ]
- sys.argv[1:] = input_argv
- self.assertEquals(
- 14,
- JsonDiffTool.Json_Diff_Check(),
- "main failed! expected 14 differences, result was: "
- + str(JsonDiffTool.Json_Diff_Check()),
- )
-
- def testSimpleDifferenceCountingUsingSingleMatchingBeforeFilter(self):
- """
- Using a prefilter for both initial and final files
- """
- input_argv = [
- "-i",
- "testinput/mainTestCase/odl_backup_operational_before.json",
- "-f",
- "testinput/mainTestCase/odl_backup_operational_after.json",
- "-ipf",
- "testinput/mainTestCase/json_prefilter.conf",
- "-fpf",
- "testinput/mainTestCase/json_postfilter.conf",
- "-v",
- ]
- sys.argv[1:] = input_argv
- self.assertEquals(
- 16,
- JsonDiffTool.Json_Diff_Check(),
- "main failed! expected 16 differences, result was: "
- + str(JsonDiffTool.Json_Diff_Check()),
- )
-
- def testUsingANonExistingFile(self):
- """
- The second file does not exist. Exception expected
- """
- self.assertRaises(
- IOError,
- JsonDiffTool.Json_Diff_Check_Keyword,
- "testinput/arrayTwoNames.json",
- "testinput/thisFileDoesNotExist.json",
- "",
- "",
- )
-
- def testNotPassingAMandatoryParameter(self):
- """
- Both initial and final json files are mandatory
- """
- input_argv = ["-f", "testinput/mainTestCase/odl_backup_operational_after.json"]
- # parser = JsonDiffTool.parseArgs(input_argv)
-
- with self.assertRaises(SystemExit) as cm:
- JsonDiffTool.parse_args(input_argv)
-
- # 2 for missing argument
- self.assertEqual(cm.exception.code, 2)
-
- def testUsingNotMatchingFilterExpressions(self):
- """
- Using prefilter files whose expressions match nothing
- """
- input_argv = [
- "-i",
- "testinput/mainTestCase/odl_backup_operational_before.json",
- "-f",
- "testinput/mainTestCase/odl_backup_operational_after.json",
- "-ipf",
- "testinput/mainTestCase/json_prefilter_zero_matches.conf",
- "-fpf",
- "testinput/mainTestCase/json_prefilter_zero_matches.conf",
- "-v",
- ]
- sys.argv[1:] = input_argv
- self.assertEquals(
- 16,
- JsonDiffTool.Json_Diff_Check(),
- "main failed! expected 16 differences, result was: "
- + str(JsonDiffTool.Json_Diff_Check()),
- )
-
-
-if __name__ == "__main__":
- unittest.main()