<!-- ============LICENSE_START======================================================= SDC ================================================================================ Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. Modifications copyright (c) 2020 Nokia ================================================================================ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ============LICENSE_END========================================================= ================================================================================ --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>sdc-integration-tests</artifactId> <packaging>jar</packaging> <name>sdc-integration-tests</name> <parent> <groupId>org.openecomp.sdc</groupId> <artifactId>sdc-main</artifactId> <version>1.8.3-SNAPSHOT</version> </parent> <properties> <selenium.version>3.141.59</selenium.version> <gecko.driver.version>0.27.0</gecko.driver.version> <!-- SDC Startup parameters --> <it.env.name>integration-test</it.env.name> <it.cassandra.port>9042</it.cassandra.port> <it.cassandra.password>onap123#@!</it.cassandra.password> <it.cassandra.ssl.enabled>false</it.cassandra.ssl.enabled> <it.sdc.cluster.name>SDC-CS-${it.env.name}</it.sdc.cluster.name> <it.sdc.user>asdc_user</it.sdc.user> <it.sdc.password>Aa1234%^!</it.sdc.password> <it.chef.config>${project.build.directory}/chef-config</it.chef.config> <it.sdc-be.plugins>${project.build.directory}/plugins/sdc-be</it.sdc-be.plugins> <it.shared.volume>/tmp/sdc-integration-tests</it.shared.volume> <it.docker.version>latest</it.docker.version> <it.ui.firefox.version>2.53.1</it.ui.firefox.version> <!-- parser--> <sdc-tosca-parser.version>1.6.5</sdc-tosca-parser.version> </properties> <dependencies> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>${snakeyaml.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest</artifactId> <version>${hamcrest.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> <exclusions> <exclusion> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>${testng.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>${gson.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.openecomp.sdc.be</groupId> <artifactId>catalog-model</artifactId> <version>${project.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.openecomp.sdc.be</groupId> <artifactId>catalog-dao</artifactId> <version>${project.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.openecomp.sdc</groupId> <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId> <version>${project.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>com.aventstack</groupId> <artifactId>extentreports</artifactId> <version>3.0.6</version> <scope>test</scope> </dependency> <dependency> <groupId>org.janusgraph</groupId> <artifactId>janusgraph-core</artifactId> <version>${janusgraph.version}</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>gremlin-groovy</artifactId> <groupId>org.apache.tinkerpop</groupId> </exclusion> <exclusion> <artifactId>slf4j-log4j12</artifactId> <groupId>org.slf4j</groupId> </exclusion> <exclusion> <artifactId>commons-collections</artifactId> <groupId>commons-collections</groupId> </exclusion> <exclusion> <artifactId>groovy</artifactId> <groupId>org.codehaus.groovy</groupId> </exclusion> <exclusion> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>${assertj.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>com.clearspring.analytics</groupId> <artifactId>stream</artifactId> <version>${clearspring.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>${httpclient.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>${httpcore.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.2</version> <scope>test</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> <scope>test</scope> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.onap.sdc.sdc-tosca</groupId> <artifactId>sdc-tosca</artifactId> <version>${sdc-tosca-parser.version}</version> </dependency> <!--FOR the Frontend --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <scope>test</scope> <version>${selenium.version}</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-server</artifactId> <version>4.0.0-alpha-2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-firefox-driver</artifactId> <version>${selenium.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>net.lightbody.bmp</groupId> <!-- To use the legacy, Jetty-based implementation, change the artifactId to browsermob-core --> <artifactId>browsermob-core</artifactId> <version>2.1.4</version> <scope>test</scope> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.paulhammant</groupId> <artifactId>ngwebdriver</artifactId> <version>0.9.7</version> <scope>test</scope> </dependency> <dependency> <groupId>com.github.markusbernhardt</groupId> <artifactId>proxy-vole</artifactId> <version>1.0.2</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.13.1</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <!-- Section for Integration tests --> <plugin> <artifactId>maven-resources-plugin</artifactId> <executions> <execution> <id>copy-chef-resources</id> <phase>pre-integration-test</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${it.chef.config}</outputDirectory> <resources> <resource> <directory>environments</directory> <filtering>true</filtering> <includes> <include>integration-test.json</include> <include>plugins-configuration.yaml</include> </includes> </resource> </resources> </configuration> </execution> <execution> <id>copy-sdc-be-plugins</id> <phase>pre-integration-test</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${it.sdc-be.plugins}</outputDirectory> <resources> <resource> <directory>../catalog-be-plugins/etsi-nfv-nsd-csar-plugin/target</directory> <filtering>false</filtering> <includes> <include>etsi-nfv-nsd-csar-plugin-${project.version}.jar</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>wagon-maven-plugin</artifactId> <version>2.0.0</version> <executions> <execution> <id>download-gecko</id> <phase>validate</phase> <goals> <goal>download-single</goal> </goals> <configuration> <url>https://github.com</url> <fromFile> mozilla/geckodriver/releases/download/v${gecko.driver.version}/geckodriver-v${gecko.driver.version}-linux64.tar.gz </fromFile> <toDir>${project.build.directory}/gecko</toDir> </configuration> </execution> </executions> </plugin> <plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <id>set-folder-permission</id> <phase>pre-integration-test</phase> <configuration> <target> <mkdir dir="/tmp/sdc-integration-tests"/> <chmod dir="/tmp/sdc-integration-tests" type="dir" perm="ugo+rwx"/> <mkdir dir="/tmp/sdc-integration-tests/downloadAutomation"/> <chmod dir="/tmp/sdc-integration-tests/downloadAutomation" type="dir" perm="ugo+rwx"/> </target> </configuration> <goals> <goal>run</goal> </goals> </execution> <execution> <id>untar-gecko</id> <phase>pre-integration-test</phase> <configuration> <target> <untar src="${project.build.directory}/gecko/geckodriver-v${gecko.driver.version}-linux64.tar.gz" compression="gzip" dest="${project.build.directory}/gecko/"/> <chmod dir="${project.build.directory}/gecko/geckodriver" type="dir" perm="ugo+rwx"/> </target> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <executions> <execution> <id>reserve-port-for-tests</id> <phase>validate</phase> <goals> <goal>reserve-network-port</goal> </goals> <configuration> <portNames> <portName>sdc.it.docker.cassandra.port</portName> </portNames> </configuration> </execution> </executions> </plugin> <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <dependencies> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.5</version> </dependency> </dependencies> <configuration> <verbose>true</verbose> <apiVersion>${docker.api.version}</apiVersion> <autoCreateCustomNetworks>true</autoCreateCustomNetworks> <images> <image> <name>onap/sdc-cassandra:${it.docker.version}</name> <alias>sdc-cassandra</alias> <run> <env> <RELEASE>${project.version}</RELEASE> <CS_PASSWORD>${it.cassandra.password}</CS_PASSWORD> <ENVNAME>${it.env.name}</ENVNAME> <MAX_HEAP_SIZE>1536M</MAX_HEAP_SIZE> <HEAP_NEWSIZE>512M</HEAP_NEWSIZE> </env> <hostname>sdc-cs</hostname> <volumes> <bind> <volume>${it.chef.config}:/root/chef-solo/environments</volume> </bind> </volumes> <ulimits> <ulimit> <name>memlock</name> <hard>-1</hard> <soft>-1</soft> </ulimit> <ulimit> <name>nofile</name> <hard>100000</hard> <soft>100000</soft> </ulimit> </ulimits> <wait> <time>120000</time> <tcp> <host>sdc-cs</host> <mode>direct</mode> <ports> <port>9042</port> </ports> </tcp> </wait> <ports> <port>9042:9042</port> </ports> <network> <mode>custom</mode> <name>sdc-network</name> <alias>sdc-cs</alias> </network> </run> </image> <image> <name>onap/sdc-cassandra-init:${it.docker.version}</name> <alias>sdc-cassandra-init</alias> <run> <dependsOn> <container>sdc-cassandra</container> </dependsOn> <env> <RELEASE>${project.version}</RELEASE> <SDC_USER>${it.sdc.user}</SDC_USER> <SDC_PASSWORD>${it.sdc.password}</SDC_PASSWORD> <CS_PASSWORD>${it.cassandra.password}</CS_PASSWORD> <ENVNAME>${it.env.name}</ENVNAME> </env> <hostname>sdc-cs-init</hostname> <volumes> <bind> <volume>${it.chef.config}:/home/sdc/chef-solo/environments</volume> </bind> </volumes> <wait> <time>300000</time> <log>SdcSchemaFileImport successfully completed</log> </wait> <network> <mode>custom</mode> <name>sdc-network</name> <alias>sdc-cs-init</alias> </network> </run> </image> <image> <name>onap/sdc-onboard-cassandra-init:${it.docker.version}</name> <alias>sdc-cassandra-onboard-init</alias> <run> <dependsOn> <container>sdc-cassandra</container> </dependsOn> <env> <RELEASE>${project.version}</RELEASE> <SDC_USER>${it.sdc.user}</SDC_USER> <SDC_PASSWORD>${it.sdc.password}</SDC_PASSWORD> <CS_PASSWORD>${it.cassandra.password}</CS_PASSWORD> <CS_HOST_PORT>${it.cassandra.port}</CS_HOST_PORT> <ENVNAME>${it.env.name}</ENVNAME> <CS_HOST_IP>sdc-cs</CS_HOST_IP> </env> <hostname>sdc-cs-onboard-init</hostname> <volumes> <bind> <volume>${it.chef.config}:/home/sdc/chef-solo/environments</volume> </bind> </volumes> <wait> <time>30000</time> <log>Initializing onboard schemas</log> </wait> <network> <mode>custom</mode> <name>sdc-network</name> <alias>sdc-cs-onboard-init</alias> </network> </run> </image> <image> <name>onap/sdc-onboard-backend:${it.docker.version}</name> <alias>sdc-onboard-backend</alias> <run> <dependsOn> <container>sdc-cassandra-onboard-init</container> </dependsOn> <env> <cassandra_ssl_enabled>${it.cassandra.ssl.enabled}</cassandra_ssl_enabled> <SDC_CLUSTER_NAME>${it.sdc.cluster.name}</SDC_CLUSTER_NAME> <SDC_USER>${it.sdc.user}</SDC_USER> <SDC_PASSWORD>${it.sdc.password}</SDC_PASSWORD> <ENVNAME>${it.env.name}</ENVNAME> <SDC_CERT_DIR>onap/cert</SDC_CERT_DIR> <JAVA_OPTIONS>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:4001 -Xmx1g -Xms1g</JAVA_OPTIONS> </env> <hostname>sdc-onboard-BE</hostname> <volumes> <bind> <volume>${it.chef.config}:/var/lib/jetty/chef-solo/environments</volume> <volume>${project.basedir}/src/test/resources/cert/onboarding-be:/var/lib/jetty/onap/cert </volume> <volume>${it.shared.volume}:/var/lib/jetty/logs</volume> </bind> </volumes> <wait> <time>300000</time> <tcp> <host>sdc-onboard-BE</host> <mode>direct</mode> <ports> <port>8445</port> <port>8081</port> <port>4001</port> </ports> </tcp> </wait> <ports> <port>8445:8445</port> <port>8081:8081</port> <port>4001:4001</port> </ports> <network> <mode>custom</mode> <name>sdc-network</name> <alias>sdc-onboard-BE</alias> </network> </run> </image> <image> <name>onap/sdc-backend-all-plugins:${it.docker.version}</name> <alias>sdc-backend</alias> <run> <dependsOn> <container>sdc-cassandra-init</container> </dependsOn> <env> <cassandra_ssl_enabled>${it.cassandra.ssl.enabled}</cassandra_ssl_enabled> <ENVNAME>${it.env.name}</ENVNAME> <JAVA_OPTIONS>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:4000 -Xmx1536m -Xms1536m</JAVA_OPTIONS> <SDC_CERT_DIR>onap/cert</SDC_CERT_DIR> <SDC_NSD_CERT_NAME>nsdCert</SDC_NSD_CERT_NAME> </env> <hostname>sdc-BE</hostname> <volumes> <bind> <volume>${it.chef.config}:/var/lib/jetty/chef-solo/environments</volume> <volume>${it.shared.volume}:/var/lib/jetty/logs</volume> <volume>${project.basedir}/src/test/resources/cert/catalog-be:/var/lib/jetty/onap/cert</volume> </bind> </volumes> <wait> <time>60000</time> <tcp> <host>sdc-BE</host> <mode>direct</mode> <ports> <port>8443</port> <port>8080</port> <port>4000</port> </ports> </tcp> </wait> <ports> <port>8443:8443</port> <port>8080:8080</port> <port>4000:4000</port> </ports> <network> <mode>custom</mode> <name>sdc-network</name> <alias>sdc-BE</alias> </network> </run> </image> <image> <name>onap/sdc-backend-init:${it.docker.version}</name> <alias>sdc-backend-init</alias> <run> <dependsOn> <container>sdc-backend</container> </dependsOn> <env> <ENVNAME>${it.env.name}</ENVNAME> </env> <hostname>sdc-BE-init</hostname> <volumes> <bind> <volume>${it.chef.config}:/home/onap/chef-solo/environments</volume> <volume>${it.shared.volume}:/var/lib/jetty/logs</volume> </bind> </volumes> <wait> <time>660000</time> <log>Chef Client finished</log> </wait> <network> <mode>custom</mode> <name>sdc-network</name> <alias>sdc-BE-init</alias> </network> </run> </image> <image> <name>onap/sdc-frontend:${it.docker.version}</name> <alias>sdc-frontend</alias> <run> <env> <ENVNAME>${it.env.name}</ENVNAME> <JAVA_OPTIONS>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:6000 -Xmx256m -Xms256m</JAVA_OPTIONS> </env> <hostname>sdc-FE</hostname> <volumes> <bind> <volume>${it.chef.config}:/var/lib/jetty/chef-solo/environments</volume> <volume>${it.shared.volume}:/var/lib/jetty/logs</volume> <volume> ${it.chef.config}/plugins-configuration.yaml:/var/lib/jetty/config/catalog-fe/plugins-configuration.yaml </volume> </bind> </volumes> <wait> <time>60000</time> <tcp> <host>sdc-FE</host> <mode>direct</mode> <ports> <port>9443</port> <port>8181</port> <port>6000</port> </ports> </tcp> </wait> <ports> <port>9443:9443</port> <port>8181:8181</port> <port>6000:6000</port> </ports> <network> <mode>custom</mode> <name>sdc-network</name> <alias>sdc-FE</alias> </network> </run> </image> <image> <name>onap/sdc-simulator:${it.docker.version}</name> <alias>sdc-simulator</alias> <run> <dependsOn> <container>sdc-frontend</container> </dependsOn> <env> <!--<FE_URL>${it.env.name}</FE_URL>--> <JAVA_OPTIONS>-Xmx128m -Xms128m -Xss1m</JAVA_OPTIONS> <ENVNAME>${it.env.name}</ENVNAME> </env> <hostname>sdc-sim</hostname> <volumes> <bind> <volume>${it.chef.config}:/root/chef-solo/environments</volume> </bind> </volumes> <wait> <time>60000</time> <tcp> <host>sdc-sim</host> <mode>direct</mode> <ports> <port>8080</port> <port>8443</port> </ports> </tcp> </wait> <ports> <!-- http://localhost:8285/login to access SDC --> <port>8285:8080</port> <port>8286:8443</port> </ports> <network> <mode>custom</mode> <name>sdc-network</name> <alias>sdc-sim</alias> </network> </run> </image> <image> <name>selenium/standalone-firefox:${it.ui.firefox.version}</name> <alias>firefox-standalone</alias> <run> <hostname>firefox-standalone</hostname> <wait> <time>20000</time> <tcp> <host>firefox-standalone</host> <mode>direct</mode> <ports> <!-- Selenium remote automation port --> <port>4444</port> <!--<port>5900</port>--> <!-- VNC port for viewing the browser result --> <!-- password to access is "secret" --> </ports> </tcp> </wait> <env> <SE_OPTS>-debug</SE_OPTS> <JAVA_OPTS>-Xmx512m</JAVA_OPTS> <!--<START_XVFB>false</START_XVFB>--> <SCREEN_WIDTH>1920</SCREEN_WIDTH> <SCREEN_HEIGHT>1440</SCREEN_HEIGHT> </env> <ports> <port>4444:4444</port> <!--<port>5900:5900</port>--> </ports> <network> <mode>custom</mode> <name>sdc-network</name> <alias>firefox-standalone</alias> </network> <volumes> <bind> <volume> /tmp/sdc-integration-tests/downloadAutomation/:/home/seluser/Desktop </volume> <volume>/dev/shm:/dev/shm</volume> </bind> </volumes> </run> </image> </images> </configuration> <executions> <execution> <id>docker-start-for-it</id> <phase>pre-integration-test</phase> <goals> <goal>start</goal> </goals> </execution> <execution> <id>docker-stop-for-it</id> <phase>post-integration-test</phase> <goals> <goal>stop</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <forkCount>1</forkCount> <reuseForks>true</reuseForks> <systemProperties> <property> <name>testng.dtd.http</name> <value>true</value> </property> </systemProperties> <suiteXmlFiles> <file>src/test/resources/ci/testSuites/backend/onapApiSanity.xml</file> <file>src/test/resources/ci/testSuites/frontend/onapUiSanity.xml</file> <!--<file>src/test/resources/ci/testSuites/artifacts.xml</file>--> <!--<file>src/test/resources/ci/testSuites/cap_req.xml</file>--> <!--<file>src/test/resources/ci/testSuites/category.xml</file>--> <!--<file>src/test/resources/ci/testSuites/ciFull.xml</file>--> <!--<file>src/test/resources/ci/testSuites/CRUDArtifacts.xml</file>--> <!--<file>src/test/resources/ci/testSuites/externalAPIs.xml</file>--> <!--<file>src/test/resources/ci/testSuites/ExternalApiSanity.xml</file>--> <!-- <file>src/test/resources/ci/testSuites/general.xml</file>--> <!-- <file>src/test/resources/ci/testSuites/imports.xml</file>--> <!--<file>src/test/resources/ci/testSuites/normatives.xml</file>--> <!--<file>src/test/resources/ci/testSuites/onapApiSanity.xml</file>--> <!--<file>src/test/resources/ci/testSuites/pass.xml</file>--> <!-- <file>src/test/resources/ci/testSuites/product.xml</file>--> <!--<file>src/test/resources/ci/testSuites/productAPIs.xml</file>--> <!-- <file>src/test/resources/ci/testSuites/property.xml</file>--> <!-- <file>src/test/resources/ci/testSuites/resource.xml</file>--> <!--<file>src/test/resources/ci/testSuites/sanity.xml</file>--> <!--<file>src/test/resources/ci/testSuites/SearchExternalAPI.xml</file>--> <!-- <file>src/test/resources/ci/testSuites/service.xml</file>--> <!--<file>src/test/resources/ci/testSuites/testngLifeCycle.xml</file>--> <!-- <file>src/test/resources/ci/testSuites/user.xml</file>--> </suiteXmlFiles> </configuration> </plugin> </plugins> </build> <profiles> <profile> <id>all-for-integration-tests-only</id> <properties> <surefire.skip.tests>true</surefire.skip.tests> <skipTest>false</skipTest> </properties> </profile> </profiles> </project>