buildframework/helium/tools/testing/ats/ats.ant.xml
changeset 1 be27ed110b50
child 179 d8ac696cc51f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/testing/ats/ats.ant.xml	Wed Oct 28 14:39:48 2009 +0000
@@ -0,0 +1,550 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : ats.ant.xml 
+Part of     : Helium 
+
+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 the License "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:
+
+============================================================================
+-->
+<project name="_testing.ats" xmlns:hlm="http://www.nokia.com/helium">
+    <var name="drop.file.counter" value="0" />
+    <description>
+        ATS testing targets.
+    </description>
+    <!-- -->
+    <fileset id="reference.ats.flash.images" dir="${release.images.dir}">
+        <include name="**/${build.id}*.core.fpsx" />
+        <include name="**/${build.id}*.rofs2.fpsx" />
+        <include name="**/${build.id}*.rofs3.fpsx" />
+        <include name="**/*rnd.C00" />
+        <include name="**/*rnd.V01" />
+        <include name="**/*.fpsx" />
+        <include name="**/*_rnd.fpsx" />
+    </fileset>
+    <property environment="env" />
+    <property name="ats.flashfiles.minlimit" value="2" />
+
+    <fileset id="reference.ats.sis.images" dir="${ats.sis.images.dir}">
+        <include name="**/*.sis" />
+    </fileset>
+    <property name="ats.sisfiles.minlimit" value="1" />
+
+    <!-- 
+    The target creates ATSDrop.zip file which also includes test.xml file; and sends the drop to ATS. 
+    The layer definition, in system definition file, for tsrc directory should look like:
+    <pre>
+    <layer name="name_test_layer">
+    
+        <module name="module_name">
+        
+            <unit id="unit_id" name="unti_name" bldFile="path_of_tsrc_folder_to_be_built" filter=""/>
+            
+        </module>
+        
+    </layer>
+    </pre>
+    -->
+
+    <target name="ats-test" if="enabled.ats">
+        <hlm:filterRecordStartMacro/>
+        <runtarget target="copy-mon-sym" />
+        <runtarget target="ats-create-drop" />
+        <hlm:filterRecordStopMacro pattern="${ats.password}" log="${build.log.dir}/${build.id}_ats.log" append="false"/>
+        <hlm:metadatarecord database="${metadata.dbfile}">
+            <hlm:textmetadatainput>
+                <fileset casesensitive="false" file="${build.log.dir}/${build.id}_ats.log" />
+                <metadatafilterset refid="filterset.ats" />
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:generateBuildStatus file="${build.id}_ats.log" />
+    </target>
+
+    <!-- The target creates the ATS3drop.zip file including test.xml for ATS ASTE tests. This target is executable.-->
+
+    <target name="ats-aste" if="enabled.aste">
+        <hlm:filterRecordStartMacro/>
+        <runtarget target="do-ats-aste" />
+        <hlm:filterRecordStopMacro pattern="${ats.password}" log="${build.log.dir}/${build.id}_ats.log" append="false"/>
+        <hlm:metadatarecord database="${metadata.dbfile}">
+            <hlm:textmetadatainput>
+                <fileset casesensitive="false" file="${build.log.dir}/${build.id}_ats.log" />
+                <metadatafilterset refid="filterset.aste" />
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:generateBuildStatus file="${build.id}_ats.log" />
+    </target>
+
+    <!-- The target creates the MATTI_drop.zip file including test.xml for MATTI tests. This target is executable.-->
+    <target name="matti-test" if="enabled.matti">
+        <hlm:filterRecordStartMacro/>
+        <runtarget target="do-ats-matti" />
+        <hlm:filterRecordStopMacro pattern="${ats.password}" log="${build.log.dir}/${build.id}_matti.log" append="false"/>
+        <hlm:metadatarecord database="${metadata.dbfile}">
+            <hlm:textmetadatainput>
+                <fileset casesensitive="false" file="${build.log.dir}/${build.id}_matti.log" />
+                <metadatafilterset refid="filterset.matti" />
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:generateBuildStatus file="${build.id}_matti.log" />
+    </target>
+
+
+    <!-- Sends drop file to ATS/ASTE. Please see `ats-test` for description. -->
+    <target name="do-ats-test" depends="ats-username, ats-password" unless="skip.ats.sending">
+        <!-- Make the drop file visible to ATS3. -->
+        <mkdir dir="${ats.drop.location}" />
+        <copy file="${ats.drop.file}" tofile="${ats.drop.location.file}" />
+        <!-- Notify ATS3 about the drop. -->
+        <exec executable="cscript" dir="${build.drive}/" failonerror="false">
+            <env key="ats3.username" value="${ats.username}" />
+            <env key="ats3.password" value="${ats.password}" />
+            <env key="ats3.host" value="${ats.server}" />
+            <env key="ats3.pathToDrop" value="${ats.drop.location.file}"/>
+            <arg value="${helium.dir}/tools/testing/ats/${ats.wsh.testrun.file}" />
+        </exec>
+    </target>
+
+
+
+    <!-- The target is dependent on "ats-test", should not be called independently. The target fetches flash files location -->
+    <target name="ats-set-flash-image-path">
+        <pathconvert pathsep="," property="ats.flash.images">
+            <fileset refid="reference.ats.flash.images"/>
+        </pathconvert>
+    </target>
+
+    <!-- The target is dependent on "ats-test", should not be called independently. The target fetches flash files location -->
+    <target name="ats-set-sis-flash-image-path">
+        <pathconvert pathsep="," property="ats.sis.images">
+            <fileset refid="reference.ats.sis.images"/>
+        </pathconvert>
+    </target>
+
+    <!-- Sets values common for ATS, this is a dependent target and shouldn't be used as an individual target -->
+    <target name="ats-common">
+        <property name="ats.config.file" value="" />
+        <property name="ats.product.hwid" value="" />
+        <property name="ats.test.timeout" value="60" />
+        <property name="ats.report.location" value="${publish.dir}/${publish.subdir}" />
+        <var name="ats.drop.file" value="${build.output.dir}/ats/ATSDrop${drop.file.counter}.zip" />
+        <if>
+            <isset property="diamonds.build.url" />
+            <then>
+                <property name="internal.ats.diamonds.arg" value="--diamonds-build-url=http://${diamonds.host}${diamonds.build.id}" />
+            </then>
+            <else>
+                <property name="internal.ats.diamonds.arg" value="" />
+            </else>
+        </if>
+    </target>
+
+    <!-- Sets default values for the ATS (STIF and EUnit), this is a dependent target and shouldn't be used as an individual target -->
+    <target name="ats-set-defaults-stifeunit" depends="ats-common,lookup-email">
+        <!-- Default values for the properties -->
+        <property name="ats.email.list" value="${email.from}" />
+        <property name="tsrc.data.dir" value="data" />
+        <property name="ats.plan.name" value="plan" />
+        <property name="ats.testrun.name" value="${build.id}_${ats.product.name}" />
+        <property name="ats.ctc.host" value="" />
+        <condition property="ats.wsh.testrun.file" value="wshTestRunImport.vbs">
+            <equals arg1="${ats.script.type}" arg2="import" />
+        </condition>
+        <!-- if test run file is not explicitly mentioned, default is RunX-->
+        <property name="ats.wsh.testrun.file" value="wshTestRunX.vbs" />
+        <var name="ats.drop.file" value="ATS3Drop${drop.file.counter}.zip" />
+        <property name="ats.target.platform" value="armv5 urel" />
+        <property name="ats.trace.enabled" value="False" />
+        <property name="ats.ctc.enabled" value="False" />
+        <property name="ats.multiset.enabled" value="False" />
+        <property name="eunitexerunner.flags" value="/E S60AppEnv /R Off" />
+        <property name="ats.obey.pkgfiles.rule" value="False" />
+    </target>
+
+    <!-- Sets default values for the ASTE, this is a dependent target and shouldn't be used as an individual target -->
+    <target name="ats-set-defaults-aste" depends="ats-common">
+        <condition property="ats.wsh.testrun.file" value="wshTestRunImport.vbs">
+            <equals arg1="${ats.script.type}" arg2="import" />
+        </condition>
+        <!-- if test run file is not explicitly mentioned, default is RunX-->
+        <property name="ats.wsh.testrun.file" value="wshTestRunX.vbs" />
+        <property name="ats.aste.test.type" value="smoke" />
+        <property name="ats.aste.testasset.caseids" value="100,101,102,103,105,106,107,108,109,110,111,112,113,114,115" />
+        <property name="ats.aste.software.version" value="${build.id}" />
+        <property name="ats.aste.language" value="English" />
+        <property name="ats.aste.software.release" value="${build.name}" />
+        <property name="ats.aste.plan.name" value="plan" />
+        <property name="ats.aste.testrun.name" value="${build.id}_${ats.product.name}_${major.version}.${minor.version}" />
+        <property name="ats.aste.email.list" value="" />
+    </target>
+
+    <!-- This macro fetches the tsrc paths from system definition file (layers.sysdef.xml), layer defintion should look like
+    <pre>
+    <layer name="name_test_layer">
+        <module name="module_name">
+            <unit id="unit_id" name="unti_name" bldFile="path_of_tsrc_folder_to_be_built" filter="" />
+        </module>
+    </layer>
+    </pre>
+    -->
+    <scriptdef name="getModuleTsrcMacro" language="jython" uri="http://www.nokia.com/helium">
+        <attribute name="property" />
+        <attribute name="prefix"/>
+        
+import os
+import re
+import sysdef.api
+import pathaddition.match
+import traceback
+## using create-canonical-sysdef-file target, it works and gets tsrc paths
+
+if project.getProperty('canonical.sysdef.file') == None :
+    raise Exception("'canonical.sysdef.file' property is not defined")
+
+try:
+    sdf = sysdef.api.SystemDefinition(str(project.getProperty('canonical.sysdef.file')))
+    
+    modules = {}
+    paths_list = []
+    for la in sdf.layers:
+        if re.match(r".*_test_layer$", la):
+            try:
+                if re.search(r"\b%s\b" % la, project.getProperty('exclude.test.layers')):
+                    continue
+            except TypeError, exp:
+                pass
+
+            layer = sdf.layers[la]
+            for mod in layer.modules:
+                if mod.name not in modules:
+                    modules[mod.name] = []
+                for unit in mod.units:
+                    include_unit = True
+                    if project.getProperty('ido.build.filter') != None:
+                        if project.getProperty('ido.build.filter') != "":
+                            include_unit = False
+                            if hasattr(unit, 'filters'):
+                                if len(unit.filters) > 0:
+                                    for filter in unit.filters:
+                                        if re.search(r"\b%s\b" % filter, project.getProperty('ido.build.filter')):
+                                            include_unit = True
+                                        else:
+                                            include_unit = False
+                                elif len(unit.filters) == 0:
+                                    include_unit = True
+                            else:
+                                include_unit = False
+                        else:
+                            include_unit = False
+                            if hasattr(unit, 'filters'):                            
+                                if len(unit.filters) == 0:
+                                    include_unit = True
+                    if include_unit:
+                        #if pathaddition.match.ant_match(unit.path, "**/tsrc/**", False):
+                        modules[mod.name].append(os.path.join(project.getProperty('build.drive') + os.sep, unit.path))
+                        #else:
+                        #    project.log('tcrc not found in ' + str(unit.path))
+
+            #substituting paths in the modules dictionary from path list using keys
+            for name in modules.keys():
+                if not modules[name] == []:
+                    project.setProperty(str("%s.%s" % (attributes.get('prefix'), name)), str(" ".join(modules[name])))
+                else:
+                    del modules[name]
+
+            project.setProperty(str(attributes.get('property')), str(",".join(modules.keys())))
+            
+except Exception, e:
+    traceback.print_exc()
+    project.log("ERROR: could not generate tsrc path list. %s" % e)
+    </scriptdef>
+
+    <!-- The target is dependent on "ats-test", should not be called individually. The target creates the ATS3drop.zip file including test:xml file -->
+    <target name="ats-create-drop" depends="create-canonical-sysdef-file, ats-set-flash-image-path">
+        <var name="ats.drop.location.file" value="${ats.drop.location}/ATS3Drop${drop.file.counter}.zip" />
+        <mkdir dir="${build.output.dir}/ats" />
+        <hlm:getModuleTsrcMacro property="module.list" prefix="module.tsrc" />
+        <if>
+            <scriptcondition language="beanshell">
+                <![CDATA[
+                    String value = project.getProperty("module.list");
+                    if (value != null) {
+                        String[] out = value.split(",");
+                        if ((out == null) || (out.length == 0) || ((out.length == 1) && (out[0].length()==0))) {
+                                    self.setValue(true);
+                            } else {
+                                    self.setValue(false);
+                            }
+                        } else {
+                            self.log("Error: module.list not defined.");
+                                self.setValue(true);
+                        }
+                            ]]>
+            </scriptcondition>
+            <then>
+                <echo message="Error: No test modules found!" />
+            </then>
+            <elseif>
+                <scriptcondition language="beanshell">
+                    <![CDATA[
+                        String flashfiles = project.getProperty("ats.flash.images");
+                        String value = project.getProperty("ats.flashfiles.minlimit");
+                        if (flashfiles != null && value != null) {
+                            int cond = Integer.valueOf(value).intValue();
+                            String[] out = flashfiles.split(",");
+                            if (out.length < cond ) {
+                                self.setValue(true);
+                            } else {
+                                self.setValue(false);
+                            }
+                        } else {
+                            self.log("Error: flashfiles not defined.");
+                            self.setValue(true);
+                        }
+                            ]]>
+                </scriptcondition>
+                <then>
+                    <echo message="Error: Not enough flash files!" />
+                </then>
+            </elseif>
+            <else>
+                <for list="${module.list}" delimiter="," param="module">
+                    <sequential>
+                        <runtarget target="ats-set-defaults-stifeunit" />
+                        <var name="ats.drop.file" value="${build.output.dir}/ats/ATS3Drop${drop.file.counter}.zip" />
+                        <echo>${ats.drop.file}</echo>
+                        <exec executable="python">
+                            <arg value="${helium.dir}/tools/common/python/lib/ats3/__init__.py" />
+                            <arg value="--device-type=${ats.product.name}" />
+                            <arg value="--device-hwid=${ats.product.hwid}" />
+                            <arg value="${internal.ats.diamonds.arg}" />
+                            <arg value="--drop-file=${ats.drop.file}" />
+                            <arg value="--report-email=${ats.email.list}" />
+                            <arg value="--plan-name=${ats.plan.name}" />
+                            <arg value="--testrun-name=${ats.testrun.name}_@{module}" />
+                            <arg value="--flash-images=${ats.flash.images}" />
+                            <arg value="--minimum-flash-images=${ats.flashfiles.minlimit}" />
+                            <arg value="--target-platform=${ats.target.platform}" />
+                            <arg value="--data-dir=${tsrc.data.dir}" />
+                            <arg value="--test-timeout=${ats.test.timeout}" />
+                            <arg value="--build-drive=${build.drive}" />
+                            <arg value="--trace-enabled=${ats.trace.enabled}" />
+                            <arg value="--ctc-enabled=${ats.ctc.enabled}" />
+                            <arg value="--multiset-enabled=${ats.multiset.enabled}" />
+                            <arg value="--file-store=${ats.report.location}" />
+                            <arg value="--eunitexerunner-flags=${eunitexerunner.flags}" />
+                            <arg value="--ats-network-drive=${ats.ctc.host}#${ats.drop.file}" />
+                            <arg value="--monsym-files=${ats.ctc.monsyms}" />
+                            <arg value="--config=${ats.config.file}" />
+                            <arg value="--obey-pkgfiles=${ats.obey.pkgfiles.rule}" />
+                            <arg value="--verbose" />
+                            <arg line="${module.tsrc.@{module}}" />
+                        </exec>
+                        <runtarget target="do-ats-test" />
+                        <math result="drop.file.counter" operand1="1" operation="+" operand2="${drop.file.counter}" datatype="int" />
+                    </sequential>
+                </for>
+            </else>
+        </if>
+    </target>
+
+
+    <!-- Please see ats-aste for description.-->
+    <target name="do-ats-aste" depends="ats-set-flash-image-path, ats-set-defaults-aste" if="enabled.aste">
+
+        <mkdir dir="${build.output.dir}/ats" />
+        <if>
+            <scriptcondition language="beanshell">
+                <![CDATA[
+                String flashfiles = project.getProperty("ats.flash.images");
+                String value = project.getProperty("ats.flashfiles.minlimit");
+                if (flashfiles != null && value != null) {
+                    int cond = Integer.valueOf(value).intValue();
+                    String[] out = flashfiles.split(",");
+                    if (out.length < cond ) {
+                        self.setValue(true);
+                    } else {
+                            self.setValue(false);
+                    }
+                } else {
+                    self.log("Error: flashfiles not defined.");
+                    self.setValue(true);
+                }
+                    ]]>
+            </scriptcondition>
+            <then>
+                <echo message="Error: Not enough flash files!" />
+            </then>
+            <else>
+                <exec executable="python">
+                    <arg value="${helium.dir}/tools/common/python/lib/ats3/aste.py" />
+                    <arg value="--report-email=${ats.aste.email.list}" />
+                    <arg value="--device-type=${ats.product.name}" />
+                    <arg value="--flash-images=${ats.flash.images}" />
+                    <arg value="--minimum-flash-images=${ats.flashfiles.minlimit}" />
+                    <arg value="--plan-name=${ats.aste.plan.name}" />
+                    <arg value="--testrun-name=${ats.aste.testrun.name}" />
+                    <arg value="--device-hwid=${ats.product.hwid}" />
+                    <arg value="--test-timeout=${ats.test.timeout}" />
+                    <arg value="--build-drive=${build.drive}" />
+                    <arg value="${internal.ats.diamonds.arg}" />
+                    <arg value="--drop-file=${ats.drop.file}" />
+                    <arg value="--test-type=${ats.aste.test.type}" />
+                    <arg value="--testasset-location=${ats.aste.testasset.location}" />
+                    <arg value="--testasset-caseids=${ats.aste.testasset.caseids}" />
+                    <arg value="--software-version=${ats.aste.software.version}" />
+                    <arg value="--device-language=${ats.aste.language}" />
+                    <arg value="--software-release=${ats.aste.software.release}" />
+                    <arg value="--verbose" />
+                </exec>
+                <runtarget target="do-ats-test" />
+            </else>
+        </if>
+    </target>
+
+    <!--
+        This target search the mon.sym files using unit information from the canonical sysdef file.
+        Then it copies the discovered files under the ftp server defined by ats.ctc.host.
+        The target url is: ftp ://[server]/ctc_helium/[diamonds_id]/mon_syms/[id]/mon.sym 
+    -->
+    <target name="copy-mon-sym" if="ats.ctc.enabled">
+        <fmpp sourceFile="${helium.dir}/tools/testing/ats/templates/monsym-file-list.txt.ftl"
+            outputFile="${temp.build.dir}/monsym-file-list.txt">
+            <data expandProperties="yes">
+                data: xml(${canonical.sysdef.file})
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <hlm:path2file reference="mon.sym.list" file="${temp.build.dir}/monsym-file-list.txt" />
+        <script language="jython">
+import os
+import ctc
+
+if not project.getProperty('ats.ctc.host'):
+    raise Exception('ats.ctc.host property is not defined.')
+if not project.getProperty('diamonds.build.id'):
+    raise Exception('diamonds.build.id property is not defined.')
+
+server = project.getProperty('ats.ctc.host')
+diamondsid = os.path.basename(os.path.dirname(project.getProperty('diamonds.build.id')))
+path = project.getReference('mon.sym.list')
+if not path:
+    raise Exception('mon.sym.list reference has not been set')
+
+uploader = ctc.MonSymFTPUploader(server, path.list(), diamondsid)
+monsyms = uploader.upload()
+            
+# Using ; to separate the path because the target script is running on windows
+project.setNewProperty('ats.ctc.monsyms', ';'.join([ "//%s/%s" % (server, x) for x in monsyms]))
+        </script>
+        <echo>ats.ctc.monsyms: ${ats.ctc.monsyms}</echo>
+    </target>
+
+    <!-- a dependant target please do not call directly use matti-test,
+    target calls the MATTI script that creates the MATTI_drop.zip file and runs the tests
+    listed in test.rb.  ats-set-flash-image-path and ats-set-sis-flash-image-path look for lists of files-->
+    <target name="do-ats-matti" depends="ats-set-flash-image-path, ats-set-sis-flash-image-path" >
+        <runtarget target="ats-set-defaults-stifeunit" />
+        <!--need to set theseup for use by do-ats-test target-->
+        <mkdir dir="${build.output.dir}/ats" />
+        <var name="ats.drop.location" value="${build.output.dir}/ats" />
+        <var name="ats.drop.file" value="${build.output.dir}/ats/ATS3Drop.zip" />
+        <var name="ats.drop.location.file" value="${ats.drop.file}" />
+        <if>
+            <!-- get the list of .fpsx files (and others) in the defined folder
+             to pass as a list to the python script-->
+            <scriptcondition language="beanshell">
+                <![CDATA[
+                    String flashfiles = project.getProperty("ats.flash.images");
+                    String value = project.getProperty("ats.flashfiles.minlimit");
+                    if (flashfiles != null && value != null) {
+                        int cond = Integer.valueOf(value).intValue();
+                        String[] out = flashfiles.split(",");
+                        if (out.length < cond ) {
+                            self.setValue(true);
+                        } else {
+                            self.setValue(false);
+                        }
+                    } else {
+                        self.log("Error: flashfiles not defined.");
+                        self.setValue(true);
+                    }
+                        ]]>
+            </scriptcondition>
+            <then>
+                <echo message="Error: Not enough flash files!" />
+            </then>
+            <else>
+                <if>
+                    <!-- get the list of .sis files in the defined folder to pass as a list to the python script-->
+                    <scriptcondition language="beanshell">
+                        <![CDATA[
+                            String sisfiles = project.getProperty("ats.sis.images");
+                            String value = project.getProperty("ats.sisfiles.minlimit");
+                            if (sisfiles != null && value != null) {
+                                int cond = Integer.valueOf(value).intValue();
+                                String[] out = sisfiles.split(",");
+                                if (out.length < cond ) {
+                                    self.setValue(true);
+                                } else {
+                                    self.setValue(false);
+                                }
+                            } else {
+                                self.log("Error: sisfiles not defined.");
+                                self.setValue(true);
+                            }
+                                ]]>
+                    </scriptcondition>
+                    <then>
+                        <echo message="Error: Not enough sis files!" />
+                    </then>
+                    <else>
+                        <!-- execute the MattiDrops.py script with parameters-->
+                        <exec executable="python" resultproperty="script.response">
+                            <arg value="${helium.dir}/tools/common/python/lib/ats3/matti/MattiDrops.py" />
+                            <arg value="--build-drive=${build.drive}" />
+                            <arg value="--matti-scripts=${matti.scripts}" />
+                            <arg value="--flash-images=${ats.flash.images}" />
+                            <arg value="--harness=STIF" />
+                            <arg value="--file-store=${ats.output.dir}" />
+                            <arg value="--testrun-name=${ats.testrun.name}" />
+                            <arg value="--device-type=${ats.product.name}" />
+                            <arg value="--device-hwid=${ats.product.hwid}" />
+                            <arg value="--diamonds-build-url=${internal.ats.diamonds.arg}" />
+                            <arg value="--drop-file=${ats.drop.file}" />
+                            <arg value="--minimum-flash-images=${ats.flashfiles.minlimit}" />
+                            <arg value="--plan-name=${ats.plan.name}" />
+                            <arg value="--sis-files=${ats.sis.images}" />
+                            <arg value="--template-loc=${template.file}" />
+                        </exec>
+                        <if> 
+                            <not>
+                                <!-- if the response is not 0 then need to create the skip.ats.sending
+                                 flag so that do-ats-test is not run-->
+                                <equals arg1="${script.response}" arg2="0" />
+                            </not>
+                            <then>
+                                <property name="skip.ats.sending" value="1" />
+                            </then>
+                        </if>
+                        <runtarget target="do-ats-test" />
+                    </else>
+                </if>    
+            </else>
+        </if>    
+    </target>
+    
+</project>