Skip to content

This page explains how to work with the BluAge Compare Tool, which provides utilities to compare your output data against referenced one from multiple sources such as EBCDIC files, flat files or databases.

Introduction

BluAge Compare generates HTML reports with localStorage based Javascript functions. This HTML 5 feature is supported by browsers listed below:

  • Firefox: 3.5 +
  • Chrome: 4+
  • Internet Explorer: 8+
  • Safari: 4+
  • Opera: 10.5+

Each batch you created needs to be tested on one or more test cases. A test case of a batch consists in :

  • running the batch on legacy environment;
  • capturing data before/after the legacy run;
  • transforming legacy data to modernized data;
  • running the batch on modernized environment on referenced data;
  • comparing output modernized data with the expected data.

Compare_TestCase

Comparing output modernized data with expected data can be achieved from multiple sources :

  • EBCDIC files : output EBCDIC files from modernized batch with EBCDIC output files from legacy batch;
  • Flat files : output flat files from modernized batch with output flat files from legacy batch;
  • Databases : output database from modernized batch with output database from legacy batch.

To automate the testing process, the BluAge Compare Tool has been developed and integrated to the BluAge software.

The architecture of a BluAge Forward project compatible with the BluAge Compare Tool is defined as follow :

  • If your batch creates output files :
    • Output and expected files;
    • A repository of copybooks;
    • A file with mapping of files / copybooks :
      • A run job file;
      • A substitution property file.
  • If your batch modifies the database :
    • Output and expected databases;
    • A repository of SQL views.
Compare_ProjectStructure

All configuration information is stored in properties files used by the Bluage Compare Tool. A property file contains information for at least one comparison type. Comparisons to compute are listed in the comparison.list property. Choices are :

  • Database;
  • Ebcdic;
  • FlatFile.

Here are typical property files configuring each one of these choices :

Compare_PropertyFileEbcdic Compare_PropertyFileFlatFile Compare_PropertyFileDatabase
Property file for EBCDIC files comparison Property file for flat files comparison Property file for databases comparison

Depending on information provided in the property file, the following steps are required to launch a BluAge Compare Tool comparison :

  1. Right-click on the property file;
  2. Select the Compare All entry of the Bluage compare menu.

Compare_MenuCompareAll

How Does It Work ?

Comparison Process

The comparison process for all source types is illustrating by the following diagram :

Compare_Overview

Comparison Result Directory

Result directory is a folder structure where files and databases comparison artifacts and reports are generated. Subdirectories match the configuration provided by the comparison.list property (db, files,...).

In each comparison result folder you can find :

  • A diff folder containing the diff text report (CSV comparison text result by diffutils);
  • expected and outputs folders containing expected and outputs CSV files :
    • extracted using SQL scripts for databases;
    • extracted using Java transformation for files.
  • An html folder for HTML reports files, starting with the index.html page.
Compare_ResultDirectory

Comparison States

The matching between files is based on filenames. Depending on the comparison result, multiple comparison states may occur. The most common ones are referenced below, and comparison-type related ones will be covered in specific sections.

  • Equals : left and right files with the same name exist and are equal;
  • Differ : left and right files with the same name exists but differ;
  • No output file : expected file exists but no output file with the same name has been found;
  • No expected file : output file exists but no expected file with the same name has been found.

The following example provides an example of each one of these common comparison states :

Compare_ComparisonStates

Comparison Repository

BluAge Compare repository is a folder structure where you can put the copybooks and views to be used in a comparison. The BluAge Compare repository must contain at least :

  • A db folder containing :
    • A views subfolder containing all SQL views;
    • A js subfolder containing all javascript files generated from views.
  • A files folder containing :
    • A copybooks subfolder containing all copybooks :
      • An optional common subfolder containing copybooks used by one or more batches;
      • A subfolder for each batch, with matching name, containing copybooks only used by the corresponding batch.
    • A js subfolder containing all javascript files generated from copybooks.
Compare_CompareRepository

Report Legend

Three types are differences may occur when compared files are different : lines can be added, deleted or modified on one side. A different color is used for each one of these differences, as illustrated below :

Compare_Legend

Legend colors are background color in table rows (to display differences) and in titles (to display summary).

Compare_LegendSquares

