/tst/org/diffkit/diff/conf/tst/TestMagicPlanBuilder.groovy

http://diffkit.googlecode.com/ · Groovy · 160 lines · 118 code · 20 blank · 22 comment · 22 complexity · 16b6966d68fe124c5cc4b7c5bc8dc4cc MD5 · raw file

  1. /**
  2. * Copyright 2010-2011 Joseph Panico
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.diffkit.diff.conf.tst
  17. import org.apache.commons.io.FilenameUtils;
  18. import org.diffkit.db.DKDBConnectionInfo
  19. import org.diffkit.db.tst.DBTestSetup;
  20. import org.diffkit.diff.conf.DKMagicPlan
  21. import org.diffkit.diff.conf.DKMagicPlanBuilder
  22. import org.diffkit.diff.diffor.DKEqualsDiffor
  23. import org.diffkit.diff.engine.DKSourceSink;
  24. import org.diffkit.diff.sns.DKDBSource
  25. import org.diffkit.diff.sns.DKFileSource
  26. import org.diffkit.util.DKResourceUtil;
  27. import org.diffkit.db.DKDBFlavor;
  28. /**
  29. * @author jpanico
  30. */
  31. public class TestMagicPlanBuilder extends GroovyTestCase {
  32. /**
  33. * test that including two mutually exclusive properties, properties that trigger
  34. * mutually exclusive rules, results in Exception
  35. */
  36. public void testMagicExclusion() {
  37. def lhsFileResourcePath = 'org/diffkit/diff/conf/tst/test.lhs.csv'
  38. def rhsFileResourcePath = 'org/diffkit/diff/conf/tst/test.rhs.csv'
  39. def lhsFile = DKResourceUtil.findResourceAsFile(lhsFileResourcePath)
  40. def rhsFile = DKResourceUtil.findResourceAsFile(rhsFileResourcePath)
  41. DKMagicPlan magicPlan = []
  42. magicPlan.lhsFilePath =lhsFile.absolutePath
  43. magicPlan.rhsFilePath = rhsFile.absolutePath
  44. magicPlan.lhsDBTableName = 'LHS_TABLE'
  45. magicPlan.rhsDBTableName = 'RHS_TABLE'
  46. DKMagicPlanBuilder builder = [magicPlan]
  47. shouldFail(RuntimeException) {
  48. def builtPlan = builder.build()
  49. assert builtPlan
  50. }
  51. }
  52. public void testFullyMagicFileBuild(){
  53. def lhsFileResourcePath = 'org/diffkit/diff/conf/tst/test.lhs.csv'
  54. def rhsFileResourcePath = 'org/diffkit/diff/conf/tst/test.rhs.csv'
  55. DKMagicPlan magicPlan = []
  56. def lhsFile = DKResourceUtil.findResourceAsFile(lhsFileResourcePath)
  57. def rhsFile = DKResourceUtil.findResourceAsFile(rhsFileResourcePath)
  58. magicPlan.lhsFilePath =lhsFile.absolutePath
  59. magicPlan.rhsFilePath = rhsFile.absolutePath
  60. magicPlan.delimiter = '\\,'
  61. DKMagicPlanBuilder builder = [magicPlan]
  62. def builtPlan = builder.build()
  63. assert builtPlan
  64. def lhsSource = builtPlan.lhsSource
  65. assert lhsSource
  66. assert lhsSource instanceof DKFileSource
  67. def lhsModel = lhsSource.model
  68. assert lhsModel
  69. assert lhsModel.columns
  70. assert lhsModel.columns.length ==3
  71. assert lhsModel.columns[0].name == 'column1'
  72. def lhsSourceFile = lhsSource.file
  73. assert lhsSourceFile
  74. assert lhsSourceFile.exists()
  75. def normalizedLhsSourceFilePath = FilenameUtils.normalize(lhsSourceFile.path)
  76. def normalizedLhsFileResourcePath = FilenameUtils.normalize(lhsFileResourcePath)
  77. assert normalizedLhsSourceFilePath.endsWith(normalizedLhsFileResourcePath)
  78. def tableComparison = builtPlan.tableComparison
  79. assert tableComparison
  80. assert tableComparison.rhsModel == builtPlan.rhsSource.model
  81. def comparisonMap = tableComparison.map
  82. assert comparisonMap
  83. assert comparisonMap.length == 3
  84. for ( i in 0..2 ) {
  85. comparisonMap[i]._lhsColumn.name == comparisonMap[i]._rhsColumn.name
  86. comparisonMap[i]._diffor instanceof DKEqualsDiffor
  87. }
  88. assert tableComparison.diffIndexes == [1,2]
  89. assert tableComparison.displayIndexes == [[0],[0]]
  90. }
  91. public void testFullyMagicDBBuild(){
  92. DBTestSetup.setupDB(new File('org/diffkit/diff/conf/tst/test.dbsetup.xml'), (File[])[new File('org/diffkit/diff/conf/tst/dbConnectionInfo.xml')], 'org/diffkit/diff/conf/tst/test.lhs.csv', 'org/diffkit/diff/conf/tst/test.rhs.csv')
  93. DKDBConnectionInfo dbConnectionInfo = ['test', DKDBFlavor.H2, 'mem:conf.test;DB_CLOSE_DELAY=-1', null, null, 'test', 'test']
  94. DKMagicPlan magicPlan = []
  95. magicPlan.lhsDBTableName = 'LHS_TABLE'
  96. magicPlan.rhsDBTableName = 'RHS_TABLE'
  97. magicPlan.dbConnectionInfo = dbConnectionInfo
  98. DKMagicPlanBuilder builder = [magicPlan]
  99. def builtPlan = builder.build()
  100. assert builtPlan
  101. def tableComparison = builtPlan.tableComparison
  102. assert tableComparison
  103. assert tableComparison.lhsModel == builtPlan.lhsSource.model
  104. assert tableComparison.rhsModel == builtPlan.rhsSource.model
  105. def comparisonMap = tableComparison.map
  106. assert comparisonMap
  107. assert comparisonMap.length == 3
  108. for ( i in 0..2 ) {
  109. comparisonMap[i]._lhsColumn.name == comparisonMap[i]._rhsColumn.name
  110. comparisonMap[i]._diffor instanceof DKEqualsDiffor
  111. }
  112. assert tableComparison.diffIndexes == [1]
  113. assert tableComparison.displayIndexes == [[0,2],[0,2]]
  114. def lhsSource = builtPlan.lhsSource
  115. assert lhsSource
  116. assert lhsSource instanceof DKDBSource
  117. def lhsDBTable = lhsSource.table
  118. assert lhsDBTable
  119. assert lhsDBTable.tableName == 'LHS_TABLE'
  120. assert lhsDBTable.columns
  121. assert lhsDBTable.columns.length == 3
  122. assert lhsDBTable.columns[0].name == 'COLUMN1'
  123. assert lhsDBTable.columns[0].DBTypeName == 'VARCHAR'
  124. def rhsSource = builtPlan.rhsSource
  125. assert rhsSource
  126. assert rhsSource instanceof DKDBSource
  127. def rhsDBTable = rhsSource.table
  128. assert rhsDBTable
  129. assert rhsDBTable.tableName == 'RHS_TABLE'
  130. def rhsModel = rhsSource.model
  131. assert rhsModel
  132. assert rhsModel.name == 'PUBLIC.RHS_TABLE'
  133. assert rhsModel.columns
  134. assert rhsModel.columns.length ==3
  135. assert rhsModel.columns[0].name == 'COLUMN1'
  136. def sink = builtPlan.sink
  137. assert sink
  138. assert sink.kind == DKSourceSink.Kind.STREAM
  139. }
  140. }