Differences summary is provided in the following uses cases :

  • Differences between two files in HTML index report;
  • If CSV files are split, differences between two split files in HTML index report;
  • If HTML report is split, differences for each part in HTML part index report;
  • Differences in HTML detail report;
  • If CSV files are polymorphic, differences for each record type.

A modified line can have cells with :

  • Important differences : background color is gray and text color red;
  • Unimportant differences (trimmed value is equal) : background color is gray and text color orange;
  • No differences : background color is blue and text color black;

These different difference types are illustrated below :

Compare_LegendModifiedLine

General configuration

Common properties

In property file, you can use properties below (automatically computed).

Property Description
project.name Specifies the project name (name of the Eclipse project).
project.workspace Specifies the absolute path to the Eclipse workspace.

All properties files must have at least the properties below :

Property Description
result.dir Specifies the absolute path to the comparison result folder.
compare.repo.dir Specifies the absolute path to the compare repository folder.
comparison.list Specifies a comma-separated list of comparisons to compute :
  • Database;
  • Ebcdic;
  • FlatFile.

Common comparison features

Split CSV file

This feature consists in splitting a CSV file in many parts (cut by number of lines) if the file size is more than the maximum file size. The file is split from a number of lines (each part will contain the same number of lines except the last part). The part file name is: [file name].split[part number].csv.

[part number] starts with 0 and is on 5 digits (00000).

Be careful when you use this feature because comparison process will apply for each part of file and not on the whole file.

The following properties must be added to your properties file :

Property Description Default value
compare.split.size Specifies the maximum file size in MB before splitting a CSV file. 100
compare.split.lines Specifies the number of lines in each part when a CSV file is split. 100000

If you split a file but you didn't have the same number of parts between left and right file, you will have one of the comparison states below :

  • No split left file The right file has been split in more parts than left file;
  • No split right file The left file has been split in more parts than right file.

Here is an example of CSV file splitting :

CSV file Compare tool options Result
D22TREX1.G0009V00 :
  • More than 500 MB;
  • 104 240 lines.
Compare_SplitCSV1
compare.split.size=100
compare.split.lines=10000
File size = 500 MB > 100 MB = Maximum file size, so the file is split in parts of 10 000 lines. 98 parts are produced where :
  • Part 0 to 96 contain 10 000 lines each;
  • Part 97 contains 7 240 lines.
Total lines: 97 x (10 000) + 7 240 = 104 240 lines.
Compare_SplitCSV2 ... Compare_SplitCSV3

Comparison index examples :

Compare_SplitCSV4

Index when split

Compare_SplitCSV5

Index when split and not same number of parts

Compare flat files

Requirements

Output and expected files must have the same name. Spaces are not allowed in file names.

Special characters

The rules below is automatically applied on each field value of each line of a file during CSV formating :

  • Each character ; (CSV separator character) is replaced if needed by a space character.

Required properties

To compare files, you must set the properties below.

Property Description
expected.dir Specifies the absolute path to the folder which contains expected files. Sub-folders are forbidden.
output.dir Specifies the absolute path to folder which contains output files. Sub-folders are forbidden.

You must also set one of the two properties below.

Property Description
substitution.props.file Specifies the absolute path to your substitution property file if your project uses a substitution property file to run.
runjob.file Specifies the absolute path to your runjob file if your project uses a runjob file to run.

Comparison states

For files, there is one more comparison state :

  • Format CSV error an error has occurred during CSV formatting.

Compare_ComparisonFileState

Quick example

In this example, we have :

  • A Blu Age batch project named Batch-project
    • A file produced by the batch File-1.csv
    • The corresponding expected file of File-1.csv
    • A runjob and substitution property file with refer to File-1.csv
    • A property file Test.properies with comparison information
  • A Compare repository
    • Javascript files for all flatfiles

The architecture of the Batch-project project is defined below :

Compare_FlatFileCompareProject

The configuration of the runjob (left) or the substitution properties file (right) are demonstrated below :

Compare_FlatFileCompareRunjob Compare_FlatFileCompareProperty

The property file configuration is defined below :

Compare_FlatFileComparePropertyFile

Compare EBCDIC files

Global configuration

Requirements

BluAge Compare uses attribute cobolRecordName of RecordFormat node of copybook files (.fileformat files). cobolRecordName must be unique across all copybooks of the project.

Output and expected files must have the same name. Spaces are not allowed in file names.

Special characters

The rules below is automatically applied on each field value of each line of a file during transformation from EBCDIC to CSV.

  • Each character x01 to x1F + x7F is replaced by a space character
  • Each character ; (CSV separator character) is replaced by a space character
  • Each line break is replaced by a space character
  • Each tabultation is replaced by a space character

Required properties

To compare EBCDIC files, you must set the properties defined below.

Property Description
copybook.dir Specifies the absolute path to the folder which contains copybooks. One subfolder is allowed : common.
  • A copybook right under this folder is a specific copybook for the project;
  • A copybook under folder common is a common copybook used by many projects.
expected.dir Specifies the absolute path to the folder which contains expected files. Sub-folders are forbidden.
output.dir Specifies the absolute path to the folder which contains output files. Sub-folders are forbidden.

You also must set one of the two properties below.

Property Description
substitution.props.file Specifies the absolute path to your substitution property file if your project uses a substitution property file to run.
runjob.file Specifies the absolute path to your runjob file if your project uses a runjob file to run.

Comparison states

For EBCDIC files, there are 3 more comparison states:

  • No copybook there is no copybook referenced for the file (expected or output);
  • Transformation to CSV error an error has occurred during transformation from EBCDIC to CSV;
  • Empty file there is an output and expected file linked to a copybook named emptyFile.fileformat.

Compare_EbcdicComparisonStates

Quick example

In this example, we have :

  • A Blu Age batch project named Batch-project
    • A common copybook: Copybook-1.fileformat
    • A specific copybook: Copybook-2.fileformat
    • A file produced by the batch File-1
    • The corresponding expected file of File-1
    • A runjob and substitution property file with mapping betwwen File-1 and Copybook-1.fileformat
    • A property file Test.properies with comparison information
  • A Compare repository
    • Common and specific copybooks
    • Javascript files for all copybooks

The architecture of the Batch-project project and of the Compare repository are defined below :

Compare_EbcdicCompareProject Compare_EbcdicCompareRepo

The configuration of the runjob (left) or the substitution properties file (right) are demonstrated below :

Compare_EbcdicCompareRunjob Compare_EbcdicCompareProperty

The property file configuration is defined below :

Compare_EbcdicComparePropertyFile

Comparison features

Handle character LOW-VALUE

The special character x00 is equal to LOW-VALUE (also equal to NUL). This feature allows you to specify how to handle LOW-VALUE characters in comparison:

  • Either consider them as spaces
    • In this case, difference between LOW-VALUE and SPACE characters are skipped
  • Or replace group of LOW-VALUE characters by a static string (LOW-VALUES)
    • Default mode.

To use this feature, you must set the property below in your property file.

Property Description
files.write.lowvalues Indicates how to handle LOW-VALUE characters.
Default mode is true.

Compare_LowValues1

files.write.lowvalues = true

Compare_LowValues2

files.write.lowvalues = false

Handle Variable block file

A variable block file is an EBCDIC file containing lines with a variable length. Length is the first field of each line and the last have a variable length. Into copybook, this string type field is mark with a length equals to "VB". BA compare tools handle that.

Compare_VariableBlock

In addition, if a variable block field have a value format like a csv line, you can compare each csv field instead of the whole csv line. To activate this feature add "generate.csv.sub.column.separator" property values with csv separator character into compare tools configuration file.

Compare_VariableBlockCSVActivate

Handle trimmed records into an EBCDIC File

In some case EBCDIC file records can be separate with a line separator and the last field trimmed. To handle that compare feature must know which separator is used.

Property Description
record.separator Specifies the string record separator value.
record.separator.newline Whether or not the string record separator is a new line (value of "line.separator" java property).

If record.separator.newline is set, record.separator value is not taken in account.

Compare_TrimmedEBCDIC

Delete temporary folder

During comparison, compare tool creates work folders where CSV are generated, diff text report are made, etc... This feature allows you to automatically delete these temporary folders after comparison.

To use this feature, you must set the property below in your property file :

Property Description
files.delete.temp.dir Indicates if temporary folders will be deleted at the end of comparison.
Default value is false.

Below is an example when files.delete.temp.dir is false (left) and true (right) :

Compare_DeleteTempDir1 Compare_DeleteTempDir2

Reject fields

Sometimes, you want to compare just a set of columns between two files because other columns are not relevant (like audit time, audit date, ...). From a list of FieldFormat names to reject, this feature automatically add ToReject=\"true\" attribute for each FieldFormat in all copybooks. During conversion in CSV, if a FieldFormat has attribute ToReject=\"true\", compare tool writes (REJECT) instead of the real value in the CSV file.

To use this feature, you must set the property below in your property file.

Property Description
files.fields.reject Indicates a comma-separated list of FieldFormat names to reject in the comparison process.

NOTE : if you want to reject a FieldFormat for only one RecordFormat in one specific copybook, you must manually add attribute ToReject="true" in this FieldFormat and not add the name of this FieldFormat in files.fields.reject property.

Compare_FilesRejectFields1

files.fields.reject =

Compare_FilesRejectFields2

files.fields.reject = RC_COL_11

Compare_FilesRejectFields3

files.fields.reject = RC_COL_11,RC_COL_13

Remove fields

Sometimes, you want to compare just a set of columns between two files because other columns are not relevant (like audit time, audit date, ...). From a list of FieldFormat names to reject, this feature automatically add ToRemove="true" attribute for each FieldFormat in all copybooks. During conversion in CSV, if a FieldFormat has attribute ToRemove="true", compare tool will not write the value of the field format in the CSV file. You must generate the Javascript files for each files from which there is at least one field format of one copybooks listed as to remove.

To use this feature, you must set the property below in your property file.

Property Description
files.fields.remove Indicates a comma-separated list of FieldFormat names to remove in the comparison process.

NOTE : if you want to remove a FieldFormat for only one RecordFormat in one specific copybook, you must manually add attribute ToRemove="true" in this FieldFormat and not add the name of this FieldFormat in files.fields.remove property.

Compare_FilesRemoveFields1

files.fields.remove =

Compare_FilesRemoveFields2

files.fields.remove = RC_COL_2
generate.js.files=true
generate.js.files.filter=*/.fileformat

Compare_FilesRemoveFields3

files.fields.remove = RC_COL_2,RC_COL_3
generate.js.files=true generate.js.files.filter=*/.fileformat

Trim fields

This feature allows you to trim all data fields before comparing them. To use this feature, you must set the property below in your property file.

Property Description
files.fields.trim Indicates if data must be trimmed before the comparison process.
Default value is false.

Compare_FilesTrimFields1

files.fields.trim = false

Compare_FilesTrimFields2

files.fields.trim = true

Split CSV by record type

Sometimes, you want to split polymorphic files by record type to analyse comparison result by type per file "business view" and not by file "technical view". Each file coming from copybooks in this list will be split.

For each copybook is this list, compare tool automatically add ToSplit="true" attribute for FileFormat node. During conversion in CSV, if a FileFormat of a copybook has attribute ToSplit="true", compare tool writes one CSV file per record format.

To use this feature, you must set the property below in your property file.

Property Description
files.split.copybooks Comma-separated list of copybooks from which files will be split.

Example :

  • File_1 is conform to Copybook-1.fileformat;
  • Copybook-1.fileformat has two record format RECORD_TYPE_1 and RECORD_TYPE_2;
  • File_1 is a polymorphic file and contains record of each record type.

Compare_SplitCSVRecordType1

files.split.copybooks =

Compare_SplitCSVRecordType2

files.split.copybooks=Copybook-1.fileformat

Sort CSV

Sometimes, you want to sort a file before comparison process.

From a copybook name list, each file conforms to one of this copybook will be sorted using sort options. Before sort a file, the file is automatically split.

You must specify a sort option for each record format of this copybook you want to sort. Sort options can be :

  • A simple sort mode: sort file from left to right;
  • A specific sort mode: order columns and then sort file from left to right;
  • No sort.

You may also want to keep original and sorted files iin comparison to see if sort option has benefit or not.

To use this feature, you must set the property below in your property file.

Property Description
files.sort.copybooks Comma-separated list of copybooks from which files will be sorted.
files.sort.opt.[copybook].[record format] Indicates the sort mode for a record format of a copybook.
  • simple: simple sort mode
  • [1 to N]: : specific sort mode: list of column indexes, like 10,2,4
Default is no sort mode.
files.sort.keep.files Whether or not to keep both the original and the sorted file in comparison.
Default value is false.

Compare_FilesSortSimple1

files.sort.copybooks = Copybook-1.fileformat

Compare_FilesSortSimple2

Added / Deleted lines because no sort

Compare_FilesSortSimple3

files.sort.copybooks=Copybook-1.fileformat
files.sort.opt.Copybook-1.fileformat.RECORD_TYPE_1=simple
files.sort.opt.Copybook-1.fileformat.RECORD_TYPE_2=simple

Compare_FilesSortSimple4

files.sort.copybooks=Copybook-1.fileformat
files.sort.opt.Copybook-1.fileformat.RECORD_TYPE_1=simple
files.sort.opt.Copybook-1.fileformat.RECORD_TYPE_2=simple
files.sort.keep.files=true

Specific sort mode consists in reorder columns and then sort the file :

Compare_FilesSortSpecific1

Original file

Compare_FilesSortSpecific2

Specific sort: reorder 10,2,4

Generate Javascript files

Comparison result are displayed in HTML table : headers came from Javascript files generated from copybooks. This feature allows you to generate Javascript files before launch comparison.

For each copybook, you need to generate the corresponding Javascript file :

  • The first time you launch compare tool (if the Javascript file is not already generated in compare repository);
  • Each time you modify the copybook.

To use this feature, you must set the properties below in your property file.

Property Description
generate.js.files Whether or not to generate Javascript files for copybooks before compare.
Default value is false.
generate.js.files.skip.common Whether or not to skip the generation of Javascript files for common copybooks before compare.
Default value is true.
generate.js.files.filter Specifies the ile filter to select from which copybooks to generate Javascript files.
Default value is **/*.fileformat.

Compare_FileGenerateJs1

Copybooks in project

Compare_FileGenerateJs2

Javascript files in compare repository

Compare_FileGenerateJs3

Javascript files in compare result folder

Compare_FileGenerateJs4

include.js generated file

Compare databases

Global configuration

Supported databases by the BluAge Compare Tool are :

  • DB2
  • Oracle 10g/11g
  • Postgresql 8/9
  • SQL Server 2008

Requirements

Each object is linked to a SQL file in located in [Compare repository]/db/views. Each SQL file is named VW_[object name] and contains 2 SQL statements :

  1. CREATE VIEW
    1. The first column is the business key of the object
    2. Don't include IDENTIFIER and VERSION columns
    3. Don't include foreign keys columns
    4. Join with parent tables to get the business key
  2. SELECT FROM VIEW
    1. The first column is the view name
    2. The second to the last columns are all other columns
    3. The statement is sorted by business key and then all other columns

A best practice is to create one view per table.

Example : In database, we want to compare a table named TABLE_1 with 7 columns and business is composed by columns 3,4,2.

Compare_DbViewCreate

CREATE VIEW statement

Compare_DbViewSelect

SELECT FROM VIEW statement

Required properties

To compare databases, you must set properties below :

Property Description
db.type Specifies the database type between DB2, Postgresql 8, Postgresql 9, SQL Server and Oracle.
Default value is DB2.
db.source.host Specifies the database source host.
db.source.port Specifies the database source port.
Default value is 50000.
db.source.name Specifies the database source name.
db.source.schema Specifies the database source schema.
db.source.user Specifies the database source user.
db.source.pwd Specifies the database source password.
Property Description
db.target.host Specifies the database target host.
db.target.port Specifies the database target port.
Default value is 50000.
db.target.name Specifies the database target name.
db.target.schema Specifies the database target schema.
db.target.user Specifies the database target user.
db.target.pwd Specifies the database target password.
Property Description
db.tables Comma-separated list of objects names to compare. If the property contains .txt, it's a reference to a text file with one object name by line.
By default, all object names are taken into account.

Special characters

The rules below are automatically applied on each column value of each line of a file during transformation from EBCDIC to CSV.

  • Each group of one or more x00 characters is replaced by (LOW-VALUES);
  • Each x01 to x1F + x7F characters is replaced by a space character;
  • Each line break character is replaced by a space character.

If a column has potentially the character ; (CSV separator character), it must be replaced by a space character in the CREATE VIEW statement using DB2 REPLACE function :
REPLACE(COL_1,';',' ') AS COL_1

Comparison features

Delete temporary folder

During comparison, compare tool creates work folders where CSV are generated, diff text report are made, etc... This feature allows you to automatically delete these temporary folders after comparison.

To use this feature, you must set the property below in your property file.

Property Description
db.delete.temp.dir Whether or not to delete temporary folders at the end of comparison.
Default value is false.

Here is an example with db.delete.temp.dir false (left) and true (right) :

Compare_DbDeleteTempDir1 Compare_DbDeleteTempDir2

Reject fields

Sometimes, you want to compare just a set of columns between two objects because other columns are not relevant (like audit time, audit date, ...). To reject columns for database, you must modify SELECT VIEW statement by replacing the rejected column by constant string (REJECT).

NOTE : Do not remove the column from the SELECT VIEW : table headers are computed from columns view, you will miss one or more values if you remove column(s).

Compare_DbRejectFields1

SELECT VIEW with (REJECT)

Compare_DbRejectFields2

No fields rejected

Compare_DbRejectFields3

Reject COL_7

Trim fields

Sometimes, you want to trim column value before comparing them.

To trim columns for database, you have to modify SELECT VIEW statement by calling DB2 trim function LTRIM (left trim) and RTRIM (right trim) on column.

Compare_DbTrimFields1

SELECT FROM VIEW with TRIM

Compare_DbTrimFields2

Without TRIM

Compare_DbTrimFields3

With TRIM

Generate Javascript files

Comparison result are displayed in HTML table : headers came from Javascript files generated from views using system tables. If generate.js.db is set to true, compare tool will generate Javascript files before compare databases.

For each view, you need to generate the corresponding Javascript file :

  • The first time you launch compare tool (if the Javascript file is not already generated in compare repository);
  • Each time you modify the view (sql file).

To use this feature, you must set the property below in your property file :

Property Description
generate.js.db Whether or not to generate Javascript files for databases before compare.
Default value is false.
generate.js.db.tables Comma-separated list of objects names from which to generate Javascript files.
By default, all object names are taken into account.

A reference database is used to generate Javascript files.

Property Description
db.ref.host Specifies the database reference host.
db.ref.port Specifies the database reference port.
Default value is 50000.
db.ref.name Specifies the database reference name.
db.ref.schema Specifies the database reference schema.
db.ref.user Specifies the database reference user.
db.ref.pwd Specifies the database reference password.

Compare_DbGenerateJs1

Javascript files in compare repository

Compare_DbGenerateJs2

Javascript files in compare result folder

Compare_DbGenerateJs3

include.js generated file

Generate SQL view scripts

BluAge Compare include a wizard to generate SQL view script required by database comparison.

Requirement :

  • A property file with correct database connection informations

Follow these steps to generate SQL view scripts :

  1. Right click on property file;

    Compare_DbGenerateSql1

  2. Click on the menu to open SQL view script generator;

    Compare_DbGenerateSql2

  3. Select tables and columns;

    Compare_DbGenerateSql3

  4. Result.

Compare_DbGenerateSql4

Note : SQL scripts are created into [Compare repository]/db/views folder.

Report features

Side-by-side comparison

This feature allows you to generate a new HTML report called "side-by-side" report to browse differences by showing left file and right file side-by-side (like WinMerge tool).

To use this feature, you must set the property below in your property file.

Property Description
report.side.by.side Whether or not to generate a side-by-side report.
Default value is false.

Compare_SideBySide1

report.side.by.side = false

Compare_SideBySide2

report.side.by.side = true

Compare_SideBySide3

Side-by-side report

Keep comparison history

This feature allows you to copy previous comparison result folders (files and db) and timestamp them before launching a new comparison process.

To use this feature, you must set the property below in your property file.

Property Description
report.keep.history Whether or not to keep previous comparison result folders.
Default value is false.

Compare_KeepHistory

report.keep.history = true

Max differences

This feature allows you to split HTML detail report in many parts to be easily openable and browsable in a browser.

To use this feature, you must set the property below in your property file.

Property Description
report.max.differences Specifies the number of differences in each HTML report part.
Default value is 1000.

Compare_MaxDiff1

report.max.differences = 5

Compare_MaxDiff2

report.max.differences = 2

Annexes

Console view for compare tool extends standard Eclipse text console.

Features have been added to console:

  • Close current compare tool console
  • Close all compare tool consoles

Compare_ConsoleView1

Console view

Compare_ConsoleView2

Close current console

Compare_ConsoleView3

Close all consoles

Compare_ConsoleView4

Select older console